owned this note
owned this note
Published
Linked with GitHub
# Shell Code
## Lektion 1: Chat
* Install an IRC client
* Connect to the 'Freenode' server
* Join the secret channel
## Lektion 2: What the shell
zB Bash, Fish, Dash
Vorteil: Man kann mehrere Befehle verbinden -> ist sehr mächtig
Kommandos nehmen Argumente, Argumente sind durch Leerzeichen getrennt.
## Lektion 3: Running programs
Deklarative Programmierung: Beschreiben, was man will, und der Computer macht das dann für einen
### Basisprogramme
Parameter:
sind einem Command zugeordnet, beginnen häufig mit "--" oder "-" und sind erkennbare Befehle (gegenüber Parametern, bei denen ein einziger Buchstabe einen gesamten Befehl abbildet)
Reihenfolge der Parameter hängt vom Command ab
also z. B. sort -r (Command: sortiere, mit dem Parameter reverse, also: umgekehrt sortieren)
man Befehl -> ruft die Beschreibung auf
#### Navigation
* Direcories (Ordner)
* Files (Dateien)
Pfade: Der Ort, an dem sich die Datei befindet.
z.B. Dokumente/ProjektFordPrefect/hello_world.txt
Absolute Pfade: / am Anfang (absolut = Pfad vom root-Verzeichnis aus)
relative Pfade: kein / am Anfang (relativ = Pfad vom aktuellen Verzeichnis aus; man könnte auch schreiben ./ und dann den relativen Pfad)
(we don't talk about Windows)
UNIX setzt die Normen
Orte:
Aktuelles Directory, home Directory, root Directory (wo alles beginnt, äußerst mögliches Directory, angezeigt durch /)
Files:
. - aktuelles Directory
.. - übergeordnete Verzeichnis
#### Befehle
($ definiert: hier beginnt ein Shell-Befehl)
$ pwd (print working directory) – Zeigt aktuelle s directory an (Default: persönlicher Home-Space)
$ cd – Change Directory -> ohne Parameter geht es ins home directory
$ cd Dokumente/MyProject
$ cd /media/MyUsbStick
$ cd .. - geht ein Verzeichnis "höher"
##### Commands
$ ls – List files and directories
$ ls -al – list ALL files
$ man ls - Manual des Parameters ls (Bedienungsanleitung) (ruft ein eigenes Programm auf)
auch $ --h oder --help
Nebenbei: Das
Command $ find ist dafür berüchtigt, immer was anderes zu machen als es soll
Hausaufgabe: Recherchiert mit man und Internet folgende Commands
ls, cp, mv, rm, vi, vim, dmesg, ping, wget, curl, apt-get, brew, pacman, find, cat, grep, mplayer, gpg, ssh, scp, tar, gzip, youtube-dl, mount, umount, awk, sed, htop, kill, ps, lsof, fuser, sudo, su, du, df, shutdown, halt, reboot, sl, lsblk, lsusb, lshw, emacs, sed, pv, ssh, rsync, sort, traceroute, du, xargs, tail, head, man, tac
## Lektion 4: Shell Programmierung
Stärke von Shell ist die Verbindung von Kommandos zu einem Programm
(Bash hat keine gute Reputation weil undurchsichtig, ist aber auch sehr mächtig)
3 Standard-Streams:
Standart in
Standard out
Standard error
ls ist zum Beispiel eine Datenabfrage, die dann auf dem Standard out Stream ausgelesen wird
Stream-Processing-Bezeichnungen:
source: z.B. ls,
filter: z.B. grep
sync: z. B. rm oder mv
Der Trick besteht darin, die Kombination von Befehlen zu finden, die du brauchst.
Pipe:
source | filter | sink -> leitet output vom ersten Befehl in den zweiten Befehl
z.B. ls | sort | head -n 5 -> listet die obersten 5 aus
http://overthewire.org/wargames/bandit/
### Stream Redirection
Standard Output wird in neues File geschrieben: >
z. B. ls > listoffiles.txt, Bedeutet: schreibe den Output dieses Commands in folgendes File
Standard Input wird gelesen: <
z. B. "<meinfile.txt grep FindeDiesenString", Bedeutet: lies aus diesem File aus und führe das folgende Command "grep" mit dem parameter "FindeDiesenString"
xargs liest zeilen/wortweise aus meinem Input ein und übergibt jedes Wort in das Command ein als argument.
Gegenteil: Konvertiere Argumente in Output `echo -e "arg1\narg2\narg3\n"`