// Ratgeber · Linux · Grundlagen

Die wichtigsten Linux-Befehle: Referenz für den Client und Serveralltag

📅 19.09.2026 ⏱ 20 Min. Lesezeit

Man muss nicht hunderte Befehle auswendig kennen. Es reicht, etwa dreißig sicher zu beherrschen und für den Rest zu wissen, wo man nachschaut. Dieser Artikel ist deshalb keine Liste zum Auswendiglernen, sondern eine Referenz zum Nachschlagen: nach Aufgaben sortiert, mit Beispielen, einer Handvoll Praxis-Rezepten für typische Serverprobleme – und einer Warnliste der Befehle, die man niemals blind tippt.

Notation & Tastenkürzel

Damit die Tabellen lesbar bleiben, gelten hier diese Konventionen:

SchreibweiseBedeutung
befehl [option] zielEckige Klammern sind optional – du lässt sie weg, sie sind keine Eingabe.
platzhalterEin Name, den du ersetzt: datei, dienst, host.
sudoFührt den Befehl als Root aus. Nie „vorsichtshalber“ überall davorsetzen.
|Pipe: die Ausgabe links wird Eingabe rechts (ps aux | grep nginx).
> und >>Ausgabe in Datei schreiben – überschreibt bzw. hängt an.
# -> das ist kein Befehl, sondern ein Kommentar fuer dich
sudo systemctl restart nginx    # als Root neu starten

Diese Tastenkürzel sparen im Terminal mehr Zeit als jeder Befehl:

TastenWirkung
TabAutovervollständigung von Befehlen und Pfaden – dein wichtigster Schutz vor Tippfehlern.
Ctrl + CBricht den laufenden Befehl ab.
Ctrl + DSendet „Dateiende“ – beendet auch eine Shell-Sitzung.
Ctrl + ZStoppt den Befehl und legt ihn in den Hintergrund (fg holt ihn zurück).
Ctrl + RBefehlshistorie durchsuchen – tippe ein Fragment, z. B. systemct.
Ctrl + LBildschirm leeren (entspricht clear).
Ctrl + U / KZeile vor bzw. ab dem Cursor löschen.
Ctrl + A / EAn den Zeilenanfang bzw. das Zeilenende springen.
Zwei Ausrufezeichen: !! wiederholt den letzten Befehl, sudo !! führt ihn mit Root-Rechten aus – der Klassiker, wenn du sudo vergessen hast. Mit !$ setzt du das letzte Argument ein (mkdir test && cd !$).

Die Basics: 12 Befehle für alles

Wenn du nur eine Handvoll Befehle mitnimmst, dann diese:

BefehlWas er tutBeispiel
ls -lahDateien auflisten: lang, alle (auch versteckte), lesbare Größenls -lah /etc/nginx
cdVerzeichnis wechseln. - springt zur vorherigen Positioncd /var/log && cd -
cat / lessDatei ausgeben bzw. seitenweise lesenless /etc/ssh/sshd_config
cp / mvKopieren bzw. verschieben/umbenennencp -a config config.bak
rmLöschen. -r rekursiv, -i fragt nachrm -i notiz.txt
grepIn Dateien oder Ausgaben suchengrep -rn 'Listen' /etc/apache2
findNach Dateien suchen (Name, Größe, Alter)find /var/log -name '*.log' -mtime +30
du / dfPlatzverbrauch von Ordnern bzw. freien Platz auf Plattendf -h
ps / topLaufende Prozesse ansehenps aux --sort=-%mem | head
systemctlDienste starten, stoppen, Status prüfensystemctl status nginx
journalctlLogs des Systems und der Dienste lesenjournalctl -u nginx -n 50
manHandbuchseite lesen – die Antwort auf fast allesman rsync
Finde deinen Weg zurück: Wenn du dich verrannt hast, hilft dieser Dreiklang fast immer: df -h (Platte voll?), systemctl --failed (Dienst kaputt?), journalctl -p err -b (was ist seit dem Start schiefgelaufen?).

