← Zurueck zu Education
💻

Shell Grundlagen

Die wichtigsten Befehle fuer die Arbeit auf Linux-Servern. Grundwissen fuer jeden IT-Administrator.

⏱️ 30-40 Minuten 📊 Einfach
🐚 Was ist eine Shell? +

Die Shell (auch Terminal, Kommandozeile oder CLI) ist eine textbasierte Schnittstelle zum Betriebssystem. Statt mit der Maus zu klicken, gibst du Befehle als Text ein.

user@server:~$ ls -la

total 32

drwxr-xr-x 4 user user 4096 Jan 15 10:00 .

drwxr-xr-x 3 root root 4096 Jan 10 08:00 ..

-rw-r--r-- 1 user user 220 Jan 10 08:00 .bashrc

💡

Warum Shell statt GUI?

  • Schneller - Ein Befehl statt 10 Klicks
  • Automatisierbar - Scripts können Aufgaben wiederholen
  • Remote - Server haben oft keine GUI
  • Mächtig - Volle Kontrolle über das System
🧭 Navigation - Sich bewegen +

Die grundlegendsten Befehle um im Dateisystem zu navigieren.

Befehl Beschreibung Beispiel
pwd Aktuelles Verzeichnis anzeigen /home/user
cd Verzeichnis wechseln cd /var/log
cd .. Ein Verzeichnis hoch cd ..
cd ~ Zum Home-Verzeichnis cd ~
cd - Zum vorherigen Verzeichnis cd -
Beispiele
bash

# Wo bin ich?
pwd
# → /home/user

# Gehe zu /var/log
cd /var/log

# Ein Verzeichnis hoch
cd ..

# Zurück zum letzten Verzeichnis
cd -
📂 Dateien anzeigen +

Verzeichnisinhalte und Datei-Informationen anzeigen.

ls - Dateien auflisten
bash

# Einfache Liste
ls

# Detaillierte Liste mit versteckten Dateien
ls -la

# Nur Verzeichnisse
ls -d */

# Nach Datum sortiert (neueste zuerst)
ls -lt

# Mit Dateigrössen in lesbar (KB, MB, GB)
ls -lh

# Rekursiv (alle Unterverzeichnisse)
ls -R

ls -la Output erklaert:

drwxr-xr-x 4 user group 4096 Jan 15 10:00 verzeichnis
│└┬┘└┬┘└┬┘ │  │    │     │      │           │
│ │  │  │  │  │    │     │      │           └─ Name
│ │  │  │  │  │    │     │      └─ Datum/Zeit
│ │  │  │  │  │    │     └─ Grösse in Bytes
│ │  │  │  │  │    └─ Gruppe
│ │  │  │  │  └─ Besitzer
│ │  │  │  └─ Anzahl Links
│ │  │  └─ Rechte für alle
│ │  └─ Rechte für Gruppe
│ └─ Rechte für Besitzer
└─ d=Directory, -=Datei, l=Link
📖 Dateien lesen +

Verschiedene Möglichkeiten um Dateiinhalte anzuzeigen.

Dateien anzeigen
bash

# Ganze Datei anzeigen
cat datei.txt

# Mit Zeilennummern
cat -n datei.txt

# Erste 10 Zeilen
head datei.txt

# Erste 20 Zeilen
head -n 20 datei.txt

# Letzte 10 Zeilen
tail datei.txt

# Letzte 50 Zeilen
tail -n 50 datei.txt

# Live mitlesen (für Logs!)
tail -f /var/log/syslog

# Scrollbar durchsuchen
less datei.txt
# (q zum Beenden, / zum Suchen)
💡

tail -f ist dein Freund

Mit tail -f siehst du neue Log-Einträge in Echtzeit. Perfekt zum Debuggen! Beende mit Ctrl+C.

📝 Dateien verwalten +

Dateien und Verzeichnisse erstellen, kopieren, verschieben und löschen.

Erstellen
bash

# Leere Datei erstellen
touch neue-datei.txt

# Verzeichnis erstellen
mkdir neuer-ordner

