Shell in Schnell

.

Presenter Notes

Diese Folien: http://marian.spline.de/shell.html

Erstellt von Lusy, Yves, Philipp, Alex, Marian, Marco

Presenter Notes

Warum?

Beispiele:

Welches Unterverzeichnis braucht den meisten Platz?

$ du -s -h * | sort -h | tail -n 100

Gib alle Wörter einer Datei und ihre Häufigkeiten aus

$ wget -q -O- http://discoproject.org/media/text/chekhov.txt
    | tr -sc "A-Za-z" "\n" | sort | uniq -ic | sort -n

Presenter Notes

Wie starte ich die Shell?

Mehrere Alternativen:

  • Terminalemulator starten (gnome-terminal, xfce-terminal oder konsole)
  • [Strg]-[Alt]-[t] ( startet auch Terminalemulator)
  • [Alt]-[F2] -- öffnet Fenster, wo man den Namen des gewünschten Programms eintippen kann
  • [Strg]-[Alt]-[F2]
  • https://www.zedat.fu-berlin.de/shell/
  • Login von einem Windows-PC mit PuTTY (nächste Folie)

Presenter Notes

PuTTY

Putty ist ein SSH-Client-Programm für Windows, d.h. man kann sich damit zu einem Linuxrechner verbinden und hat dann eine Shell, in der man auf dem anderen Rechner arbeiten kann.

Generelle Anleitung der Zedat befolgen, außer dass als Rechnername einen der Poolrechner angeben muss. Die findet man beim Rechnerbetrieb.

Der Host-Key wird auch anders sein als in der Anleitung, da jeder Rechner seinen eigenen hat. (Dieser Abgleich dient dazu, sicher zu stellen, dass die Verbindung nicht manipuliert ist und man wirklich dem richtigen Server sein Passwort verrät.) Verbindet euch am besten beim ersten Mal aus dem Uni-WLAN, der Key wird dann gespeichert und beim nächsten Verbinden seid ihr sicher.

Um Dateien zwischen eurem Rechner und den Poolrechnern zu kopieren, könnt ihr das zu Putty gehörende PSFTP benutzen (Download nicht bei der Zedat sondern nur auf der Projektseite selbst).

Presenter Notes

Wie beende ich die Shell?

Mehrere Alternativen:

  • Fenster (Terminalemulator) schließen
  • [Strg]-[d] beendet Shell
  • Eingabe von exit
  • Eingabe von logout (manchmal)

Presenter Notes

Der erste Befehl

$ echo "Hallo Welt"

Presenter Notes

Was kann ich damit alles machen?

  • Im Dateisystem navigieren
  • Verzeichnisse/Dateien erstellen/löschen/kopieren
  • Programme starten
  • Einfache (oder auch kompliziertere) Operationen auf Texten ausführen
  • und vieles mehr. (eigentlich alles.)

Presenter Notes

Befehle mit Parametern

Parameter werden benutzt, um Kommandozeilen-Programme zusätzliche Informationen mitzugeben (z.B. Namen von Dateien/Ordnern, mit denen ein Programm arbeiten soll).

$ ls
$ ls /usr
$ cowsay "hallo du"

Presenter Notes

Befehle mit Optionen

Optionen verändern die Arbeitsweise von Programmen. Zum Beispiel welche oder wie viele Informationen sie ausgeben.

$ ls -l -h -t -r
$ cowsay -d "hallo du"

Die meisten Optionen gibt es in einer langen und einer kurzen Version. Kurze haben ein - und einen Buchstaben, lange fangen mit zwei -- an:

$ ls --all
$ ls -a

Kurze Optionen können kombiniert werden:

$ ls -lhtr

Presenter Notes

Optionen mit Parametern

Es gibt Optionen, die stehen nicht für sich, sondern erwarten noch einen Parameter:

$ ls -lh --ignore '*.pdf'
$ ls -lh *.pdf

Achtet darauf, was zur Option gehört und was ein allgemeiner Parameter ist:

$ ls -lh --ignore 's*' /

Presenter Notes

Eingabehilfen: Wildcards

Wir können die Eingabe verkürzen:

  • * ersetzt beliebig viele Zeichen (auch null!)
  • ? ersetzt genau ein Zeichen
$ touch aBBB aCCC CCbC CCaC CCaaC
$ ls CC?C
$ ls CC*C
$ ls *

