Befehlszeile

Vorzüge

Unter Mac OS, Microsoft Windows und GNU Linux können alle Anwenderaufgaben intuitiv mit Hilfe grafischer Oberflächen erledigt werden. Warum sollte man sich also um die Befehlszeile kümmern?

Universalität

Mit jeder neuen Version eines Betriebssystems, einer Desktopumgebung oder eines grafischen Anwenderprogramms variiert die Vorgehensweise, wie eine bestimmte Aufgabe erledigt wird.

Beispiel: Sie möchten Unterschiede zwischen zwei Text-Dateien finden.

In einem Forum finden Sie dazu »Öffnen sie das Programm soundso, klicken Sie hier, wählen Sie das, und so weiter.« Sie haben aber eine neuere Version des Tools und die Reihenfolge stimmt nicht mehr. Die Anleitung schlägt fehl.

Die Lösung der Aufgabe für die Befehlszeile lautet seit den 70er Jahren unverändert:

diff datei_1.txt datei_2.txt

Viele Autoren von Blogs, Wikis oder Forenbeiträgen schreiben deshalb so, dass ihre Anleitungen auf der Befehlszeile nachvollzogen werden können. Die Wahrscheinlichkeit, dass die Anleitung funktioniert, ist damit sehr viel höher.

Effizienz

Angenommen, Sie haben ein Verzeichnis mit vielen Unterverzeichnissen, in denen sich Bild-Dateien in verschiedenen Datei-Formaten befinden. Sie möchten alle Dateien mit der Dateiendung .raw in das Verzeichnis raw_img kopieren.

In einem Datei-Explorer können Sie alle Verzeichnisse durchsuchen und die Dateien mit der Maus per Drag and Drop in das Ziel-Verzeichnis kopieren. Je nach Verzeichnistiefe kann das einige Stunden dauern.

Alternativ können Sie die folgende Befehlszeile ausführen, und haben die Aufgabe in wenigen Sekunden erledigt:

find -name *.raw -exec cp {} raw_img/ \;

Sie müssen diesen komplizierten Befehl übrigens nicht auswendig lernen! Auf der Befehlszeile können Sie nach Befehlen suchen und sich Hilfetexte und Beispiele zeigen lassen. Das dauert in der Regel auch nicht viel länger, als in den Menüs einer grafischen Nutzeroberfläche nach einer bestimmten Funktion zu suchen.

Befehlszeile starten

Auch bei der Wahl des Befehlszeileninterpreters hat man unter Linux die Wahl. Die Unterschiede werden hier aber keine Rolle spielen. Starten Sie einfach das Programm, dass im Menü ihrer Desktopumgebung als »Terminal« bezeichnet wird. Unter Ubuntu funktioniert auch die Tastenkombination Strg + Alt + T.

Schwarzes Fenster mit Eingabeaufforderung.

Der Befehlszeileninterpreter Gnome-Terminal.

Programme aufrufen

Tippen Sie die ersten Buchstaben irgendeines Programms, zum Beispiel fir und drücken Sie die Tabulatortaste. Die Shell vervollständigt zu firefox. Drücken Sie die Eingabetaste, um den Webbrowser zu starten.

Sie hätten dem Befehl firefox auch einen Parameter wie fh-muenster.de mitgeben können:

firefox fh-muenster.de

Der laufende Firefox-Prozess blockiert jetzt das Befehlszeilen-Fenster. Um das Fenster wieder frei zu bekommen, kann man den Prozess zunächst mit Strg + z anhalten und dann mit bg für »background« im Hintergrund weiterlaufen lassen.

Man hätte den Prozess auch direkt im Hintergrund starten können:

firefox fh-muenster.de &

Eigene Prozesse auflisten:

ps

Einen Prozess stoppen (nnnnn ist die Prozess-ID, die man mit ps herausfindet):

kill nnnnn

Übersichtlicher als der ps Befehl ist vielleicht jobs.

Bewegen im Verzeichnisbaum


Anzeigen des Verzeichnisinhalts (»list«):

ls

Auch versteckte Dateien anzeigen:

ls -a

Berechtigungen und andere Dateimerkmale anzeigen:

ls -all

Berechtigungen anzeigen, Konfigurationsdateien aber nicht anzeigen:

