ASE WS 2022/23
Das Dateisystem ist die zentrale Datenstruktur in UNIX-Systemen. Alle Einstellungen und Daten finden sich dort.
Wichtige Verzeichnisse (Linux):
Wichtig: Dateien und Verzeichnisse mit einem Punkt am Anfang ('dotfiles') werden normalerweise nicht angezeigt oder bei Wildcard-Selektionen ausgewählt. ls -a
zeigt auch solche unsichtbaren Dateien an.
Finde heraus, was folgende Befehle machen:
Aufgaben:
Pipes (dargestellt durch das '|'-Zeichen) erlauben es, die Ausgabe eines Programms als Eingabe für ein anderes Programm zu verwenden. Filter sind Programme, die Daten von ihrer Standardeingabe lesen und modifiziert auf der Standardausgabe ausgeben. Damit lassen sich mächtige Verarbeitungspipelines bauen.
stdin ist die Standardeingabe, von der ein Programm liest. Daten werden normalerweise auf stdout ausgegeben. In einer interaktiven Shell gehen Benutzereingaben an stdin; stdout wird auf der Konsole ausgegeben. Wenn man Fehlermeldungen oder Statusinformationen ausgeben will, ohne die reguläre Ausgabe zu unterbrechen, kann man stderr verwenden. Standardmäßig wird stderr auch auf der Konsole ausgegeben.
Beispiel:
echo "TEST" > test.txt
- überschreibt den Inhalt von test.txt mit “TEST”echo "HALLO" >> test.txt
- hängt “HALLO” an das Ende von test.txt ancat *.txt 2> errors.txt
- gibt den Text aller Textdateien auf der Standardausgabe aus und schreibt Fehlermeldungen in die Datei errors.txtBeispiel:
grep "kuchen" < food.txt
- liest die Datei food.txt auf stdin und sucht darin nach “kuchen”Beispiel:
cat test.txt | grep "Kuchen" | grep "Baum"
- gibt alle Zeilen von test.txt aus, in denen sowohl “Kuchen” als auch “Baum” vorkommenFinde heraus, was folgende Befehle machen:
Write the following Bash script:
count.sh which does the following:
wget
for this)tr
)cat
and/or sed
for this)sort
and uniq
, possibly also grep
).uniq
, sort
, and head
)% Tutorial UNIX Command Line - Advanced % ASE WS 2022/23
(Siehe vorheriges Tutorial)
Wir arbeiten jetzt als Nutzer root
auf einem 'disposable root server' via segfault.net.
ssh root@segfault.net # Password is 'segfault'
Achtung: Der Server ist nicht sicher - keine vertraulichen Infos/Passwörter dort eintippen
Erster Schritt auf dem Server: Informationen zu Netzwerk-Schnittstellen prophylaktisch in einen Text-Editor kopieren
Zweiter Schritt: tmate installieren und ausführen.
apt install tmate tmate
tmate
startet eine tmux
-Session und gibt Pfade/Befehle aus, mit denen man der Session remote beitreten kann. Diese Infos am Besten auch in einem Texteditor speichern und 'q' drücken.
tmux ist eine Art Window Manager für die Kommandozeile:
Ctrl-B <und danach> c
- neuer DesktopCtrl-B p
- vorheriger DesktopCtrl-B n
- nächster DesktopCtrl-B &
- Desktop schließen (schließt auch Shell und alle darin laufenden Programme)Ctrl-B "
- Fenster vertikal splittenCtrl-B %
- Fenster horizontal splittenCtrl-B <Pfeiltasten>
- zwischen Fenstern wechselnCtrl-B d
- Verbindung zur tmux-Session trennen (detach)tmux ls
- laufende Sessions anzeigentmux attach [name]
- wieder mit einer Session verbinden
MacOS kennt keine Ctrl-Taste und tmux akzeptiert die Command-Taste nicht.
Der einfachste Workaround ist, in der Datei ~/.tmux.conf
den Shortcut auf “Alt-b” (entspricht Meta-b / M-b) zu ändern:
cat > ~/.tmux.conf <<__EOF__ unbind C-b set -g prefix M-b bind M-b send-prefix __EOF__
Finde heraus, was folgende Befehle machen (Raphael stellt sie kurz vor):
Test-Dateien z.B.: https://github.com/veltman/clmystery/archive/refs/heads/master.zip (mit wget/curl herunterladen)
apt show <paketname>
apt search <begriff>
apt install <paketname> <paketname>
apt update
(Paketliste aktualisieren)apt upgrade
(alle Pakete aktualisieren)Weiterführende Methoden:
/etc/apt/sources.list/
)apt install -t unstable youtube-dl
)dpkg -i <Dateiname>
)apt install -f
/ dpkg --configure -a
)
## Shell ScriptingFinde heraus, was folgende Bash-Befehle/-Strukturen machen:
Siehe auch:
Write the following Bash script:
say_count.sh which does the following:
cowsay
command is available on the system cowsay
Minimal example:
#!/bin/bash if [[ ! -e /usr/games/cowsay ]] then echo "Installing cowsay" apt install -y -q cowsay fi wget https://github.com/veltman/clmystery/archive/refs/heads/master.zip unzip master.zip for f in $(grep -r --files-with-matches "Duchess" clmystery-master/*) do NUM=$(grep -o "Duchess" $f | wc -l) echo -e "Found $NUM lines in\n$(basename $f)" | /usr/games/cowsay done # cleanup apt remove -y -q cowsay rm -r clmystery-master rm master.zip