====== Wichtige und praktische Kommandos ====== ===== ls (list files) ===== ''ls'' zeigt die Dateien im aktuellen Verzeichnis an. Nützliche Optionen: * ''ls -a'' alle Dateien anzeigen (auch versteckte) * ''ls -l'' Zusätzliche Informationen anzeigen. * ''ls -ltr'' Dateien nach Datum (-t) in umgekehrter Reihenfolge (-r) anzeigen. So wird die neueste Datei zuunterst angezeigt. * ''ls -lhSr'' Dateien nach Grösse (-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 ''cd'' alleine) wechselt ins **Home-Verzeichnis**, unter Windows typischerweise ''/c/Users/benutzername/'', unter Linux/MacOS ''/home/benutzername''. * ''cd ..'' wechselt ins Elternverzeichnis (eine Ebene zurück). * ''cd informatik/jokerchain'' wechselt zwei Verzeichnisse auf einmal. ===== mkdir (make directory) ===== ''mkdir'' legt ein neues Verzeichnis an: * ''mkdir test'' Legt im aktuellen Verzeichnis ein neues Verzeichnis ''test'' an. * ''mkdir -p alles/auf/einmal'' Legt verschachtelte Verzeichnisse auf einmal an (anstatt ''mkdir alles'', ''cd alles'', ''mkdir auf'', ''cd auf'', ''mkdir einaml'', ''cd ../..'') ===== rmdir (remove directory) ===== ''rmdir'' löscht ein leeres Verzeichnis * ''rmdir test'' Löscht das leere Verzeichnis test im aktuellen Verzeichnis. Schlägt fehl und tut nichts, wenn das Verzeichnis nicht leer ist. ===== pwd (print working directory) ===== Zeigt das aktuelle Verzeichnis an. Dieses wird normalerweise schon automatisch auf der Kommandozeile angezeigt. ===== cp (copy) ===== ''cp'' kopiert Dateien. * ''cp orignal.txt kopie.txt'' kopiert die Datei ''original.txt'' unter neuem Namen ''kopie.txt''. * ''cp test.txt foo/bar/.'' kopiert die Datei ''test.txt'' unter gleichem Namen in den Ordner ''bar'', der sich im Ordner ''foo'' befindet. * ''cp *.md backup/.'' kopiert alle Dateien, die mit ''.md'' aufhören in den Ordner ''backup''. * ''cp -r meinordner /c/backup/.'' kopiert den Ordner ''meinordner'' rekursiv (d.h. mit allen Dateien und Ordnern, die darin sind) in den Ordner ''/c/backup'' * ''cp -vrau meinordner /c/backup/.'' zeigt den Vorgang an (-v für verbose), (-r) rekursiv, (-a) 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 Ordner ''backup'' nicht 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 neu'' benennt die Datei ''alt'' in ''neu'' um. * ''mv datei ordner/.'' verschiebt die Datei ''datei'' in den Ordner ''ordner''. * ''mv jocker-chain2022*.md backup/.'' verschiebt alle Dateien, die mit ''jocker-chain2022'' beginnen und mit ''.md'' aufhören in den Ordner ''backup''. * ''mv ordner1 ordner2/.'' verschiebt den Ordner ''ordner1'' mitsam allem Inhalt in den Ordner ''ordner2''. ===== 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. ===== Wildcards ===== Wo immer ein oder mehrere Dateinamen angegeben werden können, können diese mit einem Muster beschrieben werden. Dabei stehen * ''*'' für beliebige, beliebig viele Zeichen (auch keines). Typische Beispiele: * ''*.txt'' Alle Dateien, die die Endung ''.txt'' haben. * ''IMG_3*.jpg'' Alle Dateien, die mit ''IMG_3'' beginnen und mit ''.jpg'' enden. Z.B. ''IMG_3.jpg'', ''IMG_3210.jpg'' * ''?'' für genau ein belibiges Zeichen. Typische Beispiele: * ''hallo0?.txt'' passt z.B. auf ''hallo00.txt'', ''hallo0z.txt'' aber nicht auf ''hallo007.txt'' oder ''hallo0.txt'' * ''[a-z]'' steht für genau ein Kleinbuchstabe a-z. ''[3-6]'' steht für genau eine Ziffer 3 bis und mit 6. * ''{jpg,png,gif}'' steht für genau eines der aufgeführten Wörter. Typishces Beispiel: * ''*.{jpg,jpeg,png,gif}'' Alle Dateien die mit eine der aufgeführten Endungen haben. * Laden Sie folgendes zip-Archiv herunter {{lehrkraefte:blc:informatik:glf4-24:wildcards.zip}} und speichern Sie es in ''C:\ofi''. * Navigieren Sie mit dem ''cd'' Kommando dorthin und überprüfen Sie mit dem ''ls'' Kommando, ob die zip-Datei auch dort liegt. cd /c/ofi ls * Entpacken Sie das Archiv mit unzip wildcards.zip * Wechseln Sie (mit ''cd'' ins Verzeichnis ''wildcards'' und verschieben (''mv'') Sie die Dateien wie folgt: * Alle .jpg-Dateien von 2022 in ein Unterverzeichnis 2022 (mit ''mkdir 2022'' anlegen!) * Alle .jpg-Dateien von 2023 in ein Unterverzeichnis 2023 * Alle Logos, die «''ganz-fertig''» sind, in ein Unterverzeichnis ''logos-ganz-fertig''. * Alle anderen Logos in ein Unterverzeichnis ''logos-archiv''. * Überprüfen Sie am Schluss, ob Sie alles richtig gemacht haben, indem sie die Datei ''verifier.bash'' starten: bash verifier.bash * Studieren Sie den Code in ''verifier.bash'' mit folgender Erklärung: * ''echo'' gibt alles was folgt auf die Konsole aus (z.B. zur Information). * ''ls -R'' gibt alle Dateien und Verzeichnisse rekursiv aus (d.h. auch den Inhalt der Unterverzeichnisse etc.). * ''|'' nimmt die Ausgabe der Kommandozeile davor und nutzt diese als Eingabe für die nächste Kommandozeile. * ''diff'' vergleicht den Inhalt zweier Dateien zeilenweise und gibt die Unterschiede aus. Wird eine Datei als ''-'' angegeben, wird mit der Eingabe (d.h. hier mit der Ausgabe von ''ls -R'') anstatt einer Datei gearbeitet. Diese Aufgabe gibt es als Screencast vorgelöst: [[https://fginfo.ksbg.ch/~ivo/videos/informatik/vierte-klasse-2024/01-wildcards-in-bash.mp4|weltöffentlich und anonym]] oder [[https://bldsg-my.sharepoint.com/:v:/g/personal/ivo_bloechliger_ksbg_ch/EbhH0o8gzXpMiI41BTL5jwkBGfLOi1BNMoXMwFNtNBU5-g?nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=dCbrHa|auf dem kantonalen Sharepoint]]