# Verschachtelte Verzeichnisse erstellen
mkdir -p pfad/zu/neuem/ordner
Kopieren & Verschieben
bash

# Datei kopieren
cp quelle.txt ziel.txt

# Verzeichnis kopieren (rekursiv)
cp -r ordner/ neuer-ordner/

# Datei verschieben/umbenennen
mv alte-datei.txt neue-datei.txt

# In anderes Verzeichnis verschieben
mv datei.txt /pfad/zum/ziel/
Loeschen
bash

# Datei löschen
rm datei.txt

# Verzeichnis löschen (rekursiv)
rm -r ordner/

# Ohne Nachfrage löschen (Vorsicht!)
rm -rf ordner/
⚠️

rm -rf ist gefaehrlich!

rm -rf löscht alles ohne Nachfrage und ohne Papierkorb. Ein Tippfehler wie rm -rf / home/user (Leerzeichen!) kann das System zerstören. Immer doppelt prüfen!

🔍 Suchen +

Dateien finden und in Dateien suchen.

find - Dateien finden
bash

# Datei nach Name finden
find /pfad -name "datei.txt"

# Mit Wildcard
find /var/log -name "*.log"

# Nur Verzeichnisse
find /home -type d -name "config"

# Dateien grösser als 100MB
find / -size +100M

# Dateien der letzten 7 Tage
find /var/log -mtime -7
grep - In Dateien suchen
bash

# Text in Datei suchen
grep "suchbegriff" datei.txt

# Rekursiv in allen Dateien
grep -r "error" /var/log/

# Gross/Klein ignorieren
grep -i "Error" datei.txt

# Mit Zeilennummer
grep -n "suchbegriff" datei.txt

# Nur Dateinamen anzeigen
grep -l "suchbegriff" *.txt

# Invertiert (Zeilen OHNE Begriff)
grep -v "debug" app.log
💡

Kombinieren

find und grep kombinieren: find /var/log -name "*.log" -exec grep "error" \;

✂️ Text-Processing +

Mächtige Werkzeuge zum Bearbeiten und Filtern von Text.

cut - Spalten extrahieren
bash

# Erste Spalte (getrennt durch :)
cut -d: -f1 /etc/passwd

# Spalten 1 und 3
cut -d: -f1,3 /etc/passwd

# Zeichen 1-10
cut -c1-10 datei.txt
sort & uniq - Sortieren und Deduplizieren
bash

# Alphabetisch sortieren
sort datei.txt

# Numerisch sortieren
sort -n zahlen.txt

# Umgekehrt sortieren
sort -r datei.txt

# Nach Spalte sortieren (3. Spalte)
sort -k3 -t: /etc/passwd

# Duplikate entfernen
sort datei.txt | uniq

# Duplikate zählen
sort datei.txt | uniq -c

# Nur Duplikate anzeigen
sort datei.txt | uniq -d
awk - Maechtiges Text-Tool
bash
# Spalte 1 ausgeben (Leerzeichen-getrennt)
awk '{print $1}' datei.txt

# Spalten 1 und 3
awk '{print $1, $3}' datei.txt

# Mit Trennzeichen
awk -F: '{print $1}' /etc/passwd

# Bedingte Ausgabe
awk '$3 > 1000 {print $1}' /etc/passwd

# Summe berechnen
awk '{sum += $1} END {print sum}' zahlen.txt

# Zeilen zählen
awk 'END {print NR}' datei.txt
sed - Stream Editor
bash

# Ersetzen (erstes Vorkommen pro Zeile)
sed 's/alt/neu/' datei.txt

# Alle Vorkommen ersetzen
sed 's/alt/neu/g' datei.txt

# Datei direkt ändern
sed -i 's/alt/neu/g' datei.txt

# Zeile löschen (Zeile 5)
sed '5d' datei.txt

# Zeilen mit Pattern löschen
sed '/pattern/d' datei.txt

# Nur bestimmte Zeilen
sed -n '10,20p' datei.txt

Praktisches Beispiel

Log-Analyse: Top 10 IP-Adressen mit meisten Requests:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
📦 Archivierung & Komprimierung +