ls -l

In ein Verzeichnis wechseln (»change directory«):

cd Dokumente/

Die Tabulatortaste vervollständigt auch Verzeichnis-Namen!

Von irgendwoher ins Heimatverzeichnis wechseln:

cd

Ins Wurzelverzeichnis wechseln:

cd /

Ins letzte Verzeichnis zurückwechseln:

cd -

Verzeichnisstruktur

Hardware-Unabhängigkeit

Unter Windows bildet die Verzeichnisstruktur die Hardware ab. Das heißt, jede Hardwarekomponente bekommt einen Laufwerksbuchstaben. In unixoiden Betriebssystemen, wie Apple OS, Android oder Linux findet man eine universellere Verzeichnisstruktur: Die Hardwarekomponenten werden in eine immer gleiche Verzeichnisstruktur »eingehängt«. Völlig unabhängig von der Hardware, gibt es also immer ein Root (Wurzel) Verzeichnis, welches von einem Schrägstrich / symbolisiert wird. Darin befinden sich die Systemverzeichnisse wie bin, boot, sys, … und das home Verzeichnis, in dem jeder Nutzer ein Verzeichnis findet, das seinen Nutzernamen trägt. Auf der Hardwareseite kann jedes dieser Verzeichnisse eine Festplatte, ein Netzlaufwerk, eine Partition oder ein noch zu erfindendes Gerät sein.

