Arbeiten auf der Bash-Konsole
Unter Linux und allen anderen auf UNIX basierenden Betriebssystemen (Mac OS, BSD, etc) werden alle Dateien innerhalb eines einzigen hierarchischen Baumes organisiert; Ordner können weitere Ordner oder Dateien enthalten.
Diese Hierarchie startet mit dem Ordner /
, der sogenannten "Root-Verzeichnis". Von dort aus kann jeder Ort im Dateisystem durch Angabe eines absoluten Pfades erreicht werden. Absolute Pfade erkennt man daran, dass Sie mit einem /
beginnen, der für das Root-Verzeichnis steht. Das eigene Verzeichnis befindet sich im Normalfall etwa unter dem absolut Pfad /home/username/
(wobei username
dem eigenen Benutzernamen entsprechen muss).
Ein relativer Pfad ist im Gegensatz dazu ein Pfad, der nicht mit einem /
beginnt, in diesem Fall wird nicht ausgehend vom Root-Verzeichnis gesucht, sondern vom aktuellen Arbeitsverzeichnis aus.
Befindet man sich auf der Konsole im Ordner /home/
, ist das eigene Verzeichnis gleichermaßen über den absoluten Pfad /home/username
als auch über den relativen Pfad username
erreichbar.
Es gibt zwei besondere Verzeichnisse, die sich automatisch in jedem Ordner befinden
./
verweist immer auf das aktuelle Verzeichnis.../
verweist immer auf das nächsthöhere Verzeichnis.Dass sich alle Dateien und Verzeichnisse unterhalb des Root-Verzeichnisses /
befinden bedeutet auch, verändert sich auch nicht dadurch, dass mehrere, verschiedene Speichergeräte (Festplatten, USB-Speicher, etc.) im System genutzt werden. Diese werden in einem Unterverzeichnis in die Dateihierarchie eingebunden (standardmäßig meist im Ordner /media/
).
Das aktuelle Verzeichnis kann man sich mit dem Befehl pwd
("Print Working Directory") anzeigen lassen. Nach dem Öffnen der Konsole ist dies im Normalfall das eigene Verzeichnis.
pwd
--> /home/username
Den Inhalt des aktuellen Verzeichnisses, kann man sich mit ls
("List Directory Contents") anzeigen lassen.
Eine übersichtlichere Ausgabe als Liste bekommt man durch Anhängen der Option -l
, versteckte Dateien können mit der Option -a
ausgegeben werden.
ls
ls -l
ls -a
ls -al
Verzeichnisse kann man mit dem Befehl cd
("Change Directiory") wechseln. Dazu gibt man nach dem Befehl den absoluten oder relativen Pfad zum gewünschten Verzeichnis ein.
Im folgenden Beispiel wird der Einsatz von ls mit absoluten und relativen Pfaden sowie den besonderen Verzeichnissen .
und ..
demonstriert. Der Aufruf von pwd
dient dabei nur der Anzeige des aktuellen Verzeichnisses, er muss natürlich nicht eingegeben werden, wenn man nicht explizit wissen will, in welchem Verzeichnis man sich befindet.
Befindet sich ein #
am Zeilenanfang handelt es sich um einen Kommentar zum folgenden Code. Die Zeichenfolge -->
am Anfang der Zeile soll darstellen, dass es sich bei der Zeile um die Rückgabe der Konsole handelt.
# Das aktuelle Arbeitsverzeichnis ist /home/username
pwd
--> /home/username
# Zum Verzeichnis /home/username/downloads durch Eingabe des relativen
# Pfades wechseln
cd Downloads
pwd
--> /home/username/Downloads
# Zum aktuellen Verzeichnis wechseln
cd ./
pwd
--> /home/username/Downloads
# Zum darüberliegenden Verzeichnis wechseln
cd ../
pwd
--> /home/username
# Zum Verzeichnis /home/username/downloads durch Eingabe des absoluten
# Pfades wechseln
cd /home/username/Downloads
pwd
--> /home/username/Downloads
Alle Benutzer haben einen Benutzernamen und gehören zu verschiedenen Benutzergruppen. Für jedes Verzeichnis und jede Datei kann festgelegt werden, zu welchem Benutzer und zu welcher Gruppe sie gehören. Anschließend kann man für den Besitzer, die besitzende Gruppe und alle anderen Benutzer folgende Rechte genau einstellen:
Darf das Verzeichnis/die Datei von diesem Benutzer:
Da Dateirechte unter Linux ein recht komplexes Thema sind, soll hier nur beispielhaft gezeigt werden, wie man eine Datei ausführbar macht. Um Dateirechte zu Verändern nutzt man den Befehl chmod
. Mit dem folgende Befehl wird die Datei myscript.sh
im aktuellen Verzeichnis ausführbar gemacht.
chmod +x myscript.sh
Möchte man ein Programm auf der Konsole ausführen, reicht es, den passenden Namen auf der Konsole einzugeben. Ist man dem Text bis hierhin gefolgt, hat man dies mit den Programmen pwd
, ls
, cd
und chmod
bereits erfolgreich getan.
Dies funktioniert nur deshalb, weil Linux nach dem passenden Programm mit dem eingegebenen Namen an definierten Orten im System sucht. Dies Orte werden in der Umgebungsvariable PATH
angegeben und man kann sie mit folgendem Befehl betrachten:
echo $PATH
--> /home/username/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin
Die Rückgabe wird vom System zu System variieren, ist aber immer aus mehreren absoluten Pfaden getrennt durch das Zeichen :
aufgebaut. Gibt man beispielsweise den Befehl pwd
ein, wird hinter den Kulissen nacheinander in jedem dieser Ordner nachgeschaut, ob eine ausführbare Datei namens pwd
vorhanden ist.
Im obigen Beispiel wird also in absteigender Reihenfolge in folgenden Ordnern nach der Datei gesucht:
/home/username/bin
/usr/local/sbin
/usr/local/bin
/sbin
/bin
Wird die Datei gefunden, wird sie sofort ausgeführt und die restlichen Ordner werden nicht weiter beachtet. Wird eine passende Datei in keinem der Ordner gefunden, erhält man eine Fehlermeldung.
Wie oben beschrieben impliziert das Ausführen eines Programms immer die Suche nach ihm in bestimmten, vorher festgelegten Ordnern. Möchte man jedoch ein eigenes Programm ausführen, das sich nicht in einem dieser Ordner befindet, muss man den (absoluten oder relativen) Pfad zum Programm explizit angeben, um den Suchmechanismus zu umgehen. Um ein Programm namens theprog
im aktuellen Verzeichnis ausführen würde man also beispielsweise folgenden Befehl eingeben:
./theprog
Im eigenen Verzeichnis befindet sich im Unterordner scripts
das Bash-Skript myscript.sh
, welches man ausführen will. Das Skript beginnt mit einer passenden Shebang-Zeile, die signalisiert, wie sie ausgeführt werden soll, ist aber noch nicht ausführbar. Mit dem folgenden Vorgehen navigiert man zum Ordner, macht die Datei ausführbar und führt sie aus.
# Das aktuelle Arbeitsverzeichnis ist /home/username
pwd
--> /home/username
# Zum Verzeichnis /home/username/scripts durch Eingabe des relativen
# Pfades wechseln
cd scripts
# Das Skript myscript.sh ausführbar machen
chmod +x myscript.sh
# Das Script myscript.sh durch Eingabe eines relativen Pfades ausführen
./myscript.sh
# ODER:
# Das Sript myscript.sh durch Eingabe eines absoluten Pfades ausführen
# (umständlicher, aber funktioniert auch, wenn man sich aktuell nicht
# im gleichen Verzeichnis wie das Skript befinden würde)
/home/username/scripts/myscript.sh
Um ein laufendes Programm zu beenden nutzt man entweder einen dafür eingebauten Weg oder drückt einfach STRG
+C
Die Tabulatortaste ist ein unschätzbar guter Freund bei der Arbeit mit der Konsole. Sie hat die Funktion der Autovervollständigung, das heißt durch Drücken von TAB
wird automatisch versucht, den angefangenen Befehl sinnvoll zu beenden. Ist das bisher eingegebene noch nicht eindeutige genug, liefert das doppelte Drücken von Tab eine Liste mit sinnvollen Möglichkeiten.
Eine detailierte Beschreibung der Autovervollständigungs-Funktion mit Beispielen findet man hier: (http://wiki.ubuntuusers.de/Bash#Autovervollstaendigung)
Für (fast) jeden Befehl gibt es eine eingebaute Bedienungsanleitung, die man auf der Konsole lesen kann. Zu diesem Zweck gibt es das Programm man
.
Die ausführliche Dokumentation des Programms ls
kann man beispielsweise durch Eingabe des folgenden Befehls ansehen:
man ls
Innerhalb des Programms man
kann man den Text mit den Cursortasten oder den Tasten BildAuf
/BildAb
scrollen. Um man
zu verlassen drück man einfach q
.