Erfahrene Linux-Nutzer schwören auf flexible Kommandozeilentools, mit denen sie manche Aufgabe schneller bewältigen als in grafischen Programmen. Wir stellen interessante Anwendungen und Aufrufparameter vor, um auch Einsteiger zu einem Ausflug in die Shell zu ermutigen.
Tipp: Welcher Tag ist heute?
Das Kommando date zeigt nicht nur den aktuellen Tag und die Uhrzeit an, sondern hilft Administratoren auch dabei, die Systemzeit zu verändern. Letzteres erfordert Root-Rechte. Als normaler Anwender tippen Sie date ohne weitere Aufrufparameter und sehen dann beispielsweise eine Ausgabe wie diese hier:
$ date Fr 19. Jun 11:07:01 CEST 2015
Der Befehl bietet ein paar praktische Optionen, mit denen Sie die Ausgabe formatieren. So verrät %b beispielsweise den Namen des Monats in Kurzform, %B den Monat (ausgeschrieben), %H die Stunde im 24-Stunden-Format, %I die Stunde im 12-Stunden-Format, %a den Wochentag in Kurzform, und mit %A zeigen Sie den Wochentag in Langform an. Vor die Formatierungsoptionen stellen Sie ein Pluszeichen. Den Wochentag bringen Sie also so in Erfahrung:
$ date +%A Freitag
Tipp: “umask”: Standardeinstellung für Zugriffsrechte
Wenn Sie neue Dateien und Verzeichnisse erstellen, erhalten diese automatisch bestimmte Zugriffsrechte für Sie selbst, die Mitglieder Ihrer Standardgruppe sowie sonstige Benutzer. Für die Vorgabe ist die “file mode creating mask” zuständig, ein Wert, den die Shell intern speichert und den Sie über das in die Shell eingebaute Kommando umask ändern können. Geben Sie am Prompt einfach nur umask ein, um die aktuelle Konfiguration auszulesen:
$ umask 0022
Diese vierstellige Oktalzahl zeigt nicht an, welche Rechte gesetzt, sondern welche entzogen werden. (Zu Zugriffsrechten und der Umrechnung in Oktalzahlen lesen Sie einen ausführlichen Artikel in unserer Schwesterzeitschrift LinuxUser [1].) Das bedeutet, dass bei Verzeichnissen, die in der Voreinstellung 0777 (-rwxrwxrwx) erhalten, jeweils für die Gruppe und alle anderen 2 (also die Schreibrechte) abgezogen werden (= 0755):
$ mkdir test $ ls -ld test drwxr-xr-x 2 huhn huhn 4096 Jun 19 12:41 test/
Gleiches gilt für Dateien. Sind diese normalerweise mit 0666 ausgestattet, erhalten sie nach Abzug der umask entsprechend 0644 (rw-r–r–):
$ touch datei $ ls -l datei -rw-r--r-- 1 huhn huhn 0 Jun 19 13:00 datei
Um die Voreinstellung zu verändern, geben Sie hinter umask einfach einen neuen Wert an. Ziemlich restriktiv ist beispielsweise 0077, was Dateien und Verzeichnisse nur noch für den Eigentümer verfügbar macht:
$ umask 0077 $ touch datei $ ls -l datei -rw------- 1 huhn huhn 0 Jun 19 13:10 datei $ mkdir test $ ls -ld test drwx------ 2 huhn huhn 4096 Jun 19 12:41 test/
Eine so gesetzte umask ist nur für die Dauer der aktuellen Shell-Sitzung gültig. Um sie dauerhaft zu verändern, tragen Sie den umask-Aufruf aus dem letzten Listing in die Datei ~/.bashrc ein. Lesen Sie die veränderte Konfiguration entweder mit source ~/.bashrc neu ein oder melden Sie sich ab und wieder an.
Tipp: “mkdir”: Rechte für Verzeichnis setzen
Wenn Sie mit dem Befehl mkdir (“make directory” = “erzeuge Verzeichnis”) ein neues Verzeichnis erstellen, erhält dieses in der Voreinstellung die durch umask gesetzten Rechte (siehe voriger Tipp). Alternativ manipulieren Sie diese nachträglich mit dem Kommando chmod, wie es ein älterer Artikel im LinuxUser [1] beschreibt. Diesen Arbeitsschritt können Sie einsparen, indem Sie die mkdir-Option -m (mode) beim Aufruf verwenden. Dahinter geben Sie wieder eine Oktalzahl an, welche die gewünschten Rechte definiert:
$ mkdir -m 0700 test $ ls -ld test drwx------ 2 huhn huhn 4096 Jun 19 13:14 test/
Tipp: “which”: Ausführbare Programme finden
Sie möchten gerne wissen, wo genau im Dateisystem ein Programm liegt? Nichts leichter als das: Der Befehl which hilft bei der Suche nach dem Pfad. Dazu geben Sie hinter dem Kommando den Namen der ausführbaren Programmdatei an. which durchforstet dann alle Verzeichnisse, die in der Umgebungsvariable PATH gespeichert sind, und schreibt das Ergebnis auf die Standardausgabe (Abbildung 1).
Tipp: “whereis”: Programmpfade, Quellen und Manpages
Der Befehl whereis arbeitet ähnlich wie which aus dem vorigen Tipp, ist aber etwas auskunftsfreudiger. Er verrät zusätzlich zum Pfad, in welchem Verzeichnis die Quellen liegen und wo sich die Manpage befindet (Abbildung 2). Mit verschiedenen Aufrufparametern schränken Sie die Ausgabe ein. Geben Sie beispielsweise -m an, sucht whereis nur nach den Handbuchseiten:
$ whereis -m ls ls: /usr/share/man/man1/ls.1.gz
Verwenden Sie anstelle von -m im Aufruf -b, sehen Sie nur den Pfad zum ausführbaren Programm; -s findet nur die Sourcen (Quellen).