Dateien zusammenpacken, komprimieren und entpacken.

tar - Archivieren
bash

# Archiv erstellen
tar -cvf archiv.tar ordner/

# Archiv erstellen + gzip komprimieren
tar -czvf archiv.tar.gz ordner/

# Archiv erstellen + bzip2 (bessere Kompression)
tar -cjvf archiv.tar.bz2 ordner/

# Archiv entpacken
tar -xvf archiv.tar

# tar.gz entpacken
tar -xzvf archiv.tar.gz

# In bestimmtes Verzeichnis entpacken
tar -xzvf archiv.tar.gz -C /ziel/ordner/

# Inhalt anzeigen ohne zu entpacken
tar -tvf archiv.tar.gz
zip/unzip
bash

# ZIP erstellen
zip -r archiv.zip ordner/

# ZIP entpacken
unzip archiv.zip

# In bestimmtes Verzeichnis
unzip archiv.zip -d /ziel/ordner/

# Inhalt anzeigen
unzip -l archiv.zip
gzip/gunzip - Einzelne Dateien
bash

# Datei komprimieren (ersetzt Original!)
gzip datei.txt
# → datei.txt.gz

# Dekomprimieren
gunzip datei.txt.gz

# Original behalten
gzip -k datei.txt
💡

Welches Format?

  • .tar.gz - Linux Standard, gute Balance
  • .tar.bz2 - Bessere Kompression, langsamer
  • .zip - Windows-kompatibel
  • .tar.xz - Beste Kompression, am langsamsten
🔐 Berechtigungen +

Dateirechte und Besitzer verwalten.

Berechtigungen verstehen:

rwx  r-x  r--
│││  │││  │││
│││  │││  └┴┴─ Alle anderen (read)
│││  └┴┴───── Gruppe (read + execute)
└┴┴────────── Besitzer (read + write + execute)

r = read (4)    Lesen
w = write (2)   Schreiben
x = execute (1) Ausführen
chmod - Rechte aendern
bash

# Ausführbar machen
chmod +x script.sh

# Nur Besitzer darf alles
chmod 700 geheim.txt

# Besitzer: rwx, Gruppe: rx, Andere: rx
chmod 755 script.sh

# Besitzer: rw, Gruppe: r, Andere: r
chmod 644 datei.txt

# Rekursiv für Verzeichnis
chmod -R 755 ordner/
chown - Besitzer aendern
bash

# Besitzer ändern
chown user datei.txt

# Besitzer und Gruppe ändern
chown user:gruppe datei.txt

# Rekursiv
chown -R user:gruppe ordner/
👥 Benutzer & Gruppen +

Benutzer und Gruppen auf dem System verwalten.

Benutzer verwalten
bash

# Neuen Benutzer erstellen
sudo useradd -m -s /bin/bash username

# Mit Home-Verzeichnis und Kommentar
sudo useradd -m -c "Max Mustermann" -s /bin/bash max

# Passwort setzen
sudo passwd username

# Benutzer löschen
sudo userdel username

# Benutzer + Home löschen
sudo userdel -r username

# Benutzer-Info anzeigen
id username

# Wer bin ich?
whoami

# Benutzer wechseln
su - username

# Als root arbeiten
sudo -i
Gruppen verwalten
bash

# Gruppe erstellen
sudo groupadd entwickler

# Benutzer zu Gruppe hinzufügen
sudo usermod -aG entwickler username

# Benutzer aus Gruppe entfernen
sudo gpasswd -d username entwickler

# Gruppen eines Benutzers anzeigen
groups username

# Alle Gruppen anzeigen
cat /etc/group
sudo - Berechtigungen
bash

# Befehl als root
sudo command

# Als anderer Benutzer
sudo -u username command

# sudo-Berechtigungen bearbeiten
sudo visudo

# Letzten Befehl als root wiederholen
sudo !!
💡

sudoers Syntax

In /etc/sudoers:

username ALL=(ALL:ALL) ALL
%admin ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt
⚙️ Systemd & Services +