Dateien & Verzeichnisse

BefehlBedeutungBeispiel
pwd„print working directory“ – wo bin ich?pwd
mkdir -pOrdner anlegen, inklusive fehlender Elternordnermkdir -p /opt/stacks/nginx
touchLeere Datei anlegen oder Zeitstempel aktualisierentouch .env
cp -aKopieren mit Rechten, Besitzer und Zeitstempelncp -a site/ site.backup/
rsync -avIntelligentes Kopieren – ideal für große Ordnerrsync -av --dry-run quelle/ ziel/
mvVerschieben oder umbenennenmv alt.conf neu.conf
ln -sSymbolischen Link erzeugenln -s /opt/app/current /var/www/html
statAlle Metadaten einer Datei (Rechte, Zeit, Inode)stat /etc/passwd
fileDateityp bestimmen – auch ohne Endungfile unbekannt.bin
readlink -fLink auflösen und den echten Pfad zeigenreadlink -f /var/www/html
tree -L 2Verzeichnisbaum anzeigen (Paket tree)tree -L 2 /opt/stacks
basename / dirnameNur Dateiname bzw. nur Pfad aus einem Pfad ziehenbasename /etc/nginx/nginx.conf
Der Schlussstrich bei rsync ist wichtig: quelle/ (mit Schrägstrich) kopiert den Inhalt, quelle (ohne) kopiert den Ordner selbst in das Ziel. Der zweithäufigste Fehler ist --delete: Das löscht im Ziel alles, was in der Quelle fehlt – teste damit immer zuerst mit --dry-run.

Ansehen & Bearbeiten

BefehlBedeutungBeispiel
lessSeitenweise lesen. /wort sucht, n springt weiter, G ans Ende, q beendetless -S /var/log/syslog
head -n 20Die ersten 20 Zeilenhead -n 20 config.yml
tail -n 50Die letzten 50 Zeilentail -n 50 /var/log/nginx/error.log
tail -fDatei „mitlesen“ – perfekt für Logstail -f /var/log/nginx/access.log
wc -lZeilen zählenwc -l /var/log/nginx/access.log
nlAusgabe mit Zeilennummernnl script.sh
nanoEinsteiger-Editor. Ctrl+O speichern, Ctrl+X beenden, Ctrl+W suchennano /etc/hosts
vimMächtiger Editor. i = einfügen, Esc, :wq = speichern+schließen, :q! = verwerfenvim /etc/fstab
diffZwei Dateien vergleichendiff -u nginx.conf.bak nginx.conf
teeAusgabe gleichzeitig anzeigen und in eine Datei schreibenecho 'text' | sudo tee -a /etc/hosts
Vor jeder Änderung eine Kopie: sudo cp datei datei.$(date +%F).bak. Das dauert eine Sekunde und hat schon viele Abende gerettet – der Zeitstempel im Namen verhindert, dass du ein Backup überschreibst.

Suchen & Textverarbeitung

