Shell Spickzettel

Shell mit Hands-on-Labs lernen

Lernen Sie Shell-Skripterstellung und Befehlszeilenoperationen durch praktische Labs und reale Szenarien. LabEx bietet umfassende Shell-Kurse, die wesentliche Bash-Befehle, Dateioperationen, Textverarbeitung, Prozessverwaltung und Automatisierung abdecken. Meistern Sie die Effizienz der Befehlszeile und Techniken des Shell-Skriptings.

Datei- & Verzeichnisoperationen

Dateien auflisten: ls

Dateien und Verzeichnisse am aktuellen Ort anzeigen.

# Dateien im aktuellen Verzeichnis auflisten
ls
# Mit detaillierten Informationen auflisten
ls -l
# Versteckte Dateien anzeigen
ls -a
# Mit menschenlesbaren Dateigrößen auflisten
ls -lh
# Nach Änderungszeit sortieren
ls -lt

Dateien erstellen: touch

Leere Dateien erstellen oder Zeitstempel aktualisieren.

# Eine neue Datei erstellen
touch neue_datei.txt
# Mehrere Dateien erstellen
touch datei1.txt datei2.txt datei3.txt
# Zeitstempel der vorhandenen Datei aktualisieren
touch vorhandene_datei.txt

Verzeichnisse erstellen: mkdir

Neue Verzeichnisse erstellen.

# Ein Verzeichnis erstellen
mkdir mein_verzeichnis
# Verschachtelte Verzeichnisse erstellen
mkdir -p eltern/kind/enkel
# Mehrere Verzeichnisse erstellen
mkdir verz1 verz2 verz3

Dateien kopieren: cp

Dateien und Verzeichnisse kopieren.

# Eine Datei kopieren
cp quelle.txt ziel.txt
# Verzeichnis rekursiv kopieren
cp -r quelle_verz ziel_verz
# Mit Bestätigungsaufforderung kopieren
cp -i datei1.txt datei2.txt
# Dateiattribute beibehalten
cp -p original.txt kopie.txt

Verschieben/Umbenennen: mv

Dateien und Verzeichnisse verschieben oder umbenennen.

# Eine Datei umbenennen
mv alter_name.txt neuer_name.txt
# Datei in Verzeichnis verschieben
mv datei.txt /pfad/zum/verzeichnis/
# Mehrere Dateien verschieben
mv datei1 datei2 datei3 ziel_verzeichnis/

Dateien löschen: rm

Dateien und Verzeichnisse entfernen.

# Eine Datei löschen
rm datei.txt
# Verzeichnis und Inhalt löschen
rm -r verzeichnis/
# Ohne Bestätigung erzwingen
rm -f datei.txt
# Interaktives Löschen (jede bestätigen)
rm -i *.txt

Aktuelles Verzeichnis: pwd

Den Pfad des aktuellen Arbeitsverzeichnisses ausgeben.

# Aktuelles Verzeichnis anzeigen
pwd
# Beispielausgabe:
/home/benutzer/dokumente

Verzeichnis wechseln: cd

In ein anderes Verzeichnis wechseln.

# Zum Home-Verzeichnis wechseln
cd ~
# Zum Elternverzeichnis wechseln
cd ..
# Zum vorherigen Verzeichnis wechseln
cd -
# Zu einem bestimmten Verzeichnis wechseln
cd /pfad/zum/verzeichnis
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was bewirkt cd ~?
Wechselt in das Home-Verzeichnis
Wechselt in das Root-Verzeichnis
Wechselt in das Elternverzeichnis
Erstellt ein neues Verzeichnis

Verzeichnisstruktur: tree

Anzeige der Verzeichnisstruktur im Baumformat.

# Verzeichnisbaum anzeigen
tree
# Tiefe auf 2 Ebenen begrenzen
tree -L 2
# Nur Verzeichnisse anzeigen
tree -d

Textverarbeitung & Suche

Dateien anzeigen: cat / less / head / tail

Dateiinhalte auf unterschiedliche Weise anzeigen.

# Gesamte Datei anzeigen
cat datei.txt
# Datei seitenweise anzeigen
less datei.txt
# Erste 10 Zeilen anzeigen
head datei.txt
# Letzte 10 Zeilen anzeigen
tail datei.txt
# Letzte 20 Zeilen anzeigen
tail -n 20 datei.txt
# Dateiänderungen verfolgen (nützlich für Logs)
tail -f protokoll.txt

