UnixTools01 08

From
Jump to navigation Jump to search

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.

Unixtools 01 more.png

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.

Expert Tipp: grep muster $(find / -name patern -print)