BefehlBedeutungBeispiel
grep -rnRekursiv suchen und Zeilennummern zeigengrep -rn 'Listen 80' /etc/apache2
grep -iSuche ohne Groß-/Kleinschreibunggrep -i error /var/log/syslog
grep -vZeilen ohne den Treffer (aussortieren)grep -v '^#' sshd_config
grep -rlNur Dateinamen ausgeben, die den Treffer enthaltengrep -rl 'alte-domain.de' /etc/nginx
grep -EErweiterte reguläre Ausdrücke (|, +, ?)grep -E 'error|failed' log
find -nameNach Namen suchenfind / -xdev -name 'id_ed25519*'
find -size +1GNach Größe suchenfind / -xdev -type f -size +1G 2>/dev/null
find -deleteSofort löschen – erst mit -print prüfen!find /var/log -name '*.gz' -mtime +90 -print
sed -iErsetzen direkt in der Dateised -i.bak 's/8080/80/g' config.yml
awkSpaltenweise auswertenawk -F: '{print $1}' /etc/passwd
cut -d: -f1Spalten nach Trennzeichen herausschneidencut -d: -f1,3 /etc/passwd
sort / sort -hSortieren, -h versteht Größen wie 1K, 4Msort -h datei
uniq -cDoppelte Zeilen zählen – vorher sort!sort log | uniq -c | sort -rn | head
trZeichen ersetzen oder löschentr 'a-z' 'A-Z' < datei
xargsAusgabe als Argumente weitergebengrep -rl alt . | xargs sed -i 's/alt/neu/g'
jqJSON lesbar filtern (Paket jq)jq -r '.name' paket.json
„Kein Platz mehr“, obwohl Platz frei ist: Oft fehlen keine Bytes, sondern Inodes – also sehr viele kleine Dateien. df -i zeigt es. Typische Verursacher: Session-Dateien, Log-Fragmente, Cache-Verzeichnisse.

Rechte & Besitzer

Linux-Rechte sind drei Buchstaben für drei Gruppen: Besitzer, Gruppe, alle anderen. Jeder Buchstabe hat einen Zahlenwert.

WertRechtBedeutung bei
4r – readDatei lesen / Ordner auflisten
2w – writeDatei ändern / Ordner befüllen
1x – executeProgramm starten / Ordner betreten
BefehlBedeutungBeispiel
chmod 644Standard für Dateien: Besitzer schreibt, alle lesenchmod 644 index.html
chmod 600Nur der Besitzer darf lesen und schreibenchmod 600 ~/.ssh/id_ed25519
chmod 755Standard für Verzeichnisse und Skriptechmod 755 /usr/local/bin/script.sh
chmod u+xAusführbar machen (symbolisch)chmod u+x backup.sh
chmod -RRekursiv – besonders vorsichtig verwendenchmod -R u=rwX,go=rX webroot
chown user:gruppeBesitzer und Gruppe setzenchown www-data:www-data webroot
chown -RRekursiv – der häufigste Fehler mit Folgenchown -R www-data /var/www/site
umaskStandardrechte für neue Dateien (022 = 644/755)umask
id / groupsEigene UID/GID und Gruppenmitgliedschaftenid www-data
sudo -u userBefehl als ein bestimmter Nutzer ausführensudo -u www-data php artisan cache:clear
setfaclErweiterte Rechte über die Gruppen hinaussetfacl -m u:backup:rX /srv/daten
lsattrDateisystem-Attribute ansehenlsattr /etc/hosts
Das X in u=rwX,go=rX kennt den Unterschied: Es setzt das Ausführbar-Bit nur bei Verzeichnissen und bereits ausführbaren Dateien. Damit verhinderst du, dass eine Textdatei durch ein rekursives chmod +x zum „Programm“ wird.

Prozesse

BefehlBedeutungBeispiel
ps auxAlle laufenden Prozesseps aux | grep nginx
ps --sortSortiert – wer frisst Speicher?ps aux --sort=-%mem | head
pgrep -aProzess-IDs zu einem Namen finden (mit Befehl)pgrep -af node
top / htopLive-Übersicht: Last, Speicher, Prozessehtop
kill -15 PIDBittet den Prozess zu beenden (SIGTERM) – immer zuerstkill -15 1234
kill -9 PIDErzwingt das Ende (SIGKILL) – keine Aufräumarbeit mehrkill -9 1234
pkill -fNach Kommandozeile beenden statt PIDpkill -f 'python manage.py'
nice / renicePriorität eines Prozesses senken oder ändernnice -n 10 tar -czf …
lsof -i :80Welcher Prozess benutzt diesen Port?sudo lsof -i :80
lsof +L1Gelöschte, aber noch offene Dateien – klassische Ursache für „Platte voll“sudo lsof +L1 | head
nohup … &Befehl läuft weiter, wenn die Sitzung endetnohup ./script.sh > log 2>&1 &
jobs / fg / bgHintergrundjobs ansehen und zurückholenjobs -l
Erst -15, dann -9: SIGTERM gibt Programmen die Chance, offene Dateien zu schreiben und Verbindungen zu schließen. kill -9 ist ein Notaus – danach kann ein Dienst in einem halbfertigen Zustand zurückbleiben.

