lehrkraefte:blc:informatik:glf4-24:bash-kommandos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf4-24:bash-kommandos [2024/02/14 13:58] – [Wildcards] Ivo Blöchligerlehrkraefte:blc:informatik:glf4-24:bash-kommandos [2024/02/14 14:22] (current) – [Wildcards] Ivo Blöchliger
Line 1: Line 1:
 +====== 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.
 +
 +
 +<WRAP todo>
 +  * 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.
 +<code bash>
 +cd /c/ofi
 +ls
 +</code>
 +  * Entpacken Sie das Archiv mit
 +<code bash>
 +unzip wildcards.zip
 +</code>
 +  * 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:
 +<code bash>
 +bash verifier.bash
 +</code>
 +
 +
 +  * 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]]
 +
 +</WRAP>
 +