Diese Wildcards werden direkt von der Shell interpretiert, das heißt, sie funktionieren mit jedem Programm. Das Programm kriegt davon gar nichts mit. Wollen wir das nicht, müssen wir Anführungszeichen benutzen.

$ echo CC*
$ echo 'CC*'

Presenter Notes

Eingabehilfen: History

Die Shell speichert eure Eingaben. Mit "Pfeil nach oben" könnt ihr zuvor eingegebene Befehle wieder zurückholen, ggf verändern und nochmal ausführen.

Mit [Strg]-[r] könnt ihr in der History suchen. Dann:

  • Weiteres drücken von [Strg]-[r] sucht weiter. (Neuere Eingaben zuerst, dann ältere.)
  • Durch Enter könnt ihr den gefundenen Befehl direkt ausführen
  • Durch links/rechts könnt ihr den gefundenen Befehl bearbeiten

Presenter Notes

Navigation im Dateisystem

Augen auf:

$ ls
$ ls -lh
$ ls -R
$ ls -la

Presenter Notes

Verzeichnisse wechseln

$ cd /tmp
$ cd ~      # ins home directory wechseln
$ cd        # auch
$ cd ..     # ins darüberliegende Verzechnis wechseln
$ cd -      # ins letzte Verzeichnis wechseln
$ pwd       # zeigt wo wir sind
/home/...

Den Weg zu einem Ordner oder Datei bezeichnen wir als Pfad. Pfade können immer absolut oder relativ (heißt: in Abhängigkeit vom aktuellen Ordner) angegeben werden.

Folgende Beispiele zeigen immer auf den selben Ordner (wenn wir uns in /dev befinden):

$ pwd
/dev
$ ls /dev/fd # absoluter Pfad
$ ls fd # relativer Pfad
$ ls ../dev/fd # auch relativ (.. ist der Eltern-Ordner)

Presenter Notes

Linux-Verzeichnisstruktur

/    # Wurzel, alle anderen Verzeichnisse hängen dadrunter
    /bin    # grundlegende ausführbare Dateien
    /lib    # grundlegende Bibliotheken
    /usr    # statische Resourcen
        /usr/bin    # alle anderen Programme
        /usr/lib    # alle anderen Bibliotheken
    /boot    # alles, was zum Starten des Kernels benötigt wird
    /var     # veränderliche Daten
        /var/lib    # Daten von Programmen, die zur Laufzeit gebraucht werden
        /var/log    # Log-Dateien
    /media    # Alle eingebundenen Datenträger
    /tmp      # Temporäre Dateien
    /run      # Temporäre Dateien für die Kommunikation zwischen Programmen
    /home     # Home-Verzeichnisse der Benutzer
    /proc     # Pseudo-Dateisystem zum Auslesen von Systemdaten
    /sys      # Pseudo-Dateisystem zur Kommunikation mit dem Kernel
    /dev      # Pseudo-Dateisystem zum Zugriff auf Geräte
    /root     # Home-Verzeichnis vom root-Benutzer
    /etc      # systemweite Konfigurationsdateien

Presenter Notes

Hilfe zur Selbsthilfe

Beschreibt was ein Befehl tut, die möglichen Optionen und Parameter, und gibt Hinweise zu verwandten Befehlen:

$ man <Befehlname>

Mit q kommt man zurück zur Shell.

Meistens geht auch:

$ <befehl> --help
$ <befehl> -h

Presenter Notes

Operationen auf Dateien

$ cat > somefile.txt                # beenden mit strg-d
$ cp somefile.txt otherfile.txt     # copy
$ mv otherfile.txt anotherfile.txt  # move
$ rm somefile.txt anotherfile.txt   # remove
$ rm -i somefile.txt                # remove, fragt vor dem Löschen

Presenter Notes

Operationen auf Ordner

Geht auch alles (so ähnlich) auf Ordner:

$ mkdir aFolder           # make directory
$ cp -a aFolder bFolder   # copy
$ mv aFolder cFolder      # move
$ cat > cFolder/file
$ rmdir bFolder           # remove directory
$ rmdir cFolder           # geht nicht!
$ rm -r cFolder           # löscht alles was drin ist
$ rm -ri cFolder          # dito, aber fragt vorher

Presenter Notes

Eingabehilfen: Tabcompletion

Schreib die Hälfte eines Befehls oder Dateinamens und drück [TAB] aka Tabulatortaste.