Dienste: systemd & Logs

BefehlBedeutungBeispiel
systemctl statusZustand, letzte Logzeilen, aktiver Prozesssystemctl status nginx --no-pager
systemctl restartDienst komplett neu startensudo systemctl restart nginx
systemctl reloadKonfiguration neu laden, ohne zu unterbrechensudo systemctl reload nginx
systemctl enable --nowDienst sofort starten und beim Boot aktivierensudo systemctl enable --now docker
systemctl list-units --failedWas ist gerade kaputt?systemctl --failed
systemctl list-timersAlle Timer und ihre nächsten Laufzeitensystemctl list-timers --all
systemctl catDie Unit-Datei anzeigen (inkl. Overrides)systemctl cat nginx
systemctl editErgänzungen schreiben, ohne die Originaldatei anzufassensudo systemctl edit nginx
journalctl -uLogs genau eines Dienstesjournalctl -u ssh -n 100 --no-pager
journalctl -fLogs live mitlesenjournalctl -fu nginx
journalctl -p err -bNur Fehler seit dem letzten Bootjournalctl -p err -b
journalctl --sinceZeitraum eingrenzenjournalctl --since "1 hour ago" -u ssh
journalctl --disk-usageWie viel Platz belegen die Logs?journalctl --vacuum-time=7d
crontab -eZeitgesteuerte Aufgaben des eigenen Nutzerscrontab -l
timedatectlZeit, Zeitzone und NTP-Statustimedatectl status
Timer statt Cron: Für Serveraufgaben sind systemd-Timer die bessere Wahl – sie können verpasste Läufe nachholen (Persistent=true) und nur starten, wenn ein Datenträger gemountet ist (RequiresMountsFor=). Beides kannst du in crontab nicht ausdrücken.

Paketverwaltung (apt)

BefehlBedeutungBeispiel
apt updatePaketlisten aktualisieren (installiert nichts!)sudo apt update
apt full-upgradeAlle Pakete aktualisieren, auch mit Abhängigkeitsänderungensudo apt full-upgrade
apt installPaket installierensudo apt install htop
apt remove / purgeEntfernen bzw. entfernen inklusive Konfigurationsudo apt purge altes-paket
apt autoremove --purgeNicht mehr benötigte Abhängigkeiten entfernensudo apt autoremove --purge
apt list --upgradableWas wäre aktualisierbar?apt list --upgradable
apt-cache searchNach Paketen suchenapt-cache search fail2ban
apt showDetails, Version, Abhängigkeitenapt show nginx
dpkg -lInstallierte Pakete auflistendpkg -l | grep -c '^ii'
dpkg -SZu welchem Paket gehört diese Datei?dpkg -S /usr/bin/curl
apt-mark holdPaket von Updates ausnehmensudo apt-mark hold linux-image-amd64
needrestartZeigt, welche Dienste nach Updates neu starten müssensudo needrestart -r l
apt updateapt upgrade: Der erste Befehl holt nur die Listen, installiert aber nichts. Und: Ein Kernel-Update wird erst nach einem Neustart aktiv – wenn du monatelang nicht rebootest, läuft weiter der alte Kernel mit den alten Lücken.

Netzwerk & Ports

