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
.
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:
Die Daten und Einstellungen mehrerer Nutzer sind streng voneinander getrennt. Rückwirkungen des einen Nutzers auf den anderen sind ausgeschlossen.
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
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«.