# Einführung in Linux
YALC - Yet Another Linux Course
Author: Daniel Schubert

# LINUX

### Das universelle Betriebssystem

Eine Einführung - Teil 3

Deutsche Angestellten Akademie

Frage: Fragen zur letzten Stunde?

### sudo

als root: `adduser USER sudo`

Datei /etc/sudoers

zu editieren mit visudo

`daniel ALL=(ALL) ALL`

### kurze Wiederholung

- In Dateinamen dürfen fast alle möglichen Zeichen auftauchen. Man sollte sich auf Buchstaben, Ziffern und einige Sonderzeichen beschränken.
- Linux unterscheidet Groß- und Kleinschreibung in Dateinamen.
- Absolute Pfade beginnen immer mit einem Schrägstrich und benennen alle Verzeichnisse vom Wurzelverzeichnis bis zum betreffenden Verzeichnis bzw. der Datei.
- Relative Pfade beziehen sich auf das »aktuelle Verzeichnis«.

- Aboluter Pfad: `/home/daniel/Dokumente`
- Relativer Pfad: `Domukente/rechnungen/2018`
- `cd` ändert das aktuelle Verzeichnis der Shell, `pwd` zeigt den Pfad des aktuellen.
- `cd ..` wechselt 1 Verz. höher
- `cd ../..` wechselt 2 Verz. höher
- `cd ../../etc/nginx`
- `cd /` -> Wurzelverzeichnis
- `cd` oder `cd ~` -> home
- Aufgabe:Erstellt die Verz. ~/hase/fuchs. Erstellt die Datei ~/hase/fuchs/test.txt. Kopiert die Datei test.txt nach ~.

- `ls` gibt Informationen über Dateien und Verzeichnisse aus.
- Mit `mkdir` und `rmdir` kann man Verzeichnisse anlegen oder entfernen.
- cp, mv, rm - kopieren, verschieben, löschen
- Mit `ln` kann man »harte« und »symbolische« Links anlegen.
- `more` und `less` dienen zum seitenweisen Anzeigen von Dateien auf dem Terminal.

- `find` sucht nach Dateien oder Verzeichnissen, die bestimmte Kriterien erfüllen.
- `locate` findet Dateien nach Name
- es gibt externe und interne ( builtin )Kommandos
- interne sind zb. cd und echo
- externe sind zb alles in `/bin`
- `type` gibt Auskunft darüber
- Aufgabe: welcher Art sind

  `alias ,echo, rm, test?`

https://www.shellbefehle.de/befehle/

- Sonderzeichen:

-     $&;(){}[]*?!<>«

- `touch neue datei` - erzeugt 2 Dateien
- `touch 'neue datei'` - erzeugt 1 Datei
- `>` leitet Ausgabe um

### bash Shortcuts

Shortcut | Beschreibung
--- | ---
TAB | Vervollständige das angefangene Wort
TAB TAB | Zeige Liste der Vervollständigungs-möglickeiten
Ctrl + c | Aktuell laufendes Kommando abbrechen
Ctrl + z | Aktuelles Kommando stoppen
Ctrl + a | Gehe zum Anfang der Kommandozeile
Ctrl + e | Gehe zum Ende der Kommandozeile
Ctrl + w | Lösche vom Cursor zum Anfang des Wortes (das aktuelle Wort löschen)
Ctrl + y | Füge ein gelöschtes wort wieder ein, welches mit einem der shortcuts zum löschen gelöscht wurde
Ctrl + xx | Bewege dich zwischen Anfang der Kommandozeile und der aktuellen position des Cursor (hin und zurück)
Ctrl + f | Ein Zeichen nach vorne
Ctrl + b | Ein Zeichen zurück
Ctrl + d | Löscht das Zeichen unter dem Cursor
Ctrl + h | Löscht das Zeichen vor dem Cursor
Ctrl + r | Durchsucht die History rückwärts
Ctrl + g | Den History Suchmodus wieder verlassen
Ctrl + l | Lösche das Kommandozeilenfenster
Ctrl + s | Stopt den Output auf die Kommandozeile (Bei langen Kommandos mit viel Output)
Ctrl + q | Stellt denn Output in die Kommandozeile wieder her (welcher vorher mit „Ctl + s“ gestoppt wurde)

sind emacs kommandos shortcuts

## bash Konfiguration

aus der bash man-page:

    FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       /etc/bash.bashrc
              The systemwide per-interactive-shell startup file
       /etc/bash.bash.logout
              The systemwide login shell cleanup file, executed when a login shell exits
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
                  Individual readline initialization file

### für den Alltag wichtige config files

- .bashrc - Konfiguration
- .bash_aliases - Kommando Aliase
- .bash_history - Kommando Historie

- kurze erklärung

### .bashrc

    # zusätzlicher pfad für die auto-vervollständigung
    export CDPATH=$CDPATH:/home/dany/projekte

    # maximale länge der history
    HISTSIZE=1000
    HISTFILESIZE=2000
    HISTTIMEFORMAT="%d-%m-%Y %H:%M "

    # promt formatierung
    PS1='\[\033[38m\]\u@\h \[\033[94m\]\W\[\033[95m\]$(__git_ps1)\[\033[37m\]$\[\033[00m\] '

`export` gibt alle gesetzten bash Variablen aus

`export $VARIABLE` setzt die Bash Variable für die laufende Sitzung

### .bash_aliases

    # ls Varianten
    alias ll='ls -alF'
    alias la='ls -A'
    alias l='ls -CF'

    #df in lesbar
    alias df='df -h'

    # Oft gebrauchte Pfade
    alias o='cd ~/ownCloud/'
    alias p='cd ~/projekte'

    # stopwatch
    alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date'

    # create a dir with date from today
    alias mkdd='mkdir $(date +%Y%m%d)'

Aufgabe: legt ein Alias an, das per mkdir ein Verzeichnis mit evtl. Eltern anlegt;
Hinweis: Datei .bash_aliases bearbeiten

`alias mp='mkdir -p'`

Aufgabe: Macht die Schriftfarbe des Prompt blau

Hilfe: https://wiki.archlinux.de/title/Bash-Prompt_anpassen

`PS1="\[\033[34m\]\u@\h:\w$"`

### stdin, stdout, stderr - Kanäle der Bash

- Standardeingabekanal stdin, dieser hat die Nummer 0 (null) -> Tastatur
- Standardausgabekanal stdout, dieser hat die Nummer 1 (eins) -> Bildschirm
- Standardfehlerkanal stderr, dieser hat die Nummer 2 (zwei). -> Bildschirm

Ausgabeumleitung

`ls -la > inhalt.txt`

Vorsicht! Überschreibt vorh. Datei inhalt.txt!!

Zum anhängen: `ls -la >> inhalt.txt`

Umleitung stderr

`ls -la /home/user 2> fehler.txt`

`ls -la > verzeichnis.txt 2> fehler.txt`

`ls -la > gemeinsam.txt 2>&1`

Umleitung stdin

`tr -d '0-9' < datei.txt`

### Der Pipe Operator

`ps ax | sort -nr`

`dmesg | grep -n USB`

`dmesg | grep -n USB | tail`

`dmesg > alle-meldungen.log`

`grep usb < alle-meldungen.log | tail > usb-meldungen.log`

`dmesg > alle-meldungen.log`

`grep usb < alle-meldungen.log | tail > usb-meldungen.log`

`find . -type f -mtime +1 -name "*.log" -exec zip -m {}.zip {} \; >/dev/null &`

### Reguläre Ausdrücke