/
|--bin
|--boot
|--..
|--dev
|--..
|--home
|  |--Jule
|  |  |--Fotos
|  |  |--Bilder
|  |  `--Dokumente
|  |--Thea
|  `--Lene
|--sys
`--var

Im Beispiel könnte das Wurzelverzeichnis (/) zusammen mit den Systemverzeichnissen auf einer Partition einer Notebook-Festplatte liegen. Als home könnte eine zweite Partition eingehängt (gemountet) worden sein. Als Bilder wurde vielleicht ein Netzlaufwerk eingehängt.

Ein besonderes Verzeichnis ist dev für »Devices«. In unixoiden Betriebssystemen wird jedes Gerät als Datei abgebildet. Normalerweise muss Sie das nicht kümmern, aber wenn Sie zum Beispiel einen Microcontroller programmieren möchten oder Geräte wie ein Digitalmultimeter manuell auslesen wollen, dann tauchen die Geräte hier auf. Die Bibliotheken oder Programme, die sie dazu nutzen, verlangen dann den Pfad /dev/geraetedatei/ als »Portname«.

Superuser

Schreibberechtigung hat man als Nutzer nur für sein Home-Verzeichnis und nicht für die Systemverzeichnisse. Vom Nutzer aufgerufene Schadsoftware kann am System keinen Schaden anrichten – allerdings wohl an den Nutzerdaten im Home-Verzeichnis.

Wenn ein Nutzer Änderungen an den Systemdateien vornehmen möchte, kann er das nur mit »Superuser«-Rechten. Dazu stellt man dem Befehl, den man ausführen möchte, den Befehl sudo voran. Das ist zum Beispiel notwendig, wenn man systemweit Software installieren möchte. Bevor der Befehl ausgeführt wird, fragt das System nach dem Superuser-Passwort.

Konfigurationsdateien

Einstellungen können Nutzerprogramme nur ins Home-Verzeichnis schreiben. Die Konfigurations-Dateien und -verzeichnisse beginnen standardmäßig mit einem Punkt. Im Datei Explorer sind sie standardmäßig ausgeblendet. Oben haben wir diese Dateien schon mit ls -a aufgelistet.

Dass alle Konfigurationsdaten im Nutzerverzeichnis liegen, hat zwei Vorteile:

  1. Die Daten und Einstellungen mehrerer Nutzer sind streng voneinander getrennt. Rückwirkungen des einen Nutzers auf den anderen sind ausgeschlossen.

  2. Auch nach einer vollständigen Neuinstallation bleiben alle Nutzerdaten und Einstellungen erhalten, solange das Homeverzeichnis erhalten bleibt.

Dateioperationen

Ein neues Verzeichnis mit dem Namen »data« anlegen (»make directory«):

mkdir data

Ein leeres Verzeichnis löschen (»remove directory«):

rmdir data

Eine leere Textdatei mit dem Namen data.txt anlegen:

touch data.txt

Eine Datei löschen:

rm data.txt

Ein Verzeichnis mit Inhalt erstellen und löschen:

mkdir data
touch data/data.txt
rm -r data

Der Parameter -r steht für »rekursiv«.

Eine Datei umbenennen oder verschieben (»move«):

touch data.txt
mv data.txt Data.txt

Hier wird der erste Buchstabe durch einen Großbuchstaben ersetzt. Im Gegensatz zu Windows unterscheidet Linux Groß- und Kleinschreibung.

Die Ausgabe eines beliebigen Programms in eine neue Datei umleiten:

lscpu > cpu.info

Ein doppeltes Größer-als-Zeichen >> hängt die Ausgabe an eine bestehende Datei an.

Den Inhalt der Datei ansehen:

less cpu.info

Mit q verlassen Sie die Ansicht wieder.

Nur die ersten Zeilen ansehen:

head cpu.info

Vergessen Sie nicht, die Tabulatortaste zu nutzen, wenn Sie Befehle oder Dateinamen eingeben!

Nur die letzten Zeilen ansehen:

tail cpu.info

Alle Dateien löschen, außer die Quellcode-Dateien (hier LaTeX Dateien):

rm *[!'.tex']

Paketmanagement

Die Installation von Software geht über die Befehlzeile besonders einfach. In vielen Fällen lautet das Muster der Befehlseingabe:

sudo name_des_paketmanagers install paketname

Zum Beispiel

sudo apt install zim

installiert ein schönes Desktop-Wiki in Ubuntu.

Oder

pip install numpy

nutzt das Python Paketverwaltungsprogramm pip um die Programmbibliothek numpy zu installieren. Zuvor muss pip vielleicht mit apt installiert werden.

Paketquellen auf den neuesten Stand bringen:

sudo apt update

Nach einem Paket suchen:

sudo apt search texmaker

Hilfe

Den Begriff »Text Editor« in den Kurzbeschreibungen der Programme finden:

apropos 'text editor'

Handbuch des Befehls find lesen:

man find

Man steht für »Manual«. Während der Handbucheintrag angezeigt wird, können Sie durch Eingabe des Schrägstriches, gefolgt von einem Suchbegriff und der Eingabetaste, nach Begriffen suchen:

/filename + Eingabetaste

springt zur Erläuterung der Option -name. Ganz unten auf der Handbuch-Seite finden sich noch ein paar Beispiele, so auch ein Beispiel für die Option -exec (siehe Abschnitt Effizienz). Mit q schließt man das Handbuch.

Viele Programme zeigen bei Aufruf mit der Option --help einen kurzen Hilfetext an. Oft geht das schneller als durch das Handbuch scrollen.

History

Das Befehlszeilenprogramm macht alle jemals eingegebenen Befehle in der »History« verfügbar. Mit der Pfeil-nach-oben Taste können Sie ältere Befehle aufrufen und erneut ausführen.

Wenn Sie vor langer Zeit einen komplexen Befehl eingegeben haben, sich jetzt aber nicht mehr genau erinnern können, drücken Sie Strg + r. Geben Sie dann einen Suchbegriff ein, zum Beispiel »find«. Wird ein anderer Befehl gefunden, drücken Sie solange Strg + r, bis der gesuchten Befehl auftaucht. Strg + g bricht die Suche ab.

Berechtigungen

Bei Eingabe von ls -all oder ls -l haben Sie gesehen, dass Dateien und Verzeichnisse eine Reihe von Dateirechten in Form der Buchstaben r, w, und x besitzen:

-rw-rw-r--  1 peter user  1599 Mär 10 07:41 cpu.info

Diese Buchstaben stehen für read (r), write (w) und execute (x). Die Rechte werden getrennt für die drei Gruppen »Besitzer«, »Gruppe« und »Sonstige« vergeben. Die Datei »cpu.info« darf also vom Besitzer »peter« und von der Gruppe »user« geändert werden. Andere Nutzer dürfen die Datei nur lesen. Ausführbar ist die Datei nicht.

Wofür sind die Dateirechte wichtig?

Datei ausführen

Angenommen, Sie haben einen komplizierten Befehl recherchiert, den Sie sich nicht gut merken können. Ein Beispiel ist der folgende Ghost-Script Befehl, der ein PDF komprimiert:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

Sie können diesen Befehl in eine Datei schreiben und diese unter /home/nutzername/bin/ speichern. Sie geben der Datei den einfach zu merkenden Namen compresspdf.sh. Damit Sie ihr Shell-Skript mit beliebigen Dateinamen aufrufen können, setzen Sie statt der Namen der Ein- und Ausgabedateien Platzhalter ein:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$2 $1

Sie könnten ihr Skript jetzt in einem beliebigen Verzeichnis aufrufen:

compresspdf.sh in.pdf out.pdf

Die Konsole würde mit Keine Berechtigung antworten, da die Datei nicht als ausführbar markiert ist. Dieses Recht fügen Sie mit

chmod +x compresspdf.sh

hinzu. Jetzt funktioniert der oben stehende Aufruf ihres kleinen Skripts.

Wenn Sie nicht möchten, dass jeder das Skript ausführen darf, können Sie die Rechte genauer vergeben. Dazu übergeben Sie chmod für jede Gruppe drei Bit (Recht ein oder aus). Sie übergeben die Bits aber nicht in Form von drei Nullen oder Einsen, sondern als Dezimalwert einer drei-Bit-Binärzahl.

Beispiel:

rwx r-x r-- --> Diese Rechte möchten Sie vergeben.
111 101 100 --> Diese Bits möchten Sie setzen.
421 401 400 --> Wert der Bits.
7   5   4   --> Wert der drei Bit Binärzahl.

Aufruf von chmod:

chmod 754 compresspdf.sh

Dateien teilen

Auf Mehrbenutzer-Systemen, wie unserem Hochschul-Cluster möchten Sie vielleicht Dateien mit anderen Nutzern teilen. Es genügt nicht, diese Dateien in ein gemeinsame Verzeichnis zu kopieren. Sie müssen auch die Zugriffsrechte ändern. Meist genügt:

chmod 666 *

Womit die folgenden Rechte gesetzt werden:

rw- rw- rw-

Informationen anzeigen

Prozesse und deren Ressourcenverbrauch auflisten:

top

Netzwerkkonfiguration auflisten, unter anderem die IP-Adresse:

ifconfig

Drucken

Eine Datei drucken (Drücken Sie nach Eingabe von -P die Tabulatortaste, um eine Liste der installierten Drucker zu sehen):

lpr -P Druckername Dateiname

Versionskontrolle mit Git

Ein Git-Repository clonen:

git clone https://git.fh-muenster.de/pv238554/open-source-software-in-studium-und-lehre.git

Lokale Kopie des Git-Repositories updaten:

git pull

Entfernte Kopie updaten:

git add .
git commit -m "Kurzer Kommentar."
git push

PDF-Dokumente bearbeiten

Einzelne PDF-Dokumente zusammenfügen:

pdftk *.pdf cat output gesamt.pdf

Seite 13 aus einem PDF-Dokument entfernen:

pdftk in.pdf cat 1-12 14-end output out.pdf

Alle Seiten eines PDF-Dokuments um 90 Grad nach rechts drehen:

pdftk in.pdf rotate 1-endright output out.pdf

Textverarbeitung

Anzahl der Zeilen, Wörter und Zeichen in einer Textdatei ermitteln (»word count«):

wc textdatei.txt

Shell-Expansion

Dateien für eine Reihe von Jahren anlegen:

mkdir {2020..2015}

Netzwerk

Testen, ob eine Verbindung zu einem bestimmten Rechner im Netz besteht:

ping fh-muenster.de

Daten über eine Netzwerkverbindung sicher von einem auf einen anderen Rechner kopieren:

scp username@192.168.1.100:/home/peter/data.txt ./

Daten aus dem Netz herunterladen:

wget https://files.fosswire.com/2007/08/fwunixref.pdf

Befehle verknüpfen (Pipe |)

Ausgabe des einen Programms als Input an ein weiteres Programm senden, Beispiel:

pdftk --help | less

Wer jetzt noch mehr erfahren möchte, folge den Empfehlungen im Kapitel »Material«.