Grundlagen BASH

Linux, Unix & Mac OS X - Bourne Again Shell

Tastenkürzel

Kürzel Beschreibung
Strg + a Cursor zu Zeilenanfang
Strg + e Cursor zu Zeilenende
Esc b Cursor ein Wort zurück
Esc f Cursor ein Wort vor
Strg + c Programm beenden (SIGINT-Signal an aktuelles Programm senden) oder Abbruch der Befehlseingabe
Strg + l Bildschirmausgabe leeren
Strg + r Befehlshistorie durchsuchen
(Beispiel: ls -lahRt wurde kürzlich eingegeben.
Mit Strg +r und tippen von ls werden alle zuletzt ausgeführten Befehle durchsucht, die ls enthalten.
Zum rückwärts weitersuchen erneut Strg +r drücken)

Vervollständigung

Die Bash kann standardmäßig Befehle und Dateien automatisch vervollständigen. Möchtest du z.B. den Befehl dmesg ausführen, reicht die Eingabe von dm und das Drücken der Tabulator-Taste (↹), esg wird automatisch angefügt.
Sollte es mehr als eine Übereinstimmung geben, wird durch zweimaliges Drücken der Tabulatortaste eine Liste mit möglichen Befehlen ausgegeben.

Diese Funktion ist genauso für Dateien gültig, so kann man sich etwa durch die gesamte Ordnerstruktur mit Hilfe von Tab leiten lassen. Um die Datei /var/log/syslog auszugeben, wäre eine einfache Möglichkeit:
catTAB/vTABlogTABsysTAB
Gibt es keine mehrfachen Übereinstimmungen wird automatisch
cat /var/log/syslog
angezeigt und mit Enter ausgeführt.

Hilfe / Info

Befehl Beschreibung
man echo Handbuchseite (manpage) über das Programm "echo" aufrufen Standardmäßig wird das "less" zum Anzeigen benutzt: navigieren mit Pfeiltasten, beenden mit q. Vollständige Verwendung siehe unter less
which echo kompletten Pfad des Programms echo ausgeben
whereis echo kompletten Pfad zum Programm, zu seinen Konfigurationsdateien und zu seiner Handbuchseite ausgeben
whatis echo kurze Funktionsbeschreibung zu echo
time whereis echo whereis echo ausführen und Zeit ausgeben, die das Programm benötigt hat
man --help Bei den meisten Programmen wird mit dem Parameter --help bzw. -h eine kurze Hilfe mit Syntax ausgegeben

Navigation

Befehl Beschreibung
cd /home/ zum Pfad /home/ navigieren (change directory)
pwd aktuelles Arbeitsverzeichnis ausgeben (print working directory)
cd zum Heimatverzeichnis (Standardmäßig /home/benutzername/) wechseln
cd - zum letzten Verzeichnis wechseln
ls Verzeichnisinhalt vom aktuellen Verzeichnis ausgeben
ls /home/ gibt den Inhalt von /home/ aus
ls -l Verzeichnisinhalt vom aktuellen Verzeichnis als Liste mit Dateiinformationen ausgeben.
Weitere Optionen für ls
-A auch versteckte Dateien anzeigen (mit -a auch . und .. anzeigen)
-h Dateigrößen in lesbare Werte umrechenen (kByte, MByte, …)
--color=auto ausgabe Farbig darstellen
-S sortieren nach Größe
-t sortieren nach Zeit
-X sortieren nach Dateiendung
-r Sortierung umkehren (reverse)
ls -SArhl --color=auto einige der hier aufgeführten kombiniert: nach Größe, alle Dateien, Sortierung umkerhen, lesbare Größen, Liste
pushd . aktuellen Pfad zwischenspeichern
popd zum zwischengespeicherten Pfad wechseln

Dateioperationen

Befehl Beschreibung
cp datei dateikopie datei nach dateikopie kopieren
Beispiel
cp -rv * /ziel/ Alle (*) Dateien, Ordner und Unterordner vom aktuellen Verzeichnis rekursiv (-r) nach /ziel/ kopieren, Status ausgeben (-v)
mv datei /ziel/ verschiebt datei in den Ordner ziel
Umbenennen
mv datei.txt neuername.txt datei in neuername umbenennen
ln -s original.txt link.txt erstellt eine Verknüpfung auf den relativen Pfad original.txt mit dem Namen link.txt

Wichtig: Wird die Verknüpfung verschoben, wird das Ziel unter dem Relativen Pfad wahrscheinlich nicht mehr gefunden.