In Dateien suchen: grep

Nach Mustern in Textdateien suchen.

# Nach Muster in Datei suchen
grep "muster" datei.txt
# Suche ohne Berücksichtigung der Groß-/Kleinschreibung
grep -i "muster" datei.txt
# Rekursiv in Verzeichnissen suchen
grep -r "muster" verzeichnis/
# Zeilennummern anzeigen
grep -n "muster" datei.txt
# Übereinstimmende Zeilen zählen
grep -c "muster" datei.txt
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was bewirkt grep -r "muster" verzeichnis/?
Sucht nur in der aktuellen Datei
Sucht rekursiv in allen Dateien im Verzeichnis
Ersetzt das Muster in Dateien
Löscht Dateien, die das Muster enthalten

Dateien finden: find

Dateien und Verzeichnisse anhand von Kriterien lokalisieren.

# Dateien nach Namen finden
find . -name "*.txt"
# Dateien nach Typ finden
find . -type f -name "konfig*"
# Verzeichnisse finden
find . -type d -name "backup"
# Dateien finden, die in den letzten 7 Tagen geändert wurden
find . -mtime -7
# Finden und Befehl ausführen
find . -name "*.log" -delete

Textmanipulation: sed / awk / sort

Textdaten verarbeiten und manipulieren.

# Text in Datei ersetzen
sed 's/alt/neu/g' datei.txt
# Spezifische Spalten extrahieren
awk '{print $1, $3}' datei.txt
# Dateiinhalt sortieren
sort datei.txt
# Doppelte Zeilen entfernen
sort datei.txt | uniq
# Worthäufigkeit zählen
cat datei.txt | tr ' ' '\n' | sort | uniq -c

Dateiberechtigungen & Eigentümerschaft

Berechtigungen anzeigen: ls -l

Detaillierte Datei- und Eigentümerberechtigungen anzeigen.

# Detaillierte Dateiinformationen anzeigen
ls -l
# Beispielausgabe:
# -rw-r--r-- 1 benutzer gruppe 1024 Jan 1 12:00 datei.txt
# d = Verzeichnis, r = lesen, w = schreiben, x = ausführen

Berechtigungen ändern: chmod

Datei- und Verzeichnisberechtigungen ändern.

# Ausführungsberechtigung für den Besitzer geben
chmod +x script.sh
# Spezifische Berechtigungen setzen (755)
chmod 755 datei.txt
# Schreibberechtigung für Gruppe/Andere entfernen
chmod go-w datei.txt
# Rekursive Berechtigungsänderung
chmod -R 644 verzeichnis/
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was setzt chmod 755 datei.txt?
Lesen, Schreiben, Ausführen für alle Benutzer
Lesen und Schreiben für den Besitzer, Lesen für andere
Lesen, Schreiben, Ausführen für den Besitzer; Lesen, Ausführen für Gruppe und andere
Nur Lesen für alle Benutzer

Eigentümerschaft ändern: chown / chgrp

Datei-Eigentümer und Gruppe ändern.

# Eigentümer ändern
chown neuer_eigentuemer datei.txt
# Eigentümer und Gruppe ändern
chown neuer_eigentuemer:neue_gruppe datei.txt
# Nur Gruppe ändern
chgrp neue_gruppe datei.txt
# Rekursive Eigentümeränderung
chown -R benutzer:gruppe verzeichnis/

Berechtigungszahlen

Verständnis der numerischen Berechtigungsnotation.

# Berechnungsformel:
# 4 = lesen (r), 2 = schreiben (w), 1 = ausführen (x)
# 755 = rwxr-xr-x (Besitzer: rwx, Gruppe: r-x, andere: r-x)
# 644 = rw-r--r-- (Besitzer: rw-, Gruppe: r--, andere: r--)
# 777 = rwxrwxrwx (volle Berechtigungen für alle)
# 600 = rw------- (Besitzer: rw-, Gruppe: ---, andere: ---)

Prozessverwaltung

Prozesse anzeigen: ps / top / htop

Informationen über laufende Prozesse anzeigen.

# Prozesse für den aktuellen Benutzer anzeigen
ps
# Alle Prozesse mit Details anzeigen
ps aux
# Prozesse im Baumformat anzeigen
ps -ef --forest
# Interaktiver Prozess-Viewer
top
# Verbesserter Prozess-Viewer (falls verfügbar)
htop