Abbildung 2: Das Kommando “whereis” gibt neben dem Programmpfad auch den Aufenthaltsort der Manpage und (falls vorhanden) das Verzeichnis der Quelldateien an.
Tipp: “ls”-Ausgabe sortieren
Mit dem Kommando ls listen Sie den Inhalt von Verzeichnissen auf. In der Voreinstellung sortiert der Befehl die Ausgabe alphabetisch:
$ ls artikel.txt ideen.txt whereis.png which.png
Möchten Sie stattdessen lieber die größte Datei zuerst sehen, geben Sie hinter dem Kommando den Parameter -S an:
$ ls -S whereis.png which.png artikel.txt ideen.txt
Noch informativer wird die Sache, wenn Sie ls dazu auffordern, die Größe selbst mit anzuzeigen (-s). Hängen Sie zusätzlich -h an, um die Auskunft in etwas besser lesbaren Maßeinheiten zu erhalten:
$ ls -Ssh 60K whereis.png 56K which.png 8,0K artikel.txt 4,0K ideen.txt
Außer der Angabe K (KByte) können Sie hier auch Beschriftungen wie G (GByte) oder M (MByte) finden.
Tipp: “ls”-Ausgabe einschränken
Das Kommando ls versteht auch Wildcards wie z. B. das Sternchen *. Um alle Dateien aufzulisten, die auf .png enden, geben Sie beispielsweise ls *.png ein. Möchten Sie auf diese Weise alle Dateien aus dem Ordner /etc auflisten, die mit der Zeichenkette cron beginnen, ist ls /etc/cron* allerdings eine schlechte Idee. Im Verzeichnis /etc liegen außer der Datei /etc/crontab einige Ordner, die mit cron beginnen. Die Bash interpretiert den Befehl so, dass sie auch die Inhalte dieser Unterverzeichnisse anzeigt. Daher bringt ls eine praktische Option mit, um diese zu unterdrücken. Geben Sie einfach ls -d /etc/cron* ein, und Sie sehen nur die Datei- und Verzeichnisnamen (Abbildung 3).

