Betriebssysteme I, WS 2016/17

Werbung
Betriebssysteme I
7 Dateisuche
WS 2016/17
Prof. Dr. Dirk Müller
Überblick
●
Motivation
●
ls
●
find
●
whereis
●
Zusammenfassung
Dirk Müller: Betriebssysteme I
WS 2016/17
2/13
Motivation
●
riesige Datenmengen
– Ziel: Übersicht behalten
●
riesige Anzahl von Dateien auf Festplatten, SSDs, CDs,
DVDs, USB-Sticks
– selber Dateiname in verschiedenen Verzeichnissen
main.c,
●
Moderne Distributionen haben Konzept der
Standardverzeichnisse für Dateien in Linux bzw. UNIX
aufgeweicht.
– /bin vs. /usr/bin vs. /usr/local/bin; /opt
●
Sind Dokumentation und Quellcode zu meiner Anwendung
sauber mit installiert und wo?
– ggf. Nachinstallation oder Entfernung
Dirk Müller: Betriebssysteme I
WS 2016/17
3/13
ls
●
●
ls [OPTION]... [DATEI]...
Standardverhalten
–
–
–
–
–
–
●
Suche mittels Dateinamenfilter
(Jokerzeichen ? und * sowie
Aufzählung, Bereich, Menge, Ausschluss)
alphabetische Sortierung
zeigt Inhalt von Verzeichnissen (Standard: aktuelles) an
listet Dateien auf
Formatierung am Terminal: mehrere Spalten
versteckte Dateien (Name beginnend mit .) nicht gelistet
nicht rekursiv
Optionen
-l lange Form der Ausgabe -1 nur 1 Datei pro Zeile
Auswertung mit Befehl grep in Pipe
-i zeigt I-Node-Nummern
möglich, aber Probleme bei
-U unsortiert
Spezialzeichen in Dateinamen
-S absteigend sortiert nach Dateigröße -t nach Änderungszeit
-a alle Dateien
Sortierung als indirekte Art der
(unscharfen) Suche
-R rekursiv
Dirk Müller: Betriebssysteme I
WS 2016/17
4/13
find
●
●
●
Suchen von Dateien, die bestimmten Bedingungen
genügen, und Ausführen von Kommandos auf den
gefundenen Dateien zu symbolischen Links Optimierungslevel 0 bis 3
Anzeige von Diagnose-Daten
find [-H] [-L] [-P] [-Olevel]
[-D help|tree|search|stat|rates|opt|exec]
[Startverzeichnis...] [Suchkriteriumsaudruck]
alle Bäume mit angegebenen Startverzeichnissen als
Wurzeln rekursiv durchsuchen
– Standardwert: . für aktuelles Verzeichnis
●
Suchkriterium als Ausdruck (expression), kann aus
Bedingungen (mittels Operatoren, Optionen, Vergleichen)
und Aktionen bestehen
– Standardbedingung ist leer, also keine Einschränkung
– Standardaktion ist -print für Ausgabe der aktuell gefundenen
Datei auf stdout
Dirk Müller: Betriebssysteme I
WS 2016/17
5/13
Pures find
●
●
Was macht ein find ohne Optionen und Parameter?
Standardverzeichnis: durchsucht Baum ausgehend vom
aktuellen Verzeichnis
●
Standardausdruck: listet alle gefundenen Dateien auf
●
entspricht in etwa einem ls -1RU
– einspaltige Auflistung
– rekursives Suchen in Unterverzeichnissen
– unsortiert, Anordnung wie Verzeichniseinträge gefunden werden,
keine alphabetische Sortierung
●
Simulation eines ls in etwa mittels
find -mindepth 1 -maxdepth 1 -printf '%f\t'
für minimale und maximale Abstiegstiefe vom Startpunkt .
auf 1 (und somit genau 1) gesetzt
Dirk Müller: Betriebssysteme I
WS 2016/17
6/13
find -name <Muster>
●
●
Suche nach Dateien mit dem Namensmuster <Muster>
in einfachen Anführungszeichen (oder alle Jokerzeichen
entwertet), um Expansion durch die Shell zu verhindern
$ find -name a*
find: Der Pfad muss vor dem Ausdruck stehen: a.1
●
nur Dateiname, keine Pfadangaben (weder absolute noch
relative), also kein Schrägstrich im Suchmuster
$ find -name 'a/hallo.data'
find: Warnung: Unix-Dateinamen enthalten gewöhnlich keine
Schrägstriche (anders als Pfadbezeichnungen). Deshalb wird »name ‘a/hallo.data’« wahrscheinlich immer »Falsch« auf diesem
System ergeben. Möglicherweise sind »-wholename« oder
»-samefile« bessere Tests. Alternativ kann auch GNU grep
verwendet werden: »find ... -print0 | grep -FzZ
‘a/hallo.data’«.
Dirk Müller: Betriebssysteme I
WS 2016/17
7/13
find -type und find -xtype
●
●
●
find -type <Typ>
sucht nach Dateien vom Typ <Typ>
f normale, reguläre Datei
d Verzeichnis
l symbolischer Link
c zeichenorientiertes Gerät
b blockorientiertes Gerät
p benannte Pipe
s Socket
<Typ> bezieht sich auf Ziel eines symbolischen Links; falls
-L oder -follow als Option gesetzt, liefert es immer false
Ausweg: -xtype l, um genau die symbolischen Links
auch mit einer Option -L oder -follow herauszufiltern
Dirk Müller: Betriebssysteme I
WS 2016/17
8/13
Weitere Bedingungen bei find
●
●
-links <n>
findet Dateien, auf die genau n harte Links zeigen
-perm [-]<Oktalzahl>
– ohne Minus: alle Dateien, die genau die Zugriffsrechtebits codiert
als Oktalzahl gesetzt haben
– mit Minus: alle Dateien, die mindestens die Zugriffsrechtebits
codiert als Oktalzahl gesetzt haben
ganzzahliger
Anteil
●
-atime [+|-]<n> letzter Lesezugriff
●
-mtime [+|-]<n> letzter Schreibzugriff
●
-ctime [+|-]<n> letzte Attributänderung
●
-size [+|-]<n>[c] Größe n Blöcke bzw. Bytes bei c
●
-user <Name> Eigentümer der Datei heißt <Name>
vor n*24 h
+ mehr als
- weniger als
Dirk Müller: Betriebssysteme I
WS 2016/17
9/13
Aktionen mit find
●
●
-print Ausgabe des Dateinamens bei jeder gefundenen
Datei, implizit als Standardaktion angenommen
-exec <Kommando> ;
– Anwendung von <Kommando> auf jede gefundene Datei
– als Platzhalter (Metazeichen) für den jeweiligen Dateinamen wird
{} verwendet
– Platzhalter {} und Endezeichen ; sollten per \ oder durch Setzen
in einfache Anführungszeichen entwertet werden, um eine
Expansion durch die Shell zu verhindern
– unsicher (per Spezifikation durch POSIX), da Time-of-check Timeof-use (TOCTOU) Race Condition bei Suche und Aufruf;
Angriff: Umleitung durch Setzen eines Symlinks;
stattdessen sollte -execdir verwendet werden
– mit Pluszeichen am Ende schneller: -exec <Kommando> \+
●
Beispiel find -name 'my*' -exec ls -l '{}' \;
und gibt esI im Langformat aus
– findet alles mit dem
DirkPräfix
Müller:'my'
Betriebssysteme
WS 2016/17
10/13
Beispiele für find
●
find $HOME -mtime 0
findet alle Dateien im Baum ab Home-Verzeichnis als
Wurzel, die innerhalb der letzten 24 h geändert wurden
●
find -perm 664
findet alle Dateien mit genau den Rechten rw-rw-r--
●
find -perm -664
findet alle Dateien mit den Mindestrechten rw-rw-r--,
also beliebigen Ausführbarkeitsrechten und beliebigem
Schreibrecht bei Nicht-Gruppenmitgliedern
●
find -name 'my*' -execdir ls -l '{}' \+
schnelle und sichere Variante des Beispiels der letzten Folie
ähnliches Verhalten wie bei ls -l `find -name 'my*'`
Dirk Müller: Betriebssysteme I
WS 2016/17
11/13
whereis
●
Lokalisieren von Binärdateien, Handbuchseiten und
Quelldateien zu einem Kommando
– Funktionalität einer Paketverwaltung
●
●
whereis [Optionen] <Datei>
-b, -m, -s nur nach Binärdateien, Handbuchseiten,
Quelldateien suchen
●
-l Ausgabe der effektiven Suchpfade
●
-u Suche nur nach ungewöhnlichen Einträgen
●
Beispiel
whereis -m -u /bin/*
sucht nach Kommandos in /bin, die keine oder mehrere
Handbuchseiten haben
Dirk Müller: Betriebssysteme I
WS 2016/17
12/13
Zusammenfassung
●
einfache Suche mittels ls und Dateinamenfiltern,
Sortierung oder anschließendem grep
– Probleme bei Sonderzeichen in Dateinamen (auch schon bei
Leerzeichen)
– nicht rekursiv als Standard
●
find als mächtiges Werkzeug zur Suche nach Dateien
–
–
–
–
–
●
Dateinamenfilter
Bedingungen (z. B. Typ, Zeitstempel, Größe)
Aktionen mit Standardaktion Ausgabe des Dateinamens
rekursiv als Standard
TOCTOU-Sicherheitslücke bei -exec, besser mit -execdir
whereis sucht komfortabel nach Binärdateien,
Handbuchseiten und Quelldateien, auch nach
Auffälligkeiten, eine Art Paketverwaltung
Dirk Müller: Betriebssysteme I
WS 2016/17
13/13
Herunterladen