104.7 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
104 Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard |
Lernziel: |
104.7 Systemdateien finden und Dateien am richtigen Ort plazieren |
Lektion: |
1 von 1 |
Einleitung
Linux-Distributionen gibt es in allen Formen und Größen, aber eines haben fast alle gemeinsam: Sie folgen dem Filesystem Hierarchy Standard (FHS), der ein “Standardlayout” für das Dateisystem definiert, was die Zusammenarbeit und die Systemadministration wesentlich erleichtert. In dieser Lektion erfahren Sie mehr über diesen Standard und wie Sie Dateien auf einem Linux-System finden können.
Der Filesystem Hierarchy Standard
Der Filesystem Hierarchy Standard (FHS) ist ein Versuch der Linux Foundation, die Verzeichnisstruktur und den Verzeichnisinhalt auf Linux-Systemen zu standardisieren. Die Einhaltung des Standards ist nicht zwingend, aber die meisten Distributionen folgen ihm.
Note
|
Wer sich für die Details der Dateisystemorganisation interessiert, kann die FHS 3.0-Spezifikation lesen, die in mehreren Formaten verfügbar ist unter: http://refspecs.linuxfoundation.org/fhs.shtml |
Gemäß dem Standard stellt sich die grundlegende Verzeichnisstruktur wie folgt dar:
/
-
Dies ist das Stammverzeichnis (auch Wurzelverzeichnis genannt) und stellt das oberste Verzeichnis in der Hierarchie dar. Jedes andere Verzeichnis befindet sich darin. Ein Dateisystem wird oft mit einem “Baum” verglichen, so dass dies der “Stamm” wäre, mit dem alle Zweige verbunden sind.
/bin
-
Wesentliche Binärdateien, verfügbar für alle Benutzer.
/boot
-
Dateien, die für den Bootprozess benötigt werden, einschließlich der Initial RAM Disk (initrd) und des Linux-Kernels selbst.
/dev
-
Gerätedateien. Dies können entweder physikalische Geräte sein, die mit dem System verbunden sind (z. B. wäre
/dev/sda
die erste SCSI- oder SATA-Platte) oder virtuelle Geräte, die vom Kernel bereitgestellt werden. /etc
-
Hostspezifische Konfigurationsdateien. Programme können Unterverzeichnisse in
/etc
anlegen, um bei Bedarf mehrere Konfigurationsdateien zu speichern. /home
-
Jeder Benutzer im System verfügt über ein “home”-Verzeichnis, um persönliche Dateien und Einstellungen zu speichern, und die meisten von ihnen befinden sich unter
/home
. Typischerweise trägt das Homeverzeichnis den gleichen Namen wie der Benutzer, so würde der Benutzer John sein Homeverzeichnis unter/home/john
vorfinden. Die Ausnahmen davon ist der Superuser (root), der ein eigenes Verzeichnis (/root
) hat, sowie einige Systembenutzer. /lib
-
Gemeinsame Bibliotheken, die zum Booten des Betriebssystems und zur Ausführung der Binärdateien unter
/bin
und/sbin
benötigt werden. /media
-
Vom Benutzer einhängbare Wechselmedien, wie Flash-Laufwerke, CD- und DVD-ROM-Laufwerke, Disketten, Speicherkarten und externe Festplatten werden hier eingehängt.
/mnt
-
Einhängepunkt für temporär eingehängte Dateisysteme.
/opt
-
Anwendungssoftwarepakete.
/root
-
Homeverzeichnis für den Superuser (root).
/run
-
Daten von Laufzeitvariablen.
/sbin
-
Systembinärdateien.
/srv
-
Daten, die vom System gehostet werden. Zum Beispiel könnten die von einem Webserver gehosteten Seiten unter
/srv/www
gespeichert werden. /tmp
-
Temporäre Dateien.
/usr
-
Schreibgeschützte Benutzerdaten, einschließlich Daten, die von einigen sekundären Dienstprogrammen und Anwendungen benötigt werden.
/proc
-
Virtuelles Dateisystem, das Daten zu den laufenden Prozessen enthält.
/var
-
Variable Daten, die während des Systembetriebs geschrieben werden, einschließlich Druckwarteschlange, Protokolldaten, Mailboxen, temporäre Dateien, Browsercache, usw.
Denken Sie daran, dass einige dieser Verzeichnisse, wie /etc
, /usr
und /var
, eine ganze Hierarchie von Unterverzeichnissen enthalten.
Temporäre Dateien
Temporäre Dateien sind Dateien, die von Programmen zum Speichern von Daten verwendet werden, die nur für kurze Zeit benötigt werden. Dies können Daten laufender Prozesse, Absturzprotokolle, Arbeitsdateien aus einem automatischem Speichervorgang, Zwischendateien, die bei einer Dateikonvertierung verwendet werden, Cache-Dateien und dergleichen sein.
Speicherort temporärer Dateien
Version 3.0 des Filesystem Hierarchy Standard (FHS) definiert Standardspeicherorte für temporäre Dateien auf Linux-Systemen. Jeder Speicherort hat einen anderen Zweck und ein anderes Verhalten, und es wird empfohlen, dass Entwickler beim Schreiben temporärer Daten auf die Festplatte den vom FHS festgelegten Konventionen folgen.
/tmp
-
Gemäß des FHS sollten Programme nicht davon ausgehen, dass hier geschriebene Dateien zwischen den Aufrufen eines Programms erhalten bleiben. Es wird empfohlen, dieses Verzeichnis beim Hochfahren des Systems zu leeren (alle Dateien zu löschen), obwohl dies nicht zwingend erforderlich ist.
/var/tmp
-
Ein weiterer Speicherort für temporäre Dateien, der jedoch während des Systemstarts nicht gelöscht werden sollte. Die hier gespeicherten Dateien bleiben normalerweise zwischen Neustarts erhalten.
/run
-
Dieses Verzeichnis enthält Laufzeitvariablendaten, die von laufenden Prozessen verwendet werden, wie z. B. Prozessidentifikationsdateien (
.pid
). Programme, die mehr als eine Laufzeitdatei benötigen, können hier Unterverzeichnisse anlegen. Dieses Verzeichnis muss beim Systemstart geleert werden. Der Zweck dieses Verzeichnisses wurde früher von/var/run
erfüllt, und auf einigen Systemen kann/var/run
ein symbolischer Link zu/run
sein.
Beachten Sie, dass es nichts gibt, was ein Programm daran hindert, temporäre Dateien an anderer Stelle auf dem System anzulegen, aber es ist ein bewährtes Verfahren, die vom FHS festgelegten Konventionen zu respektieren. === Dateien finden
Um auf einem Linux-System nach Dateien zu suchen, können Sie den Befehl find
verwenden. Dies ist ein sehr leistungsfähiges Werkzeug mit vielen Parametern, mit denen Sie dessen Verhalten anpassen und die Ausgabe genau nach Ihren Bedürfnissen einstellen können.
Um zu beginnen, benötigt find
zwei Argumente: einen Startpunkt und wonach gesucht werden soll. Um zum Beispiel nach allen Dateien im aktuellen Verzeichnis (und Unterverzeichnissen) zu suchen, deren Name auf .jpg
endet, können Sie wie folgt vorgehen:
$ find . -name '*.jpg' ./pixel_3a_seethrough_1.jpg ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Dies wird mit jeder Datei übereinstimmen, deren letzte vier Zeichen des Namens .jpg
sind, egal was davor kommt, da *
ein Platzhalter für “irgendwas” ist. Schauen Sie jedoch, was passiert, wenn ein weiteres *
am Ende des Suchmusters hinzugefügt wird:
$ find . -name '*.jpg*' ./pixel_3a_seethrough_1.jpg ./Pentaro.jpg.zip ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Die Datei Pentaro.jpg.zip
(oben hervorgehoben) war in der vorherigen Auflistung nicht enthalten, da sie zwar .jpg
im Namen enthält, aber nicht mit dem Muster übereinstimmte, da am Ende noch zusätzliche Zeichen standen. Das neue Muster bedeutet “irgendwas .jpg
irgendwas”, daher die Übereinstimmung.
Tip
|
Beachten Sie, dass der Parameter |
Der Ausdruck *.jpg
muss in einfache Anführungszeichen gesetzt werden, damit die Shell das Muster nicht selbst interpretiert. Versuchen Sie es ohne die Anführungszeichen und sehen Sie, was passiert.
Standardmäßig beginnt find
am Startpunkt und steigt durch alle gefundenen Unterverzeichnisse (und deren Unterverzeichnisse) ab. Sie können dieses Verhalten mit den Parametern -maxdepth N
einschränken, wobei N
die maximale Anzahl der Ebenen darstellt.
Um nur das aktuelle Verzeichnis zu durchsuchen, wird -maxdepth 1
verwendet. Angenommen, es liegt folgende Verzeichnisstruktur vor:
directory ├── clients.txt ├── partners.txt -> clients.txt └── somedir ├── anotherdir └── clients.txt
Um innerhalb von somedir
zu suchen, müssten Sie -maxdepth 2
verwenden (das aktuelle Verzeichnis +1 Ebene tiefer). Um innerhalb von anotherdir
zu suchen, wäre -maxdepth 3
erforderlich (das aktuelle Verzeichnis +2 Ebenen tiefer). Der Parameter -mindepth N
arbeitet in umgekehrter Weise und sucht nur in Verzeichnissen, die mindestens N
Ebenen tiefer liegen.
Der Parameter -mount
kann verwendet werden, um zu verhindern, dass find
in eingehängten Dateisystemen landet. Sie können die Suche auch auf bestimmte Dateisystemtypen beschränken, indem Sie den Parameter -fstype
verwenden. So würde find /mnt -fstype exfat -iname "*report*"
nur in exFAT-Dateisystemen suchen, die unter /mnt
eingehängt sind.
Suche nach Attributen
Sie können die unten aufgeführten Parameter verwenden, um nach Dateien mit bestimmten Attributen zu suchen, z. B. nach solchen, die von Ihrem Benutzer beschreibbar sind, einen bestimmten Satz von Berechtigungen haben oder eine bestimmte Größe aufweisen:
-user USERNAME
-
Passt auf Dateien, die dem Benutzer
USERNAME
gehören. -group GROUPNAME
-
Passt auf Dateien, die der Gruppe
GROUPNAME
gehören. -readable
-
Passt auf Dateien, die für den aktuellen Benutzer lesbar sind.
-writable
-
Passt auf Dateien, die vom aktuellen Benutzer beschreibbar sind.
-executable
-
Passt auf Dateien, die für den aktuellen Benutzer ausführbar sind. Im Falle von Verzeichnissen passt dies auf jedes Verzeichnis, die der Benutzer betreten kann (
x
-Berechtigung). -perm NNNN
-
Passt auf alle Dateien, die genau die Berechtigung
NNNN
innehaben. Zum Beispiel passt-perm 0664
auf alle Dateien, die der Benutzer und die Gruppe lesen und schreiben können und der Rest der Welt lesen können (oderrw-rw-r--
).
Sie können ein -
vor NNNN
hinzufügen, um nach Dateien zu suchen, die mindestens die angegebene Berechtigung haben. Zum Beispiel würde -perm -644
auf Dateien passen, die mindestens die Berechtigung 644
(rw-r—r--
) erfüllen. Dies schließt eine Datei mit 664
(rw-rw-r--
) oder sogar 775
(rwxrwx-r-x
) mit ein.
-empty
-
Passt auf leere Dateien und Verzeichnisse.
-size N
-
Passt auf alle Dateien der Größe
N
, wobeiN
standardmäßig die Anzahl von 512-Byte-Blöcken ist. Sie können Suffixe anN
für andere Einheiten hinzufügen:Nc
zählt die Größe in Bytes,Nk
in Kibibytes (KiB, Vielfache von 1024 Bytes),NM
in Mebibytes (MiB, Vielfache von 1024 * 1024) undNG
für Gibibytes (GiB, Vielfache von 1024 * 1024 * 1024).
Auch hier können Sie die Präfixe +
oder -
hinzufügen (was für größer als und kleiner als steht), um nach relativen Größen zu suchen. Zum Beispiel findet -size -10M
jede Datei mit einer Größe von weniger als 10 MiB.
Um z. B. nach Dateien in Ihrem Homeverzeichnis zu suchen, die das von Groß- und Kleinschreibung unabhängige Muster report
in einem beliebigen Teil des Namens enthalten, die die Berechtigung 0644
besitzen, auf die vor 10 Tagen zugegriffen wurde und deren Größe mindestens 1 Mib beträgt, können Sie Folgendes verwenden:
$ find ~ -iname "*report*" -perm 0644 -atime 10 -size +1M
Suche per Zeit
Neben der Suche nach Attributen können Sie auch eine Suche per Zeit durchführen, um Dateien zu finden, auf die innerhalb eines bestimmten Zeitraums zugegriffen wurde, deren Attribute geändert wurden oder die modifiziert wurden. Die Parameter dazu lauten:
-amin N
,-cmin N
,-mmin N
-
Passt auf Dateien, auf die vor
N
Minuten zugegriffen wurde, deren Attribute geändert wurden bzw. die vorN
Minuten geändert wurden. -atime N
,-ctime N
,-mtime N
-
Passt auf Dateien, auf die zugegriffen wurde, deren Attribute geändert wurden oder die vor
N*24
Stunden geändert wurden.
Bei -cmin N
und -ctime N
führt jede Attributänderung zu einem Treffer, einschließlich einer Änderung der Berechtigungen, Lesen oder Schreiben in der Datei. Das macht diese Parameter besonders mächtig, da praktisch jede Operation, die die Datei betrifft, einen Treffer auslöst.
Das folgende Beispiel würde auf jede Datei im aktuellen Verzeichnis passen, die vor weniger als 24 Stunden geändert wurde und größer als 100 MiB ist:
$ find . -mtime -1 -size +100M
Verwendung von locate
und updatedb
locate
und updatedb
sind Befehle, die verwendet werden können, um schnell eine Datei zu finden, die einem bestimmten Muster auf einem Linux-System entspricht. Aber im Gegensatz zu find
durchsucht locate
nicht das Dateisystem nach dem Muster: Stattdessen sucht es in einer Datenbank, die durch den Befehl updatedb
erstellt wurde. Dadurch erhalten Sie sehr schnell Ergebnisse, diese können aber ungenau sein, je nachdem, wann die Datenbank zuletzt aktualisiert wurde.
Die einfachste Art, locate
zu verwenden, ist, einfach ein Muster zu übergeben, nach dem gesucht werden soll. Um zum Beispiel jedes JPEG-Bild auf Ihrem System zu finden, würden Sie locate jpg
verwenden. Die Liste der Ergebnisse kann ziemlich lang sein, könnte sich aber wie folgt darstellen:
$ locate jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Wenn nach dem Muster jpg
gefragt wird, zeigt locate
alles an, was diesem Muster entspricht, egal, was davor oder danach kommt. Sie können ein Beispiel dafür in der Datei jpg_specs.doc
in der Auflistung oben sehen: Sie enthält das Muster, aber die Dateiendung muss nicht zwingend jpg
lauten.
Tip
|
Denken Sie daran, dass Sie mit |
Standardmäßig wird bei Mustern zwischen Groß- und Kleinschreibung unterschieden. Das bedeutet, dass Dateien, die .JPG
enthalten, nicht angezeigt werden, da das Muster in Kleinbuchstaben übergeben wurde. Um dies zu vermeiden, übergeben Sie den Parameter -i
an locate
. Wir wiederholen das vorheriges Beispiel:
$ locate -i .jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg
Beachten Sie, dass die Datei Mate1_old.JPG
, oben fett gedruckt, in der vorherigen Auflistung nicht vorhanden war.
Sie können mehrere Muster an locate
übergeben, trennen Sie diese einfach mit Leerzeichen. Das folgende Beispiel würde eine unabhängige Suche betreffend der Groß-/Kleinschreibung nach allen Dateien durchführen, die den Mustern zip
und jpg
entsprechen:
$ locate -i zip jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/OPENMSXPIHAT.zip /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/gbs-control-master.zip /home/carol/Downloads/lineage-16.0-20190711-MOD-quark.zip /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Wenn Sie mehrere Muster verwenden, können Sie locate auffordern, nur Dateien anzuzeigen, die mit allen übergebenen Mustern übereinstimmen. Dies wird mit der Option -A
erreicht. Das folgende Beispiel würde alle Dateien anzeigen, die mit den Mustern .jpg
und .zip
übereinstimmen:
$ locate -A .jpg .zip /home/carol/Downloads/Pentaro.jpg.zip
Wenn Sie die Anzahl der Dateien zählen möchten, die mit einem bestimmten Muster übereinstimmen, anstatt deren vollständigen Pfad anzuzeigen, können Sie die Option -c
verwenden. Zum Beispiel, um die Anzahl der .jpg
-Dateien auf einem System zu zählen:
$ locate -c .jpg 1174
Ein Problem mit locate
ist, dass es nur Einträge anzeigt, die in der von updatedb
erzeugten Datenbank vorhanden sind (zu finden in /var/lib/mlocate.db
). Wenn die Datenbank veraltet ist, könnte die Ausgabe Dateien anzeigen, die seit der letzten Aktualisierung gelöscht worden sind. Eine Möglichkeit, dies zu vermeiden, besteht darin, den Parameter -e
hinzuzufügen, mit dem geprüft wird, ob die Datei noch existiert, bevor diese in der Ausgabe erscheint.
Dies löst natürlich nicht das Problem, dass Dateien, die nach der letzten Datenbankaktualisierung erstellt wurden, nicht angezeigt werden. Hierfür müssen Sie die Datenbank mit dem Befehl updatedb
aktualisieren. Wie lange dies dauert, hängt von der Menge der Dateien auf Ihrer Festplatte ab.
Steuerung des Verhaltens von updatedb
Das Verhalten von updatedb
kann über die Datei /etc/updatedb.conf
gesteuert werden. Dies ist eine Textdatei, in der jede Zeile eine Variable steuert. Leerzeichen werden ignoriert und Zeilen, die mit dem Zeichen #
beginnen, werden als Kommentare behandelt.
PRUNEFS=
-
Alle Dateisystemtypen, die nach diesem Parameter angegeben werden, werden von
updatedb
nicht gescannt. Die Liste der Typen sollte durch Leerzeichen getrennt werden, und die Typen selbst unterscheiden nicht zwischen Groß- und Kleinschreibung, sodassNFS
undnfs
dasselbe sind. PRUNENAMES=
-
Dies ist eine durch Leerzeichen getrennte Liste von Verzeichnisnamen, die nicht von
updatedb
gescannt werden sollen. PRUNEPATHS=
-
Dies ist eine Liste von Pfadnamen, die von
updatedb
ignoriert werden sollen. Die Pfadnamen müssen durch Leerzeichen getrennt sein und so angegeben werden, wie diese vonupdatedb
angezeigt werden würden (z. B./var/spool /media
) PRUNE_BIND_MOUNTS=
-
Dies ist eine einfache
yes
oderno
Variable. Auf den Wertyes
gesetzt, werden Bind-Mounts (Verzeichnisse, die anderswo mit dem Befehlmount --bind
eingehängt wurden) ignoriert.
Suche nach Binärdateien, Handbuchseiten und Quellcode
which
ist ein sehr nützlicher Befehl, der den vollständigen Pfad zu einer ausführbaren Datei anzeigt. Wenn Sie z. B. die ausführbare Datei für bash
finden möchten, können Sie den Befehl verwenden:
$ which bash /usr/bin/bash
Wenn die Option -a
hinzugefügt wird, zeigt der Befehl alle Pfadnamen an, die mit der ausführbaren Datei übereinstimmen. Beachten Sie den Unterschied:
$ which mkfs.ext3 /usr/sbin/mkfs.ext3 $ which -a mkfs.ext3 /usr/sbin/mkfs.ext3 /sbin/mkfs.ext3
Tip
|
Um herauszufinden, welche Verzeichnisse sich im |
type
ist ein ähnlicher Befehl, der Informationen über ein Binärprogramm anzeigt, u. a. auch wo es sich befindet und welchen Typ es hat. Verwenden Sie einfach type
gefolgt vom Befehlsnamen:
$ type locate locate is /usr/bin/locate
Der Parameter -a
funktioniert auf die gleiche Weise wie bei which
und zeigt alle Pfadnamen an, die mit der ausführbaren Datei übereinstimmen. Zum Beispiel so:
$ type -a locate locate is /usr/bin/locate locate is /bin/locate
Und der Parameter -t
zeigt den Dateityp des Befehls an, der alias
, keyword
, function
, builtin
oder file
sein kann. Zum Beispiel:
$ type -t locate file $ type -t ll alias $ type -t type type is a built-in shell command
Der Befehl whereis
ist vielseitiger und kann neben Binärdateien auch dazu verwendet werden, den Ort von Manpages oder sogar Quellcode für ein Programm anzuzeigen (falls in Ihrem System vorhanden). Geben Sie einfach whereis
gefolgt vom Binärnamen ein:
$ whereis locate locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
Die obigen Ergebnisse enthalten Binärdateien (/usr/bin/locate
) und komprimierte Handbucheinträge (/usr/share/man/man1/locate.1.gz
).
Sie können die Ergebnisse schnell filtern, indem Sie Kommandozeilenschalter wie -b
verwenden, was die Suche auf Binärdateien beschränkt, -m
, zur Beschränkung auf Handbuchseiten, oder -s
, um nur Quellcode herauszufiltern. Wenn Sie das obige Beispiel wiederholen, erhalten Sie:
$ whereis -b locate locate: /usr/bin/locate $ whereis -m locate locate: /usr/share/man/man1/locate.1.gz
Geführte Übungen
-
Stellen Sie sich vor, ein Programm muss eine temporäre Datei zur einmaligen Verwendung erstellen, die nach dem Beenden des Programms nie wieder benötigt wird. Welches wäre das richtige Verzeichnis, um diese Datei abzulegen?
-
Welches ist das temporäre Verzeichnis, das während des Bootvorgangs geleert werden muss?
-
Suchen Sie mit
find
ausschließlich im aktuellen Verzeichnis nach Dateien, die vom Benutzer beschreibbar sind, in den letzten 10 Tagen geändert wurden und größer als 4 GiB sind. -
Suchen Sie mit
locate
alle Dateien, die in ihrem Namen die Musterreport
und entwederupdated
,update
oderupdating
enthalten. -
Wie können Sie herausfinden, wo die Manpage für
ifconfig
gespeichert ist? -
Welche Variable muss zu
/etc/updatedb.conf
hinzugefügt werden, damitupdatedb
ntfs
-Dateisysteme ignoriert? -
Ein Systemadministrator möchte eine interne Festplatte (
/dev/sdc1
) einhängen. Unter welchem Verzeichnis soll diese Platte laut FHS gemountet werden?
Offene Übungen
-
Wenn
locate
verwendet wird, werden die Ergebnisse aus einer vonupdatedb
erzeugten Datenbank bezogen. Diese Datenbank kann jedoch veraltet sein, wodurchlocate
Dateien anzeigt, die nicht mehr existieren. Wie kann manlocate
dazu bringen, nur existierende Dateien in seiner Ausgabe abzuzeigen? -
Finden Sie alle Dateien im aktuellen Verzeichnis oder deren Unterverzeichnissen bis zur 2 Ebenen tiefer, mit Ausnahme von eingehängten Dateisystemen, die das Muster
Status
oderstatute
in ihrem Namen enthalten. -
Beschränkt auf die Suche von
ext4
-Dateisystemen, finden Sie alle Dateien unter/mnt
, die mindestens Ausführungsrechte für die Gruppe haben, für den aktuellen Benutzer lesbar sind und bei denen in den letzten 2 Stunden ein beliebiges Attribut geändert wurde. -
Suchen Sie leere Dateien, die vor mehr als 30 Tagen erstellt wurden und sich mindestens zwei Ebenen unterhalb des aktuellen Verzeichnisses befinden!
-
Nehmen wir an, dass die Benutzer
carol
undjohn
Teil der Gruppemkt
sind. Suchen Sie im Homeverzeichnis vonjohn
alle Dateien, die auch voncarol
gelesen werden können.
Zusammenfassung
In dieser Lektion haben wir die grundlegende Organisation des Dateisystems auf einem Linux-Rechner gemäß dem FHS kennengelernt und erfahren, wie Binärdateien und Dateien entweder über den Namen oder über Attribute gefunden werden können. Die folgenden Befehle wurden in dieser Lektion besprochen:
find
-
Ein vielseitiger Befehl zum Suchen von Dateien und Ordnern anhand einer Vielzahl von Suchkriterien.
locate
-
Ein Dienstprogramm, das eine lokale Datenbank verwendet, welche die Speicherorte für lokal gespeicherte Dateien enthält.
updatedb
-
Aktualisiert die lokale Datenbank, die vom Befehl
locate
verwendet wird. which
-
Zeigt den vollständigen Pfad zu einer ausführbaren Datei an.
whereis
-
Zeigt die Speicherorte von Handbuchseiten, Binärdateien und Quellcode auf dem System an.
type
-
Zeigt den Speicherort einer Binärdatei und den Typ der Anwendung an, um die es sich handelt (z. B. ein installiertes Programm, ein in die Bash integriertes Programm und mehr).
Lösungen zu den geführten Übungen
-
Stellen Sie sich vor, ein Programm muss eine temporäre Datei zur einmaligen Verwendung erstellen, die nach dem Beenden des Programms nie wieder benötigt wird. Welches wäre das richtige Verzeichnis, um diese Datei abzulegen?
Da wir uns nicht um die Datei kümmern, nachdem das Programm beendet ist, ist das richtige Verzeichnis
/tmp
. -
Welches ist das temporäre Verzeichnis, das während des Bootvorgangs geleert werden muss?
Das Verzeichnis ist
/run
oder, auf manchen Systemen,/var/run
. -
Suchen Sie mit
find
ausschließlich im aktuellen Verzeichnis nach Dateien, die vom Benutzer beschreibbar sind, in den letzten 10 Tagen geändert wurden und größer als 4 GiB sind.Hierfür benötigen Sie die Parameter
-writable
,-mtime
und-size
:find . -writable -mtime -10 -size +4G
-
Suchen Sie mit
locate
alle Dateien, die in ihrem Namen die Musterreport
und entwederupdated
,update
oderupdating
enthalten.Da
locate
auf alle Muster passen muss, verwenden Sie die Option-A
:locate -A "report" "updat"
-
Wie können Sie herausfinden, wo die Manpage für
ifconfig
gespeichert ist?Verwenden Sie den Parameter
-m
fürwhereis
:whereis -m ifconfig
-
Welche Variable muss zu
/etc/updatedb.conf
hinzugefügt werden, damitupdatedb
ntfs
-Dateisysteme ignoriert?Die Variable ist
PRUNEFS=
, gefolgt vom Dateisystemtyp:PRUNEFS=ntfs
-
Ein Systemadministrator möchte eine interne Festplatte (
/dev/sdc1
) einhängen. Unter welchem Verzeichnis soll diese Platte laut FHS gemountet werden?In der Praxis kann die Festplatte überall eingehängt werden. Der FHS empfiehlt jedoch, dass temporäre Einhängungen unter
/mnt
erfolgen.
Lösungen zu den offenen Übungen
-
Wenn
locate
verwendet wird, werden die Ergebnisse aus einer vonupdatedb
erzeugten Datenbank bezogen. Diese Datenbank kann jedoch veraltet sein, wodurchlocate
Dateien anzeigt, die nicht mehr existieren. Wie kann manlocate
dazu bringen, nur existierende Dateien in seiner Ausgabe abzuzeigen?Fügen Sie den Parameter
-e
zu locate hinzu, wie inlocate -e PATTERN
. -
Finden Sie alle Dateien im aktuellen Verzeichnis oder deren Unterverzeichnissen bis zur 2 Ebenen tiefer, mit Ausnahme von eingehängten Dateisystemen, die das Muster
Status
oderstatute
in ihrem Namen enthalten.Denken Sie daran, dass Sie für
-maxdepth
auch das aktuelle Verzeichnis berücksichtigen müssen, wir wollen also drei Ebenen (das Aktuelle plus 2 Ebenen tiefer):find . -maxdepth 3 -mount -iname "*statu*"
-
Beschränkt auf die Suche von
ext4
-Dateisystemen, finden Sie alle Dateien unter/mnt
, die mindestens Ausführungsrechte für die Gruppe haben, für den aktuellen Benutzer lesbar sind und bei denen in den letzten 2 Stunden ein beliebiges Attribut geändert wurde.Verwenden Sie den Parameter
-fstype
wie beim Befehlmount
, um die Suche auf bestimmte Dateisystemtypen zu beschränken. Eine Datei, die vom aktuellen Benutzer lesbar ist, hätte mindestens4
an der ersten Stelle der Berechtigungen, und eine von der Gruppe ausführbare hätte mindestens den Wert1
an der zweiten Stelle. Da wir uns nicht um die Berechtigungen für den Rest der Welt kümmern, können wir0
für die dritte Stelle angeben. Verwenden Sie-cmin N
, um die letzten Attributänderungen zu filtern, und denken Sie daran, dass N in Minuten angegeben wird. Also:find /mnt -fstype ext4 -perm -410 -cmin -120
-
Suchen Sie leere Dateien, die vor mehr als 30 Tagen erstellt wurden und sich mindestens zwei Ebenen unterhalb des aktuellen Verzeichnisses befinden!
Der Parameter
-mindepth N
kann verwendet werden, um die Suche auf mindestensN
Ebenen nach unten zu begrenzen, aber denken Sie daran, dass Sie das aktuelle Verzeichnis in die Zählung einbeziehen müssen. Verwenden Sie-empty
, um nach leeren Dateien zu suchen, und-mtime N
, um nach der Änderungszeit zu suchen. Also:find . -empty -mtime +30 -mindepth 3
-
Nehmen wir an, dass die Benutzer
carol
undjohn
Teil der Gruppemkt
sind. Suchen Sie im Homeverzeichnis vonjohn
alle Dateien, die auch voncarol
gelesen werden können.In Anbetracht der Tatsache, dass beide Benutzer Mitglieder der gleichen Gruppe sind, brauchen wir mindestens ein
r
(4
) für die Gruppenberechtigungen, und die anderen sind uns egal. Also:find /home/john -perm -040