Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
Unter Linux eine Datei zu finden ist eigentlich ganz einfach:
find . -name <Datei> -print
Wobei die Parameter folgende Bedeutung haben: finden
Leider ist die Suche case-sensitive, das heißt Groß- und Kleinschreibung ist hier nicht egal.
find . -iname <Datei> -print
Ist das case-insensitive pedant.
Kennt man allerdings nur noch Bruchstücke des Namens hilft folgendes:
find . -iname '*teilstring*' -print
Dabei ist es ganz wichtig, das der teilstring
in einfache Hochkommas sog. quotes gesetzt wird, sonst schlägt die Shell hier zu und ergänzt den teilstring
schon mal. Sonst ganz nett, hier aber absolut hinderlich. Ein '*' Asterix besagt hier, beliebig viele Zeichen.
find
Bei Rechten sollte man grundsätzlich sehr vorsichtig agieren und niemals mit Zahlen im chmod Kommando arbeiten. Man sollte grundsätzlich nur die Buchstabenkombinationen von chmod nutzen, also u für User, g für Gruppeen, o für Other oder a für Alle. Dann ein plus für mehr Rechte geben und ein Minus für Rechte wegnehmen und dann das eigentliche Recht r für Read, w für Write und x für Execute. Ganz wichtig ist hier auch noch das man unterscheiden muss zwischen Dateien und Directorys, da Direktorys das executable Flag brauchen, wenn man in das Verzeichnis wechseln möchte.
Alle "Dateien" dürfen von Gruppen gelesen werden
find . -type f -exec chmod g+r {} \;
Allen "Dateien" das Recht entziehen von anderen geschrieben zu werden
find . -type f -exec chmod o-w {} \;
Um allen Directorys die Leserechte für Fremde ('o') zu nehmen
find . -type d -exec chmod o-x {} \;
Rechte sollte man grundsätzlich vorsichtig vergeben und nicht mit der Gießkanne wie find. Wenn jemand fremdes eine Datei ausführen soll, braucht er diese nicht unbedingt zu lesen, schweige denn zu schreiben, somit sollte 'o-rw o+x' reichen.
Finden von Dateien, die nicht einem bestimmten Benutzer gehören
find . \! -user foo -print
Alle Dateien, die älter sind als 5 Tage
find . -mtime +5 -print
Alle Dateien, die älter sind als 5 Tage löschen
find . -mtime +5 -exec rm -f {} \;
Alle Dateien, die genau 5 Tage alt sind
find . -mtime 5 -print
Alle Dateien, die jünger als 5 Tage alt sind
find . -mtime -4 -print
Alle Dateien, die älter sind als 5 Tage, wir wollen aber nur das 1. Directory sehen
find . -maxdepth 1 -mtime +5 -print
Sucht alle 'jpg', 'gif' und 'png' Bilder und speichert diese in /tmp/allpictures, liegen die Bilder in Unterverzeichnissen, werden diese mit angelegt.
find . \( -iname '*.jpg' -o -iname '*.gif' -o -iname '*.png' \) -exec cp --parents {} /tmp/allpictures \;
to be continued...
Wer das schon mal auf Platten jenseits von 10GB gemacht hat, wird feststellen, das es schon eine gewisse Zeit braucht, um die Datei(en) auch zu finden.
Dafür gibt es unter Unix ein extra Programm, slocate
was hilft Dateien schneller zu finden, da alle Dateien schon mal irgendwann gesucht und indiziert wurden. In man slocate findet man mehr.
Leider ist die Syntax nicht ganz ähnlich, weshalb diese Zeilen auch entstanden sind.
slocate -r '.*teilstring.*\.jar'
listet alle Dateien die einen teilstring
enthalten und auf .jar enden. Auch hier wieder quotes allerdings ist hier der '.' ein beliebiges Zeichen und ein '*' Asterix sagt 0 oder ganz viele davon. Mehr zu regulären Ausdrücken natürlich im Wiki, aber diesmal auf englisch.
Es wird gerne mal versucht ein Package zu finden, das eine bestimmte Datei enthält.
equery belongs <bestimmte Datei>
Einziger Nachteil, das Package muss bereits installiert sein, desweiteren muss das app-portage/gentoolkit
installiert sein, was aber durch emerge gentoolkit
mal eben installiert werden kann.
Portage File List Query findet alle Dateien mit dem angegebenen Namen und listet diese auf, so findet man dann auch Packages ohne diese installiert zu haben.