Services (Dienste) starten, stoppen und verwalten mit systemd.

systemctl - Service-Verwaltung
bash

# Service starten
sudo systemctl start nginx

# Service stoppen
sudo systemctl stop nginx

# Service neu starten
sudo systemctl restart nginx

# Konfiguration neu laden (ohne Neustart)
sudo systemctl reload nginx

# Status anzeigen
sudo systemctl status nginx

# Beim Booten automatisch starten
sudo systemctl enable nginx

# Autostart deaktivieren
sudo systemctl disable nginx

# Ist Service aktiv?
systemctl is-active nginx

# Ist Service enabled?
systemctl is-enabled nginx

# Alle Services anzeigen
systemctl list-units --type=service

# Fehlgeschlagene Services
systemctl --failed
journalctl - Logs lesen
bash

# Alle Logs
journalctl

# Logs eines Services
journalctl -u nginx

# Live-Logs (wie tail -f)
journalctl -u nginx -f

# Logs seit heute
journalctl --since today

# Logs der letzten Stunde
journalctl --since "1 hour ago"

# Logs mit Priorität error und höher
journalctl -p err

# Boot-Logs
journalctl -b

# Kernel-Logs
journalctl -k

# Speicherplatz der Logs
journalctl --disk-usage

# Alte Logs löschen (älter als 7 Tage)
sudo journalctl --vacuum-time=7d
💡

Service-Datei erstellen

Eigenen Service unter /etc/systemd/system/meinservice.service:

[Unit]
Description=Mein Service
After=network.target

[Service]
Type=simple
User=www-data
ExecStart=/usr/bin/python3 /opt/app/main.py
Restart=always

[Install]
WantedBy=multi-user.target

Dann: sudo systemctl daemon-reload

🌐 Netzwerk +

Netzwerk-Konfiguration und Diagnose.

IP-Konfiguration
bash

# Alle Netzwerk-Interfaces
ip a
ip addr show

# Nur IPv4
ip -4 a

# Bestimmtes Interface
ip a show eth0

# Interface aktivieren/deaktivieren
sudo ip link set eth0 up
sudo ip link set eth0 down

# IP-Adresse hinzufügen
sudo ip addr add 192.168.1.100/24 dev eth0

# Routing-Tabelle
ip route
ip r

# Default Gateway setzen
sudo ip route add default via 192.168.1.1
Verbindungen testen
bash

# Ping (Erreichbarkeit)
ping -c 4 google.com

# Traceroute (Weg zum Ziel)
traceroute google.com
# oder
mtr google.com

# DNS-Abfrage
dig google.com
dig google.com MX
nslookup google.com

# Welche IP hat ein Hostname
host google.com

# Reverse DNS
host 8.8.8.8
Ports & Verbindungen
bash

# Offene Ports anzeigen
ss -tulpn
# t=TCP, u=UDP, l=listening, p=process, n=numeric

# Aktive Verbindungen
ss -tan

# Verbindungen zu bestimmtem Port
ss -tan | grep :443

# Welcher Prozess nutzt Port?
sudo lsof -i :80

# Alle Listening-Ports
sudo netstat -tulpn

# Port-Scan (wenn nmap installiert)
nmap -p 1-1000 localhost
HTTP-Requests
bash
# GET-Request
curl https://api.example.com

# Mit Headers
curl -I https://example.com

# POST mit JSON
curl -X POST -H "Content-Type: application/json" \
  -d '{"key":"value"}' https://api.example.com

# Download
wget https://example.com/file.zip

# Download mit curl
curl -O https://example.com/file.zip

# Follow Redirects
curl -L https://example.com

Netzwerk-Debugging

Typische Reihenfolge bei Netzwerkproblemen:

  1. ip a - Habe ich eine IP?
  2. ping 8.8.8.8 - Funktioniert Routing?
  3. ping google.com - Funktioniert DNS?
  4. curl -I https://ziel.com - Funktioniert HTTP?
🔑 SSH & Remote-Zugriff +

Sichere Verbindungen zu anderen Servern.

