Linux: Bash/Shell
Ich dachte, ich schreibe mal ein bisschen was zu allgemeinen Bash/Shell Befehlen in Linux đ. Da ich manche Befehle auch nicht oft benötige, ist dies somit ein gutes Nachschlagewerk und wird sukzessive erweitert.
Befehle
Ins Homeverzeichnis wechseln
Um in das Homeverzeichnis des aktuellen Benutzers zu wechseln, muss der Befehl „cd“ mit „~“ aufgerufen werden.
cd ~
cd # Tilde ist nicht notwendig
Hilfe zu Befehl anzeigen
Linux (zumindest als Server) wird primĂ€r ĂŒber die Kommandozeile bedient. Um fĂŒr einen Befehl die Hilfe anzuzeigen, muss folgender Befehl aufgerufen werden:
man $BEFEHL
man ls
Mit der Enter-Taste können die Seiten durchgeblÀttert werden.
Möchte man anschlieĂend in der Hilfe suchen, dann muss ein Slash sowie eine Regex eingegeben und mit Enter bestĂ€tigt werden. Bspw.:
/Filter
Um durch die Suchergebnisse zu navigieren, muss die „n“-Taste bestĂ€tigt werden. Mit Shift + „n“ wird rĂŒckwĂ€rts navigiert.
Inhalte eines Verzeichnisses anzeigen
HierfĂŒr steht der Befehl „ls“ zur VerfĂŒgung. Dieser kann noch um Schalter erweitert werden.
ls -l
ls -la
Hier ein paar wichtige Schalter:
- -l: Elemente in Listenform inkl. Rechten, Benutzer, Gruppe, GröĂe in Bytes sowie Ănderungsdatum
- -a: standardmĂ€Ăig versteckte Elemente werden ebenfalls angezeigt
Um die Anzahl der Dateien zu zÀhlen, werden zwei Befehle hintereinander geschalten:
ls | wc -l
Aktuelles Verzeichnis ausgeben
Mit „pwd“ kann, anders als es auf den ersten Blick vermuten lĂ€sst, das aktuelle Verzeichnis ausgegeben werden. pwd steht fĂŒr „print working directory“.
pwd
Verzeichnis erstellen
Dies wird mit „mkdir“ gemacht. Sollen auch fehlende ĂŒbergeordnete Verzeichnisse angelegt werden, dann muss der Schalter „-p“ mit angegeben werden.
mkdir -p parent1/parent2/child
Verzeichnis löschen
DafĂŒr gibt es den Befehl „rmdir“. Dieser funktioniert allerdings nur, wenn das Verzeichnis leer ist. Sobald Dateien enthalten sind, muss der Befehl „rm“ mit den Schaltern „-rf“ (recursive + force) verwendet werden.
rmdir ordner
rm -rf ordner
Dateien verschieben
Zum Kopieren wird der Befehl „mv“ verwendet.
mv $QUELLE $ZIEL
mv datei.txt /root
Dateien kopieren
Zum Kopieren wird der Befehl „cp“ verwendet.
cp datei.txt /root
cp datei1.txt datei2.txt /root
cp datei*.txt /root
cp -r * /root
Wie in den Beispielen zu sehen ist, können auch gleichzeitig mehrere Dateien kopiert werden.
Folgende Schalter sind erwÀhnenswert:
- -s: kopiert die Datei nicht direkt, sondern erstellt nur einen Soft-Link auf die Datei
- -r: Dateien werden rekursiv kopiert
- -u: Datei wird nur dann kopiert, wenn die Quelldatei neuer ist als die Zieldatei
Dateien suchen
Um Dateien zu suchen, wird der Befehl „find“ verwendet.
find . -name $DATEINAME
find . -name docker-compose.yml
find . -name 'docker-*.yml'
find . -type d //Nur Verzeichnisse
find . -type f //Nur regulÀre Dateien
find . -type f -size +100k -size -1M //Dateien mit GröĂe zw. 100KB und 1MB
find . -type f -mtime -1 //Dateien in den letzten 24 Stunden editiert
find . -type f -mtime +1 //Dateien vor 24 Stunden editiert
find . -type f -exec cat {} \; //pro Datei einen Befehl ausfĂŒhren. {} wird durch Datei ersetzt. Muss mit \; aufhören
Link erstellen
Um einen Soft-Link zu erstellen, muss der Befehl „ln“ mit dem Schalter „-s“ aufgerufen werden. Wird dieser nicht angegeben, wird ein Hard-Link erstellt.
Bei einem Hard-Link wird der Inhalt der Datei kopiert. Eine Ănderung an der Quelldatei oder im Link Ă€ndert die Inhalte in allen Links. Wird die Quelldatei gelöscht, bleiben die anderen Dateien vorhanden.
Bei einem Soft-Link ist der Inhalt nur in der Quelldatei. Wird diese gelöscht oder umbenannt, laufen die Links ins Leere.
ln -s test.txt test1.txt
Dateiinhalt ausgeben
HierfĂŒr gibt es mehrere Befehle fĂŒr unterschiedliche AnwendungsfĂ€lle. Mit „cat“ wird die komplette Datei ausgegeben.
cat test.txt
Soll hingegen nur der letzte Teil ausgegeben werden, wird der Befehl „tail“ verwendet.
tail test.txt
tail -n 20 test.txt //Anzahl Zeilen
tail -f test.txt //Anzeige inkl. Warten auf neue Inhalte
Soll nur der Start ausgegeben werden soll, wird „head“ verwendet.
head test.txt
head -n 20 test.txt //Anzahl Zeilen
Ausgabe in Datei umlenken
Um die Ausgabe in eine Datei umzulenken, muss der Befehl um „>> $ZIELDATEI“ erweitert werden.
cat test.txt >> test2.txt
cat test.txt test2.txt >> test2.txt
Wenn statt „>>“ nur „>“ verwendet wird, wird die Zieldatei neu erstellt, bevor die Inhalte geschrieben werden.
Ausgabe filtern
Zum Filtern der Ausgabe wird der Befehl „grep“ verwendet.
ls | grep $FILTER
ls | grep test
Ausgabe sortieren
Dies wird mit dem Befehl „sort“ gemacht.
ls | sort
ls | sort -r //absteigend sortieren
ls | sort -n //numerisch sortieren
GröĂe von Dateien/Verzeichnissen ausgeben
FĂŒr die Ausgabe der GröĂe von Dateien und Verzeichnissen wird der Befehl „du“ verwendet.
du
du -h //Ausgabe mit Einheit
du -d 0 -h //GröĂe gesamtes Verzeichnis
Partitionsinformationen ausgeben
Die Informationen zu den Partitionen werden mit „df“ ausgegeben.
df
df -h //Ausgabe mit Einheit
Aktive Prozesse ausgeben
FĂŒr die Ausgabe der aktuell laufenden Prozesse wird „ps“ verwendet.
ps //Prozesse des aktuellen Benutzers
ps -ax //Prozesse aller Benutzer
In der ersten Spalte wird die Prozess-ID angegeben. Diese wird fĂŒr das Beenden eines Prozesses benötigt
Prozess beenden (killen)
Mit „kill“ kann ein Prozess beendet werden.
kill $PROZESS_ID
Prozess im Hintergrund starten
Um einen Prozess im Hintergrund auszufĂŒhren, muss „&“ am Ende angegeben werden.
top &
Zur Abfrage, welche Prozesse im Hintergrund laufen, wird der Befehl „jobs“ verwendet.
jobs
„jobs“ gibt eine Nummer zurĂŒck. Um einen solchen Prozess in den Vordergrund zu holen, muss der Befehl „fg“ mit der entsprechenden Nummer ausgefĂŒhrt werden.
fg %1
Um ihn dann wieder in den Hintergrund zu schicken muss „Ctrl+Z“ gedrĂŒckt werden. Falls dieser gestoppt ist (Abfrage mit „jobs“) kann er mit „bg“ aktiviert werden.
bg %1
Verwendete Ports auflisten
Dies kann mit dem Befehl „netstat“ gemacht werden.
netstat -tulpen
Die Parameter bedeuten folgendes:
- -t: TCP
- -u: UDP
- -l: nur offene Ports (solche, die im Listening-Modus sind)
- -p: Programm
- -e: erweiterte Informationen (z.B. Benutzer, dem Sockets gehört)
- -n: keine Ăbersetzung von IP, Port, … in Namen
Umgebungsvariablen ausgeben
Dies kann mit dem Befehl „printenv“ gemacht werden. Wird kein zusĂ€tzlicher Parameter angegeben, werden alle Umgebungsvariablen ausgegeben, ansonsten der angegebene.
printenv
printenv $PATH