UnixTools01 08
more basic tools
Hier einige weitere Kommandos, speziell für die Arbeit mit Dateien, die Sie oft benutzen werden
cat
$ cat file.txt erste Zeile der Datei file.txt zweite Zeile der Datei file.txt ... letzte Zeile der Datei file.txt
Das Program cat gibt den Inhalt der Datei file.txt auf dem Bildschirm aus, egal wie lang diese Datei ist. Sollte die Datei sehr lang sein, dann werden Sie ein Flimmern über dn Bilschhirm laufen sehen, den sie nicht so schnell lesen können, wie er auf dem Bildschirm erscheint. Dann brauchen Sie ein anderes Programm, z.B. das Programm more, dass den Inhalt der Datei Häppchenweise ausgibt, wie im nächsten Abschnitt beschrieben.
more
Das Kommando
$ more file.txt
gibt den Inhaltr der Datei file.txt auf dem Bildscvhirm aus, so ähnlich wie cat. Enthält die Datei jedoch mehr Zeilen, als auf einem Bildschirm passen, so gibt more (im Gegensatz zu cat) nur so viele Zeilen aus, wie auf den Bildschirm passen - und wartet danach, bis Sie die Leertaste drücken, danach kommen die nächsten Zeilen (maximal so viele, wie auf einen Bildschirm passen) usw. bis die Datei vollständig angezeigt wurde.
Für die Profis unter Ihnen:
- Solange die Datei noch nicht vollständig angezeigt wurde, zeigt more in der linken unteren Ecke an, wie viel Prozent des Inhalts Sie schon gesehen haben.
- Mit <Leerzeichen> blättern Sie eine Seite weiter
- Mit <Enter> wird genau eine weitere Zeile angezeigt
- Drücken Sie /, so können Sie danach ein Wort (genauer gesagt: Ein Text-Muster) angeben. more überspring dann alle Zeilen, bis es diesen Text (dieses Text-Muster) gefunden hat.
- Wenn Sie sehr neugierig sind, welche weiteren Möglichkeiten Ihnen more bietet, geben Sie ? ein, und dann werden Sie es erfahren
wc
Das Kommando wc (word count = Wörter zählen) liesst die angegebene Datei und zählt dabei, wie viele Worte es gesehen hat. Ebenso wird die Anzahl der Zeilen und die Anzahl der Buchstaben angegeben.
$gruenau4 jpr 14 ( ~ ) $ wc file.txt 48 96 405 file.txt
Sollte Sie von diesen drei Angaben nur eine interessieren, dann rufen Sie das Kommando wc mit einer geeigneten Option auf, und es wird sein Verhalten entsprechend ändern. Welche Optionen es gibt, erfahren Sie (wie bei den meisten andreen Kommandos auch, wenn Sie das Kommasndo mit der Option --help aufrufen.
$ gruenau4 jpr 13 ( ~ ) $ wc --help -c, --bytes Byteanzahl ausgeben -m, --chars Zeichenanzahl ausgeben -l, --lines Zeilenanzahl ausgeben -L, --max-line-length die Länge der längsten Zeile ausgeben -w, --words Wortanzahl ausgeben
Sie können das Kommando wc auch für mehr als eine Datei aufrufen, zum Beispiel mit 2 Dateien:
$gruenau4 jpr 16 ( ~ ) $ wc file.txt anotherfile.txt 48 96 405 file.txt 34 54 144 anotherfile.txt 82 150 549 insgesamt
grep
Sie haben eine wirklich lange Datei und Sie fragen sich, ob es irgendwo darin eine Zeile gibt, in der das Wort 'foobar' vorkommt? Dann hilft Ihnen das Programm grep. Wenn Sie das Kommando grep aufrufen, geben Sie zunächst das an, wonach Sie suchen (das Muster) und danach eine oder mehrere Dateien, die grep sich (in dieser Reihenfolge) ansehen soll.
$gruenau4 jpr 18 ( ~ ) $ grep 14 file.txt Zeile 14
Findet grep eine Zeile, in der (vielleicht nehen anderen Dingen) das gesuchte Muster steht, so gibt es diese Zeile aus.
Sollte grep mehrere Dateien durchsuchen, so gibt grep zusätzlich den Namen der Datei aus, in der es die gesuchte Zeile gefunden hat.
gruenau4 jpr 19 ( ~ ) $ grep 14 file.txt anotherfile.txt file.txt:Zeile 14
In Verbindung mit Wildcards ist dies sehr nützlich. Fragen Sie sich beispielsweise, in welcher *.txt -Datei wohl eine Zeile mit der Zeichenfolge 14 steht, dann spezifizieren Sie alle in Frage kommenden Dateien über eine Wildcard:
gruenau4 jpr 20 ( ~ ) $ grep 14 *.txt file.txt:Zeile 14
Zur Erinnerung: Bevor die Shell das Kommando grep ausführt, ersetzt es die wildcard '*.txt' durch die Namen aller Dateien, die auf die Wildcard *.txt passen. In diesem Fall sind dies alle Dateien ihres aktuellen Working Directories, die auf .txt enden. Grep wird dann alle diese Dateien nach Zeilen durchsuchen, die 14 enthalten. Findet es welche, so gibt es den Namen der Datei, sowie die gesamte gefundene Zeile aus. Im obigen Beispiel gibt es also nur eine Datei, die das gesuchte Muster enthält.
Q&E: Probieren Sie aus, was passiert, wenn das gesuchte Muster in gar keiner Datei enthalten ist.
tail
Manchmal interessieren Sie in einer (langen) Datei nur die letzten Zeilen. Das ist bei log-Dateien oft der Fall. Log-Dateien sind (ganz normale) Dateien, in die das Betriebssystem (oder ein anderes Programm) ständig neue Informationen schreibt. Ein Beispiel ist die Datei /var/log/boot.log. Würden Sie cat oder more verwenden, um sich diese Datei anzusehen, dann würden Sie zunächst die alten Einträge sehen und erst ganz am Schluss die neuestesn Einträge, die Sie vermutlich am meisten interessieren.
Das Programm tail gibt die letzten Zeilen einer Datei auf dem Bildschirm aus.
gruenau4 jpr 25 ( ~ ) $ tail /var/log/boot.msg <5>[ 9.037797] audit: type=1400 audit(1732520495.540:8): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/lib/nagios/plugins/check_procs" pid=2208 comm="apparmor_parser" <5>[ 9.038195] audit: type=1400 audit(1732520495.540:9): apparmor="STATUS" operation="profile_load" profile="unconfined" name="lsb_release" pid=2174 comm="apparmor_parser" <5>[ 9.038248] audit: type=1400 audit(1732520495.540:10): apparmor="STATUS" operation="profile_load" profile="unconfined" name="dovecot-anvil" pid=2188 comm="apparmor_parser" <5>[ 9.039610] audit: type=1400 audit(1732520495.544:11): apparmor="STATUS" operation="profile_load" profile="unconfined" name="/usr/bin/locate" pid=2186 comm="apparmor_parser" <6>[ 9.077229] ixgbe 0000:01:00.1: Multiqueue Enabled: Rx Queue count = 63, Tx Queue count = 63 XDP Queue count = 0 <6>[ 9.161269] ixgbe 0000:01:00.1: 32.000 Gb/s available PCIe bandwidth (5.0 GT/s PCIe x8 link) <6>[ 9.185162] XFS (dm-6): Ending clean mount <4>[ 9.187605] xfs filesystem being mounted at /home/tmp supports timestamps until 2038 (0x7fffffff) <6>[ 9.257114] ixgbe 0000:01:00.1: MAC: 3, PHY: 0, PBA No: H54049-002 <6>[ 9.257120] ixgbe 0000:01:00.1: ec:f4:bb:d5:a3:d2
Sie können tail auch mit der Option -f aufrufen. In diesem Fall gibt das Kommando wiederum die letzten Zeilen auf dem Bildschirem aus, aber es hrt damit nicht auf, sondern es überwacht die Datei weiterhin. Sobald neue Zeilen in der Datei hinzukommen, wenden audch diese auf dem Bildschirm ausgegeben. So sind Sie immer auf dem aktuellsten Stand, wie die letzten Zeilen der von Ihnen angegebenen Dateien aussehen. Wollen Sie das Kommando beenden, drücken Sie ^C
gruenau4 jpr 26 ( ~ ) $ tail -f /var/log/boot.msg
head
Wie tail, nur nicht die letzten Zeilen der Datei, sondern die ersten Zeilen der Datei, also der Anfang. Mit der Option -n <number> knnen Sie sagen, dass Sie <number> viele Zeilen ausgegeben haben wollen.
Beispielsweise gibt dieses Kommando die ersten 5 Zeilen der Datei /var/log/boot.msg aus.
gruenau4 jpr 29 ( ~ ) $ head -n 5 /var/log/boot.msg <5>[ 0.000000] Linux version 5.14.21-150500.55.83-default (geeko@buildhost) (gcc (SUSE Linux) 7.5.0, GNU ld (GNU Binutils; SUSE Linux Enterprise 15) 2.43.1.20240828-150100.7.49) #1 SMP PREEMPT_DYNAMIC Wed Oct 2 08:09:07 UTC 2024 (0d53847) <6>[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-5.14.21-150500.55.83-default root=/dev/mapper/vg0-root splash=silent preempt=full mitigations=auto quiet security=apparmor <6>[ 0.000000] BIOS-provided physical RAM map: <6>[ 0.000000] BIOS-e820: [mem 0x0000000000010000-0x000000000009ffff] usable <6>[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000c667dfff] usable
Übrigens, die Option -n gibt es bei tail ebenfalls.
find
Das Program find (find = finden) sucht nach Dateien, die eine bestimmte Eigenschaft haben. Das Kommando ist sehr mächtig, und es gibt eine lange Liste von Eigenschaften, nach denen Sie suchen können. Die vieleiocht einfachte Anwendung von find ist die, dass Sie in dem Verzeichnis <dir> nach einer Datei mit dem Namen <name> suchen. Wird diese Datei gefunden, so wird der vollständige Path Name der Datei ausgegeben
$ find /home .bashrc /home/jpr/.bashrc /home/medvediu/.bashrc /home/guest/.bashrc
In diesem Beispiel durchsucht dass Kommando find das Verzeichnis /home und alle Unzerverzeichnisse (und deren Unterverzeichnisse, usw.) nach Dateien mit dem Namen .bashrc. Findet es welche, so gibt es denen vollständigen Path Name aus.