ln -s /pfad/zu/original.txt link.txt erstellt die Verknüfung mit absolutem Pfad
mkdir verzeichnis erstellt den Ordner verzeichnis im aktuellen Pfad
mkdir -p /home/benutzer/backup/2013/01 erstellt den Ordner 01 und alle nicht existierenden Ordner darüber
rm datei datei löschen
rm -r ordner/ ordner/ mit gesamtem Inhalt löschen
touch leer.txt erstellt die Datei leer.txt ohne Inhalt
chmod 644 datei ändert die Rechte auf den oktalen Wert 644
Rechte

Bei der dreistelligen Angabe steht die erste Stelle für den Besitzer, die Zweite für die Gruppe und die Dritte für alle anderen.

Numerische Schreibweise
4
lesen
2
schreiben
1
ausführen
0
keine Rechte

Durch addieren der Zahlen werden die Rechte zusammengefasst. So ergibt sich bei 640:

  • Besitzer darf Lesen & Schreiben, aber nicht ausführen (6 = 4 + 2)
  • Gruppe darf nur Lesen (4 = 4)
  • Jeder andere hat keinerlei Zugriff (0 = 0)
Symbolische Schreibweise

Bei der Symbolischen Schreibweise wird zunächst die Entität festgelegt:

u
Besitzer
g
Gruppe
o
Andere
a
Alle (u, g und o)

Die Rechte werden mit folgenden Buchstaben festgeleggt:

r
Lesen
w
Schreiben
x
Ausführen

Das setzen der Rechte geschieht jeweils pro Kategorie. Mit + werden Rechte hinzugefügt, mit - gelöscht und mit = überschrieben.

