103.3 Lektion 2
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
103 GNU- und Unix-Befehle |
Lernziel: |
103.3 Grundlegende Dateiverwaltung |
Lektion: |
2 von 2 |
Einführung
Wie man Dateien findet
Während der Benutzung Ihres Rechners, sammeln sich immer mehr und mehr Dateien an. Manchmal wird es schwierig, eine bestimmte Datei zu finden. Glücklicherweise bietet Linux die Funktion find
zum schnellen Suchen und Auffinden von Dateien. find
verwendet die folgende Syntax:
find START_PFAD OPTIONEN AUSDRUCK
START_PFAD
-
definiert das Verzeichnis, in dem die Suche beginnt.
OPTIONEN
-
steuert das Verhalten und fügt spezifische Kriterien hinzu, um den Suchprozess zu optimieren.
AUSDRUCK
-
definiert die Suchanfrage.
$ find . -name "myfile.txt" ./myfile.txt
Der Startpfad ist in diesem Fall das aktuelle Verzeichnis. Die Option -name
gibt an, dass die Suche sich auf den Namen einer Datei bezieht. myfile.txt
ist der Name der zu durchsuchenden Datei. Wenn Sie Datei Globbing verwenden, achten Sie darauf, den Ausdruck in Anführungszeichen zu setzen:
$ find /home/frank -name "*.png" /home/frank/Pictures/logo.png /home/frank/screenshot.png
Dieser Befehl findet alle Dateien, die mit .png
enden, beginnend mit dem Verzeichnis /home/frank/
einschließlich aller Unterverzeichnisse. Falls die Verwendung des Sternchens (*
) nicht bekannt ist, so kann dies in der vorangegangenen Lektion nachgelesen werden.
Verwendung von Kriterien zur Beschleunigung der Suche
Verwenden Sie find
, um Dateien basierend auf Typ, Größe oder Zeit zu finden. Durch die Angabe einer oder mehrerer Optionen werden die gewünschten Ergebnisse in kürzester Zeit erzielt.
Optionen zum Suchen von Dateien basierend auf dem Dateityp:
-type f
-
Dateisuche.
-type d
-
Verzeichnissuche.
-type l
-
Suche nach symbolischen Links.
$ find . -type d -name "example"
Dieser Befehl findet alle Verzeichnisse im aktuellen Verzeichnis und darunter, die den Namen example
innehaben.
Weitere Kriterien, welche mit find
verwendet werden könnten, sind:
-name
-
führt eine Suche auf der Grundlage des Dateinamens durch.
-iname
-
sucht anhand des Namens, wobei die Schreibweise nicht beachtet wird (d.h.
myFile
entspricht ebenfallsMYFILE
). -not
-
gibt nur Ergebnisse zurück, welche nicht übereinstimmen.
-maxdepth N
-
durchsucht sowohl das aktuelle Verzeichnis als auch
N
Ebenen an Unterverzeichnissen.
Auffinden von Dateien nach Änderungszeit
find
erlaubt auch das Filtern einer Verzeichnishierarchie basierend darauf, wann die Datei geändert wurde:
$ sudo find / -name "*.conf" -mtime 7 /etc/logrotate.conf
Dieser Befehl sucht nach allen Dateien im gesamten Dateisystem (der Startpfad ist das Wurzelverzeichnis, d.h. /
), die mit den String .conf
enden und in den letzten sieben Tagen geändert wurden. Um auf Verzeichnisse zuzugreifen, welche am Wurzelverzeichnis der Verzeichnisstruktur des Systems liegen, erfordert dieser Befehl erhöhte Privilegien durch die Verwendung von sudo
. Das Argument, das an mtime
übergeben wird, stellt die Anzahl der Tage seit der letzten Änderung der Datei dar.
Lokalisieren von Dateien nach Größe
find
kann Dateien auch nach Größe lokalisieren. Folgend ein Beispiel für die Suche nach Dateien, welche größer als 2G
sind und sich in /var
befinden:
$ sudo find /var -size +2G /var/lib/libvirt/images/debian10.qcow2 /var/lib/libvirt/images/rhel8.qcow2
Die Option -size
zeigt Dateien an, deren Größe dem übergebenen Argument entsprechen. Einige Beispielargumente sind:
-size 100c
-
Dateien, die genau 100 Bytes groß sind.
-size +100k
-
Dateien, die größer als 100 Kilobyte sind.
-size -20M
-
Dateien kleiner 20 Megabyte.
-size +2G
-
Dateien größer 2 Gigabyte.
Note
|
Um leere Dateien zu finden, verwenden Sie: |
Einwirken auf das Suchergebnis
Sobald eine Suche durchgeführt wurde, ist es möglich, mit -exec
eine Aktion mit den Ergebnissen durchzuführen:
$ find . -name "*.conf" -exec chmod 644 '{}' \;
Dies filtert jedes Objekt im aktuellen Verzeichnis (.
) und darunter nach Dateinamen, die auf .conf
enden, und führt dann den Befehl chmod 644
aus, um die Dateiberechtigungen für die Ergebnisse zu ändern.
Kümmern Sie sich vorerst nicht um die Bedeutung von '{}' \;
, da dies später behandelt wird.
Verwendung von grep
zum Filtern von Dateien auf Grundlage des Inhalts
grep
wird verwendet, um nach dem Vorkommen eines Schlüsselwortes zu suchen.
Denken Sie an eine Situation, in der wir Dateien auf der Grundlage des Inhalts finden sollen:
$ find . -type f -exec grep "lpi" '{}' \; -print ./.bash_history Alpine/M helping/M
Dies würde jedes Objekt in der aktuellen Verzeichnishierarchie (.
), das eine Datei (-type f
) ist, durchsuchen und dann den Befehl grep "lpi"
für jede Datei ausführen, welche die Bedingungen erfüllt. Die Dateien, die diese Bedingungen erfüllen, werden auf dem Bildschirm ausgegeben (-print
). Die geschweiften Klammern ({}
) sind ein Platzhalter für die Ergebnisse von find
. Die {}
werden in einfache Anführungszeichen ('
) eingeschlossen, um die Übergabe von Dateinamen an grep
, welche Sonderzeichen enthalten, kompatibel zu halten. Das Kommando -exec
wird mit einem Semikolon (;
) abgeschlossen, welches entsprechend zu markieren ist (\;
), um eine Interpretation durch die Shell zu vermeiden.
Das Hinzufügen der Option -delete
am Ende eines Ausdrucks würde alle übereinstimmenden Dateien löschen. Diese Option sollte verwendet werden, wenn Sie sicher sind, dass die Ergebnisse nur mit den Dateien übereinstimmen, die Sie tatsächlich löschen möchten.
Im folgenden Beispiel findet find
alle Dateien in der Hierarchie, die im aktuellen Verzeichnis beginnen, und löscht dann alle Dateien, die mit den String .bak
enden:
$ find . -name "*.bak" -delete
Archivieren von Dateien
Der Befehl tar
(Archivierung und Komprimierung)
Der Befehl tar
, kurz für “tape archive(r)”, wird verwendet, um Archive im Format tar zu erstellen, indem eine Gruppe von Dateien in ein Archiv umgewandelt wird. Archive werden so erstellt, dass eine Gruppe von Dateien leicht verschoben oder gesichert werden kann. Stellen Sie sich tar
als ein Werkzeug vor, das einen Klebstoff erzeugt, an den Dateien angehängt, gruppiert und leicht verschoben werden können.
tar
hat auch die Fähigkeit, Archive vom Typ tar zu extrahieren, eine Liste der im Archiv enthaltenen Dateien anzuzeigen sowie zusätzliche Dateien zu einem bestehenden Archiv hinzuzufügen.
Die Syntax des Befehls tar
lautet wie folgt:
tar [OPERATION_UND_OPTIONEN] [ARCHIV_NAME] [DATEI_NAME(N)]
OPERATION
-
Es ist stets nur ein Operationsargument erlaubt und erforderlich. Die am häufigsten verwendeten Operationen lauten:
--create
(-c
)-
Erstellen eines neuen Archivs.
--extract
(-x
)-
Entpacken eines Archivs oder einer oder mehrerer Dateien aus einem Archiv.
--list
(-t
)-
Auflistung aller im Archiv enthaltenen Dateien.
OPTIONEN
-
Die am häufigsten verwendeten Optionen sind:
--verbose
(-v
)-
Anzeigen des Verarbeitungsprozess des Befehls
tar
. --file=archive-name
(-f archive-name
)-
Gibt den Namen der Archivdatei an.
ARCHIV_NAME
-
Der Name des Archivs.
DATEI_NAME(N)
-
Eine durch Leerzeichen getrennte Liste von Dateinamen, welche aus dem Archiv extrahiert werden sollen. Wenn nicht angegeben, wird das gesamte Archiv extrahiert.
Anlegen eines Archivs
Nehmen wir an, wir haben ein Verzeichnis namens stuff
im aktuellen Verzeichnis und wir wollen es in einer Datei namens archive.tar
speichern. Wir würden den folgenden Befehl ausführen:
$ tar -cvf archive.tar stuff stuff/ stuff/service.conf
Folgend, eine Beschreibung der genutzten Optionen:
-c
-
Erstellen eines Archiv.
-v
-
Anzeigen des Fortschritts im Terminal während der Erstellung des Archivs, auch bekannt als “verbose” Modus. Das
-v
ist in diesen Befehlen immer optional, aber hilfreich. -f
-
Erlaubt die Angabe des Dateinamens des Archivs.
Im Allgemeinen verwenden wir zur Archivierung eines einzelnen Verzeichnisses oder einer einzelnen Datei unter Linux folgende Kommandostruktur:
tar -cvf NAME-DES-ARCHIVS.tar /PFAD/ZUM/ORDNER-ODER-DATEI
Note
|
|
Um mehrere Verzeichnisse auf einmal zu archivieren, listen wir alle Verzeichnisse auf, indem wir diese im Abschnitt /PFAD/ZUM/ORDNER-ODER-DATEI
durch Leerzeichen abgrenzen:
$ tar -cvf archive.tar stuff1 stuff2
Dies würde ein Archiv von stuff1
und stuff2
mit dem Namen archive.tar
erzeugen.
Entpacken eines Archivs
Wir können ein Archiv mit tar
wie folgt extrahieren:
$ tar -xvf archive.tar stuff/ stuff/service.conf
Dadurch wird der Inhalt von archive.tar
in das aktuelle Verzeichnis extrahiert.
Dieser Befehl ist derselbe wie der oben verwendete Befehl zur Erstellung eines Archivs, mit Ausnahme der Option -x
, der die Option -c
ersetzt.
Um den Inhalt des Archivs in ein bestimmtes Verzeichnis zu extrahieren, verwenden wir -C
:
$ tar -xvf archive.tar -C /tmp
Dadurch wird der Inhalt von archive.tar
in das Verzeichnis /tmp
extrahiert.
$ ls /tmp stuff
Komprimieren mit tar
Der GNU Befehl tar
, der in Linux-Distributionen enthalten ist, kann ein .tar
Archiv erstellen und es dann mittels gzip
oder bzip2
in einem einzigen Befehl komprimieren:
$ tar -czvf name-of-archive.tar.gz stuff
Dieser Befehl würde eine komprimierte Datei mittels des Algorithmus gzip
(-z
) erzeugen.
Während gzip
am häufigsten verwendet wird, um .tar.gz
oder .tgz
Dateien zu erstellen, unterstützt tar
auch bzip2
. Dies erlaubt die Erstellung von bzip2
komprimierten Dateien, die oft als .tar.bz2
, .tar.bz
oder .tbz
Dateien bezeichnet werden.
Zu diesem Zweck ersetzen wir -z
für gzip
durch -j
für bzip2
:
$ tar -cjvf name-of-archive.tar.bz stuff
Um die Datei zu dekomprimieren, ersetzen wir -c
durch -x
, wobei x
für “extrahieren” steht:
$ tar -xzvf archive.tar.gz
gzip
ist schneller, aber es komprimiert im Allgemeinen etwas weniger, so dass Sie eine etwas größere Datei erhalten. bzip2
ist langsamer, aber es komprimiert ein bisschen mehr, so dass Sie eine etwas kleinere Datei erhalten. Im Allgemeinen sind gzip
und bzip2
jedoch praktisch dasselbe und beide funktionieren ähnlich.
Alternativ können wir gzip
oder bzip2
anwenden, indem wir den gzip
Befehl für gzip
Kompressionen und den bzip
Befehl für bzip
Kompressionen verwenden. Um zum Beispiel gzip
zu verwenden, benutzen wir:
gzip DATEI-ZUM-KOMPRIMIEREN
gzip
-
erzeugt die komprimierte Datei mit dem gleichen Namen, aber mit der Endung
.gz
. gzip
-
entfernt die Originaldateien nach der Erstellung der komprimierten Datei.
Der Befehl bzip2
funktioniert auf ähnliche Weise.
Zum Entpacken der Dateien verwenden wir entweder gunzip
oder bunzip2
, je nachdem, welcher Algorithmus zum Komprimieren einer Datei verwendet wurde.
Der Befehl cpio
cpio
steht für “copy in, copy out”. Es wird benutzt, um Archivdateien wie *.cpio
oder *.tar
Dateien zu verarbeiten.
cpio
führt die folgenden Operationen durch:
-
Kopieren von Dateien in ein Archiv.
-
Extrahieren von Dateien aus einem Archiv.
Es übernimmt die Liste der Dateien von der Standardeingabe (meistens die Ausgabe von ls
).
Um ein cpio
Archiv zu erstellen, verwenden wir:
$ ls | cpio -o > archive.cpio
Die Option -o
weist cpio
an, eine Ausgabe zu erzeugen. In diesem Fall ist die erzeugte Ausgabedatei archive.cpio
. Der Befehl ls
listet den Inhalt des aktuellen Verzeichnisses auf, der archiviert werden soll.
Zum Extrahieren des Archivs verwenden wir:
$ cpio -id < archive.cpio
Die Option -i
wird verwendet, um die Extraktion durchzuführen. Die Option -d
erstellt den Zielordner. Das Zeichen <
steht für die Standardeingabe. Die Eingabedatei, die extrahiert werden soll, ist archive.cpio
.
Der Befehl dd
dd
kopiert Daten von einem Ort zu einem anderen. Die Kommandozeilensyntax von dd
unterscheidet sich von vielen anderen Unixprogrammen. Es benutzt die Syntax option=value
für seine Kommandozeilenoptionen anstelle der GNU-Standardformate -option value
oder --option=value
:
$ dd if=oldfile of=newfile
Dieser Befehl würde den Inhalt von oldfile
in newfile
kopieren, wobei if=
die Eingabedatei darstellt und of=
sich auf die Ausgabedatei bezieht.
Note
|
Der Befehl |
dd
wird auch verwendet, um Daten in Groß-/Kleinschreibung zu ändern oder direkt auf Blockgeräte wie /dev/sdb
zu schreiben:
$ dd if=oldfile of=newfile conv=ucase
Dies würde den gesamten Inhalt von oldfile
in newfile
kopieren und den gesamten Text groß schreiben.
Der folgende Befehl sichert die gesamte Festplatte, die sich unter /dev/sda
befindet, in eine Datei namens backup.dd
:
$ dd if=/dev/sda of=backup.dd bs=4096
Geführte Übungen
-
Betrachten Sie die folgende Auflistung:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Welche Art von Dateien würde dieser Befehl ausgeben?
-
In welchem Verzeichnis beginnt die Suche?
-
-
Ein Benutzer möchte seinen Sicherungsordner komprimieren. Er verwendet das folgende Kommando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Welche Option fehlt, um die Sicherung mit dem
gzip
Algorithmus zu komprimieren?
Offene Übungen
-
Als Systemadministrator ist es erforderlich, regelmäßige Prüfungen durchzuführen, um speicherintensive Dateien zu entfernen. Diese Dateien befinden sich in
/var
und enden mit der Erweiterung.backup
.-
Notieren Sie den erforderlichen Befehl und verwenden Sie
find
, um diese Dateien zu finden: -
Eine Analyse der Größe dieser Dateien zeigt, dass sie von
100M
bis1000M
reichen. Vervollständigen Sie den vorhergehenden Befehl mit diesen neuen Informationen, so dass Sie diese Sicherungsdateien im Bereich von100M
bis1000M
finden können: -
Vervollständigen Sie schließlich diesen Befehl mit der Löschaktion, so dass diese Dateien entfernt werden:
-
-
Im Verzeichnis
/var
gibt es vier Sicherungsdateien:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Geben Sie mit
tar
den Befehl an, der eine Archivdatei mit dem Namendb-first-quarter-2018.backup.tar
erstellen würde: -
Geben Sie mit
tar
den Befehl an, der das Archiv erstellen und mittelsgzip
komprimieren würde. Beachten Sie, dass der resultierende Dateiname mit.gz
enden sollte:
-
Zusammenfassung
In diesem Abschnitt haben Sie gelernt:
-
Wie man Dateien mit
find
findet. -
Wie man Suchkriterien basierend für Zeit, Dateityp oder Dateigröße benutzt.
-
Wie man mit einem zurückgegebenen Resultat agiert.
-
Wie man Dateien mit
tar
archiviert, komprimiert und dekomprimiert. -
Wie man Archive mittels
cpio
verarbeitet. -
Wie mann Dateien mittels
dd
kopiert.
Lösungen zu den geführten Übungen
-
Betrachten Sie die folgende Auflistung:
$ find /home/frank/Documents/ -type d /home/frank/Documents/ /home/frank/Documents/animal /home/frank/Documents/animal/domestic /home/frank/Documents/animal/wild
-
Welche Art von Dateien würde dieser Befehl ausgeben?
Verzeichnisse.
-
In welchem Verzeichnis beginnt die Suche?
/home/frank/Documents
-
-
Ein Benutzer möchte seinen Sicherungsordner komprimieren. Er verwendet das folgende Kommando:
$ tar cvf /home/frank/backup.tar.gz /home/frank/dir1
Welche Option fehlt, um die Sicherung mit dem
gzip
Algorithmus zu komprimieren?Option
-z
.
Lösungen zu den offenen Übungen
-
Als Systemadministrator ist es erforderlich, regelmäßige Prüfungen durchzuführen, um speicherintensive Dateien zu entfernen. Diese Dateien befinden sich in
/var
und enden mit der Erweiterung.backup
.-
Notieren Sie den erforderlichen Befehl und verwenden Sie
find
, um diese Dateien zu finden:$ find /var -name *.backup
-
Eine Analyse der Grösse dieser Dateien zeigt, dass sie von
100M
bis1000M
reichen. Vervollständigen Sie den vorherigen Befehl mit diesen neuen Informationen, so dass Sie die Sicherungsdateien von100M
bis1000M
finden können:$ find /var -name *.backup -size +100M -size -1000M
-
Vervollständigen Sie schließlich diesen Befehl mit der Löschaktion, so dass diese Dateien entfernt werden:
$ find /var -name *.backup -size +100M -size -1000M -delete
-
-
Im Verzeichnis
/var
gibt es vier Sicherungsdateien:db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Geben Sie mit
tar
den Befehl an, der eine Archivdatei mit dem Namendb-first-quarter-2018.backup.tar
erstellen würde:$ tar -cvf db-first-quarter-2018.backup.tar db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-
Geben Sie mit
tar
den Befehl an, der das Archiv erstellen und mittelsgzip
komprimieren würde. Beachten Sie, dass der resultierende Dateiname mit.gz
enden sollte:$ tar -zcvf db-first-quarter-2018.backup.tar.gz db-jan-2018.backup db-feb-2018.backup db-march-2018.backup db-apr-2018.backup
-