Einführung
In diesem Lab werden Sie die wesentlichen Techniken zum Auffinden von Dateien und Befehlen innerhalb der Linux-Kommandozeile erlernen. Sie beginnen mit dem mächtigen find-Befehl und lernen, wie Sie einfache Suchen nach Namen durchführen und Platzhalter für flexiblere Suchmuster nutzen. Dieser praxisorientierte Ansatz führt Sie durch die Erstellung einer Beispiel-Verzeichnisstruktur, um Ihre Suchfähigkeiten sicher zu trainieren.
Auf dieser Grundlage aufbauend werden Sie untersuchen, wie Sie Befehle direkt auf Ihre Suchergebnisse anwenden können, indem Sie -exec und xargs verwenden. Das Lab deckt auch alternative und spezialisierte Suchwerkzeuge ab, darunter den schnellen, datenbankgestützten locate-Befehl, whereis zum Finden von Programmdateien und Handbüchern sowie Dienstprogramme wie alias, which und type, um den Ausführungspfad von Befehlen zu analysieren. Am Ende werden Sie in der Lage sein, für jede Suchaufgabe in Linux das richtige Werkzeug auszuwählen.
Grundlegende Dateisuche mit find und Platzhaltern durchführen
In diesem Schritt lernen Sie den Umgang mit dem find-Befehl, einem der leistungsfähigsten Werkzeuge der Linux-Kommandozeile zum Suchen von Dateien und Verzeichnissen. Wir beginnen mit einfachen namensbasierten Suchen und führen Platzhalter ein, um Dateimuster zu finden.
Zuerst erstellen wir ein spezielles Verzeichnis und einige Beispieldateien für unsere Übung. Dies stellt sicher, dass wir eine kontrollierte Umgebung haben, um die Funktionsweise von find zu sehen, ohne andere Teile des Dateisystems zu beeinflussen.
- Stellen Sie sicher, dass Sie sich im richtigen Startverzeichnis befinden. Alle Arbeiten für dieses Lab werden innerhalb von
~/projectdurchgeführt.
cd ~/project
- Erstellen Sie ein neues Verzeichnis namens
find_labund wechseln Sie hinein.
mkdir find_lab
cd find_lab
- Erstellen wir nun eine Reihe von Dateien und ein Unterverzeichnis, das wir durchsuchen können. Wir verwenden den Befehl
touch, um leere Dateien zu erstellen, undmkdirfür das Verzeichnis.
touch file1.txt file2.log report.txt File1.TXT
mkdir subdir
touch subdir/file3.txt subdir/another.log
Sie können die Struktur mit dem Befehl ls -R überprüfen, der Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen rekursiv auflistet.
ls -R
Sie sollten eine Ausgabe ähnlich dieser sehen:
.:
File1.TXT file1.txt file2.log report.txt subdir
./subdir:
another.log file3.txt
Da unsere Testumgebung nun bereit ist, beginnen wir mit der Suche.
Die grundlegende Syntax für den find-Befehl lautet find [Pfad] [Ausdruck]. Der [Pfad] gibt an, wo find mit der Suche beginnen soll, und der [Ausdruck] definiert, wonach gesucht wird.
Suche nach exaktem Dateinamen
Um eine Datei anhand ihres exakten Namens zu finden, verwenden Sie den Ausdruck -name. Suchen wir nach der Datei report.txt. Wir verwenden . als Pfad, was find anweist, im aktuellen Verzeichnis zu suchen.
find . -name "report.txt"
Die Ausgabe zeigt den Pfad zur gefundenen Datei:
./report.txt
Suche mit Platzhaltern
Platzhalter (Wildcards) ermöglichen es Ihnen, nach Dateien basierend auf Mustern zu suchen. Der gebräuchlichste Platzhalter ist das Sternchen (*), das für eine beliebige Zeichenfolge steht.
Es ist ratsam, das Muster in doppelte Anführungszeichen (") zu setzen, um zu verhindern, dass die Shell den Platzhalter interpretiert, bevor der find-Befehl ihn verarbeiten kann.
Suchen wir nach allen Dateien, die auf .txt enden.
find . -name "*.txt"
find sucht rekursiv im aktuellen Verzeichnis (.) und allen Unterverzeichnissen:
./file1.txt
./report.txt
./subdir/file3.txt
Beachten Sie, dass File1.TXT nicht gefunden wurde, da -name eine Suche unter Berücksichtigung der Groß- und Kleinschreibung durchführt. Um eine Suche unabhängig von der Groß-/Kleinschreibung durchzuführen, verwenden Sie den Ausdruck -iname (insensitive name).
find . -iname "*.txt"
Nun enthält die Ausgabe alle Dateien, die auf .txt enden, unabhängig von der Schreibweise:
./file1.txt
./report.txt
./File1.TXT
./subdir/file3.txt
Suche nach Dateityp
Sie können find auch anweisen, nur nach bestimmten Arten von Objekten im Dateisystem zu suchen, wie Dateien oder Verzeichnissen, indem Sie den Ausdruck -type verwenden. Nutzen Sie -type f für reguläre Dateien und -type d für Verzeichnisse.
Suchen wir nur nach den Verzeichnissen an unserem aktuellen Standort.
find . -type d
Die Ausgabe listet das aktuelle Verzeichnis (.) und das von uns erstellte subdir auf:
.
./subdir
Sie können Ausdrücke kombinieren, um spezifischere Suchen zu erstellen. Um beispielsweise alle Dateien (keine Verzeichnisse) zu finden, die auf .log enden:
find . -type f -name "*.log"
Dieser Befehl findet alle Elemente, die Dateien SIND UND deren Name auf .log endet.
./file2.log
./subdir/another.log
Sie haben nun die Grundlagen der Verwendung von find mit Namensmustern und Typfiltern gelernt. In den nächsten Schritten werden wir fortgeschrittenere Funktionen dieses Befehls untersuchen.
Aktionen auf Suchergebnisse mit find -exec und xargs ausführen
In diesem Schritt gehen wir über das bloße Auflisten von Dateien hinaus. Sie lernen, wie Sie Befehle direkt auf die vom find-Befehl gefundenen Dateien anwenden. Dies ist eine leistungsstarke Technik für Massenoperationen, wie das Ändern von Berechtigungen, das Löschen von Dateien oder das Ausführen eigener Skripte. Wir behandeln zwei primäre Methoden: die Option -exec von find und den Befehl xargs.
Wir arbeiten weiter im Verzeichnis ~/project/find_lab aus dem vorherigen Schritt. Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden.
cd ~/project/find_lab
Verwendung von find -exec
Die Option -exec erlaubt es Ihnen, einen beliebigen Befehl für jede Datei auszuführen, die find lokalisiert. Die Syntax kann anfangs etwas ungewohnt erscheinen:
find [Pfad] [Ausdruck] -exec [Befehl] {} \;
[Befehl]: Der Befehl, den Sie ausführen möchten (z. B.ls -l,rm,chmod).{}: Dies ist ein spezieller Platzhalter.findersetzt{}durch den vollständigen Pfad der aktuell gefundenen Datei.\;: Dies ist ein erforderliches Abschlusszeichen für den-exec-Befehl. Der Backslash (\) ist notwendig, um zu verhindern, dass die Shell das Semikolon als Sonderzeichen interpretiert.
Probieren wir es aus. Wir suchen alle Dateien mit der Endung .txt und führen für jede ls -l aus, um detaillierte Informationen zu sehen.
find . -name "*.txt" -exec ls -l {} \;
Die Ausgabe zeigt das Ergebnis von ls -l, das für jede gefundene .txt-Datei einzeln ausgeführt wurde:
-rw-rw-r-- 1 labex labex 0 Jun 26 09:45 ./file1.txt
-rw-rw-r-- 1 labex labex 0 Jun 26 09:45 ./report.txt
-rw-rw-r-- 1 labex labex 0 Jun 26 09:45 ./subdir/file3.txt
Zur Sicherheit bietet find die Option -ok, die genau wie -exec funktioniert, Sie aber vor der Ausführung des Befehls bei jeder Datei um Bestätigung bittet. Dies wird dringend empfohlen, wenn Sie destruktive Operationen wie das Löschen von Dateien (rm) durchführen.
Versuchen wir, die zuvor erstellten .log-Dateien zu entfernen, diesmal jedoch mit -ok zur Sicherheit.
find . -name "*.log" -ok rm {} \;
Für jede gefundene Datei fragt find nach Ihrer Bestätigung. Geben Sie y ein und drücken Sie die Eingabetaste, um das Löschen zu bestätigen.
< rm ... ./file2.log > ? y
< rm ... ./subdir/another.log > ? y
Nach der Bestätigung können Sie durch Auflisten des Verzeichnisinhalts überprüfen, ob die Dateien gelöscht wurden.
ls -R
.:
File1.TXT file1.txt report.txt subdir
./subdir:
file3.txt
Verwendung von xargs
Eine Alternative zu -exec besteht darin, die Ausgabe von find per Pipe an den Befehl xargs zu übergeben. xargs liest Elemente von der Standardeingabe (die von find gelieferten Dateipfade) und führt einen angegebenen Befehl mit diesen Elementen als Argumente aus.
Der Hauptvorteil von xargs ist die Effizienz. Während -exec ... \; den Befehl für jede einzelne Datei einmal ausführt, gruppiert xargs die Dateipfade und führt den Befehl seltener mit vielen Argumenten gleichzeitig aus.
Zuerst erstellen wir die gerade gelöschten Log-Dateien neu, damit wir wieder Arbeitsmaterial haben.
touch file2.log subdir/another.log
Nun verwenden wir find und xargs, um die Details unserer .log-Dateien aufzulisten.
find . -name "*.log" | xargs ls -l
Die Ausgabe ähnelt dem -exec-Beispiel, aber die Befehlsstruktur ist anders:
-rw-r--r-- 1 labex labex 0 <Datum> <Zeit> ./file2.log
-rw-r--r-- 1 labex labex 0 <Datum> <Zeit> ./subdir/another.log
Wie find -ok verfügt auch xargs über einen "Bestätigungsmodus" mit der Option -p. Er zeigt den Befehl an, der ausgeführt werden soll, und bittet um Ihre Zustimmung.
Verwenden wir dies, um die .log-Dateien erneut zu löschen.
find . -name "*.log" | xargs -p rm
xargs gruppiert die Dateien in einen einzigen rm-Befehl und bittet um Bestätigung. Geben Sie y ein und drücken Sie die Eingabetaste.
rm ./file2.log ./subdir/another.log ?...y
Sie haben nun erfolgreich sowohl -exec als auch xargs eingesetzt, um auf Suchergebnisse zu reagieren – eine grundlegende Fertigkeit zur Automatisierung von Aufgaben in Linux.
locate und updatedb für schnelle datenbankgestützte Suchen verwenden
In diesem Schritt lernen Sie eine Alternative zu find namens locate kennen. Während find das Dateisystem in Echtzeit durchsucht, durchsucht locate eine vorab erstellte Datenbank mit Dateipfaden. Dies macht locate erheblich schneller, bringt jedoch einen entscheidenden Nachteil mit sich: Es kann nur Dateien finden, die zum Zeitpunkt der letzten Datenbankaktualisierung bereits existierten.
Wir setzen unsere Arbeit im Verzeichnis ~/project fort. Stellen Sie zunächst sicher, dass die erforderlichen Werkzeuge installiert sind.
- Der Befehl
locatewird durch das Paketmlocatebereitgestellt, das möglicherweise nicht standardmäßig installiert ist. Führen Sie den folgenden Befehl aus, um Ihre Paketliste zu aktualisieren und es zu installieren. Sie verwendensudo, da dies eine systemweite Installation ist.
sudo apt-get update && sudo apt-get install -y mlocate
Sie werden den Fortschritt der Paketinstallation sehen, was normal ist.
- Navigieren wir nun in unser Testverzeichnis aus den vorherigen Schritten.
cd ~/project/find_lab
- Versuchen Sie, die Datei
report.txtmitlocatezu finden.
locate report.txt
In vielen Systemen wird die locate-Datenbank automatisch aktualisiert, sodass Sie die Datei möglicherweise sofort sehen:
/home/labex/project/find_lab/report.txt
Wenn Sie den Dateipfad sehen, bedeutet dies, dass die Datenbank bereits Informationen über Ihre kürzlich erstellten Dateien enthält. Dies kann passieren, wenn das System automatische Datenbank-Updates im Hintergrund ausführt.
- Falls Sie in Schritt 3 keine Ausgabe erhalten haben, muss die Datenbank manuell aktualisiert werden. Verwenden Sie den Befehl
updatedb, um die Datenbank neu aufzubauen:
sudo updatedb
Dieser Befehl erzeugt keine Ausgabe, arbeitet aber im Hintergrund. Es kann einen Moment dauern, bis er abgeschlossen ist.
- Nachdem Sie
updatedbausgeführt haben (falls erforderlich), versuchen Sie denlocate-Befehl erneut:
locate report.txt
Nun sollte er den Pfad zur Datei finden und anzeigen:
/home/labex/project/find_lab/report.txt
Einschränkungen der lokalen Datenbank verstehen
Untersuchen wir, was passiert, wenn Sie neue Dateien erstellen, nachdem die Datenbank zuletzt aktualisiert wurde.
- Erstellen wir zunächst eine neue Datei in unserem Verzeichnis
find_lab.
touch special_report.pdf
- Versuchen Sie, diese neue Datei zu lokalisieren:
locate special_report.pdf
Wenn die Systemdatenbank erst vor kurzem aktualisiert wurde, sehen Sie die Datei vielleicht. Wenn nicht, erfolgt keine Ausgabe, da die Datenbank von dieser neu erstellten Datei noch nichts weiß.
- Sie können eine Aktualisierung der Systemdatenbank erzwingen:
sudo updatedb
- Versuchen Sie nun erneut, die Datei zu lokalisieren:
locate special_report.pdf
Sie sollten nun Folgendes sehen:
/home/labex/project/find_lab/special_report.pdf
Verständnis der Aktualisierungshäufigkeit
Die wichtigste Erkenntnis ist, dass locate von der Aktualität seiner Datenbank abhängt. In Produktivsystemen:
- Das System aktualisiert die
locate-Datenbank normalerweise automatisch (oft täglich über Cron-Jobs). - Sie können sie mit
sudo updatedbmanuell aktualisieren, wenn Sie sofortige Ergebnisse benötigen. locateist extrem schnell, da es einen vorgefertigten Index durchsucht, anstatt das Dateisystem zu scannen.- Um sehr kurzfristig erstellte Dateien zu finden, ist
findzuverlässiger, da es in Echtzeit sucht.
Sie haben nun gelernt, wie locate durch die Verwendung einer Datenbank blitzschnelle Suchen ermöglicht, und verstehen, wie wichtig es ist, diese Datenbank mit updatedb aktuell zu halten.
Befehlsdateien und Handbücher mit whereis lokalisieren
In diesem Schritt lernen Sie den Befehl whereis kennen, ein spezialisiertes Werkzeug zum Auffinden der Binärdatei, des Quellcodes und der Handbuchseiten (Manpages) eines Befehls. Im Gegensatz zu find oder locate, die für die allgemeine Dateisuche gedacht sind, ist whereis darauf optimiert, schnell die wesentlichen Dateien zu finden, die mit einem Systembefehl verknüpft sind. Es durchsucht eine vordefinierte Liste von Standard-Linux-Verzeichnissen, was es extrem schnell macht.
Beginnen wir mit der Erkundung des whereis-Befehls. Sie können sich dazu in einem beliebigen Verzeichnis befinden, da whereis nicht relativ zu Ihrem aktuellen Standort sucht. Wir bleiben der Konsistenz halber im Verzeichnis ~/project.
cd ~/project
- Suchen wir nach den Speicherorten für den Befehl
passwd, der zum Ändern von Benutzerpasswörtern verwendet wird.
whereis passwd
Die Ausgabe zeigt den Befehlsnamen, gefolgt von den Pfaden zu seiner ausführbaren Binärdatei und den zugehörigen Handbuchseiten.
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
/usr/bin/passwd: Dies ist das ausführbare Programm./etc/passwd: Dies ist die Benutzerdatenbank des Systems, mit der der Befehlpasswdinteragiert.whereislistet oft wichtige Konfigurationsdateien in seinen Ergebnissen auf./usr/share/man/...: Dies sind die komprimierten Handbuchseiten für den Befehl.
- Sie können die Ergebnisse filtern, um nur bestimmte Dateitypen anzuzeigen. Um nur die mit
passwdverknüpften Binärdateien zu sehen, verwenden Sie das Flag-b(binary).
whereis -b passwd
Dies schränkt die Ausgabe auf die ausführbare Datei und verwandte Dateien ein und schließt die Manpages aus.
passwd: /usr/bin/passwd /etc/passwd
- Um nur die Handbuchseiten zu finden, verwenden Sie entsprechend das Flag
-m(manual). Dies ist nützlich, wenn Sie wissen möchten, welche Dokumentation für einen Befehl verfügbar ist.
whereis -m passwd
Die Ausgabe listet nun nur noch die Speicherorte der Manpages auf.
passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
- Es ist wichtig, die Grenzen von
whereiszu verstehen. Es durchsucht nur Standard-Systemverzeichnisse. Versuchen wir, die Dateireport.txtzu finden, die wir in unserem Verzeichnisfind_laberstellt haben.
whereis report.txt
Der Befehl gibt nur den Namen der Datei zurück, aber keinen Pfad:
report.txt:
Dies geschieht, weil sich report.txt in Ihrem Home-Verzeichnis (~/project/find_lab) befindet, was kein Standardort für System-Binärdateien oder Manpages ist. Dies verdeutlicht den Hauptunterschied: Verwenden Sie find oder locate für Ihre persönlichen oder Projektdateien und whereis, um Systembefehle zu untersuchen.
Sie haben nun gelernt, wie Sie whereis verwenden, um schnell die Dateien zu lokalisieren, aus denen ein Linux-Befehl besteht – eine nützliche Fähigkeit für die Systemadministration und Fehlerbehebung.
Befehlspfade mit alias, which und type analysieren
In diesem letzten Schritt untersuchen wir, wie die Shell bestimmt, welcher Befehl ausgeführt werden soll, wenn Sie seinen Namen eingeben. Das ist nicht immer so einfach wie das Finden einer Datei auf der Festplatte. Die Shell hat eine bestimmte Rangfolge: Sie prüft zuerst auf Aliase, dann auf Shell-interne Befehle (Built-ins) und durchsucht schließlich die Verzeichnisse in der Systemvariable $PATH nach einer ausführbaren Datei. Sie lernen, wie Sie mit alias Befehlskürzel erstellen und mit which und type diagnostizieren, worauf ein Befehlsname tatsächlich verweist.
Beginnen wir mit der Erstellung eines temporären Alias, um zu sehen, wie er die Befehlsausführung beeinflusst. Wir bleiben im Verzeichnis ~/project.
- Ein Alias ist ein benutzerdefiniertes Kürzel für einen anderen Befehl. Erstellen wir einen Alias, der bewirkt, dass der Befehl
pwd(print working directory) stattdessen den Befehldateausführt.
alias pwd='date'
- Führen Sie nun den Befehl
pwdaus.
pwd
Anstatt Ihr aktuelles Verzeichnis auszugeben, wird das aktuelle Datum und die Uhrzeit angezeigt, da der Alias Vorrang hat.
<aktuelles Datum und Uhrzeit>
Untersuchung mit which und type
Stellen Sie sich nun vor, Sie wüssten nichts von dem Alias. Wie würden Sie herausfinden, warum sich pwd falsch verhält? Hier sind which und type nützlich.
- Der Befehl
whichlokalisiert eine ausführbare Datei in den Verzeichnissen, die in der Umgebungsvariable$PATHaufgeführt sind.
which pwd
Die Ausgabe zeigt:
pwd: aliased to date
- Der Befehl
typeist umfassender. Es ist ein Shell-interner Befehl, der beschreibt, wie die Shell einen Befehlsnamen interpretieren wird, einschließlich Aliasen und internen Funktionen.
type pwd
Dieser Befehl identifiziert die Situation korrekt:
pwd is an alias for date
- Um alle möglichen Befehle zu sehen, die auf einen Namen passen, können Sie das Flag
-a(all) verwenden. Dies ist besonders in Kombination mittypesehr aussagekräftig.
type -a pwd
Dies offenbart die gesamte Hierarchie für den Befehlsnamen pwd:
pwd is an alias for date
pwd is a shell builtin
pwd is /usr/bin/pwd
pwd is /bin/pwd
Diese Ausgabe verrät Ihnen die Rangfolge der Shell: Sie wird zuerst den Alias verwenden. Wenn der Alias nicht existieren würde, würde sie den Shell-internen pwd-Befehl verwenden. Wenn keiner von beiden existieren würde, würde sie das Programm unter /usr/bin/pwd ausführen.
Einen Alias entfernen
Räumen wir zum Abschluss unser Experiment auf, indem wir den Alias entfernen.
- Der Befehl
unaliasentfernt eine Alias-Definition aus der aktuellen Shell-Sitzung.
unalias pwd
- Führen Sie nun
pwdundtype pwderneut aus, um zu bestätigen, dass alles wieder normal ist.
pwd
Ausgabe:
/home/labex/project
type pwd
Ausgabe:
pwd is a shell builtin
Sie haben nun gelernt, wie Sie Aliase erstellen und entfernen und, was noch wichtiger ist, wie Sie which und type verwenden, um genau zu verstehen, welchen Befehl die Shell ausführen wird.
Zusammenfassung
In diesem Lab haben Sie gelernt, wie Sie nach Dateien und Verzeichnissen im gesamten Linux-Dateisystem suchen. Sie begannen mit dem mächtigen find-Befehl, nutzten namensbasierte Kriterien und Platzhalter für einfache Suchen und gingen dann dazu über, Befehle mit -exec und xargs direkt auf die Suchergebnisse anzuwenden. Sie haben auch den locate-Befehl als schnellere, datenbankgestützte Alternative kennengelernt und erfahren, wie Sie dessen Datenbank mit updatedb aktuell halten.
Darüber hinaus behandelte das Lab Techniken zum Lokalisieren und Analysieren von Befehlen. Sie verwendeten whereis, um den Speicherort von Programmbereichen und deren Handbuchseiten zu finden. Um den Ausführungspfad von Befehlen zu verstehen, lernten Sie which einzusetzen, um die spezifische aufgerufene ausführbare Datei zu identifizieren, und type, um festzustellen, ob ein Befehl ein Alias, ein Built-in oder eine Datei ist, während Sie gleichzeitig analysierten, wie Aliase das Befehlsverhalten beeinflussen.