SSH-Verbindung
bash

# Einfache Verbindung
ssh user@server.example.com

# Mit Port
ssh -p 2222 user@server.example.com

# Mit SSH-Key
ssh -i ~/.ssh/mykey user@server.example.com

# Befehl ausführen ohne Login
ssh user@server "ls -la /var/log"

# X11-Forwarding (GUI-Apps remote)
ssh -X user@server
SSH-Keys erstellen
bash

# Ed25519 Key (empfohlen)
ssh-keygen -t ed25519 -C "user@email.com"

# RSA Key (älter, breiter kompatibel)
ssh-keygen -t rsa -b 4096 -C "user@email.com"

# Key auf Server kopieren
ssh-copy-id user@server.example.com

# Manuell: Public Key anzeigen
cat ~/.ssh/id_ed25519.pub
# → Auf Server in ~/.ssh/authorized_keys einfügen
SSH-Config
bash

# ~/.ssh/config für einfachere Verbindungen
cat ~/.ssh/config

~/.ssh/config Beispiel:

Host webserver
    HostName 192.168.1.100
    User admin
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Host produktiv
    HostName prod.example.com
    User deploy
    ForwardAgent yes

Dann einfach: ssh webserver

SCP & SFTP - Dateien kopieren
bash

# Datei zum Server
scp datei.txt user@server:/pfad/ziel/

# Datei vom Server
scp user@server:/pfad/datei.txt ./

# Verzeichnis kopieren
scp -r ordner/ user@server:/pfad/ziel/

# Mit SFTP (interaktiv)
sftp user@server
# → put, get, ls, cd, etc.
⚠️

SSH-Sicherheit

  • Nutze SSH-Keys statt Passwörter
  • Deaktiviere root-Login: PermitRootLogin no
  • Nutze fail2ban gegen Brute-Force
  • Ändere den Standard-Port (optional)
💾 Disk Management +

Festplatten, Partitionen und Dateisysteme verwalten.

Speicherplatz anzeigen
bash

# Dateisystem-Belegung
df -h

# Nur lokale Dateisysteme
df -hl

# Verzeichnisgrösse
du -sh /var/log

