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

Differences

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

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:informatik:glf4-24:advanced-bash [2024/02/16 09:17] – created Ivo Blöchligerlehrkraefte:blc:informatik:glf4-24:advanced-bash [2024/02/16 09:23] (current) Ivo Blöchliger
Line 1: Line 1:
 +====== Kommandozeile für Fortgeschrittene ======
 +Hier werden weitere Standard-Kommandos aus der Unix-Welt vorgestellt. Diese sind mit der git-bash automatisch mitinstalliert.
 +
 +===== cat (Ausgabe einer Datei) =====
 +''cat'' kommt von «concatenate», was wörtlich mit "zusammenketten" übersetzt werden kann. Damit kann der Inhalt einer Datei auf der Kommandozeile ausgegeben werden.
 +
 +Z.B. gibt folgendes Kommando die Konfigurationsdatei Ihrer bash aus (die Tilda ''~'' steht dabei für Ihr Home-Verzeichnis)
 +<code bash>
 +cat ~/.bashrc
 +</code>
 +
 +===== echo =====
 +''echo'' gibt etwas auf der Kommandozeile aus. Z.B.
 +<code bash>
 +echo Sag mal was
 +</code>
 +
 +===== '>' Umlenkung der Ausgabe in eine Datei=====
 +Die Ausgabe, die ein Programm produziert, kann in eine Datei umgeleitet werden.
 +
 +Achtung: Im folgenden Beispiel werden die Dateien ''ausgabe.txt'' und ''hello.txt'' überschrieben und am Schluss gelöscht!
 +<code bash>
 +ls
 +ls > ausgabe.txt
 +ls
 +cat ausgabe.txt
 +echo hello world > hello.txt
 +cat hello.txt
 +ls
 +rm ausgabe.txt hello.txt
 +ls
 +</code>
 +Das ''>'' Zeichen leitet die Ausgabe in eine Datei um. Diese wird dabei überschrieben falls die Datei schon existiert. Andernfalls wird die Datei erstellt.
 +
 +Das ist manchmal praktisch, um ganz kleine Dateien zu schreiben, ohne gleich einen Text-Editor zu öffnen. Sonst können Sie einfach mit
 +<code bash>
 +notepad hello.txt
 +</code>
 +die entsprechende Datei bearbeiten bzw. anlegen (speichern nicht vergessen!)
 +
 +===== '|' Umlenkung der Ausgabe in ein nächstes Programm =====
 +Beispiel:
 +<code bash>
 +yes | python guide.py
 +</code>
 +Das Programm ''yes'' gibt fortlaufend den Text «yes» aus, bzw. jenen, der danach angegeben wird.  
 +Das Python Programm liest dies ein, als ob man dies auf der Tastatur eingegeben hätte. Es werden also automatisch alle Hilfen angezeigt ;-)
 +
 +
 +===== seq (Sequenz erzeugen) =====
 +Beispiel:
 +<code bash>
 +seq 1 12
 +seq 1 3 30
 +seq 21 -7 0
 +</code>
 +Das erste Kommando ''seq 1 3 30'' produziert eine Folge von Zeilen mit den Zahlen 1,4,7, etc.
 +
 +==== sort (Zeilen sortieren) ====
 +sort sortiert alle Zeilen. Entweder jene von der Eingabe oder aus der Datei (oder den Dateien) die angegeben wurde(n).
 +
 +Beispiele:
 +<code bash>
 +seq 12 -2 4
 +seq 12 -2 4 | sort
 +seq 12 -2 4 | sort -n
 +seq 12 -2 4 > test.txt
 +sort test.txt
 +sort -n test.txt
 +</code>
 +''sort'' sortiert die produzierten Zeilen **alphabetisch**, was nicht unbedingt das Gewünschte ist. Soll **n**ummerisch sortiert werden, fügt man die Option ''-n'' an.
 +
 +''sort'' sortiert entweder die Eingabe (typischerweise die Ausgabe eines anderen Programms) oder die angegebene Datei
 +
 +===== wc (word count) Zeilen, Wörter, Bytes zählen =====
 +''wc'' zählt die Anzahl Zeilen, Wörter und Bytes (entspricht ohne Sonderzeichen in etwa der Anzahl Buchstaben).
 +
 +Die Ausgabe von ''ls'' ist zeiltenweise, wenn ein nächstes Kommando angehängt wird. Wird ''cat'' angehängt, wird einfach die Eingabe (also was ''ls'' produziert) ausgegeben:
 +<code bash>
 +ls | cat 
 +ls | wc
 +ls *.txt | wc
 +</code>
 +Die letzte Zeile zählt die Anzahl Dateien, die mit ''.txt'' enden.
 +
 +===== grep (Zeilen filtern) =====
 +''grep'' gibt jene Zeilen aus, in denen eine gegebene Zeichenkette (z.B. ein Wort oder Zahl) vorkommt. Diese Zeilen kommen entweder als Input daher, oder es werden die angegebenen Dateien durchsucht.
 +
 +Beispiel: Wie viele Zahlen von 1 bis 100 enthalten die Ziffer 2?
 +<code bash>
 +seq 1 100 | grep 2 
 +seq 1 100 | grep 2 | wc
 +</code>
 +
 +Mit der Option ''-R'' werden alle Dateien und Unterverzeichnisse nach dem Muster durchsucht.
 +<code bash>
 +grep -R muster
 +</code>
 +
 +Nur zur Info: Das grep Kommando hätte noch viele weitere [[https://man7.org/linux/man-pages/man1/grep.1.html|weitere Optionen]], womit komplexere Muster gesucht oder ausgeschlossen werden können und die Ausgabe gesteuert (z.B. wie viele Zeilen davor und/oder danach) oder nur Ausgabe der Dateinamen etc.
 +
 +===== find (Dateien finden) =====
 +''find'' listet alle Dateien auf, die sich im gegebenen Verzeichnis und Unterverzeichnissen befinden. Dabei steht der Punkt ''.'' für das aktuelle Verzeichnis.
 +<code bash>
 +find .
 +</code>
 +Mit ''-name'' werden nur Dateien gelistet, die dem Suchmuster entsprechen. Achtung, das Suchmuster muss zwischen Anführungszeichen stehen (sonst wird das Suchmuster schon vor der Suche ersetzt). 
 +<code bash>
 +find . -name '*.txt'
 +</code>
 +
 +Auch find ist ein sehr mächtiges Tool, wo auch nach anderen Dateiattributen gefiltert werden und sogar für jede gefundene Datei ein Kommando ausgeführt werden kann. [[https://man7.org/linux/man-pages/man1/find.1.html|Zur Dokumentation]].
 +
 +===== unzip (zip-Datei entpacken) =====
 +<code bash>
 +unzip name_einer_zip_datei_die_es_auch_gibt.zip
 +</code>
 +Entpackt die Datei ins aktuelle Verzeichnis.
 +
 +====== Passwordhunt Adventure ======
 +<WRAP todo>
 +  * Speichern Sie folgendes Archiv ins Verzeichnis ''C:\ofi'' (Rechtsklick, Link speichern als): {{lehrkraefte:blc:informatik:glf22:passwordhunt.zip}}.
 +  * Entpacken Sie das Archiv direkt auf der Kommandozeile mit ''unzip passwordhunt.zip'' (Voraussetzung ist, dass Sie sich im richtigen Verzeichnis befinden).
 +  * Überprüfen Sie wieder mit ''ls'', ob auch ein neues Verzeichnis entstanden ist.
 +  * Wechseln Sie ins neue Verzeichnis mit ''cd passwordhunt'' <key>Tab</key> <key>Enter</key>.
 +  * Starten Sie den Guide mit ''python guide.py''
 +  * Viel Spass!
 +</WRAP>