http://www.fene-blog.de/wp-content/uploads/2010/01/Tabtaste.jpg

Presenter Notes

Programme starten

Aus der Shell kann man Programme, die in der Shell laufen, starten:

$ python
>>> 3+5
8

(man kann die Pythonshell durch drücken von [Strg]-[d] wieder beenden)

Oder auch Programme, die eine graphische Oberfläche haben:

$ gedit

Wenn man ein Programm in seinem Terminal am Laufen hat, kann man in diesem Terminal erstmal nichts weiteres machen. Er ist wieder frei, erst nachdem das Programm beendet wird.

Die Eingabe:

$ gedit &

startet gedit im Hintergrund, das heißt die Shell steht weiter bereit, um weitere Befehle auszuführen.

Presenter Notes

Werkzeuge für Umgang mit Texten

In eine Datei schreiben (Umleitungen: später)

$ echo bla bla bla >> bullshit.txt
$ cat >> bullshit.txt
eins
zwei
zwei
...
zwölf
<strg-d>
$

Inhalt von Datei bullshit.txt zeigen (falls bullshit.txt existiert)

$ cat bullshit.txt
$ less bullshit.txt # für lange dateien

Anfang von Datei zeigen:

$ head bullshit.txt

Ende von Datei zeigen:

$ tail bullshit.txt

Presenter Notes

Word count

Anzahl von Bytes, Zeichen, Wörtern, Zeilen einer Datei zeigen:

$ wc -c bullshit.txt # bytes
$ wc -m bullshit.txt # characters
$ wc -w bullshit.txt # words
$ wc -l bullshit.txt # lines
$ wc bullshit.txt # lines words bytes

Presenter Notes

Datei durchsuchen

$ grep 'e' bullshit.txt
$ grep --color 'e' bullshit.txt

Grep ist viel mächtiger, man kann auch die sogenannten regulären Ausdrücke damit verwenden.

$ grep '^e' bullshit.txt
$ grep 'e.n' bullshit.txt

Mehr zu regulären Ausdrücke gibt es z.b. hier:

… oder einfach nächstes Semester :)

Achtung: Reguläre Ausdrücke sind nicht das selbe wie die Shell-Wildcards (*.pdf etc). Wildcards können nur recht wenig, sind dafür einfach zu benutzen; reguläre Ausdrücke sind wesentlich mächtiger, aber auch komplexer.

Presenter Notes

Nach Dateien suchen

$ find -name bullshit.txt
$ find /bin -name '*dir'
$ find -name desktop
$ find -name Desktop
$ find -iname desktop # case insensitive

Presenter Notes

Pipes

Statt Dateien oder Zeichenketten als Argumente anzugeben, können wir auch die Ausgabe eines anderen Befehls als Eingabe verwenden. Dazu brauchen wir die Pipe |.

http://marian.spline.de/shell/pipe.jpg
$ ps -A | grep -i terminal
$ ls /usr/bin | grep haskell
$ sort bullshit.txt | tr ' ' '\n' | uniq -c

Presenter Notes

Umleitungen

Ähnlich wie Pipes funktionieren die Umleitungen <, > und >>. Nur das sie nicht zwischen Befehlen sondern zwischen Befehlen und Dateien umleiten.

$ echo -e 'Schreibe diesen\nText in eine Datei' > datei.txt
$ cowsay < datei.txt
$ echo -e 'Überschreibe den alten Inhalt' > datei.txt
$ echo -e 'Hänge was an die Datei an' >> datei.txt
$ cat datei.txt
$ sort < datei.txt > sortiert.txt

Achtung: Dinge wie sort < datei.txt > datei.txt funktionieren nicht! Die Datei wird geleert (aufgrund des >), bevor sort anfängt zu lesen, d.h. es gibt nichts aus und der Inhalt ist weg. Abhilfe schafft z.B. sponge (siehe man sponge).

Presenter Notes

Auf anderen Rechnern arbeiten

Shell auf einem entfernten Rechner öffnen:

$ ssh <username>@peking.imp.fu-berlin.de

Dateien auf einen bzw. von einem anderen Rechner kopieren:

$ date > DATEINAME
$ scp DATEINAME <username>@peking.imp.fu-berlin.de:/tmp
$ scp <username>@peking.imp.fu-berlin.de:/tmp/DATEINAME DATEINAME_2

Befehl auf einem anderen Rechner ausführen, z.B. rm:

$ ssh peking rm /tmp/DATEINAME

