Das Script Logusers fasst die wichtigsten Daten über angemeldete User zusammen. Dazu gehört wieviel Resourcen durch Speicherplatz und Prozesse einzelne angemeldete User belegen. Diese werden dann nur für den Superuser zugänglich in einem seperaten Verzeichnis abgelegt.
Code:
#!/bin/bash
#logusers
#Script that will log the uptime, date and time as well as all users logged in with their running actions
#Please report me, if you have any idea of what else should be logged.
#Comes with the package Bash-Tools
#Ideas collected by Mendel Cooper (Advanced Bash Scripting Guide)
#Rewritten for opensuse 10.3 by Matthias Propst
#VARS
NOT_ROOT=67
LOG_DIR=/var/log/logusers #Change this according to your needs
INDEX=$(date +%Y%m%d%H%M%S) #Change this if you need another date format or use a complete different way to index your logup file.
USERS=$(users)
IP_ADRESS=127.0.0.1 #Change this value if you know your current ip adress.
#VARS
###functions begin here
#checking for root
check_root ()
{
echo "Checking whether you are root."
if [ $UID -ne 0 ]
then
echo "Not root"
drop_failure
exit $NOT_ROOT
else
drop_ok
create_logdir
fi
}
#Checking whether directory /var/log/logusers allready exists and has all neccessary permissisons, if not, creating it
create_logdir ()
{
echo "Checking whether the logdir exists"
if [ ! -d $LOG_DIR ]
then
mkdir -p /var/log/logusers
chmod 700 $LOG_DIR
main
drop_ok
else
drop_ok
main
fi
}
#main fucntion does the action for what the script is for
main ()
{
#Creating new logfile
echo "Creating logdir. Please wait."
touch $LOG_DIR/"$INDEX".log
{
echo "File was generated by $0"
date
echo "========================================================================================================"
} >> $LOG_DIR/"$INDEX".log
{
echo "Host information:"
echo $LOGNAME"@"$HOSTNAME
echo $MACHTYPE
uname -r
cat /proc/cpuinfogrep model\ \name
cat /proc/cpuinfogrep cpu\ \MHz
uptime
echo "========================================================================================================="
} >> $LOG_DIR/"$INDEX".log
{
echo "Network information:"
ifconfig
iwconfig
ping -w 1 google.de 2> /dev/null
if [ $? -gt "0" ]
then
echo "There is no connection running:"
else
echo "You are running a connection to the internet"
#scans only the localhost by default
echo "nmap:"
nmap $IP_ADRESS -v
echo "netstat:"
netstat
fi
echo "========================================================================================================="
} >> $LOG_DIR/"$INDEX".log
{
echo "The following users are logged in:"
echo "=================================="
finger
n=0
for m in ${USERS[@]}
do
if [ $m != $n ]
then
id $m
n=$m
fi
done
id root
echo "The following processes are running:"
echo "===================================="
echo "Sorted by User"
k=0
for i in ${USERS[@]}
do
if [ $i != $k ]
then
echo $i
ps -U $i
k=$i
fi
done
echo "root"
ps -U root
echo "Treeview"
pstree -pu
echo "====================================================================================================="
} >> $LOG_DIR/"$INDEX".log
{
echo "These environment variables has been set:"
env
} >> $LOG_DIR/"$INDEX".log
#Ensuring the logfile is only readable to root
chmod 400 "$LOG_DIR"/"$INDEX".log
#Ensuring no one but root can manipulate or delete the output.logfiles
chattr +a $LOG_DIR/"$INDEX".log
echo "Logs have been saved to $LOG_DIR/$INDEX"
echo -e '\t \t \t \t \E[32mdone'; tput sgr0
exit 0
}
drop_ok ()
{
echo -e '\t \t \t \t \E[32mok'; tput sgr0
}
drop_failure ()
{
echo -e '\t \t \t \t \E[31mfailure'; tput sgr0
}
###functions end here
check_root
exit 0
Freunde
Freitag, 19. September 2008
Bashhacker Part2: wipefree
Mögliche Gründe, warum das wiederherstellen von sensiblen Dateien vermeiden will gibt es viele. Thomas C. Greene hat für diese Aufgabe ein einfaches Script erstellt, welches ich ein wenig verändert habe. Das Skript überprüft, ob benötigte externe Programme bereits vorhanden sind. Es kann nun angewählt werden, wie oft das Dateisystem mit Nullen oder Datenmüll überschrieben wird. Du kannst das Volume angeben. Außerdem werden Durchlaufzeiten und Fortschritt des Skriptes gezählt und angezeigt.
Code:
#!/bin/bash
#wipefree
#Script that will wipe the free space of several partitions
##Comes with the package Bash-Tools
#Original Idea by Thomas C. Greene
#Ideas Collected by Mendel Cooper (Advanced Bash Scripting guide)
#rewritten for opensue 10.2 by Matthias Propst
#VARS
NOT_ROOT=67
NO_PART=82
NO_INT=24
NO_SYNC=34
#VARS
###functions begin here
#checks for root
check_root ()
{
echo "Checking whether you are root."
if [ $UID -ne 0 ]
then
echo "Only root can wipeout free space."
drop_failure
exit $NOT_ROOT
else
drop_ok
check_sync
fi
}
check_sync ()
{
VERSION=$(sync --version 2> /dev/null echo "-" )
if [[ $VERSION == "-" ]]
then
echo "sync does not seemed to be installed"
echo "Please install sync and rerun again. It is usaly in the package coreutils."
echo "Script exits now."
drop_failure
exit $NO_SYNC
else
echo "found $VERSION"
drop_ok
often
fi
}
often ()
{
##stes the counter. this is important and ensures the script to stop
unset COUNTER
read -p "How often to you need `basename $0` to run: " COUNTER
${COUNTER:="0"} 2> /dev/null
CHECK=$(( $COUNTER * 1 )) 2> /dev/null
#this prevents the user passing 0 or an non integer value
##sets the Counter. this important and ensures the script to stop
if [[ $CHECK != $COUNTER OR $COUNTER == "0" ]] #because Check will be the errormessage from a non integer value or counter is 0 this checks whether counter is an integer > 0
then
echo "$COUNTER is not an integer value."
drop_failure
exit $NO_INT
else
algorithm
fi
}
algorithm()
{
unset ALGO
unset ALGO_NAME
clear
#Users Choise of which algorithm (method) is used
echo "Algorithms:"
echo "(1) urandom: Uses the /dev/urnadom (default)"
echo "(2) zero: Uses /dev/zero to overwrite your free space (fast but unsecure)"
echo "(3) filesplitter: uses a mixture of both zero and urandom and split up the _cleanupfile_. (should be best result)"
read -n 1 -p "Which algorithm do you want to run. Press Enter to use default." ALGO
${ALGO:=1} 2> /dev/null
case $ALGO in
1) check_part
;;
2) check_part
;;
3) check_part
;;
*) algorithm #if any other keys is pressed the script asks again
;;
esac
}
check_part ()
{
clear
echo "We will wipe out free space in"
for f in $FS #the loop list all folders given and checks whether the folder belongs to a partition
do
unset PART
unset CRYPTO_PART
if [[ $f == "/dev/" OR ! ${f/#\/dev*} OR ! ${f/#\/proc*} $f == "swap" ]]
then
echo "Oops"
echo "$f: This is not allowed"
exit $NO_PART
fi
PART=$(echo `less /etc/fstab grep $f`)
CRYPTO_PART=$(echo `less /etc/cryptotab grep $f`)
${PART:="-"} 2> /dev/null
${CRYPTO_PART:="-"} 2> /dev/null
if [ "$PART" == "-" ] ##if the partition is not in /etc/fstab than probly in /etc/cryptotab
then
if [ "$CRYPTP_PART" == "-" ]
then
echo "$f is not a partition"
echo "Maybe this is not your fault. Because the Script does not handle /foobar/ if the folder /foobar has"
echo "its own partition. Try to rerun the script with /foobar instead of /foobar/." #a warning because i dont know how to prevent that. maybe someone else has an idea+++script exits at first found invalid partition this depends on the order of given scripts
drop_failure
exit $NO_PART
fi
else
echo $f
fi
done
drop_ok
echo "$COUNTER times"
echo "with the"
case $ALGO in #prints a summary
1) echo "urandom"
;;
2) echo "zero"
;;
3) echo "filesplitter"
;;
esac
echo "algorithm."
sleep 3
main
}
trapint ()
{
echo "dont press ctrl + c"
}
main ()
{
echo "Starting now."
echo "This may take a long time."
echo -e '\E[5;31mDo not interrupt or kill this script until it is finished'; tput sgr0
sleep 3
case $ALGO in
1)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2."
echo "Remaining $COUNTER passes."
for f in $FS
do
name="$f/_cleanupfile_"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd if=/dev/urandom of="$f/_cleanupfile_"
sync; sync
rm "${f}/_cleanupfile_"
sync; sync
drop_ok
done
done
;;
2)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2"
echo "Remainig $COUNTER passes."
for f in $FS
do
name="$f/_cleanupfile_"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
##creates the big cleanupfile
dd if=/dev/zero of="$f/_cleanupfile_"
sync; sync ##sync the cleanupfile
rm "${f}/_cleanupfile_"
sync; sync ##sync free space
drop_ok
done
done
;;
3)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2"
echo "Remainig $COUNTER passes."
for f in $FS
do
folder="$f/_clean_"
a=0
i=0
while [ $a -eq 0 ]
do
unset a
mkdir -p $folder
((i+=1))
unset RAND
RAND=$(($RANDOM %2 )) #generates random integer and checks whether this is odd or even by using the mathemtic modulo function
case $RAND in
0) #rand was even
name="$folder/_cleanupfile_$i"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd count=250000 if=/dev/zero of="$name"
;;
1) #rand was odd
name="$folder/_cleanupfile_$i"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd count=250000 if=/dev/urandom of="$name"
;;
esac
a=$?
done
sync; sync
rm -r "${f}/_clean_"
sync; sync
drop_ok
done
done
;;
esac
echo -e '\t \t \t \t \E[32mdone'; tput sgr0
exit 0
}
drop_ok ()
{
echo -e '\t \t \t \t \E[32mok'; tput sgr0
}
drop_failure ()
{
echo -e '\t \t \t \t \E[31mfailure'; tput sgr0
}
###functions end here
FS=$*
${FS:="/"} 2> /dev/null #if no argument is given, / is assumed
check_root
exit 0
Code:
#!/bin/bash
#wipefree
#Script that will wipe the free space of several partitions
##Comes with the package Bash-Tools
#Original Idea by Thomas C. Greene
#Ideas Collected by Mendel Cooper (Advanced Bash Scripting guide)
#rewritten for opensue 10.2 by Matthias Propst
#VARS
NOT_ROOT=67
NO_PART=82
NO_INT=24
NO_SYNC=34
#VARS
###functions begin here
#checks for root
check_root ()
{
echo "Checking whether you are root."
if [ $UID -ne 0 ]
then
echo "Only root can wipeout free space."
drop_failure
exit $NOT_ROOT
else
drop_ok
check_sync
fi
}
check_sync ()
{
VERSION=$(sync --version 2> /dev/null echo "-" )
if [[ $VERSION == "-" ]]
then
echo "sync does not seemed to be installed"
echo "Please install sync and rerun again. It is usaly in the package coreutils."
echo "Script exits now."
drop_failure
exit $NO_SYNC
else
echo "found $VERSION"
drop_ok
often
fi
}
often ()
{
##stes the counter. this is important and ensures the script to stop
unset COUNTER
read -p "How often to you need `basename $0` to run: " COUNTER
${COUNTER:="0"} 2> /dev/null
CHECK=$(( $COUNTER * 1 )) 2> /dev/null
#this prevents the user passing 0 or an non integer value
##sets the Counter. this important and ensures the script to stop
if [[ $CHECK != $COUNTER OR $COUNTER == "0" ]] #because Check will be the errormessage from a non integer value or counter is 0 this checks whether counter is an integer > 0
then
echo "$COUNTER is not an integer value."
drop_failure
exit $NO_INT
else
algorithm
fi
}
algorithm()
{
unset ALGO
unset ALGO_NAME
clear
#Users Choise of which algorithm (method) is used
echo "Algorithms:"
echo "(1) urandom: Uses the /dev/urnadom (default)"
echo "(2) zero: Uses /dev/zero to overwrite your free space (fast but unsecure)"
echo "(3) filesplitter: uses a mixture of both zero and urandom and split up the _cleanupfile_. (should be best result)"
read -n 1 -p "Which algorithm do you want to run. Press Enter to use default." ALGO
${ALGO:=1} 2> /dev/null
case $ALGO in
1) check_part
;;
2) check_part
;;
3) check_part
;;
*) algorithm #if any other keys is pressed the script asks again
;;
esac
}
check_part ()
{
clear
echo "We will wipe out free space in"
for f in $FS #the loop list all folders given and checks whether the folder belongs to a partition
do
unset PART
unset CRYPTO_PART
if [[ $f == "/dev/" OR ! ${f/#\/dev*} OR ! ${f/#\/proc*} $f == "swap" ]]
then
echo "Oops"
echo "$f: This is not allowed"
exit $NO_PART
fi
PART=$(echo `less /etc/fstab grep $f`)
CRYPTO_PART=$(echo `less /etc/cryptotab grep $f`)
${PART:="-"} 2> /dev/null
${CRYPTO_PART:="-"} 2> /dev/null
if [ "$PART" == "-" ] ##if the partition is not in /etc/fstab than probly in /etc/cryptotab
then
if [ "$CRYPTP_PART" == "-" ]
then
echo "$f is not a partition"
echo "Maybe this is not your fault. Because the Script does not handle /foobar/ if the folder /foobar has"
echo "its own partition. Try to rerun the script with /foobar instead of /foobar/." #a warning because i dont know how to prevent that. maybe someone else has an idea+++script exits at first found invalid partition this depends on the order of given scripts
drop_failure
exit $NO_PART
fi
else
echo $f
fi
done
drop_ok
echo "$COUNTER times"
echo "with the"
case $ALGO in #prints a summary
1) echo "urandom"
;;
2) echo "zero"
;;
3) echo "filesplitter"
;;
esac
echo "algorithm."
sleep 3
main
}
trapint ()
{
echo "dont press ctrl + c"
}
main ()
{
echo "Starting now."
echo "This may take a long time."
echo -e '\E[5;31mDo not interrupt or kill this script until it is finished'; tput sgr0
sleep 3
case $ALGO in
1)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2."
echo "Remaining $COUNTER passes."
for f in $FS
do
name="$f/_cleanupfile_"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd if=/dev/urandom of="$f/_cleanupfile_"
sync; sync
rm "${f}/_cleanupfile_"
sync; sync
drop_ok
done
done
;;
2)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2"
echo "Remainig $COUNTER passes."
for f in $FS
do
name="$f/_cleanupfile_"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
##creates the big cleanupfile
dd if=/dev/zero of="$f/_cleanupfile_"
sync; sync ##sync the cleanupfile
rm "${f}/_cleanupfile_"
sync; sync ##sync free space
drop_ok
done
done
;;
3)
until [ $COUNTER -eq 0 ]
do
((COUNTER -=1))
((COUNTER2 +=1))
echo "Starting pass $COUNTER2"
echo "Remainig $COUNTER passes."
for f in $FS
do
folder="$f/_clean_"
a=0
i=0
while [ $a -eq 0 ]
do
unset a
mkdir -p $folder
((i+=1))
unset RAND
RAND=$(($RANDOM %2 )) #generates random integer and checks whether this is odd or even by using the mathemtic modulo function
case $RAND in
0) #rand was even
name="$folder/_cleanupfile_$i"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd count=250000 if=/dev/zero of="$name"
;;
1) #rand was odd
name="$folder/_cleanupfile_$i"
echo "Creating $name"
set +e +u
trap trapint 2 SIGTSTP
dd count=250000 if=/dev/urandom of="$name"
;;
esac
a=$?
done
sync; sync
rm -r "${f}/_clean_"
sync; sync
drop_ok
done
done
;;
esac
echo -e '\t \t \t \t \E[32mdone'; tput sgr0
exit 0
}
drop_ok ()
{
echo -e '\t \t \t \t \E[32mok'; tput sgr0
}
drop_failure ()
{
echo -e '\t \t \t \t \E[31mfailure'; tput sgr0
}
###functions end here
FS=$*
${FS:="/"} 2> /dev/null #if no argument is given, / is assumed
check_root
exit 0
Donnerstag, 18. September 2008
Heute schon gedoodled
„Gestern habe ich doch noch diese Datei gehabt. Argh! Wo habe ich die nur wieder hin getan? Wenn ich doch nur wüßte wie die gesuchte Datei hieß. Jedenfalls weiß ich noch das ich darin etwas Interessantes über Foobar gelesen habe.“
Kennst Du das? Dann helfen Dir unter Linux sogenannte Such- und Indizierungsdienste, die Dateien und ihre Inhalte nach Stichpunkten durchsuchen und diese dann in eine Datenbank ablegen, die sich anschließend nach einem bestimmten Begriff durchsuchen lässt. Dabei kannst Du zum Beispiel auch Tags für Fotos in eine Indexdatenbank ablegen lassen, die die Information über Datum und Ort der Aufnahme enthalten können. So lassen sich zum Beispiel die Urlaubsfotos schneller finden. Ebenso ist es möglich. Mediatags, die Informationen zu Titel und Interpret einer Musikdatei enthalten, zu indizieren, so dass Du anschließend ganz einfach Deinen Lieblingstitel oder Künstler wiederfinden kannst.
Dabei muss es nicht immer Beagle sein, um Deine Dateien indizieren zu lassen und anschließend nach Stichworten zu durchsuchen. So manch ein User ist frustriert bis genervt, wenn Beagle wieder einmal die Festplatte beansprucht und die CPU-Auslastung für Stunden am Anschlag steht.
Mit dem Kommandozeilentool Doodle lassen Sich Dateien schnell und platzsparend indizieren.
Doodles Stärken
Da Doodle intern die Bibliothek libextractor benutzt, werden Momentan die Dateiformate plain text, html, pdf, dvi, ps, mp3, ogg, wav, jpeg, gif, png, tiff, rpm, tar, zip, elf, real, riff, avi, mpeg, asf und quicktime für die Metatagindizierung unterstützt. Alle anderen Formate lassen sich aber immerhin über den Dateinamen indizieren.
Doodle verwendet für die Lookups einen Suffix-Tree genannten Suchbaum, der die Suche nach Schlüsselwörtern unglaublich rasant macht. Bei der Indizierung selber verwendet Doodle gleich mehrere Kniffe, um den Index möglichst klein zu halten und die Zeit für Indizierungen zu verkürzen. Unter anderem werden die Namen für Verzeichnisse in einem anderen Table der Datenbank abgelegt als die Indizes selber. Das Ablegen von Integerwerten und Strings in die Datenbank ermöglicht eine Platzspareffizienz von bis zu 75 %.
Weil Doodle hauptsächlich als Kommandozeilentool konzipiert und entwickelt worden ist, ist es hoch konfigurierbar. Zudem läßt es sich außerordentlich gut durch Optionen steuern. Doodle kann mit Umgebungsvariablen umgehen, was das Programm eventuell interessant für das Schreiben von Shellscripten macht. Als Cron-Job eingerichtet oder mit Hilfe des Daemons doodled lassen sich Änderungen in Dateien einfach überwachen.
Weil Doodle hauptsächlich als Kommandozeilentool konzipiert und entwickelt worden ist, ist es hoch konfigurierbar. Zudem läßt es sich außerordentlich gut durch Optionen steuern. Doodle kann mit Umgebungsvariablen umgehen, was das Programm eventuell interessant für das Schreiben von Shellscripten macht. Als Cron-Job eingerichtet oder mit Hilfe des Daemons doodled lassen sich Änderungen in Dateien einfach überwachen.
Doodle? Finde ich gut!
Für alle die Opensuse >= 10.2 benutzen, wird Doodle im Reposotority von Packman bereitgehalten.
ftp://ftp5.gwdg.de/pub/linux/packman/suse/10.2
ftp://ftp5.gwdg.de/pub/linux/packman/suse/10.3
Du kannst also Doodle bequem mittels Yast oder Smart installieren, nachdem Du Packman als aktive Softwarequelle zu Yast bzw. Smart hinzugefügt hast. Alternativ kannst du Doodle natürlich auch manuell installieren. Dazu musst du nur die Pakete
doodle
libdoodle
libextractor1
libdoodle
libextractor1
rpm -Uhv doodle*rpm libdoodle*rpm libextractor1*rpm
installieren.
Für Benutzer einer Debian basierten Distribution, wie zum Beispiel Ubuntu, sollte Doodle ebenfalls einfach über
apt-get install doodle doodled
heruntergeladen und installiert werden können.
Für die, die keine Scheu haben Software aus dem Quellcode zu installieren, kann Doodle direkt von der Seite
http://gnunet.org/doodle/download/doodle-0.6.7.tar.gz
der Entwickler bezogen und nach dem Entpacken mit dem üblichen Dreisatz
Für die, die keine Scheu haben Software aus dem Quellcode zu installieren, kann Doodle direkt von der Seite
http://gnunet.org/doodle/download/doodle-0.6.7.tar.gz
der Entwickler bezogen und nach dem Entpacken mit dem üblichen Dreisatz
./configure
make
make install
make
make install
kompiliert und installiert werden. Dazu werden allerdings die Development Dateien von libextractor benötigt; zu finden in dem Paket libextractor-devel bzw. libextractor-dev.
Jetzt wird gedoodlet
Nach der Installation kannst Du direkt loslegen. Öffne eine Konsole und teile Doodle mit welche Verzeichnisse er für Dich doodlen soll, indem Du etwa
doodle -bf /usr/share/doc
in die Kommandozeile deiner Wahl (Terminal, Konsole XTerm) tippst. Dies indiziert das Verzeichnis /usr/share/doc und alle darin enthaltenen Unterverzeichnisse.
Du kannst nun zum Beispiel einmal
Du kannst nun zum Beispiel einmal
doodle doodle
eingeben, falls Du Doodle nicht glaubst, dass es fertig ist und erhältst als Antwort unter anderem
/usr/share/doc/packages/doodle/README
Aber doodle kann noch viel mehr. So können auch Umgebungsvariablen als Parameter übergeben werden. Probiere es einmal aus, indem Du
/usr/share/doc/packages/doodle/README
Aber doodle kann noch viel mehr. So können auch Umgebungsvariablen als Parameter übergeben werden. Probiere es einmal aus, indem Du
doodle -bf $HOME
in der Kommandozeile eingibst und das Heimatverzeichnis des aktiven Nutzers von Doodle indizieren lässt.
Die Option -b teilt Doodle mit, dass das Program ein Verzeichnis, welches es als Parameter übergeben bekommt, indizieren soll. Die Zusätzliche Option -f sorgt dafür, das auch Dateinamen beim Anlegen der Datenbank berücksichtigt werden. Allerdings ist das Programm recht schweigsam und teilt Dir nicht mit, was es gerade tut. Um doodle zum Reden zu bringen musst Du die Option -V benutzen. Die Option -P erlaubt es Dir, Verzeichnisse oder Dateien von der Suche oder Indizierung auszuschließen. Außerdem solltest du Doodle mit der Option -B=
Angenommen Du sprichst Deutsch und Englisch und möchtest ein Verzeichnis mit dem Namen Vertraulich bei der Indizierung Deines Heimatverzeichnisses ausschließen, dann kannst Du das ganz einfach bewerkstelligen, indem Du
doodle -bfV $HOME -P $HOME/Vertraulich -B=DE -B=EN
in die Kommandozeile tippst. In Abhängigkeit von der Menge der Dateien die sich in Deinem Heimatverzeichnis breit gemacht haben, kann die Indizierung nun einige Sekunden bis mehrere Stunden in Anspruch nehmen.
Hat Doodle die Arbeit beendet, befindet sich eine versteckte Datei Namens .doodle im Heimatverzeichnis des aktiven Benutzers. Dies ist die Indexdatei der Datenbank. Du kannst das auch ändern. Dazu muss eine Umgebungsvariable DOODLE_PATH gesetzt sein, in der Du einen alternativen Pfad für den Doodleindex festlegen kannst. Trägst Du zum Beispiel folgendes in Deine ~/.profile und ~/.bashrc ein:
Hat Doodle die Arbeit beendet, befindet sich eine versteckte Datei Namens .doodle im Heimatverzeichnis des aktiven Benutzers. Dies ist die Indexdatei der Datenbank. Du kannst das auch ändern. Dazu muss eine Umgebungsvariable DOODLE_PATH gesetzt sein, in der Du einen alternativen Pfad für den Doodleindex festlegen kannst. Trägst Du zum Beispiel folgendes in Deine ~/.profile und ~/.bashrc ein:
#Datenbanken für den doodleindex
if [ !-d $HOME/.mydoodle ]
then
mkdir $HOME/.mydoodle
fi
export DOODLE_PATH="$HOME/.mydoodle/mydoodle.doodle"
wird der Index zukünftig in .mydoodle/mydoodle.doodle deines Heimatverzeichnisses abgelegt.
Achtung: Änderungen für die ~/.profile werden erst nach einem Neustart der aktuellen Session übernommen. [Strg] + [Alt] + [Backspace]
Besonders interessant ist die Möglichkeit, mit Doodle Indexdateien für unterschiedliche Verzeichnisse anzulegen. Etwa wenn Du einen Ordner Musik hast und später genau weißt, dass es sich bei der gesuchten Datei um eine Musikdatei handelt. Dazu benutzt man die Option
--database=
doodle -bfV $HOME/Musik -B=DE -B=EN --database=~/.mydoodle/musik.doodle
um für das Verzeichnis Musik einen separaten Index zu erstellen. Mittles
doodle -i --database=~/.mydoodle/musik.doodle faith
durchsucht man nun den separat erstellten Index für das Verzeichnis Musik nach faith.
Die Option -i erlaubt es Dir mit Doodle auch caseinsensitive, ohne dass Groß- und Kleinschreibung berücksichtigt werden, zu suchen.
Die Option -i erlaubt es Dir mit Doodle auch caseinsensitive, ohne dass Groß- und Kleinschreibung berücksichtigt werden, zu suchen.
Der vollautomatische Doodlegang
Damit man Doodle nicht jedes mal selbst dazu bringen muss, die gewünschten Verzeichnisse zu indizieren kann Du Dich einerseits des Daemons doodled bedienen, wenn Du möchtest das Doodle über jedwede Änderung in Deinen Verzeichnis Bescheid weiß und diese sofort in die Datenbank schreibt, oder Du startest den Dienst als Cron-Job in festgelegten Zeitintervallen.
Für die Indizierung durch den Daemon musst Du diesen lediglich zusammen mit dem Fam-Daemon famd aufrufen. Dieser hat sein Heimat in dem Paket fam-server. Falls noch nicht geschehen, müssen noch folgende Pakete samt ihrer Abhängigkeiten nachinstalliert werden:
fam
fam-server
Das Starten des Fam-Daemons benötigt unter Opensuse die Rechte des Superusers Root.
su
pasword:
famd &
exit
pasword:
famd &
exit
Starte jetzt den Doodle-Daemon doodled unter Angabe des Verzeichnis welches überwacht werden soll als Parameter
doodled $HOME
Das hat den Vorteil dass der Index für dieses Verzeichnis immer aktuell gehalten wird, da Doodle hier Änderungen sofort in der Datenbank aktualisiert und ist besonders sinnvoll wenn Du ein Verzeichnis überwachen lassen möchtest, dessen Inhalte sich besonders häufig ändern.
Um den Dienst Anzuhalten, wird die unter Linux übliche Jobkontrolle verwendet. Dazu muss man zunächst die PID des Prozesses herausfinden:
ps -Agrep doodled
20439 ? 00:00:00 doodled
kill -9 20439
Für Verzeichnisse deren Inhalte eher statisch bleiben, empfiehlt es sich einen einfachen Cron-Job zu verwenden. Dazu öffnest Du zunächst den Cron-Tab Editor, indem Du
crontab -e
in Deine Kommandozeile eingibst. Jetzt kannst Du für die Crontab des Benutzers einen Job vergeben. Standardmäßig ist der Vi als Editor für die Crontab eingestellt. Da dieser Editor möglicherweise für Dich schwierig zu bedienen ist, kannst Du einen anderen Editor für die Crontab setzen. Hier bieten sich alle gültigen Editoren an, die im System bekannt sind. Zum Beispiel nano oder pico. indem Du eine Umgebungsvariable EDITOR setzt, kannst Du den benutzen Editor für die Crontab anpassen.
export EDITOR=nano
Editiere nun die Crontab:
crontab -e
#update des doodle index
0 2 * * 5 matthias doodle -bf $HOME/Musik -B=DE -B=EN --database=.mydoodle/musik.doodle
Dieser Eintrag sorgt dafür, dass Doodle immer Freitags um 2 Uhr Nachts die Datenbank für den Musikordner aktualisiert.
Als Systemadministrator kannst Du so mit Doodle das gesamte System indizieren und den doodled Daemon dazu nutzen die Heimatverzeichnisse der User zu überwachen. In diesem Fall solltest du eine Gruppe doodle anlegen, der es erlaubt ist die Datenbank von Doodle zu lesen. Außerdem sollte die Datenbank selber für den User lesbar sein. Du könntest diese zum Beispiel in einem gesonderten Verzeichnis in /var/doodle aufbewahren. Entsprechend müssen dann natürlich die Einträge für die Cron-Jobs und der ~/.bashrc bzw. ~/.profile angepasst werden. Angenommen Du lässt die Datenbank in /var/doodle/users.doodle schreiben, dann könntest Du folgendermaßen bei den adminstratortechnischen Aufgaben vorgehen:
su
password:
groupadd doodle
groupmod -Adoodle
chmod 640 /var/doodle/users.doodle
password:
groupadd doodle
groupmod -A
chmod 640 /var/doodle/users.doodle
Nicht vergessen das SGID-Bit für das doodle Programm zu setzen, um Benutzern, die sich am System anmelden die Abfrage zu erlauben.
chown root:doodle /usr/bin/doodle
chmod g=s /usr/bin/doodle
exit
Der Doodle-Daemon sollte dann am besten zusammen mit dem Fam-Daemon beim Systemstart geladen werden. Füge dazu die folgenden Anweisungen in der Datei /etc/init.d/rc hinzu.
famd
doodled
doodled
Alternativ kann auch der Yast Runleveleditor verwendet werden.
Doodle als Catfish
Hat man einmal die Datenbanken für den Doodle-Index erstellt, kannst Du diesen auch mit einem grafischen Tool durchsuchen lassen.
Das Tool Catfish ist einfach zu bedienen und Suchergebnisse lassen sich wie bei Beagle direkt öffnen und anzeigen. Nebenbei bemerkt kann das Tool
auch mit Beagle umgehen, außerdem beherrscht es find, locate, sowie den kde4 Indexer Strigi.
Catfish befindet sich ebenfalls im Packman Repo und kann von dort heruntergeladen und installiert werden.
Nach der Installation befindet sich das Tool im Menu, von wo Du es unter System → Dateisystem → Catfish findest. Du kannst es auch direkt als Befehl unter [Alt] + [F2] absetzen, indem du dort
catfish
eingibst. Im Pulldownmenu Suchmethode wählst Du einfach Doodle aus. Jetzt brauchst Du nur noch Deine Suchabfrage in die Suchmaske eingeben und das war es dann auch schon.
T#
Abonnieren
Posts (Atom)