# Grösste Verzeichnisse
du -sh /* | sort -rh | head -10

# Grösste Dateien finden
find / -type f -size +100M -exec ls -lh  \; 2>/dev/null
Disks & Partitionen
bash

# Alle Block-Devices
lsblk

# Mit Dateisystem-Info
lsblk -f

# Detaillierte Disk-Info
sudo fdisk -l

# Partitionen eines Disks
sudo fdisk -l /dev/sda

# Interaktiv partitionieren
sudo fdisk /dev/sdb
# m = Hilfe, n = neue Partition, w = schreiben
Mounten
bash

# Device mounten
sudo mount /dev/sdb1 /mnt/usb

# Mit Optionen
sudo mount -o ro /dev/sdb1 /mnt/usb  # read-only

# Unmounten
sudo umount /mnt/usb

# Alle Mounts anzeigen
mount | grep ^/dev

# fstab für permanente Mounts
cat /etc/fstab
Dateisystem erstellen
bash

# ext4 Dateisystem
sudo mkfs.ext4 /dev/sdb1

# XFS Dateisystem
sudo mkfs.xfs /dev/sdb1

# Dateisystem prüfen
sudo fsck /dev/sdb1

# Label setzen
sudo e2label /dev/sdb1 "BackupDisk"
💡

fstab Eintrag

Automatisch beim Boot mounten in /etc/fstab:

/dev/sdb1 /mnt/backup ext4 defaults,nofail 0 2
⚙️ Prozesse verwalten +

Laufende Programme anzeigen und kontrollieren.

Prozesse anzeigen
bash

# Alle Prozesse
ps aux

# Prozesse als Baum
pstree

# Interaktiv (wie Task Manager)
htop  # oder: top

# Nach Name suchen
ps aux | grep nginx

# Prozess-ID finden
pgrep nginx

# Speicher-Nutzung
free -h

# CPU-Info
lscpu

# System-Last
uptime
Prozesse beenden
bash

# Prozess beenden (freundlich)
kill PID

# Prozess sofort beenden
kill -9 PID

# Nach Name beenden
pkill nginx

# Alle mit diesem Namen
killall nginx
Hintergrund-Prozesse
bash

# Befehl im Hintergrund starten
command &

# In Hintergrund schieben
# Ctrl+Z (pausieren), dann:
bg

# Zurück in Vordergrund
fg

# Hintergrund-Jobs anzeigen
jobs

# Läuft weiter nach Logout
nohup command &

# Oder mit screen/tmux
screen -S mysession
# Ctrl+A, D zum Detachen
screen -r mysession  # wieder verbinden
💡

htop ist meist nicht vorinstalliert: apt install htop

🔀 Pipes & Redirection +

Die wahre Macht der Shell: Befehle kombinieren und Output umleiten.

Pipe |
bash

# Output eines Befehls als Input für den nächsten
cat log.txt | grep "error" | wc -l
# → Zählt Zeilen mit "error"

# Prozesse nach Speicher sortieren
ps aux | sort -k 4 -rn | head -10

# Nur bestimmte Spalten anzeigen
cat /etc/passwd | cut -d: -f1
Redirection > >>
bash

# Output in Datei schreiben (überschreibt!)
ls -la > dateiliste.txt

# Output anhängen
echo "neue zeile" >> datei.txt

# Fehler in Datei
command 2> errors.txt

# Output UND Fehler in Datei
command > output.txt 2>&1

# Output verwerfen
command > /dev/null 2>&1
Weitere Operatoren
bash
# UND - zweiter Befehl nur bei Erfolg
command1 && command2

# ODER - zweiter Befehl nur bei Fehler
command1 || command2

# Sequenziell (egal ob Erfolg)
command1 ; command2

# Subshell
(cd /tmp && ls)  # ändert cwd nicht dauerhaft

# Command Substitution
echo "Heute ist $(date)"
files=$(ls *.txt)

Praktisches Beispiel

Alle IP-Adressen aus einem Log extrahieren und zählen:

grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' access.log | sort | uniq -c | sort -rn | head -20
Cron & Scheduled Tasks +

Automatische Ausführung von Befehlen zu bestimmten Zeiten.

Crontab verwalten
bash

# Eigene Cron-Jobs bearbeiten
crontab -e

# Cron-Jobs anzeigen
crontab -l

# Cron-Jobs eines anderen Users (als root)
sudo crontab -u username -l

# System-Crontabs
ls /etc/cron.d/
ls /etc/cron.daily/
ls /etc/cron.hourly/

Cron-Syntax:

┌───────────── Minute (0-59)
│ ┌─────────── Stunde (0-23)
│ │ ┌───────── Tag des Monats (1-31)
│ │ │ ┌─────── Monat (1-12)
│ │ │ │ ┌───── Wochentag (0-7, 0 und 7 = Sonntag)
│ │ │ │ │
* * * * * command
Beispiele
bash

# Jeden Tag um 3:00 Uhr
0 3 * * * /opt/backup.sh

# Alle 15 Minuten
*/15 * * * * /opt/check.sh

# Montag bis Freitag um 9:00
0 9 * * 1-5 /opt/report.sh

# Jeden 1. des Monats um 0:00
0 0 1 * * /opt/monthly.sh

# Alle 5 Minuten, Mo-Fr, 9-17 Uhr
*/5 9-17 * * 1-5 /opt/business-hours.sh

# Mit Log-Output
0 * * * * /opt/script.sh >> /var/log/script.log 2>&1

# Mit Umgebungsvariablen
PATH=/usr/local/bin:/usr/bin
0 3 * * * backup-tool --full
💡

Cron-Debugging

  • Logs: grep CRON /var/log/syslog
  • Volle Pfade nutzen (cron hat minimales PATH)
  • Output umleiten für Debugging
  • Zeitzone beachten: timedatectl
🌍 Umgebungsvariablen +

Variablen die Shell-Sitzungen und Programme konfigurieren.

