xargs liest Argumente von der Standard-Eingabe und übergibt sie einem Befehl. Es ist die Brücke zwischen Pipes, die Text liefern (find, grep, ls), und Befehlen, die Argumente erwarten (rm, cp, wc) — unverzichtbar für effiziente Shell-Skripte.
Grundlagen
find . -name "*.tmp" | xargs rm # gefundene Dateien löschen
ls *.txt | xargs wc -l # Zeilen aller Textdateien zählen
echo "a b c" | xargs echo # Standard: echo mit allen Argumenten
Wichtige Optionen
find . -name "*.log" | xargs -n 1 wc -l # -n: max. Argumente pro Aufruf
find . -print0 | xargs -0 rm # -0: Null-getrennt, sicher bei Leerzeichen
find . -name "*.jpg" | xargs -I {} cp {} /backup/ # -I: Platzhalter pro Argument
find . -type f | xargs -P 4 gzip # -P: parallel mit 4 Prozessen
Typische Praxis
cat urls.txt | xargs -n 1 curl -O # jede URL einzeln laden
grep -l "ERROR" *.log | xargs -I {} cp {} /tmp/fehler/
seq 1 100 | xargs -I {} echo "Nummer {}"
Praxis-Tipps
- Dateinamen mit Leerzeichen:
-print0bei find und-0bei xargs verwenden — sonst wird der Name in mehrere Argumente zerlegt. - Ohne Befehl gibt xargs die Argumente einfach aus — gut zum Testen.
- Mit
-pfragt xargs vor jedem Aufruf nach, mit-tzeigt es jeden Befehl an — beides hilft beim Debuggen. - Sehr lange Argumentlisten packt xargs automatisch in mehrere Aufrufe; mit
-nlässt sich die Stückelung steuern.
Verwandte Grundlagen: find-Befehle, Bash-Befehle und grep-Befehle.
sort, uniq und cut sind das Standard-Trio der Shell, um Textdateien zu ordnen, Duplikate zu entfernen und Spalten herauszuschneiden. Zusammen ersetzen sie viele kleine Tabellenkalkulations-Schritte direkt im Terminal.
sort: Zeilen ordnen
sort namen.txt # alphabetisch sortieren
sort -n zahlen.txt # numerisch sortieren
sort -r namen.txt # absteigend
sort -k2 mitarbeiter.txt # nach 2. Spalte sortieren
sort -h groessen.txt # Größen wie 1K, 2M, 3G korrekt ordnen
uniq: Duplikate entfernen und zählen
sort namen.txt | uniq # Duplikate entfernen (Eingabe muss sortiert sein)
sort namen.txt | uniq -c # mit Anzahl je Eintrag
sort namen.txt | uniq -d # nur Zeilen, die mehrfach vorkommen
sort namen.txt | uniq -u # nur Zeilen, die genau einmal vorkommen
cut: Spalten ausschneiden
cut -d: -f1 /etc/passwd # Feld 1, getrennt durch ':'
cut -d, -f2,3 export.csv # Felder 2 und 3 aus einer CSV
cut -c1-10 datei.txt # die ersten 10 Zeichen je Zeile
ps aux | tr -s ' ' | cut -d' ' -f2 # PID-Spalte
Typische Kombination
cut -d' ' -f1 zugriffe.log | sort | uniq -c | sort -rn # häufigste Einträge
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
Praxis-Tipps
uniqvergleicht nur benachbarte Zeilen — ohnesortdavor werden nicht alle Duplikate entfernt.sort -t:setzt ein eigenes Trennzeichen für-k-Sortierungen, z. B.sort -t: -k3 -n /etc/passwd.cutkann keine variablen Trennzeichen wie mehrere Leerzeichen — vorher mittr -s ' 'bündeln.- Für Log-Analysen ist die Kette
sort | uniq -c | sort -rnder Klassiker, um Ranglisten zu bauen.
Verwandte Grundlagen: awk-Befehle, Bash-Befehle und grep-Befehle.
tar bündelt Dateien und Verzeichnisse zu einem Archiv, gzip komprimiert einzelne Dateien. Zusammen ergeben sie das weltweit verbreitetste Backup- und Verteilformat unter Linux: .tar.gz.
tar: Archiv erstellen und entpacken
tar -cf archiv.tar verzeichnis # Archiv erstellen (c=create, f=Datei)
tar -xf archiv.tar # Archiv entpacken (x=extract)
tar -tf archiv.tar # Inhalt anzeigen (t=list)
tar -czf archiv.tar.gz verzeichnis # komprimiert mit gzip (z)
tar -xzf archiv.tar.gz # komprimiertes Archiv entpacken
gzip: Dateien komprimieren
gzip datei.txt # erzeugt datei.txt.gz
gunzip datei.txt.gz # wieder entpacken
gzip -k datei.txt # Original behalten (-k wie keep)
zcat log.txt.gz # Inhalt anzeigen ohne zu entpacken
zgrep "Fehler" log.txt.gz # direkt in der gz-Datei suchen
Typische Praxis
tar -czf backup-$(date +%F).tar.gz /home/user/ # Backup mit Datum
tar -xzf paket.tar.gz -C /opt/ # in ein Zielverzeichnis
tar -czf web.tar.gz --exclude=cache --exclude=tmp /var/www # Ordner ausschließen
tar -cjf archiv.tar.bz2 verzeichnis # stärkere Kompression (bzip2)
tar -cJf archiv.tar.xz verzeichnis # noch stärker (xz)
Praxis-Tipps
- Die Option
-fsteht immer zuletzt, weil dahinter der Dateiname kommt:tar czf datei.tar.gz .... tarallein bündelt nur; Kompression kommt vonz(gzip),j(bzip2) oderJ(xz) — je stärker, desto langsamer.- Vor dem Entpacken immer
tar -tf archiv.tar.gzprüfen — manche Archive enthalten kein eigenes Oberverzeichnis. - Mit
gzip -t datei.gzlässt sich eine Datei auf Integrität testen. - Backups mit Datum im Dateinamen (
$(date +%F)) sind der einfachste Weg, mehrere Versionen zu behalten.
Verwandte Grundlagen: Bash-Befehle, find-Befehle, xargs-Befehle und Datenkompression.
chmod ändert Dateirechte, chown ändert Besitzer und Gruppe, ln erstellt Links. Diese drei Befehle gehören zu den Grundlagen jeder Linux-Systemadministration — wer sie beherrscht, versteht, wie Linux Zugriff und Dateiverweise organisiert.
chmod: Rechte vergeben
Jede Datei hat drei Rechtegruppen: User (Besitzer), Group, Others — jeweils mit r (lesen=4), w (schreiben=2) und x (ausführen=1).
chmod 755 skript.sh # Besitzer 7 (rwx), Gruppe 5 (r-x), Andere 5 (r-x)
chmod 644 notizen.txt # Besitzer rw-, Gruppe r--, Andere r--
chmod u+x skript.sh # Ausführen-Recht nur für den Besitzer ergänzen
chmod -R 755 /var/www/html # -R: rekursiv für alle Dateien im Verzeichnis
chmod a-w datei.txt # Schreibrecht für alle entfernen
chmod g+w,o-r datei.txt # Gruppe +w, Andere -r in einem Aufruf
chown: Besitzer und Gruppe ändern
chown michael datei.txt # Besitzer ändern
chown michael:www-data datei.txt # Besitzer UND Gruppe setzen
chown -R michael:www-data /projekt/ # rekursiv für das ganze Verzeichnis
chgrp www-data datei.txt # nur die Gruppe ändern (Kurzform)
ln: Links erstellen
ln -s /opt/app/aktuell /home/michael/app # symbolischer Link (Verknüpfung)
ln datei.txt harte_kopie.txt # harter Link (zweiter Name, gleiche Daten)
ln -s ../var/www/htdocs /top/www-link # relativer Zielpfad
Ein symbolischer Link ist eine Verknüpfung auf einen Pfad (bricht, wenn das Ziel verschoben wird), ein harter Link ist ein zweiter Name für dieselben Daten auf derselben Partition (überlebt Verschieben, funktioniert nicht über Dateisystemgrenzen).
Praxis-Tipps
- Mit
ls -lsieht man die Rechte direkt:-rwxr-xr-xbedeutet Besitzer rwx, Gruppe r-x, Andere r-x. - Für Web-Verzeichnisse ist
chown -R user:www-data+chmod 750/640ein sicheres Grundmuster. chmod -xentfernt das Ausführen-Recht — praktisch, um versehentliches Starten zu verhindern.- Symbolische Links erkennt man mit
ls -lam Pfeil:app -> /opt/app/aktuell.
Verwandte Grundlagen: Bash-Befehle, find-Befehle und ps, top und kill.
ps zeigt eine Momentaufnahme laufender Prozesse, top überwacht sie live und kill beendet sie. Zusammen sind sie das Basiswerkzeug, um zu verstehen, was auf einem Linux-System gerade arbeitet — und es bei Bedarf zu stoppen.
ps: Prozesse anzeigen
ps aux # alle Prozesse mit CPU-/Speichernutzung (Standard)
ps -ef # alle Prozesse, volle Kommandozeile
ps aux | grep nginx # nach einem Dienst filtern
ps -e --forest # Prozessbaum (Eltern-Kind-Beziehung)
ps -u michael # nur Prozesse eines Benutzers
ps -p 1234 -o pid,cmd # gezielt eine PID abfragen
Die PID (Process ID) ist die Nummer, mit der man einen Prozess später anspricht. ps aux zeigt sie in der zweiten Spalte.
top: Live-Überwachung
top # Live-Ansicht, aktualisiert sich selbst
top -o %MEM # nach Speichernutzung sortieren
htop # komfortablere Variante (falls installiert)
In top sortiert P nach CPU, M nach Speicher, k beendet einen Prozess (PID eingeben), q verlässt die Ansicht.
kill: Prozesse beenden
kill 1234 # Signal TERM: sauberes Beenden anfordern
kill -9 1234 # Signal KILL: sofort beenden (letzte Möglichkeit)
killall nginx # alle Prozesse mit diesem Namen beenden
pkill -f "node app.js" # per Namensmuster beenden
kill -l # Liste aller Signale anzeigen
Die Reihenfolge ist wichtig: erst kill PID (Signal 15, TERM — der Prozess kann aufräumen), erst wenn das nicht wirkt kill -9 (Signal 9, KILL — hartes Beenden ohne Aufräumen).
Praxis-Tipps
pgrep nginxliefert nur die PID-Nummern — perfekt für Skripte.- Hängende Prozesse lassen sich oft mit
kill -9beenden; vorher aberkillversuchen, sonst gehen ungesicherte Daten verloren. - Mit
ps -o pid,%cpu,%mem,cmd --sort=-%cpubekommt man die CPU-lastigsten Prozesse als Liste. nice -n 10 ./schwer.shstartet einen Prozess mit niedrigerer Priorität, damit er andere nicht ausbremst.
Verwandte Grundlagen: Bash-Befehle, sort, uniq und cut und systemctl und journalctl.