BefehlBedeutungBeispiel
ip -br aAlle Netzwerkgeräte mit IP-Adressen, kurz und lesbarip -br a
ip -br rRouting-Tabelle – wohin geht der Verkehr?ip r get 1.1.1.1
ip neighBekannte Nachbarn im lokalen Netz (ARP)ip neigh show
ss -tulpenAlle offenen Ports, Prozess und Nutzer dazusudo ss -tulpen
ss -tan state establishedNur aktive Verbindungenss -tan state established
ping -c 4Erreichbarkeit prüfen (4 Pakete, dann Ende)ping -c 4 1.1.1.1
dig +shortDNS-Auflösung prüfen – die Wahrheit statt Browser-Cachedig +short MX meine.domain
curl -INur die HTTP-Header einer URL anzeigencurl -I https://meine.domain
curl -wStatuscode und Zeit messencurl -sS -o /dev/null -w '%{http_code}\n' URL
wget -cDatei herunterladen, abgebrochene fortsetzenwget -c https://…/datei.iso
nc -zvTesten, ob ein Port offen istnc -zv host 22
tracerouteWelchen Weg nehmen die Pakete?traceroute -T meine.domain
tcpdumpPakete mitschneiden (nur für Diagnose)sudo tcpdump -ni any port 53
ufw statusRegeln der einfachen Firewall anzeigensudo ufw status verbose
nft list rulesetDie tatsächlich aktiven Firewall-Regelnsudo nft list ruleset
Die drei Fehlerquellen in Reihenfolge prüfen: Erst DNS (dig +short meine.domain), dann Port (nc -zv host 443), dann Anwendung (curl -I https://…). So findest du in 60 Sekunden, ob es die Namensauflösung, die Firewall oder der Webserver ist.

Platten, Speicher & SMART

BefehlBedeutungBeispiel
df -hFreier Platz aller Dateisystemedf -h /var
df -iInodes – „kein Platz“, obwohl Bytes frei sinddf -i
du -shGröße eines Ordners (Gesamtsumme)du -sh /var/log
du --max-depthGrößen der Unterordner sortiertdu -h --max-depth=1 /var | sort -h
lsblk -fPlatten, Partitionen, Dateisysteme, Mountpunktelsblk -f
blkidUUIDs der Dateisysteme (für /etc/fstab)sudo blkid
findmntIst dieser Ordner wirklich ein Mount?findmnt /mnt/backup
mount / umountEin- und aushängensudo umount /mnt/backup
fuser -mWer blockiert das Aushängen?sudo fuser -vm /mnt/backup
free -hRAM- und Swap-Belegungfree -h
swapon --showAktive Swap-Bereiche bzw. -Dateienswapon --show
smartctl -aGesundheit der Festplatte (Paket smartmontools)sudo smartctl -a /dev/sda
smartctl -t shortSchneller Selbsttest der Plattesudo smartctl -t short /dev/sda
ncduInteraktive Platz-Analyse (Paket ncdu)ncdu /var
Die df-Ausgabe kann lügen: Sie zeigt dir nur, was eingehängt ist. Wenn eine Platte nicht gemountet wurde, schreibt dein Backup auf die Systemplatte und füllt sie. Deshalb bei Automatismen immer findmnt /mnt/backup bzw. RequiresMountsFor= voranschalten.

Benutzer, SSH & Dateitransfer

BefehlBedeutungBeispiel
whoami / idWer bin ich und welche Rechte habe ich?id
adduserNeuen Benutzer anlegen (interaktiv, legt Home an)sudo adduser maria
usermod -aGBenutzer zu einer Gruppe hinzufügen (-a nicht vergessen!)sudo usermod -aG sudo maria
passwdPasswort setzen oder ändernsudo passwd -l maria
userdel -rBenutzer inklusive Home löschensudo userdel -r altes-konto
who / wWer ist gerade angemeldet?w
last -n 20Letzte Anmeldungen – prüfe, wer da warlast -n 20
ssh-keygen -t ed25519Modernes Schlüsselpaar erzeugenssh-keygen -t ed25519 -C "maria@server"
ssh-copy-idÖffentlichen Schlüssel auf den Zielserver bringenssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
ssh -pVerbindung mit Port und Schlüsselssh -p 2222 -i ~/.ssh/id_ed25519 user@host
scp -rDateien/Ordner rekursiv kopierenscp -r site/ user@host:/srv/
rsync -avzSynchronisieren – schneller und wiederholbarrsync -avz --dry-run site/ user@host:/srv/site/
sshfsEntfernten Ordner lokal einhängensshfs user@host:/srv /mnt/remote
sftpInteraktiver Dateitransfer über SSHsftp user@host

Ein Eintrag in ~/.ssh/config erspart dir jeden Tag Tipparbeit:

Host srv
    HostName 203.0.113.10
    User maria
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

# Kurzform danach:
ssh srv
rsync -av site/ srv:/srv/site/
Verwechselte Argument-Reihenfolge ist ein Klassiker: Bei rsync und scp steht die Quelle zuerst. rsync -av local/ srv:/ziel/ schiebt hoch, rsync -av srv:/ziel/ local/ zieht herunter. Mit --dry-run siehst du vorher, was passieren würde.

Archive & Kompression

BefehlBedeutungBeispiel
tar -czfgzip-Archiv erstellen (c=create, z=gzip, f=Datei)tar -czf site.tar.gz /srv/site
tar -xzfgzip-Archiv entpackentar -xzf site.tar.gz -C /tmp
tar -tzfArchiv nur ansehen, nichts entpackentar -tzf site.tar.gz | head
tar --excludePfade ausschließentar -czf b.tgz --exclude='*.log' /srv
tar -cJfWie oben, aber mit xz – kleinere Dateien, mehr CPUtar -cJf site.tar.xz /srv/site
gzip -kEinzelne Datei komprimieren, Original behaltengzip -k dump.sql
zcat / zlessKomprimierte Dateien direkt lesenzless /var/log/syslog.2.gz
zip -r / unzipWindows-kompatibles Archiv erzeugen bzw. entpackenunzip -l archiv.zip
xz -T0 -9Maximale Kompression auf allen Kernenxz -T0 -9 bigfile
tar -czf - . | sshArchiv direkt auf einen anderen Server streamentar -czf - /srv | ssh srv 'cat > /backup/site.tgz'
ddByteweise kopieren – für Images, nicht für Dateiendd if=/dev/sda of=/backup/disk.img bs=4M status=progress
Was ist schneller? lz4 > zstd > gzip > xz – in dieser Reihenfolge nimmt die Geschwindigkeit ab und die Kompressionsrate zu. Für regelmäßige Backups ist zstd fast immer der beste Kompromiss.

System-Info & Diagnose

BefehlBedeutungBeispiel
uname -aKernel und Architektur – welcher Kernel läuft wirklich?uname -r
hostnamectlHostname, OS-Version, Kernel, Virtualisierunghostnamectl
uptime -pLaufzeit und Systemlast in Wortenuptime -p
lscpuCPU-Details, Kerne, Flags (z. B. AES-NI)lscpu | head
lspci -nnkPCI-Geräte und die geladenen Treiberlspci -nnk | grep -iA3 vga
lsusbAngeschlossene USB-Gerätelsusb
dmidecode -t memoryBestückte RAM-Riegel und Slotssudo dmidecode -t memory | head -30
dmesg -TKernel-Meldungen mit Zeitstempelsudo dmesg -T | tail -30
journalctl -k -bKernel-Logs seit dem letzten Startjournalctl -k -b -p warning
historyBefehlshistoriehistory | grep rsync
man -kHandbuchseiten nach Stichwort durchsuchenman -k 'disk usage'
BEFEHL --helpSchnelle Hilfe statt langer Manpagersync --help
Ein Neustart zeigt, ob es der Kernel war: Meldungen wie „PCIe Bus Error“, „I/O error“ oder „TASK hung for X seconds“ erscheinen nur in dmesg bzw. journalctl -k. Wenn dein Server ohne Log-Eintrag abstürzt, ist die Hardware der erste Verdacht – dann smartctl und einen längeren memtest laufen lassen.

Docker & Compose

BefehlBedeutungBeispiel
docker ps -aAlle Container, auch gestoppte, mit Portsdocker ps -a --format 'table {{.Names}}\t{{.Status}}'
docker logs -fLogs eines Containers live mitlesendocker logs -f --tail 100 nginx
docker exec -itIn einen laufenden Container hineinschauendocker exec -it nginx bash
docker inspectKomplette Konfiguration als JSONdocker inspect -f '{{.State.Status}}' nginx
docker statsLive: CPU, RAM, Netzwerk je Containerdocker stats --no-stream
docker system dfPlatzverbrauch von Images, Volumes, Cachedocker system df
docker system pruneUngenutztes aufräumen (erst mit -n prüfen!)docker image prune -a
docker compose pullNeue Images ziehen, ohne zu startendocker compose pull && docker compose up -d
docker compose up -dStack starten oder Änderungen übernehmendocker compose up -d
docker compose psStatus des Stacksdocker compose ps
docker compose logs -fLogs aller Dienste des Stacksdocker compose logs -f --tail 50
docker compose downStack stoppen und Container entfernen (Volumes bleiben)docker compose down
docker compose configCompose-Datei validieren und fertig aufgelöst anzeigendocker compose config -q
docker compose down -v löscht Volumes – und damit deine Daten. Das -v ist der häufigste Datenverlust in Docker-Umgebungen. Ohne -v bleiben die Volumes erhalten, und ein up -d bringt alles unverändert zurück.

Rezepte für den Alltag

Einzelne Befehle kann man nachschlagen – Kombinationen muss man kennen. Diese sechs decken die häufigsten Serverprobleme ab:

1. Die Platte ist voll – wo?

df -h                                   # welches Dateisystem ist voll?
du -h --max-depth=1 / 2>/dev/null | sort -h | tail -15   # groesste Ordner
sudo lsof +L1                           # geloeschte, noch offene Dateien

2. Wer belegt diesen Port?

sudo ss -tulpen | grep ':80'
sudo lsof -i :80                        # zeigt Prozessname und PID

3. Ein Dienst startet nicht – warum?

systemctl status mein-dienst --no-pager
journalctl -u mein-dienst -n 100 --no-pager
systemd-analyze verify /etc/systemd/system/mein-dienst.service

4. Log live verfolgen und nur Fehler sehen

journalctl -fu nginx | grep --line-buffered -iE 'error|crit|fail'

5. Einen Begriff in vielen Dateien ersetzen

grep -rl 'alte-domain.de' /etc/nginx               # erst: welche Dateien?
grep -rl 'alte-domain.de' /etc/nginx | xargs sed -i.bak 's/alte-domain.de/neu.de/g'
nginx -t && systemctl reload nginx                  # dann testen und neu laden

6. Große und alte Dateien aufspüren

find / -xdev -type f -size +500M -printf '%s\t%p\n' 2>/dev/null | sort -rn | head
find /var/log -type f -name '*.gz' -mtime +90 -print   # erst anzeigen, dann -delete
Das Muster ist immer gleich: Erst schauen (nur ausgeben), dann handeln. -print vor -delete, --dry-run vor --delete, nginx -t vor systemctl reload. Diese Gewohnheit ist mehr wert als jeder Trick-Befehl.

Befehle, die man nicht blind tippt

Linux fragt nicht nach. Diese Befehle sind nicht „gefährlich“, solange du genau weißt, was sie tun – aber ein Tippfehler reicht:

BefehlWarum gefährlichBesser
rm -rf /pfadLeere Variablen oder ein Leerzeichen zu viel löschen UnerwartetesPfad als Variable immer in Anführungszeichen: rm -rf "$ZIEL/"
rm -rf "$DIR/" mit leerem $DIRWird zu rm -rf / – der Klassiker in Skriptenset -u im Skript und [ -n "$DIR" ] prüfen
chmod -R 777Alle dürfen alles ändern – ein gefundenes Fressen für WebshellsRechte gezielt setzen: chown -R user:gruppe plus chmod 644/755
chown -R user /Vertauschte Argument-Reihenfolge zerstört die Besitzverhältnisse des SystemsImmer erst --dry-run-Äquivalent: mit ls -l prüfen, dann auf den konkreten Ordner anwenden
dd of=/dev/sdaSchreibt blind über eine ganze Platte, inklusive Partitionstabellelsblk zur Kontrolle, status=progress nutzen, Ziel doppelt prüfen
> dateiÜberschreibt die Datei sofort mit leerem InhaltZum Anhängen >> verwenden
mkfs / fsck auf gemounteten DateisystemenZerstört Daten, weil das System parallel schreibtErst umount, Platte vorher identifizieren
history + Ctrl+REin alter Befehl aus einer anderen Umgebung passt nicht mehr zum ZielBefehl nach dem Aufrufen lesen, bevor du Enter drückst
Drei Sekunden, die Schaden verhindern: ① Bei rm, chown -R, dd und > immer erst mit Tab vervollständigen lassen – dann siehst du den echten Pfad. ② In Skripten set -eu setzen, damit abgebrochen wird, wenn eine Variable leer ist. ③ Vor destruktiven Aktionen ein Backup: cp -a datei datei.$(date +%F).bak.

Häufige Probleme (FAQ)

ProblemLösung
command not foundPaket fehlt (apt install …) oder der Pfad steht nicht in $PATH. Test: command -v toolname.
Permission deniedRechte prüfen mit ls -l; für Systemänderungen sudo – aber genau überlegen, warum es nicht anders geht.
Text file busyDie Datei läuft gerade als Programm. Prozess stoppen (am besten per systemctl stop), Datei ersetzen, wieder starten.
No space left on device, obwohl df Platz zeigtInodes prüfen: df -i. Häufig sind es sehr viele kleine Dateien in Cache- oder Session-Ordnern.
Argument list too longZu viele Dateien für ein Kommando. Ausgabe an xargs -r -n 100 geben oder find … -exec nutzen.
Device or resource busy beim umountWer nutzt es? sudo fuser -vm /mnt/x oder sudo lsof +f -- /mnt/x, dann Prozess beenden.
Terminal „hängt“, reagiert nichtCtrl+C bricht ab. Ohne Wirkung: Ctrl+Z, dann bg oder kill %1.
SSH-Login fragt ständig nach Passwort statt SchlüsselRechte prüfen: chmod 700 ~/.ssh, chmod 600 ~/.ssh/id_ed25519, chmod 644 ~/.ssh/authorized_keys – ein zu offenes authorized_keys wird ignoriert.
Ausgabe landet im falschen Log oder nirgendsBeide Ströme umleiten: befehl >> log 2>&1. 1> ist stdout, 2> stderr.
Befehl war zu langsam – ich brauche Fortschrittdd status=progress, rsync -av --info=progress2, tar --checkpoint=1000 --checkpoint-action=dot.

Fazit

Die wichtigsten Linux-Befehle sind keine Sammlung zum Auswendiglernen, sondern ein Werkzeugkasten. Wenn du Dateien, Rechte, Prozesse, Dienste, Logs und Platz im Griff hast, löst du bereits neun von zehn Serverproblemen – und für alles andere gibt es man, --help und die Fehlermeldung, die dir fast immer sagt, wo es klemmt.

Fünf Gewohnheiten, die mehr bringen als zehn weitere Befehle:Tab statt Tippen – du siehst den echten Pfad. ② Erst schauen, dann ändern (--dry-run, -print, -t). ③ Vor Einriffen eine Kopie mit Zeitstempel. ④ journalctl -p err -b als erster Blick nach einem Problem. ⑤ set -eu in jedem Skript, das du aufhebst.
📝
HuuuHosting-Redaktion

Open-Source-Tools für den eigenen Server – getestet, dokumentiert und in der Debian-13-Serie Schritt für Schritt erklärt.