|
|
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 6: |
Zeile 6: |
| $ find foo | | $ find foo |
|
| |
|
| === Suchbereich ===
| | ; Suchkriterium |
| [[Find/Anwendungen/Suchbereich]]
| | {| class="wikitable options big" |
| | | ! Kriterium !! Beschreibung |
| === Dateiname ===
| |
| [[Find/Anwendungen/Dateiname]]
| |
| | |
| === Dateityp ===
| |
| [[Find/Anwendungen/Dateityp]]
| |
| | |
| === Zeitstempel ===
| |
| [[Find/Anwendungen/Zeitstempel]]
| |
| | |
| === Dateigröße ===
| |
| [[Find/Anwendungen/Dateigröße]]
| |
| | |
| === Besitzrecht ===
| |
| [[Find/Anwendungen/Besitzrecht]]
| |
| | |
| === Zugriffsrecht ===
| |
| Gelegentlich möchtest du dein Dateisystem nach Dateien überprüfen, die global beschreibbar sind, oder sonstige "falsche" Berechtigungen haben
| |
| * Das find-Werkzeug unterstützt dies mit mehreren verschiedenen Optionen
| |
| * Am einfachsten sind die Operatoren -readable, -writable, und -executable
| |
| * Diese prüfen die Berechtigungen des aktuell angemeldeten Benutzers, der find aufruft
| |
| * Beachte, dass diese Optionen in älteren Versionen von find nicht verfügbar sind
| |
| * Also wenn deine Distribution etwas älter ist hast du diese Optionen eventuell noch nicht
| |
| * Ein andere Option nach der Dateiberechtigung zu suchen ist die Benutzung von -perm, was nach dem aktuellen Dateistatus schaut
| |
| * Auf diese Art kannst du sehen ob eine Datei mit einer bestimmten Kombination von Berechtigungen übereinstimmt
| |
| * Zum Beispiel wenn du sehen willst welche Dateien von Benutzer und Gruppe ausführbar sind, nimmst du: find -type f -perm -110
| |
| * Die 110 sagt find "Schau nach Dateien das Ausführen-Bit für Benutzer und Gruppe gesetzt haben!" und das - sagt find die anderen Bit zu ignorieren
| |
| * Das heißt, es spielt keine Rolle, wenn die Datei auch beschreibbar oder lesbar ist, solange die Bit gesetzt sind, die sie ausführbar machen
| |
| * Um die Suche auf Dateien einzuschränken, die exakt dem angegeben Staus entsprechen, benutzt du nicht den - -Operator
| |
| | |
| Was, wenn du nach Dateien suchst die das Ausführen-Bit für Benutzer oder Gruppe haben? Dann nimmst du / statt - :
| |
| $ find -type f -perm /110
| |
| | |
| Jede Datei, die die Gruppen- oder Eigentümer-Berechtigung hat, wird gefunden
| |
| * Suchen nach Berechtigung kann überaus hilfreich sein, aber auch komplex
| |
| * Es kann etwas dauern um die Syntax zu verstehen, besonders für die, die noch nicht mit dem Eigentümer/Berechtigung-Konzept vertraut sind
| |
| * In diesem Fall ist das Lesen der man-Seiten nicht nur empfehlenswert, sondern unerlässlich
| |
| | |
| ; -perm Modus
| |
| Findet Dateien, deren Rechte exakt dem angegebenem Modus entsprechen (Angabe numerisch oder symbolisch)
| |
| * die Zugriffsrechte auf die Datei entsprechen exakt dem Modus; der Modus kann als Oktalzahl oder mit den bei chmod(1) beschriebenen Kennungen beschrieben werden, die Kennungen werden auf Modus 000bezogen
| |
| | |
| ; -perm -Modus
| |
| Findet Dateien, bei denen mindestens die durch Modus angegebenen Rechteflags gesetzt sind
| |
| | |
| (mindestens) die Zugriffsrechte für den Modus sind gesetzt
| |
| | |
| ; -perm +Modus
| |
| Findet Dateien, bei denen mindestens eines der durch Modus angegebenen Rechteflags gesetzt ist
| |
| * die Zugriffsrechte entsprechen höchstens dem Modus (oder sind weiter eingeschränkt)
| |
| | |
| === Links ===
| |
| ; -links Anzahl
| |
| Findet Dateien, auf die Anzahl fester Links zeigen
| |
| | |
| ; Dateien im Verzeichnis /usr mit 43 harten Links
| |
| find /usr/ -links 43 2>/dev/null /usr/include /usr/share
| |
| In den Ausgaben wurden die Fehler nach "/dev/null" verschoben, da find natürlich nur Verzeichnisse unter die Lupe nimmt, zu dessen Zugang der Benutzer berechtigt ist
| |
| | |
| ; -lname Muster
| |
| die Datei ist ein symbolischer Link auf eine Datei oder ein Verzeichnis mit einem zum Muster passenden Namen
| |
| | |
| ; -inum IN
| |
| die Datei belegt die Inode mit der Nummer N
| |
| | |
| ; find all the hard links | |
| A common request is a way to find all the hard links to some file
| |
| * Using "ls ‑li file" will tell you how many hard links the file has, and the inode number
| |
| * You can locate all pathnames to this file with:
| |
| find mount-point -xdev -inum inode-number
| |
| * Since hard links are restricted to a single filesystem, you need to search that whole filesystem so you start the search at the filesystems mount point. (This is likely to be either "/home" or "/" for files in your home directory.)
| |
| * The "‑xdev" option tells find to not search (descend into) any other filesystems
| |
| * While most Unix and all Linux systems have a find command that supports the "‑inum" criterion, this isnt POSIX standard
| |
| * Older Unix systems provided the "ncheck" utility instead that could be used for this
| |
| | |
| === Bedingungen verknüpfen ===
| |
| find hält logische Operatoren bereit, um verschiedene Kriterien miteinander zu verknüpfen
| |
| | |
| ; Tests kombinieren
| |
| * <c1> -a <c2>: Wahr, wenn beide, <c1> und <c2>, wahr sind. -a wird bereits implizit aktiviert, daher brauchen Sie nur <c1> <c2> <c3>
| |
| * eingeben, wenn Sie alle Tests <c1>, <c2>,
| |
| * durchführen möchten
| |
| * <c1> -o <c2>: Wahr, wenn entweder <c1>, <c2> oder beide wahr sind. -o hat eine geringere Wertigkeit als -a
| |
| * Wenn Sie also Dateien möchten, die Kriterium <c1> oder <c2> und Kriterium <c3> entsprechen, müssen Sie Klammern verwenden: ( <c1>-o <c2> ) -a <c3>
| |
| * Damit die hier verwendeten Klammern nicht von Ihrer Shell interpretiert werden, müssen Sie sie durch Voranstellen eines Rückstriches (\) schützen
| |
| * -not <c1>: Invertiert den Test <c1>
| |
| * Also ist -not <c1> wahr, wenn <c1> falsch ist
| |
| | |
| ; Operatoren
| |
| Die Optionen, Tests und Aktionen können mit Operatoren verknüpft werden
| |
| * Die Bearbeitung erfolgt von links nach rechts
| |
| | |
| {|| class="wikitable options big " | |
| |-
| |
| | | ( Ausdruck )
| |
| | | die Klammern fassen den Ausdruck zu einer Operation zusammen
| |
| |- | | |- |
| | | ! Ausdruck | | | [[Find/Anwendungen/Suchbereich|Suchbereich]] || Wo soll gesucht werden? |
| | | ist wahr, wenn der Ausdruck falsch ist | |
| |- | | |- |
| | | -not Ausdruck | | | [[Find/Anwendungen/Dateiname|Dateiname]] || |
| | | ist ebenfalls wahr, wenn der Ausdruck falsch ist | |
| |- | | |- |
| | | Ausdruck1 Ausdruck2 | | | [[Find/Anwendungen/Dateityp|Dateityp]] || |
| | | UND Verknüpfung; wenn Ausdruck1 wahr ist, wird Ausdruck2 bewertet (ausgeführt) | |
| |- | | |- |
| | | Ausdruck1 -a Ausdruck2 | | | [[Find/Anwendungen/Zeitstempel|Zeitstempel]] || Dateien nach Zeitstempel finden |
| | | auch eine UND Verknüpfung | |
| |- | | |- |
| | | Ausdruck1 -and Ausdruck2 | | | [[Find/Anwendungen/Dateigröße|Dateigröße]] || Dateien nach Dateigröße finden |
| | | auch eine UND Verknüpfung | |
| |- | | |- |
| | | Ausdruck1 -o Ausdruck2 | | | [[Find/Anwendungen/Besitzrecht|Besitzrecht]] || |
| | | ODER Verknüpfung; Ausdruck2 wird bewertet (ausgeführt), wenn Ausdruck1 falsch ist | |
| |- | | |- |
| | | Ausdruck1 -or Ausdruck2 | | | [[Find/Anwendungen/Zugriffsrecht|Zugriffsrecht]] || |
| | | auch eine ODER Verknüpfung | |
| |- | | |- |
| | | Ausdruck1 , Ausdruck2 | | | [[Find/Anwendungen/Links|Links]] || |
| | | Liste; beide Ausdrücke werden immer bewertet (ausgeführt); der Wahrheitswert des gesamten Ausdrucks entspricht dem von Ausdruck2 | |
| |- | | |- |
| | | [[Find/Anwendungen/Bedingungen verknüpfen|Bedingungen verknüpfen]] || |
| |} | | |} |
|
| |
|
| ; Und-Kombination
| |
| Treffer müssen alle Kriterien erfüllen find -mindepth 3 -maxdepth 5
| |
| * Finde ab Unterverzeichnis(se) 3 (mindepth 3) UND bis Unterverzeichnis(se) 5 (-maxdepth 5)
| |
| * Weiters Beispiel der UND-Kombination
| |
| find -mindepth 3 -type f -name "*.avi" -size +5M
| |
| * Beginnt die Suche ab Unterverzeichnis(se) 3 (-mindepth 3), UND findet nur gewöhnliche Dateien (‑type f), die die Endung .avi besitzen UND mindestens 5 MB groß sind (-size +5M)
| |
|
| |
| ; Oder-Kombination
| |
| find -name "susi.*" -or -name "susanne.*"
| |
| * Sucht alle Dateien die mit "susi." ODER "susanne." beginnen
| |
|
| |
| ; ODER oder NICHT-Kombination
| |
| Man kann die Suchoptionen aber auch per ODER oder NICHT verknüpfen:
| |
| * Negation
| |
| find ! -name "*.avi" -not -name "*.mp*g"
| |
| * Sucht Dateien die von der Dateiendung weder avi, noch mpg oder mpeg sind
| |
| * Ausrufezeichen und -not sind gleichbedeutend
| |
|
| |
| ; Klammerung
| |
| Bei umfangreichen Kombinationen kann eine Klammerung erforderlich sein, um das gewünschte Resultat zu erhalten
| |
|
| |
| ; ohne Klammern
| |
| find -name "susi.*" -or -name "susanne.*" -name "*.txt"
| |
| * Ohne Klammern wird erst die UND-Verbindung gebildet, also "susanne.*" und "*.txt", danach erst ODER "susi". susi.png würde also gefunden
| |
|
| |
| ; mit Klammern
| |
| find \( -name "susi.*" -or -name "susanne.*" \) -name "*.txt"
| |
| * Klammern müssen maskiert werden
| |
| * Hier wird jetzt für alle Dateien erfordert, dass diese auf .txt enden
| |
|
| |
| ; Beispiel
| |
| Suche nach ausführbaren Dateien (keine Verzeichnisse), die user gehören
| |
| find . -maxdepth 1 \! -type d -a -perm +111 -a -user user ./.xinitrc ./.xsession ./dialog ./selfeditor.pl
| |
|
| |
| ; Erläuterung
| |
| * Die Suche wurde auf das aktuelle Verzeichnis beschränkt "-maxdepth 1"
| |
| * Verzeichnisse ausgeschlossen "\! -type d" (das "!" ist ein Sonderzeichen der Shell, deswegen muss die Auswertung durch die Shell verhindert werden)
| |
| * Es sollen alle Dateien gefunden werden, bei denen mindestens in einer [../../../F:%5Cebooks%5CLinux%5CEinführungen%5Clinuxfibel%5Ceigentum.htm Rechtegruppe] das x-Flag gesetzt ist "-perm +111" und die user gehören "-user user"
| |
| * Die Suchkriterien sind jeweils per UND zu verknüpfen
| |
| * Da find rekursiv alle Unterverzeichnisse (eventuell bis zu einer bestimmten Tiefe) durchsucht, kann die Ausführung sehr langwierig werden
| |
|
| |
|
| |
| [[Kategorie:Linux/Befehl]]
| |
| [[Kategorie:findutils]] | | [[Kategorie:findutils]] |