Hintergrundjobs: & / jobs / fg / bg

Hintergrund- und Vordergrundprozesse verwalten.

# Befehl im Hintergrund ausführen
befehl &
# Aktive Jobs auflisten
jobs
# Job in den Vordergrund holen
fg %1
# Job in den Hintergrund senden
bg %1
# Aktuellen Prozess anhalten
Ctrl+Z

Prozesse beenden: kill / killall

Prozesse nach PID oder Namen beenden.

# Prozess nach PID beenden
kill 1234
# Prozess erzwingen
kill -9 1234
# Alle Prozesse mit Namen beenden
killall firefox
# Spezifisches Signal senden
kill -TERM 1234

Systemüberwachung: free / df / du

Systemressourcen und Festplattennutzung überwachen.

# Speichernutzung anzeigen
free -h
# Festplattenspeicher anzeigen
df -h
# Verzeichnisgröße anzeigen
du -sh verzeichnis/
# Größte Verzeichnisse anzeigen
du -h --max-depth=1 | sort -hr

Eingabe-/Ausgabe-Umleitung

Umleitung: > / >> / <

Befehlsausgabe und Eingabe umleiten.

# Ausgabe in Datei umleiten (überschreiben)
befehl > ausgabe.txt
# Ausgabe an Datei anhängen
befehl >> ausgabe.txt
# Eingabe von Datei umleiten
befehl < eingabe.txt
# Ausgabe und Fehler umleiten
befehl > ausgabe.txt 2>&1
# Ausgabe verwerfen
befehl > /dev/null
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was ist der Unterschied zwischen > und >> bei der Shell-Umleitung?
> hängt an, >> überschreibt
> überschreibt die Datei, >> hängt an die Datei an
> leitet stdout um, >> leitet stderr um
Es gibt keinen Unterschied

Pipes: |

Befehle mithilfe von Pipes verketten.

# Grundlegende Pipe-Verwendung
befehl1 | befehl2
# Mehrere Pipes
cat datei.txt | grep "muster" | sort | uniq
# Zeilenanzahl der Ausgabe
ps aux | wc -l
# Lange Ausgabe seitenweise anzeigen
ls -la | less

Tee: tee

Ausgabe sowohl in Datei als auch in stdout schreiben.

# Ausgabe speichern und anzeigen
befehl | tee ausgabe.txt
# An Datei anhängen
befehl | tee -a ausgabe.txt
# Mehrere Ausgaben
befehl | tee datei1.txt datei2.txt

Here Documents: <<

Mehrzeilige Eingabe für Befehle bereitstellen.

# Datei mit Here Document erstellen
cat << EOF > datei.txt
Zeile 1
Zeile 2
Zeile 3
EOF
# E-Mail mit Here Document senden
mail benutzer@beispiel.com << EOF
Betreff: Test
Dies ist eine Testnachricht.
EOF

Variablen & Umgebung

Variablen: Zuweisung & Verwendung

Shell-Variablen erstellen und verwenden.

# Variablen zuweisen (keine Leerzeichen um =)
name="John"
anzahl=42
# Variablen verwenden
echo $name
echo "Hallo, $name"
echo "Anzahl: ${anzahl}"
# Befehlssubstitution
aktuelles_verzeichnis=$(pwd)
heutiges_datum=$(date +%Y-%m-%d)

Umgebungsvariablen: export / env

Umgebungsvariablen verwalten.

# Variable in die Umgebung exportieren
export PATH="/neu/pfad:$PATH"
export MEINE_VAR="wert"
# Alle Umgebungsvariablen anzeigen
env
# Spezifische Variable anzeigen
echo $HOME
echo $PATH
# Variable entfernen
unset MEINE_VAR

Spezielle Variablen

Eingebaute Shell-Variablen mit spezieller Bedeutung.

# Skriptargumente
$0  # Skriptname
$1, $2, $3...  # Erstes, zweites, drittes Argument
$#  # Anzahl der Argumente
$@  # Alle Argumente als separate Wörter
$*  # Alle Argumente als ein Wort
$?  # Exit-Status des letzten Befehls
# Prozessinformationen
$$  # Aktuelle Shell-PID
$!  # PID des letzten Hintergrundbefehls