Abbildung 3: Mit dem “ls”-Schalter “-d” unterdrücken Sie die vollständige Ausgabe von Unterverzeichnissen.
Tipp: Vim: Groß- und Kleinschreibung beim Suchen
In der Voreinstellung arbeitet der Texteditor “case-sensitive” bei der Suche, das heißt er unterscheidet zwischen Groß- und Kleinschreibung. Wenn Sie also z. B. hinter dem Schrägstrich / (für die Vorwärtssuche) oder hinter dem Fragezeichen ? (für die Rückwärtssuche) den Begriff Huhn eingeben, zeigt Vim nur Treffer mit genau dieser Schreibweise an. Möchten Sie auch huhn (oder HuHN, HUHN und weitere Varianten) mit einbeziehen, wechseln Sie mit [Esc] in den Befehlsmodus und geben Folgendes ein:
:set ignorecase
Zurück zur Standardeinstellung geht es so:
:set noignorecase
Um die ignorecase-Einstellung dauerhaft zu nutzen, tragen Sie in die Vim-Konfigurationsdatei ~/.vimrc die Anweisung set ignorecase (diesmal ohne führenden Doppelpunkt) ein.
Tipp: Vim: Richtig suchen und ersetzen
Mit verschiedenen Kommandos ersetzen Sie im Texteditor einmal, mehrfach, automatisch oder mit Rückfrage Begriffe in Ihren Dokumenten. Alle in diesem Tipp gezeigten Kommandos geben Sie im Befehls- und nicht im Eingabemodus ein. Angenommen, Sie möchten Huhn durch Hahn ersetzen. Tippen Sie :s/Huhn/Hahn, tauscht Vim den ersten Treffer in der aktuellen Zeile aus. Kommt dort kein Huhn vor, meldet der Editor am unteren Rand:
E486: Muster nicht gefunden: Huhn
Um alle Fundstellen in der aktuellen Zeile zu erwischen, setzen Sie hinter den Befehl einen weiteren Schrägstrich und ein g (global):
:s/Huhn/Hahn/g
Sich auf diese Weise von Zeile zu Zeile zu hangeln, ist etwas mühselig. Daher können Sie vor das s ein Prozentzeichen setzen, um anzudeuten, dass Sie das ganze Dokument meinen. Vorsicht: Auch hier erwischt :%s/Huhn/Hahn wieder nur den ersten Treffer in jeder Zeile, und Sie müssen explizit angeben, dass Sie alle meinen:
:%s/Huhn/Hahn/g
Sie möchten auf Nummer sicher gehen und vor jedem Wörtertausch eine Nachfrage sehen? Kein Problem: Tippen Sie :s/Huhn/Hahn/c für den ersten Treffer einer Zeile, :s/Huhn/Hahn/gc für alle Treffer der aktuellen Zeile, :%s/Huhn/Hahn/c für den jeweils ersten Treffer einer Zeile im gesamten Dokument sowie :%s/Huhn/Hahn/gc für alle Vorkommen im Text. Am unteren Rand erscheint für jede Fundstelle nun die Frage ersetze durch ... (Abbildung 4). Sie haben nun die Wahl: [Y] bestätigt, [N] verneint, [A] sagt “ja” zu allen Ersetzungen, und [Q] bricht den Vorgang ab. Tippen Sie [L], um dem aktuellen Tausch zuzustimmen und danach das Suchen und Ersetzen zu beenden; [Strg]+[E] blättert nach oben und [Strg]+[Y] nach unten.

Abbildung 4: Vim fragt auf Wunsch nach, ob Sie wirklich einen Begriff durch einen anderen ersetzen möchten.
Infos
[1] Artikel zu Zugriffsrechten: Heike Jurzik, “Rechte und Pflichten – meine oder Deine Datei?”, LinuxUser 10/2000, S. 93 ff., http://linux-community.de/452