Beispiele symbolische Schreibweise
chmod a+wx datei datei für alle schreib- und lesbar machen (ist read bei einer Kategorie gesetzt, bleibt der Lesezugriff bestehen
chmod u=r datei für Besitzer beschreibbar machen (darf nicht mehr ausführen oder schreiben!)
chmod o-rwx datei andere haben keine Rechte
Rekursiv
chmod -R 644 ordner/ verändert Rechte von ordner/ und allen darin enthaltenen Elementen (rekursiv)
chown root datei ändert den Besitzer von datei auf den Benutzer root
chown root:users datei ändert zusätzlich die Gruppe auf users
chown -R root:users ordner/ ändert ordner/ und Unterelemente rekursiv
chgrp users datei ändert die Gruppe von datei auf die Gruppe users
chgrp users ordner/ ändert ordner/ und Unterordner rekursiv

Umleitungen (Pipes)

Befehl Beschreibung
ls -l > liste.txt Ausgabe von ls nicht ausgeben, sondern in die Datei liste.txt schreiben
Wichtig: ist liste.txt nicht vorhanden, wird sie erstellt; ist sie vorhanden, wird der Inhalt überschrieben!
> liste.txt Inhalt von liste.txt leeren
ls -l | less Ausgabe von ls -l wird an less umgeleitet (| = Pipe)
Weitere Pipe-Beispiele
ls -lA | grep jpg Verzeichnisinhalt auflisten, nur Elemente, die jpg enthalten ausgeben
ls -lA | grep jpg | grep -v foto wie voriges, jedoch Elemente, die foto enthalten nicht ausgeben
du -s * | sort -nr | less Größe aller Dateien / Ordner im aktuellen Pfad nach Größe sortiert in less anzeigen

Dateibetrachtung

Befehl Beschreibung
cat datei.txt Inhalt von datei.txt ausgeben
more datei.txt Datei Seitenweise ausgeben, Navigieren mit Pfeiltasten, Leertaste für nächste Seite.
less datei.txt wie more, jedoch mehr Funktionen (siehe manpage: man less). q zum beenden
tail datei.txt die letzten 10 Zeilen von datei.txt ausgeben
Optionen
-n 40 die letzten 40 Zeilen ausgeben
-fDatei beobachten, sinnvoll z.B. für Logdatei-Betrachtung (STRG + c zum Beenden)
nano datei.txt öffnet datei.txt in nano, ein einfaches Textbearbeitungsprogramm (Strg + X zum Beenden)
vi datei.txt öffnet datei.txt in vi, ein sehr umfangreiches Textbearbeitungsprogramm (Esc :q! ENTER zum Beenden)
sort datei.txt gibt datei.txt sortiert aus

Datenanalyse, Speicher & Prozesse

Befehl Beschreibung
wc -l datei.txt Anzahl der Zeilen von datei.txt ausgeben.
Zählweisen
-l Zeilen zählen
-w Wörter zählen
-m Buchstaben zählen
lsattr Dateiattribute anzeigen
diff datei1 datei2 Unterschiede zwischen zwei Dateien anzeigen
df -h Festplattenspeicher Analysieren (-h = human readable / In größtmögliche Einheit umrechnen)
du -h Dateigrößen (disk usage) des aktuellen Verzeichnis seinen Dateien anzeigen (-human readable)
du -hs zeigt eine Zusammenfassung der Ordner an
free -m gibt die Speicherauslastung (RAM) in Megabyte aus
file datei.txt Dateityp von datei.txt ermitteln
md5sum datei.txt gibt die md5-Prüfsumme von datei.txtaus
lsof liste aller geöffneter Dateien
top Prozessviewer, mit q beenden
ps aux alle Prozess anzeigen
who eingeloggte Benutzer auflisten

Netzwerk tools

Befehl Beschreibung
ifconfig Netzwerkschnittstellen & -Status anzeigen
ifconfig eth0 Infos zur ersten Netzwerkkarte (eth0) anzeigen
netstat alle Netzwerkverbindungen anzeigen
netstat -tup Aktive Internetverbindungen ausschließlich Server anzeigen
netstat -tupl Aktive Serververbindungen ausgeben
iptraf Programm zur Datenverkehrsanalyse
Hinweis: ist selten vorinstalliert
host palita.net Informationen über Hostname / IP von palita.net
traceroute palita.net Weg zu palita.net verfolgen
ping -c 5 palita.net palita.net 5 mal einen Ping senden, um zu sehen, ob der Rechner erreichbar ist und wie lange er für eine Antwort benötigt (manche Server geben, trotz Erreichbarkeit, aus Sicherheitsgründen keine Antwort)
hostname eigenen Hostnamen ausgeben
nslookup palita.net Nameserver-Infos zu palita.net ausgeben
dig palita.net Nameserver zu palita.net abfragen
dig @google.de palita.net wie voriges, jedoch google.de befragen
dig palita.net AAAA AAAA-Record abfragen (ipv6)
ip addr show Informationen zu Netzwerkkarten und zugehörigen Adressen ausgeben
iftop zeigt aktuelle Verbindungen und Datenraten an
Hinweis: ist selten vorinstalliert

Textmanipulation

Befehl Beschreibung
sed 's/string1/string2/g' datei.txt ersetzt string1 durch string2 in datei.txt
sed '/ *#/d; /^ *$/d' datei.txt entfernt Kommentare, die mit # beginnen und Leerzeilen aus datei.txt
tr '[:lower:]' '[:upper:]' < datei.txt Gibt datei.txt in Großbuchstaben aus

Downloads (wget)

Befehl Beschreibung
wget http://palita.net/empty.txt datei empty.txt von palita.net herunterladen und im aktuellen Verzeichnis abspeichern
wget -c http://palita.net/empty.txt Vorher abgebrochenen Download fortsetzen (-continue)

Datum / Zeit

Befehl Beschreibung
cal -3 Kalender mit 3 Monaten ausgeben (letzter, aktueller und nächster Monat)
date aktuelles Datum + Uhrzeit ausgeben
uptime information über die Laufzeit des Systems

Archivierung / Komprimierung (zip, tar)

Befehl Beschreibung
tar cf archiv.tar ordner/ ordner/ im aktuellen Verzeichnis in die Datei archiv.tar packen (Linux-Tar Archiv)
Weitere Befehle für tar
-v verbose (Status ausgeben)
-c create (Archiv erstellen)
-x extract (Archiv entpacken)
-z gzip Komprimierung
-j bzip Komprimierung
-f Datei
Beispiele
tar -xf archiv.tar archiv.tar entpacken
tar -cfz archiv.tar.gz ordner/ ordner/ packen und mit gzip komprimieren
tar -vcjf archiv.tar ordner/datei bzip-Archiv aus datei erstellen und details ausgeben
zip archiv.zip * alle Dateien und Ordner im aktuellen Pfad in archiv.zip packen
unzip archiv.zip archiv.zip hier entpacken

Backup & Synchronisation (rsync)

RSync ist ein mächtiges Tool um Verzeichnisse zu Sichern, Backups zu erstellen, Ordner über mehrere Rechner zu teilen, usw.
RSync sucht nach Unterschieden von der Quelle zum Ziel und kopiert veränderte und neue Dateien zum Ziel.

Mit verschiedenen Parametern können auch nicht mehr vorhandene Dateien der Quelle im Ziel gelöscht werden, um immer zwei identische Verzeichnisse zu haben. Wenn sowohl Quelle als auch Ziel verändert werden und synchron bleiben sollen, eignen sich möglicherweise Programme wie Unison besser und sind einfacher in der Handhabung.

Befehl Beschreibung
rsync -aP --delete --stats /quelle /ziel Sichert den Ordner /quelle nach /ziel.
Erklärung
--delete gab es vorher bereits eine Sicherung, werden in /quelle nicht mehr vorhandene Dateien in /ziel gelöscht
-P während dem Kopieren wird der Fortschritt angezeigt
--stats nach dem Kopieren wird eine Statistik ausgegeben, abgebrochenen Transfer fortsetzen
-a es werden die Standardeinstellungen zum Sichern verwendet (u.A. Dateirechte übernehmen, Zeitstempel übernehmen, Links mitkopieren, ...)
rsync -aze ssh /quelle benutzer@rechner.de:/ziel Sichert den Ordner /quelle nach ziel auf den entfernten Rechner rechner.de mit der Anmeldung als benutzer über SSH. Die Dateien werden komprimiert übertragen (-z).
Hinweis: rsync ist sehr vielseitig, es lohnt sich die manpage durchzulesen. Beim experimentieren kann man mit der Option -n einen "dry-run" durchführen - dieser simuliert nur, was passieren würde, ohne tatsächlich etwas zu tun.

SSH / Tunneling

SSH steht für Secure Shell und meint ein Protokoll und dazugehörige Programme, um sich über das Netzwerk auf einem sicheren Kanal auf der Konsole eines anderen Rechners zu verbinden.
Mit SSH können außerdem sichere Tunnel für andere Protokolle erstellt werden.

Befehl Beschreibung
ssh hostname verbindet zur Konsole des Rechners hostname (alternativ kann auch die IP-Adresse angegeben werden)
ssh user@hostname
oder
ssh hostname -l user
verbindet sich als Benutzer user
ssh -L 90:localhost:80 hostname leitet Port 80 von Rechner hostname auf den lokalen Port 90 weiter
in diesem Beispiel wird der Webserver (Port 80) von hostname lokal über Port 90 erreichbar (http://localhost:90); alle Daten werden dabei verschlüsselt übertragen
ssh -R 5901:localhost:5900 hostname Leitet den Lokalen Port 5900 (VNC) über einen sicheren SSH-Kanal auf den Rechner hostname weiter
hostname kann jetzt eine verschlüsselte VNC-Verbindung auf den lokalen Rechner über seinen Port 5901 herstellen
dies ist auch sinnvoll, wenn Port 5900 durch eine Firewall gesperrt wird, der Datenverkehr läuft bei einem Tunnel immer über den SSH-Port 22!
scp lokal.txt benutzer@hostname:/home/kopie.txt kopiert die lokale Datei lokal.txt auf den entfernten Rechner hostname in das Verzeichnis /home/ als kopie.txt
scp benutzer@hostname:/home/kopie.txt . Kopiert die entfernte Datei /home/kopie.txt von hostname auf den lokalen Rechner ins aktuelle Verzeichnis ( . )

Windows-Netzwerke Samba

Samba fasst eine Reihe von tools zusammen, die mit dem Microsoft-Protokoll SMB (Server Message Block), auch bekannt als CIFS / NetBios, kommunizieren.
Hinweis: ist selten vorinstalliert

Befehl Beschreibung
smbtree SMB Netzwerk-Scanner – listet Windows-Freigaben / Arbeitsgruppen / Domains auf
findsmb
findet Rechner, die Windows-Freigaben bereitstellen
smbclient -L hostname listet alle verfügbaren Freigaben von hostname auf
mount -t smbfs -o fmask=666,guest //hostname/share /mnt/share bindet die Freigabe share von hostname im lokalen Rechner als Laufwerk unter /mnt/share ein

Paketverwaltung

Viele Linux-Distributionen verwenden Paketverwaltungsprogramme, um Software auf dem System zu installieren, aktualisieren und löschen.
Je nach Distribution gibt es dazu verschiedene Programme, die bekanntesten sind dpkg und rpm. Für dpkg kann apt-get, für rpm kann yum als einfaches Installationstool verwendet werden.

dpkg / apt-get
Befehl Beschreibung
apt-get install firefox installiert firefox und alle dazu benötigten Zusatzpakte / Bibliotheken auf dem System
apt-get update aktualisiert die Paketliste
apt-get upgrade aktualisiert alle installierten Programme
apt-get dist-upgrade aktualisiert alle installierten Programme, Kernel-Updates, Distributions-Updates, …
apt-get remove firefox deinstalliert firefox
apt-get purge firefox deinstalliert firefox und all seine Konfigurationsdateien
apt-get autoremove deinstalliert nicht mehr benötigte Software / Bibliotheken
rpm / yum
Befehl Beschreibung
yum install firefox installiert firefox und alle dazu benötigten Zusatzpakte / Bibliotheken auf dem System
yum update aktualisiert die Paketliste und aktualisiert vorhandene Software nach Bestätigung
yum info firefox gibt Informationen über das Paket firefox aus
yum search firefox sucht nach Paketen, die firefox im Namen oder in der Beschreibung enthalten
yum remove firefox deinstalliert firefox
yum help gibt mögliche Befehle aus

Historie

Befehl Beschreibung
sudo !! den letzten Befehl wiederholen, jedoch den Befehl sudo (als root ausführen) voranstellen.
history die letzten ausgeführten Befehle ausgeben