Parameter-Expansion

Fortgeschrittene Techniken zur Variablenmanipulation.

# Standardwerte
${var:-standard}  # Standardwert verwenden, wenn var leer ist
${var:=standard}  # var auf Standardwert setzen, wenn leer
# String-Manipulation
${var#muster}   # Kürzeste Übereinstimmung vom Anfang entfernen
${var##muster}  # Längste Übereinstimmung vom Anfang entfernen
${var%muster}   # Kürzeste Übereinstimmung vom Ende entfernen
${var%%muster}  # Längste Übereinstimmung vom Ende entfernen

Skripting-Grundlagen

Skriptstruktur

Grundlegendes Skriptformat und Ausführung.

#!/bin/bash
# Dies ist ein Kommentar
# Variablen
begruessung="Hallo, Welt!"
benutzer=$(whoami)
# Ausgabe
echo $begruessung
echo "Aktueller Benutzer: $benutzer"
# Skript ausführbar machen:
chmod +x script.sh
# Skript ausführen:
./script.sh

Bedingte Anweisungen: if

Steuerung des Skriptflusses mit Bedingungen.

#!/bin/bash
if [ -f "datei.txt" ]; then
    echo "Datei existiert"
elif [ -d "verzeichnis" ]; then
    echo "Verzeichnis existiert"
else
    echo "Keines von beiden existiert"
fi
# String-Vergleich
if [ "$USER" = "root" ]; then
    echo "Als Root ausgeführt"
fi
# Numerischer Vergleich
if [ $anzahl -gt 10 ]; then
    echo "Anzahl ist größer als 10"
fi

Schleifen: for / while

Befehle mithilfe von Schleifen wiederholen.

#!/bin/bash
# For-Schleife mit Bereich
for i in {1..5}; do
    echo "Zahl: $i"
done
# For-Schleife mit Dateien
for datei in *.txt; do
    echo "Verarbeite: $datei"
done
# While-Schleife
anzahl=1
while [ $anzahl -le 5 ]; do
    echo "Anzahl: $anzahl"
    anzahl=$((anzahl + 1))
done

Funktionen

Wiederverwendbare Codeblöcke erstellen.

#!/bin/bash
# Funktion definieren
begruessen() {
    local name=$1
    echo "Hallo, $name!"
}
# Funktion mit Rückgabewert
addiere_zahlen() {
    local summe=$(($1 + $2))
    echo $summe
}
# Funktionen aufrufen
begruessen "Alice"
ergebnis=$(addiere_zahlen 5 3)
echo "Summe: $ergebnis"

Netzwerk- & Systembefehle

Netzwerkbefehle

Konnektivität und Netzwerkkonfiguration testen.

# Netzwerkverbindung testen
ping google.com
ping -c 4 google.com  # Nur 4 Pakete senden
# DNS-Abfrage
nslookup google.com
dig google.com
# Netzwerkkonfiguration
ip addr show  # IP-Adressen anzeigen
ip route show # Routing-Tabelle anzeigen
# Dateien herunterladen
wget https://example.com/datei.txt
curl -O https://example.com/datei.txt

Systeminformationen: uname / whoami / date

System- und Benutzerinformationen abrufen.

# Systeminformationen
uname -a      # Alle Systeminfos
uname -r      # Kernel-Version
hostname      # Computername
whoami        # Aktueller Benutzername
id            # Benutzer-ID und Gruppen
# Datum und Uhrzeit
date          # Aktuelles Datum/Uhrzeit
date +%Y-%m-%d # Benutzerdefiniertes Format
uptime        # Systemlaufzeit

Archiv & Komprimierung: tar / zip

Komprimierte Archive erstellen und extrahieren.

# Tar-Archiv erstellen
tar -czf archiv.tar.gz verzeichnis/
# Tar-Archiv extrahieren
tar -xzf archiv.tar.gz
# Zip-Archiv erstellen
zip -r archiv.zip verzeichnis/
# Zip-Archiv extrahieren
unzip archiv.zip
# Archivinhalt anzeigen
tar -tzf archiv.tar.gz
unzip -l archiv.zip

Dateiübertragung: scp / rsync

Dateien zwischen Systemen übertragen.

# Datei auf entfernten Server kopieren
scp datei.txt benutzer@server:/pfad/zum/ziel
# Von entferntem Server kopieren
scp benutzer@server:/pfad/zur/datei.txt .
# Verzeichnisse synchronisieren (lokal zu remote)
rsync -avz lokales_verz/ benutzer@server:/entferntes_verz/
# Synchronisieren mit Löschen (Spiegeln)
rsync -avz --delete lokales_verz/ benutzer@server:/entferntes_verz/

Befehlshistorie & Tastenkürzel

Befehlshistorie: history

Vorherige Befehle anzeigen und wiederverwenden.

# Befehlshistorie anzeigen
history
# Letzte 10 Befehle anzeigen
history 10
# Vorherigen Befehl ausführen
!!
# Befehl nach Nummer ausführen
!123
# Letzten Befehl ausführen, der mit 'ls' beginnt
!ls
# Interaktive Suche in der Historie
Ctrl+R

Historie-Expansion

Teile vorheriger Befehle wiederverwenden.

# Argumente des letzten Befehls
!$    # Letztes Argument des vorherigen Befehls
!^    # Erstes Argument des vorherigen Befehls
!*    # Alle Argumente des vorherigen Befehls
# Beispielverwendung:
ls /sehr/langer/pfad/zur/datei.txt
cd !$  # Wechselt zu /sehr/langer/pfad/zur/datei.txt

Tastenkürzel

Wesentliche Abkürzungen für effiziente Befehlszeilennutzung.

# Navigation
Ctrl+A  # Zum Zeilenanfang bewegen
Ctrl+E  # Zum Zeilenende bewegen
Ctrl+F  # Ein Zeichen vorwärts bewegen
Ctrl+B  # Ein Zeichen rückwärts bewegen
Alt+F   # Ein Wort vorwärts bewegen
Alt+B   # Ein Wort rückwärts bewegen
# Bearbeitung
Ctrl+U  # Zeile vor dem Cursor löschen
Ctrl+K  # Zeile nach dem Cursor löschen
Ctrl+W  # Wort vor dem Cursor löschen
Ctrl+Y  # Zuletzt gelöschten Text einfügen
# Prozesssteuerung
Ctrl+C  # Aktuellen Befehl unterbrechen
Ctrl+Z  # Aktuellen Befehl suspendieren
Ctrl+D  # Shell beenden oder EOF

Befehlskombinationen & Tipps

Nützliche Befehlskombinationen

Leistungsstarke Einzeiler für häufige Aufgaben.

# Text in mehreren Dateien finden und ersetzen
find . -name "*.txt" -exec sed -i 's/alt/neu/g' {} \;
# Größte Dateien im aktuellen Verzeichnis finden
du -ah . | sort -rh | head -10
# Log-Datei auf bestimmtes Muster überwachen
tail -f /var/log/syslog | grep "FEHLER"
# Dateien in einem Verzeichnis zählen
ls -1 | wc -l
# Backup mit Zeitstempel erstellen
cp datei.txt datei.txt.backup.$(date +%Y%m%d-%H%M%S)

Aliase & Funktionen

Verknüpfungen für häufig verwendete Befehle erstellen.

# Aliase erstellen (zu ~/.bashrc hinzufügen)
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
# Alle Aliase anzeigen
alias
# Persistente Aliase in ~/.bashrc erstellen:
echo "alias meinbefehl='langer befehl hier'" >>
~/.bashrc
source ~/.bashrc

Jobsteuerung & Screen-Sitzungen

Langlaufende Prozesse und Sitzungen verwalten.

# Befehl im Hintergrund starten
nohup langlaufender_befehl &
# Screen-Sitzung starten
screen -S meine_sitzung
# Von Screen trennen: Strg+A dann D
# Erneut mit Screen verbinden
screen -r meine_sitzung
# Screen-Sitzungen auflisten
screen -ls
# Alternative: tmux
tmux new -s meine_sitzung
# Trennen: Strg+B dann D
tmux attach -t meine_sitzung

Systemwartung

Häufige Systemadministrationsaufgaben.

# Festplattennutzung prüfen
df -h
du -sh /*
# Speichernutzung prüfen
free -h
cat /proc/meminfo
# Laufende Dienste prüfen
systemctl status dienst_name
systemctl list-units --type=service
# Paketlisten aktualisieren (Ubuntu/Debian)
sudo apt update && sudo apt upgrade
# Nach installierten Paketen suchen
dpkg -l | grep paket_name