Linux Spickzettel
Terminal-Befehle, Bash, Pipes und One-Liner
Navigation
Listet den Inhalt eines Verzeichnisses mit Berechtigungen, Größe und Datum.
ls -la /var/log
Wechselt das aktuelle Verzeichnis. Ohne Argument geht es ins Home.
cd /etc/nginx cd ~ cd - cd ..
Zeigt den vollständigen Pfad des aktuellen Verzeichnisses.
pwd
Zeigt den Verzeichnisbaum in visueller Form.
tree -L 2 ~/projects
Erkennt den Typ einer Datei (Text, Binärdatei, Bild, Skript usw.).
file image.png file -i script.sh
Zeigt detaillierte Metadaten einer Datei (Größe, Inode, Daten, Berechtigungen).
stat file.txt stat -c "%n %s %y" file.txt
Dateien
Erstellt eine leere Datei oder aktualisiert das Änderungsdatum.
touch newfile.txt touch -t 202601011200 file.txt
Erstellt ein Verzeichnis. Mit -p wird die ganze Eltern-Struktur angelegt.
mkdir -p projects/app/src mkdir -m 700 secret
Löscht ein leeres Verzeichnis.
rmdir empty_dir rmdir -p a/b/c
Löscht Dateien oder Verzeichnisse. Mit -rf rekursiv und ohne Bestätigung (gefährlich).
rm file.txt rm -rf node_modules
Kopiert Dateien oder Verzeichnisse.
cp file.txt backup.txt cp -r src/ dest/
Verschiebt oder benennt Dateien und Verzeichnisse um.
mv old.txt new.txt mv *.log archive/
Erstellt Links: -s für symbolisch, ohne Flag für Hardlink.
ln -s /usr/local/bin/node ~/node ln file hardlink
Gibt den Inhalt einer oder mehrerer Dateien auf stdout aus.
cat file.txt cat -n script.sh
Blättert seitenweise durch Dateien mit Navigation. Suche mit /. +F folgt wie tail -f.
less /var/log/syslog less +F app.log
Zeigt die ersten N Zeilen einer Datei (Default: 10).
head -n 20 file.txt head -c 1024 binary
Zeigt die letzten N Zeilen. -f folgt der Datei, während sie wächst.
tail -n 50 access.log tail -f /var/log/syslog
Zählt Zeilen (-l), Wörter (-w), Bytes (-c) oder Zeichen (-m).
wc -l file.txt wc *.md
Berechtigungen
Ändert die Berechtigungen (rwx) von Dateien und Verzeichnissen.
chmod 755 script.sh chmod +x deploy.sh chmod -R 644 docs/
Ändert den Eigentümer und/oder die Gruppe von Dateien.
chown user file.txt chown -R www-data:www-data /var/www
Führt einen Befehl als anderer Benutzer aus (standardmäßig root).
sudo apt update sudo -u postgres psql sudo -i
Wechselt zu einem anderen Benutzer. - lädt dessen Umgebung.
su - postgres su -c 'whoami' root
Erstellt (useradd) oder löscht (userdel) Benutzerkonten.
sudo useradd -m -s /bin/bash john sudo userdel -r john
Setzt oder ändert das Passwort eines Benutzers.
passwd sudo passwd john
Zeigt den aktuellen Benutzer (whoami) oder alle eingeloggten Benutzer (who).
whoami who who -a
Zeigt UID, GID und Gruppen des aktuellen Benutzers.
id id -nG groups
Prozesse
Listet Prozesse auf. aux zeigt alle Prozesse mit Details.
ps aux ps -ef
Zeigt Prozesse in Echtzeit, sortiert nach CPU-/Speichernutzung.
top top -u www-data top -p 1234
Sendet ein Signal an einen Prozess per PID. -9 erzwingt die Beendigung (SIGKILL).
kill 1234 kill -9 1234 kill -HUP $(pidof nginx)
Beendet Prozesse nach Name (killall) oder Muster (pkill).
killall firefox pkill -9 -f node pkill -u john
Verwaltet Shell-Jobs: jobs listet, fg holt in den Vordergrund, bg setzt im Hintergrund fort.
jobs fg %1 bg %2 # Ctrl+Z to suspend the foreground job
Führt einen Befehl aus, der auch nach dem Schließen des Terminals weiterläuft.
nohup ./long-task.sh > out.log 2>&1 & nohup python script.py &
Startet einen Prozess mit angepasster Priorität (nice) oder ändert die Priorität (renice).
nice -n 19 ./heavy.sh renice -n 5 -p 1234
Ein & am Ende des Befehls führt ihn im Hintergrund aus und gibt das Terminal frei.
./server.sh & long-task & disown %1
Netzwerk
Testet die Konnektivität durch ICMP-Pakete. -c begrenzt die Anzahl.
ping google.com ping -c 4 8.8.8.8
Macht HTTP/HTTPS-Anfragen und lädt Dateien herunter. Unterstützt GET, POST, Header, Authentifizierung.
curl https://api.github.com
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' url
curl -O https://example.com/file.zipLädt Dateien per HTTP/FTP herunter. Unterstützt Wiederaufnahme mit -c und rekursives Spiegeln.
wget https://example.com/file.zip wget -c <url> wget -r -np https://site/docs/
Verbindet sich per Secure Shell mit einem Remote-Server. -L erstellt Tunnel für lokale Ports.
ssh user@host ssh -p 2222 -i ~/.ssh/id_ed25519 user@host ssh -L 8080:localhost:80 user@host
Kopiert Dateien zwischen Maschinen über SSH.
scp file.txt user@host:/tmp/ scp -r dir/ user@host:/var/www/ scp user@host:/etc/conf .
Synchronisiert Dateien und Verzeichnisse effizient. -avz ist die häufigste Kombination.
rsync -avz src/ user@host:/dest/ rsync -av --delete --exclude='.git' a/ b/
Zeigt lauschende Ports und aktive Verbindungen. -tulpn ist die typische Nutzung.
ss -tulpn ss -t state established
Fragt DNS ab. dig ist detaillierter, nslookup einfacher, host kompakter.
dig google.com dig +short MX gmail.com nslookup example.com 8.8.8.8
Komprimierung
Packt und komprimiert Verzeichnisse. -czf erstellt mit gzip, -xzf entpackt.
tar -czvf archive.tar.gz folder/ tar -xzvf archive.tar.gz tar -tf archive.tar.gz
Zip-Komprimierung. unzip -l listet den Inhalt ohne Entpacken.
zip -r out.zip folder/ unzip archive.zip unzip -l archive.zip
Komprimiert/dekomprimiert einzelne Dateien mit gzip. -k behält das Original.
gzip file.txt gzip -d file.txt.gz gzip -k file.txt
Bzip2-Komprimierung, langsamer aber mit besserer Rate als gzip.
bzip2 file.txt bunzip2 file.txt.bz2
Xz-Komprimierung, noch bessere Rate. -T0 nutzt alle Kerne.
xz file.txt unxz file.txt.xz xz -T0 file
7z-Format, hohe Komprimierungsrate. Unterstützt Passwort und Split-Archive.
7z a out.7z folder/ 7z x archive.7z 7z a -p out.7z secret.txt
Suche
Sucht Dateien nach Name, Typ, Größe, Alter und führt Aktionen mit -exec aus.
find . -name "*.log" find / -type f -size +100M find . -mtime -7 find . -name "*.tmp" -delete
Sucht Muster in Dateien. -r rekursiv, -i ignoriert Groß-/Kleinschreibung, -E aktiviert Regex.
grep -rn "TODO" src/ grep -i error log grep -E "warn|error" file
Verarbeitet Text spaltenweise. Vollständige Sprache zum Parsen strukturierter Dateien.
awk '{print $1}' file.txt
awk -F',' '{print $2}' csv
awk '/error/ {count++} END {print count}' logBearbeitet Text-Streams. -i ändert die Datei direkt, meist für Substitutionen verwendet.
sed 's/old/new/g' file sed -i 's/old/new/g' file sed -n '10,20p' file
Findet Binärdateien und Dateien: locate (Cache), which (im PATH), whereis (Binär, Quelle, Manual).
locate nginx.conf which python3 whereis bash
Umleitung
Leitet stdout in eine Datei um und überschreibt vorhandenen Inhalt.
echo hello > out.txt ls -la > files.txt
Leitet stdout in eine Datei um und hängt an vorhandenen Inhalt an.
echo "line" >> log.txt date >> events.log
Verbindet stdout eines Befehls mit stdin des nächsten und verkettet Prozesse.
ls -la | grep .conf cat file | sort | uniq
Leitet stderr (fd 2) um. 2>&1 fügt stderr zu stdout hinzu. &> macht beides in bash.
cmd 2> errors.log cmd > out.log 2>&1 cmd &> all.log
Liest von stdin und schreibt in eine Datei UND auf stdout. -a hängt an statt zu überschreiben.
ls | tee files.txt echo 'data' | sudo tee /etc/conf make | tee -a build.log
Baut Befehle aus stdin. Unverzichtbar zum Kombinieren von find oder grep mit anderen Befehlen.
find . -name "*.log" | xargs rm
echo "a b c" | xargs -n 1
ls *.txt | xargs -I {} cp {} backup/Umgebung
Setzt Umgebungsvariablen, die von Kindprozessen geerbt werden.
export PATH="$PATH:/opt/bin" export API_KEY="abc123" export -p
Listet alle aktiven Umgebungsvariablen. printenv kann eine bestimmte zeigen.
env printenv PATH env VAR=value command
Erstellt Befehlskürzel. In ~/.bashrc oder ~/.zshrc setzen, um sie dauerhaft zu machen.
alias ll='ls -la' alias gs='git status' unalias ll
Gibt Text oder Variablen auf stdout aus. -e aktiviert Escapes wie \n und \t.
echo "Hello $USER" echo -e "line1\nline2" echo $PATH
Lädt ein Skript in der aktuellen Shell (nicht in einer Subshell). Nützlich für .bashrc und venv.
source ~/.bashrc . ~/.zshrc source venv/bin/activate
Zeigt den Befehlsverlauf. !! wiederholt den letzten, !N führt Befehl N aus.
history history | grep ssh !! !42
Pakete
Debian/Ubuntu Paketmanager. apt ist moderner und benutzerfreundlicher als apt-get.
sudo apt update && sudo apt upgrade sudo apt install nginx sudo apt remove --purge package apt search keyword
Red Hat/Fedora/CentOS Paketmanager. dnf ist der moderne Nachfolger von yum.
sudo dnf install nginx sudo yum update dnf search keyword
Paketmanager für macOS und Linux mit von der Community gepflegten Formeln.
brew install wget brew update && brew upgrade brew list brew search node
Arch Linux Paketmanager. -Syu aktualisiert alles, -S installiert, -R entfernt.
sudo pacman -S nginx sudo pacman -Syu pacman -Ss keyword
Universelle Pakete mit Sandboxing. Lassen sich auf jeder modernen Distribution installieren.
sudo snap install code flatpak install flathub org.gimp.GIMP snap list
SSH
Erzeugt SSH-Schlüsselpaare. ed25519 ist die aktuelle Empfehlung (schneller und sicherer als RSA).
ssh-keygen -t ed25519 -C "john.doe@example.com" ssh-keygen -t rsa -b 4096
Kopiert den öffentlichen Schlüssel in ~/.ssh/authorized_keys des Remote-Servers.
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
Der SSH-Agent hält entschlüsselte Schlüssel im Speicher, damit nicht bei jeder Verbindung nach der Passphrase gefragt wird.
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 ssh-add -l
Interaktiver SFTP-Client zum Übertragen von Dateien per SSH.
sftp user@host put file.txt get remote.zip ls bye
SSH-Konfigurationsdatei pro Host. Erlaubt Alias, Identität, Port und Jump Host.
Host myserver HostName 1.2.3.4 User john Port 2222 IdentityFile ~/.ssh/id_ed25519
Festplatte
Zeigt belegten und freien Platz pro Dateisystem. -h in lesbarem Format.
df -h df -h / df -i
Zeigt den Platzverbrauch von Dateien und Verzeichnissen. -sh Zusammenfassung in lesbarem Format.
du -sh * du -h --max-depth=1 du -ah . | sort -rh | head -20
Hängt ein Dateisystem an einem Mountpoint ein. umount hängt aus.
mount sudo mount /dev/sdb1 /mnt/data sudo umount /mnt/data
Listet Festplatten und Partitionen als Baum (lsblk) oder Tabelle (fdisk).
lsblk lsblk -f sudo fdisk -l
Zeigt gesamten, belegten, freien und gepufferten RAM. -h in lesbarem Format.
free -h free -m free -h -s 2
Monitoring
Verbesserte Version von top mit Farben, Scroll und beendet Prozesse mit F9.
htop htop -u www-data htop -p 1234,5678
Statistiken zu virtuellem Speicher, CPU, IO. Hilfreich zur Diagnose von Engpässen.
vmstat vmstat 2 5
Disk-IO-Statistiken. Identifiziert ausgelastete Festplatten.
iostat iostat -xz 2
Zeigt Kernel-Meldungen. Hilfreich zur Diagnose von Hardware- oder Treiberproblemen.
sudo dmesg | tail sudo dmesg -T sudo dmesg -w
Steuert systemd-Dienste: starten, stoppen, Status, beim Boot aktivieren.
sudo systemctl start nginx sudo systemctl status sshd sudo systemctl enable docker
Systemd-Logs. -f folgt live, -u filtert nach Dienst, --since nach Zeit.
journalctl -u nginx journalctl -f journalctl --since "1 hour ago" journalctl -p err
uptime zeigt, wie lange das System läuft und die Load Average. w listet eingeloggte Benutzer und ihre Tätigkeiten.
uptime w
Erweitert
Wiederholt einen Befehl periodisch. -d hebt Änderungen zwischen Durchläufen hervor.
watch -n 2 "df -h" watch -d "ls -l" watch "ps aux | grep node"
Erstellt persistente Terminal-Sessions, die Logouts überleben. Klassische Variante.
screen -S work screen -r work screen -ls # Ctrl+A D to detach
Moderner Terminal-Multiplexer: mehrere Fenster, Panes und persistente Sessions.
tmux new -s work tmux attach -t work tmux ls # Ctrl+B D to detach
Periodischer Aufgabenplaner. crontab -e bearbeitet die Jobs des aktuellen Benutzers.
crontab -e crontab -l 0 3 * * * /script.sh # daily at 3am */15 * * * * /poll.sh # every 15 minutes
Plant einen Befehl zur einmaligen Ausführung in der Zukunft.
echo "/script.sh" | at now + 1 hour at 14:30 tomorrow atq at -r 5
Referenz
Jeder Prozess hat drei Standard-Streams, identifiziert durch File Descriptors. Diese Streams zu verstehen ist der Schlüssel zum Kombinieren von Befehlen mit Pipes und Umleitungen.
stdinfd 0Standardeingabe. Standardmäßig von der Tastatur, kann aber durch eine Datei mit < oder durch das stdout eines anderen Befehls per Pipe ersetzt werden.
stdoutfd 1Standardausgabe. Geht standardmäßig zum Terminal. Wird mit > (überschreiben) oder >> (anhängen) umgeleitet.
stderrfd 2Fehler und Warnungen. Eigene Stream, damit sich Fehler nicht mit normaler Ausgabe vermischen. Wird mit 2> umgeleitet.
cmd > out.txt # stdout → file cmd 2> err.txt # stderr → file cmd > out 2>&1 # stdout + stderr → file cmd &> all.txt # bash shorthand cmd < input.txt # stdin ← file cmd1 | cmd2 # stdout cmd1 → stdin cmd2
Jede Datei hat drei Berechtigungsgruppen (Benutzer, Gruppe, andere) mit jeweils drei Bits (read, write, execute). Im numerischen Format ist jede Gruppe die Summe ihrer Bits.
u— Dateibesitzerg— Dateigruppeo— alle anderena— alle (u+g+o)
r= 4 — lesenw= 2 — schreibenx= 1 — ausführen (oder Verzeichnis betreten)
chmod 755 file # rwx r-x r-x (typical script) chmod 644 file # rw- r-- r-- (regular file) chmod 600 file # rw- --- --- (private, e.g. SSH key) chmod 700 dir # rwx --- --- (private dir) chmod +x script.sh # add execute for everyone chmod u+w,g-w file # add write to owner, remove from group chmod -R 755 dir/ # recursive
Die Shell kann mehrere Jobs gleichzeitig haben. Nur der Foreground-Job belegt das Terminal; Background-Jobs laufen weiter, während du andere Befehle eintippst.
Job, der das Terminal nutzt. Empfängt Tastatureingaben und zeigt die Ausgabe. Blockiert die Eingabeaufforderung bis zum Ende.
Job, der parallel läuft, ohne das Terminal zu belegen. Gibt die Eingabeaufforderung für andere Befehle frei. Mit kill beenden oder mit fg in den Vordergrund holen.
./long-task.sh & # start in background Ctrl+Z # suspend the foreground job jobs # list jobs of the current shell fg %1 # bring job 1 to foreground bg %1 # resume job 1 in background disown %1 # detach from shell (survives logout) nohup ./task.sh & # ignore HUP, redirect to nohup.out ps -ef # list all system processes
Häufige Befehlskombinationen für den Alltag. Jeder löst eine bestimmte Aufgabe in einer einzigen Pipeline.
- 01.Findet Dateien größer als 100MB im gesamten System.
find / -type f -size +100M 2>/dev/null - 02.Listet die 10 größten Dateien im aktuellen Verzeichnis.
du -ah . | sort -rh | head -10 - 03.Sucht und ersetzt Text in allen Dateien, die ihn enthalten.
grep -rl 'old' . | xargs sed -i 's/old/new/g' - 04.Zählt rekursiv die Gesamtzahl der Dateien.
find . -type f | wc -l - 05.Zeigt alle aktuell am System angemeldeten Benutzer.
who - 06.Macht alle .sh-Skripte rekursiv ausführbar.
find . -name '*.sh' -exec chmod +x {} + - 07.Wiederholt einen Befehl alle 2 Sekunden, um Änderungen live zu sehen.
watch -n 2 "df -h" - 08.Holt die externe öffentliche IP der aktuellen Maschine.
curl -s ifconfig.me - 09.Listet alle offenen Ports und die Prozesse, die sie benutzen.
ss -tulpn - 10.Zeigt die 10 Prozesse mit dem höchsten Speicherverbrauch.
ps aux --sort=-%mem | head -10 - 11.Zeigt die 10 Prozesse mit dem höchsten CPU-Verbrauch.
ps aux --sort=-%cpu | head -10 - 12.Findet kaputte Symlinks (zeigen auf nicht existierende Dateien).
find . -xtype l - 13.Löscht alle von macOS erzeugten .DS_Store-Dateien.
find . -name '.DS_Store' -delete - 14.Erstellt ein tar.gz-Backup mit dem Datum im Dateinamen.
tar czf backup-$(date +%F).tar.gz folder/ - 15.Startet einen einfachen HTTP-Server auf Port 8000 zum Teilen von Dateien.
python3 -m http.server 8000 - 16.Formatiert und gibt JSON lesbar aus.
cat data.json | python3 -m json.tool - 17.Verfolgt ein Log live, beginnend mit den letzten 100 Zeilen.
tail -f -n 100 logfile - 18.Findet alle leeren Dateien und Verzeichnisse.
find . -empty - 19.Zählt Codezeilen, indem alle .py-Dateien des Projekts addiert werden.
find . -name '*.py' | xargs wc -l - 20.Zeigt die Größe jedes Unterverzeichnisses, vom kleinsten zum größten sortiert.
du -h --max-depth=1 | sort -h