ssh fungiert auch als pipe zwischen den Rechnern

cat file.pdf | ssh <username>@andorra.imp.fu-berlin.de lp -

Presenter Notes

Nützliche Befehle: finger

Praktisch, um z.B. den Namen oder eine Mailadresse von Kommiliton*innen rauszufinden.

$ finger schulze
$ finger flexo3001

Die Mailadresse ist dann einfach <das was hinter Login: steht>@mi.fu-berlin.de

Presenter Notes

Nützliche Befehle: less

Damit kann man eine längere Datei oder Ausgabe eines Befehls besser handhaben.

$ less grossedatei.txt
$ wget -qO- http://discoproject.org/media/text/chekhov.txt | less
$ ls -lh /usr/bin | less
  • mit / kann man suchen, mit n weitersuchen
  • mit q kommt man wieder raus
  • es kann noch mehr: h zeigt die Hilfe an

Presenter Notes

Nützliche Befehle: file

Rät, um was für eine Art von Datei es sich handelt.

$ file ~
$ file ~/.bashrc
$ file /bin/bash
$ file /usr/share/zim/zim.png

Presenter Notes

Nützliche Befehle: diff

Zeigt Unterschiede zwischen Dateien an. Sehr nützlich auch für Code.

Man kann sich die Unterschiede auch in einem maschinenlesbaren Format ausgeben lassen. Dann kann man mit dem Programm patch automatisiert die selben Änderungen an einer anderen Datei durchführen lassen. Ganz besonders nützlich für Code.

Presenter Notes

Rechte

Für jede Datei kann man einstellen, welche Zugriffsrechte für sie gelten.

$ ls -lh shellkurs/bullshit.txt
-rwxr-xr-x 1 root   root     953K Sep 25 21:49 /bin/bash
-rw-r--r-- 1 sigler students   77 Oct  6 20:29 shellkurs/bullshit.txt
 ^^^         ^^^^^^                - user (Besitzer*in der Datei)
    ^^^             ^^^^^^^^       - group (Gruppe der Datei)
       ^^^                         - others (alle anderen)

Dabei steht das r für Leserechte, das w für Schreibrechte für die jeweilige Personengruppe.

Das x (execute) steht für Ausführungsrechte (bei Dateien), bei Verzeichnissen ist dieses Recht nötig, um irgendwas innerhalb des betroffenen Verzeichnisses tun zu dürfen (unabhängig von den individuellen Rechten der dort liegenden Dateien/Unterverzeichnisse)

Man kann diese Rechte ändern:

$ chmod o-rwx   # others gar nichts mehr erlauben
$ chmod o=      # ebenso
$ chmod g+r     # group das Lesen erlauben       ⎱ schon bestehende Rechte
$ chmod ugo+x   # allen das Ausführen erlauben   ⎰ bleiben erhalten
$ chmod a+x     # ebenso

Presenter Notes

Eingabehilfen: Tastenkombinationen

  • Strg-U löscht bis zum Anfang der Zeile
  • Strg-K löscht bis zum Ende der Zeile
  • Strg-W löscht das letzte Wort
  • Strg-Y fügt das zuletzt gelöschte ein
  • Strg-T tauscht die letzten beiden Zeichen

Presenter Notes

Ausblick: Anpassung der Shell

Man kann sich einen Alias für viel genutzte Befehle erstellen:

$ alias ll='ls -lh'
$ alias grep='grep --color'

(Am besten in die ~/.bashrc eintragen)

Man kann den Prompt (das name@computer:~$) anpassen und alle möglichen Informationen reintun, die man für sinnvoll hält.

Man kann eine andere Shell als die bash benutzen (viele schwören zum Beispiel auf die zsh).

Man kann bestimmten Tastenkombinationen alles mögliche zuweisen.

Und vieles mehr...

Presenter Notes

Noch Fragen?

Ihr könnt gerne jederzeit im Spline-Raum (Raum K60) vorbeikommen, die meisten Menschen dort kennen sich recht gut mit der Shell aus. Während des Semesters ist den Nachmittag über meistens jemand da.

Presenter Notes

Presenter Notes

Diese Präsentation wurde erstellt mit landslide

wget http://marian.spline.de/shell.rst
landslide -i shell.rst -d shell.html
scp presentation.html fob:public_html/webroot/shell.html

Diese Präsentations steht unter cc-by-sa Lizenz.

Presenter Notes