Linux: Bash/Shell

7. Feber 2021

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