Variablen anzeigen & setzen
bash
# Alle Umgebungsvariablen
env
printenv

# Einzelne Variable anzeigen
echo $PATH
echo $HOME
echo $USER

# Variable setzen (nur aktuelle Shell)
MYVAR="wert"
export MYVAR="wert"  # auch für Kindprozesse

# Variable löschen
unset MYVAR
Wichtige Variablen
bash
$PATH      # Verzeichnisse für ausführbare Programme
$HOME      # Home-Verzeichnis des Benutzers
$USER      # Aktueller Benutzername
$PWD       # Aktuelles Verzeichnis
$SHELL     # Aktive Shell
$EDITOR    # Standard-Editor
$LANG      # Sprache/Locale
$PS1       # Prompt-Format
Permanent setzen
bash

# Für einzelnen Benutzer: ~/.bashrc oder ~/.profile
echo 'export MYVAR="wert"' >> ~/.bashrc
source ~/.bashrc  # neu laden

# System-weit: /etc/environment
sudo nano /etc/environment
# KEY=value (ohne export!)

# Oder in /etc/profile.d/
sudo nano /etc/profile.d/custom.sh
export MYVAR="wert"
💡

PATH erweitern

Eigenes bin-Verzeichnis zum PATH hinzufügen:

export PATH="$HOME/bin:$PATH"

→ In ~/.bashrc für dauerhaft

Nuetzliche Einzeiler +
System-Info
bash

# Speicherplatz anzeigen
df -h

# RAM-Nutzung
free -h

# System-Uptime und Last
uptime

# Kernel-Version
uname -r

# OS-Version
cat /etc/os-release

# Alle installierten Pakete
dpkg -l  # Debian/Ubuntu
rpm -qa  # RHEL/CentOS
Dateien & Verzeichnisse
bash

# Die 10 grössten Dateien finden
find / -type f -exec du -h  + 2>/dev/null | sort -rh | head -10

# Verzeichnis-Grössen sortiert
du -sh */ | sort -rh

# Leere Dateien finden
find . -type f -empty

# Dateien älter als 30 Tage löschen
find /tmp -type f -mtime +30 -delete

# Dateien nach Endung zählen
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn
Text & Logs
bash

# Zeilen zählen
wc -l datei.txt

# Wörter zählen
wc -w datei.txt

# Letzte Zeile einer Datei
tail -1 datei.txt

# Datei ohne Leerzeilen
grep -v '^$' datei.txt

# Einzigartige Zeilen (sortiert)
sort datei.txt | uniq

# Unterschiede zwischen Dateien
diff datei1.txt datei2.txt
Netzwerk & Web
bash

# Eigene öffentliche IP
curl ifconfig.me

# Port offen?
nc -zv server.com 443

# Webseite herunterladen
wget -r -np https://example.com/docs/

# JSON pretty-print
curl -s api.example.com | jq .

# Header anzeigen
curl -I https://example.com
History & Produktivitaet
bash

# Befehlshistorie durchsuchen
history | grep "suchbegriff"
# oder Ctrl+R

# Letzten Befehl wiederholen
!!

# Letztes Argument wiederverwenden
!$

# Befehl mit sudo wiederholen
sudo !!

# Aktuelles Datum für Dateinamen
date +%Y-%m-%d_%H%M%S
# → 2025-01-15_143022

Tastenkuerzel

Navigation

  • Tab - Autovervollständigung
  • ↑↓ - Befehlshistorie
  • Ctrl+R - Historie durchsuchen
  • Ctrl+A - Zeilenanfang
  • Ctrl+E - Zeilenende
  • Ctrl+W - Wort löschen
  • Alt+B/F - Wort zurück/vor

Kontrolle

  • Ctrl+C - Befehl abbrechen
  • Ctrl+Z - In Hintergrund
  • Ctrl+D - Shell beenden / EOF
  • Ctrl+L - Bildschirm löschen
  • Ctrl+U - Zeile löschen
  • Ctrl+K - Bis Zeilenende löschen
  • Ctrl+Y - Gelöschtes einfügen