This is an old revision of the document!
Kommandozeile (= bash = git-bash)
Auf der Kommandozeile (auch Terminal oder Konsole oder bash genannt), können per Tastatureingaben Programme gestartet werden, kann im Dateisystem navigiert werden, können Dateien manipuliert werden (kopieren, umbenennen, verschieben) und kann eigentlich alles gemacht werden, was auf einem Computer möglich ist.
Das mag auf den ersten Blick kompliziert erscheinen, hat aber einige Vorteile:
- Mit der Tabulator-Taste können Befehle oder Dateinamen vervollständigt werden (auto-complete) bzw. Vorschläge eingeholt werden - dazu die Tabulator-Taste eventuell mehrfach drücken. Angezeigt werden dann mögliche Verlängerungen der aktuellen Eingabe (etwas existierende Dateien oder Verzeichnisse, die mit einer bereits eingegebenen Zeichenfolge starten).
- Kommandos können einfach wiederholt werden (z.B. mit Pfeiltaste nach oben, mehrfaches Drücken dieser Pfeiltaste liefert länger zurückliegende Befehle).
- Befehle, die man oft verwendet, kann man mit
aliasin der Datei.bashrcspeichern. Man kann auch ganze Befehlsfolgen in Skripten/Programmen speichern. - Es kann mit vielen Dateien auf einmal gearbeitet werden, z.B. durch Verwendung von Wildcards wie
*,?, oder mit geeigneten Schleifen. - Nachhaltiges Lernen:
bash(die Kommandozeile, die wir einsetzen) und die gängigsten Kommandos haben sich in den letzten 30 Jahren kaum verändert und werden es auch in Zukunft nicht tun. - Sieht aus wie im Hacker-Film
Grundlegende Struktur eines Kommandos
Die Struktur eines bash-Kommandos ist folgende:
command arg1 arg2 arg3 …
wobei
commandder Name eines Befehls (z.B.cd) oder eines Programms ist (wie z.B.pythonoderls).arg1etc. die Argumente sind. Je nach Befehl können unterschiedlich viele (oder auch keine) Argumente angegeben werden.- Typischerweise sind Argumente Datei- oder Ordnernamen oder zusätzliche Optionen.
- Der Befehl bzw. das Programm werden im aktuellen Verzeichnis (working directory) ausgeführt. Alle Datei- und Verzeichnisangaben, die nicht mit
/beginnen, beziehen sich auf das aktuelle Verzeichnis.
bash-Kommandos werden mit der Return-Taste abgeschickt.
Beispiele:
cd /c/ofi4XXX/ unzip adventurequest.zip python guide.py
Kommandozeilenargumente werden durch Leerschläge getrennt. Das ist ein Problem, wenn Dateinamen Leerschläge enthalten. Diese müssen dann entweder durch Backslashes geschützt werdem oder der ganze Dateinamen muss zwischen Anführungszeichen (doppelte oder einfache) geschrieben werden. Z.B.
cd "OneDrive - xyz Blabla" cd OneDrive\ -\ xyz\ Blabla
Die Tabulatortaste kann zur Ergänzung benutzt werden, wandelt dabei aber immer in die zweite Version mit Backslashes um
Auswahl einiger Befehle und Programme
ls (list files)
ls zeigt die Dateien im aktuellen Verzeichnis an. Nützliche Optionen:
ls -aalle Dateien anzeigen (auch versteckte)ls -lZusätzliche Informationen anzeigen.ls -ltrDateien nach Datum/time (-t) in umgekehrter Reihenfolge/reverse (-r) anzeigen. So wird die neueste Datei zuunterst angezeigt.ls -lhSrDateien nach Grösse/size (-S) in umgekehrter Reihenfolgen (-r) in «human readable format» (-h) anzeigen. Damit erscheinen die grössten Dateien zuunterst (praktisch zum Aufräumen).
cd (change directory)
cd wechselt das aktuelle Verzeichnis.
- Ohne Argument (einfach
cdalleine) wechselt ins Home-Verzeichnis, unter Windows typischerweise/c/Users/benutzername/, unter Linux/MacOS/home/benutzername. cd ..wechselt ins Elternverzeichnis (eine Ebene zurück).cd informatikwechselt ins Unterverzeichnisinformatik(falls dieses existiert).cd informatik/jokerchainwechselt zwei Verzeichnisse auf einmal.
mkdir (make directory)
mkdir legt ein neues Verzeichnis an:
mkdir testLegt im aktuellen Verzeichnis ein neues Verzeichnistestan.mkdir -p alles/auf/einmalLegt verschachtelte Verzeichnisse auf einmal an (anstattmkdir alles,cd alles,mkdir auf,cd auf,mkdir einaml,cd ../..)
rmdir (remove directory)
rmdir löscht ein leeres Verzeichnis
rmdir testLöscht das leere Verzeichnis test im aktuellen Verzeichnis. Schlägt fehl und tut nichts, wenn das Verzeichnis nicht leer ist.
pwd (print working directory)
pwd zeigt das aktuelle Verzeichnis an. Dieses wird normalerweise schon automatisch auf der Kommandozeile angezeigt.
python
pythonstarted den interativen Python-Interpreterpython hello.pystartet das Pythonprogrammhello.py, falls dieses im aktuellen Verzeichnis existiert.
cp (copy)
cp kopiert Dateien.
cp orignal.txt kopie.txtkopiert die Dateioriginal.txtund speichert die Kopie unter dem Namenkopie.txt.cp test.txt foo/bar/.kopiert die Dateitest.txtunter gleichem Namen in den Ordnerbar, der sich im Ordnerfoobefindet.cp *.md backup/.kopiert alle Dateien, die mit.mdaufhören in den Ordnerbackup.cp -r meinordner /c/backup/.kopiert den Ordnermeinordnerrekursiv (d.h. mit allen Dateien und Ordnern, die darin sind) in den Ordner/c/backupcp -vrau meinordner /c/backup/.zeigt den Vorgang an (-v für verbose), (-r für rekursiv), (-a für archiv) (d.h. die Zieldatei erhält die gleichen Attribute, wie die Quelldatei. Insbesondere werden die Datumsangaben übernommen), -u für update, d.h. nur neuere bzw. im Ordnerbackupnicht existierende Dateien werden kopiert. Das eignet sich sehr gut für wiederholte schnelle Backups.
mv (move)
mv verschiebt Dateien (bzw. benennt diese um).
mv alt neubenennt die Dateialtinneuum.mv datei ordner/.verschiebt die Dateidateiin den Ordnerordner.mv jocker-chain2022*.md backup/.verschiebt alle Dateien, die mitjocker-chain2022beginnen und mit.mdaufhören in den Ordnerbackup.mv ordner1 ordner2/.verschiebt den Ordnerordner1mitsam allem Inhalt in den Ordnerordner2.
rm (remove)
rm löscht Dateien. Mit Vorsicht zu gebrauchen. Die Dateien werden dabei nicht in den Papierkorb verschoben, d.h. die Löschung ist unwiderruflich.
unzip (zip-Datei entpacken)
unzip dateiname.zip
Entpackt die Datei in dateiname.zip ins aktuelle Verzeichnis.
zip (Verzeichnis inklusive Unterverzeichnisse in eine zip-Datei zusammenpacken)
zip -r paeckchen.zip verzeichnisname
Packt das Verzeichnis 'verzeichnisname inklusive aller Unterverzeichnisse (wegen -r für rekursiv) in eine Zip-Datei namens paeckchen.zip.
ACHTUNG: Das Verzeichnis (= die Quelle) steht hier am Ende des Befehls (als letztes Argument), das Ziel ist das erste Argument.
notepad (Text-Editor)
Normalerweise startet notepad den Windows Text-Editor “Notepad”, der aber sehr limitiert ist. Wir haben ein alias definiert, damit mit diesem Befehl notepad++ gestartet wird.
Damit können auch gleich Dateien geöffnet werden, indem diese auf der Kommandozeile als Argumente angegeben werden. Z.B.
notepad .bashrcöffnet die Datei .bashrc im aktuellen Ordner (und bietet an, diese anzulegen, falls sie nicht existiert)notepad *.txtöffnet alle Dateien, deren Namen mit.txtenden.
alias (Kurznamen für Befehle)
Der Befehl alias bietet sich an, um eigene Kommandos zusammenzustellen.
aliasohne Argumente zeigt alle definierten Aliases an.alias ofi='cd /c/ofi4XXX/'definiert den Befehlofials den Wechsel ins Verzeichnis/c/ofi4XXX.
Ergänzen Sie das obige ofi-Alias wie folgt am Ende der Datei ~/.bashrc:
- Öffnen Sie die Datei aus der bash per
notepad ~/.bashrcin NotePad++. - Ergänzen Sie am Ende der Datei die Zeile
alias ofi='cd /c/ofi4XXX'. - Speichern Sie die Datei und schliessen Sie NotePad++.
- Mit
source ~/.bashrc(in der bash) laden Sie die neue Datei (statt eines Neustarts). Das aliasofisollte jetzt definiert und einsatzbereit sein. Probieren Sie es aus.
Adventure auf der bash Kommandozeile
- Speichern Sie die folgende Zip-Datei in
C:\ofi4XXX\(mit Link speichern unter)adventurequest.zip. - Öffnen Sie git-bash und navigieren Sie in dieses Verzeichnis mit dem Alias
ofioder ausführlich percd /c/ofi4XXX. - Überprüfen mit dem Kommando
ls, ob die zip-Datei auch dort liegt. - Entpacken Sie das zip-Archiv mit
unzip adventurequest.zip - Überprüfen Sie wieder mit
ls, ob auch ein neues Verzeichnis entstanden ist. - Wechseln Sie in das neue Verzeichnis mit
cd adventurequestTab Enter. - Starten Sie den Guide mit
python guide.py. - Nach jeder erledigten Aufgabe: Kehren Sie in das Verzeichnis
adventurequestzurück und starten Sie den Guide mitpython guide.py, bis alle Aufgaben erledigt sind.
Versuchen Sie die gestellten Aufgaben zu lösen. Schauen Sie sich ruhig mit ls um. Verwenden Sie cd ordnername, um in einen Unterordner zu wechseln, und cd .. um wieder zurückzugelangen (also in den übergeordneten “Eltern-Ordner”).
Hinweis: Die letzte Aufgabe (alle Bibliotheken ausrüsten) ist sehr anspruchsvoll.