Einführung in die Shell – Teil 1

Aus EasyLinux 01/2010

Einführung in die Shell – Teil 1

Im Anfang war der Prompt

Mit der Shell geht vieles schneller: Das zeigen wir regelmäßig im Guru-Training. In dieser Ausgabe können Sie bei Null loslegen, wir erklären die Grundlagen der Shell-Benutzung und schaffen damit eine Grundlage für die übrigen Beiträge in dieser Rubrik.

Grafische Benutzeroberflächen sind zwar heute nicht mehr wegzudenken: Seit den ersten Windows-Versionen haben sie sich als bequeme und einsteigertaugliche Möglichkeit, einen PC zu verwenden, etabliert, und auch vor Windows gab es für professionelle Unix-Workstations schon die Möglichkeit, Fenster mit der Maus auf der Oberfläche hin und her zu schieben. Doch die Rechnersteuerung über Tastaturkommandos ist viel älter, und so hatten die Entwickler von Kommandozeileninterpretern (so genannten Shells) Jahrzehnte lang Zeit, diese Tools zu perfektionieren.

Der Grundgedanke aller Shells ist simpel: Als Benutzer geben Sie ein Kommando ein, das der Rechner interpretiert und dann ausführt. So sagen Sie einem Linux-Rechner etwa auf gut Englisch: “remove all files in /tmp” (Entferne alle Dateien im Verzeichnis /tmp/). In der Shell wird das englische Kommando dann verkürzt zu rm /tmp/* – die Entwickler und ersten Anwender der Shells waren tippfaul und wollten nicht immer “remove” schreiben, so entstand “rm” als Abkürzung des englischen Worts für das Löschen. Auch Windows hat mit dem Programm cmd (command) eine Shell, in der Sie Befehle eingeben können – die spricht aber eine andere Sprache und verwendet zum Löschen nicht das Wort “remove” (entfernen), sondern “delete”. Auch die Windows-Shell kürzt das ab, ein entsprechendes Kommando könnte unter Windows del c:\temp\*.* sein. In beiden Befehlsbeispielen sehen Sie hier Sternchen: Die bieten eine bequeme Möglichkeit, ein Kommando nicht nur auf eine einzelne Datei, sondern gleich auf mehrere anzuwenden – im Beispiel auf sämtliche Dateien, die sich im temporären Verzeichnis befinden, das bei Linux /tmp/ und bei Windows oft c:\temp\ heißt.

Allgemein gilt für eine Shell dasselbe wie für Programmiersprachen: Die Intelligenz des Kommandozeileninterpreters (der Ihre Kommandos eben zunächst interpretieren muss) ist beschränkt, und Sie müssen beim Angeben eines Befehls exakt die Sprache (mit korrekter Syntax) sprechen, welche die Shell versteht. Würden Sie in der Linux-Shell etwa remove statt rm schreiben, wäre die Aufforderung zwar für Sie verständlicher, die Shell hingegen könnte damit nichts anfangen.

Auf geht’s

Nach diesen einleitenden Worten ist es Zeit für erste eigene Experimente. Im Normalfall werden Sie Linux mit einem der beiden großen Desktops KDE und Gnome verwenden. Dann steht zunächst keine Möglichkeit bereit, dem System einen getippten Befehl zu erteilen. Sie müssen dazu erst ein so genanntes Terminalfenster öffnen. Die Startmenüs der Desktop-Umgebungen halten passende Einträge dafür bereit, unter KDE suchen Sie nach dem Programm “Konsole”, unter Gnome nach dem “Terminal”. Wenn Sie nicht fündig werden, nutzen Sie eine alternative Möglichkeit, Programme zu starten: Öffnen Sie mit [Alt]+[F2] ein Schnellstartfenster, geben Sie darin den Namen des zu startenden Terminalprogramms (unter KDE: konsole, unter Gnome: gnome-terminal) ein, wobei Sie die durchgehende Kleinschreibung der Programmnamen beachten müssen. Wenn Sie jetzt die Eingabetaste drücken, erscheint ein neues und weitgehend leeres Fenster auf dem Bildschirm, das je nach Voreinstellung in weißer Schrift vor schwarzem Hintergrund oder mit genau umgekehrter Farbwahl den so genannten Shell-Prompt anzeigt. Das ist die Eingabeaufforderung, die Ihnen mitteilt, dass jetzt eine gute Gelegenheit wäre, in diesem Fenster einen Befehl einzugeben. Der Prompt kann je nach Linux-Version unterschiedlich aussehen, enthält aber meist einige charakteristische Elemente. Das folgende Beispiel eines solchen Prompts stammt von einem Ubuntu-System:

esser@netbookhg:~$

Fragen Sie sich hier: “Was will uns der Autor dieser Zeile sagen?”, dann ist dies die Antwort:

  • Am unscheinbarsten, aber trotzdem wichtig ist das Dollarzeichen ganz am Ende: Es teilt Ihnen mit, dass diese Shell mit einfachen Benutzerrechten (und nicht mit den Administratorrechten des speziellen Benutzers root) läuft. Manchmal erscheint anstelle des Dollarzeichens auch ein Größerzeichen (>), das dieselbe Bedeutung hat. Nur wenn Sie am Ende des Prompts eine Raute (#) sehen, ist die Situation eine andere: Dann haben Sie das Terminalfenster mit Root-Rechten geöffnet, und es ist besondere Vorsicht angebracht! Dazu später mehr.
  • Am Anfang des Prompts sehen Sie Ihren Benutzernamen. Wenn Sie der einzige Anwender Ihres Systems sind, erscheint das vielleicht als nicht weiter nützlich, auf Rechnern mit mehreren Benutzer-Accounts macht es aber auf einen Blick deutlich, wer gerade angemeldet ist. Außerdem erscheint auch hier zur Mahnung der Benutzername root, wenn Sie mit administrativen Rechten unterwegs sind.
  • Hinter dem aus Mailadressen bekannten At-Zeichen (@) steht der Name des Rechners. Dass dieser im Prompt erscheint, hilft in erster Linie Anwendern, die in einem Netzwerk arbeiten und sich über die Netzverbindung auf anderen Computern anmelden. Dort läuft nämlich mit einer gewissen Wahrscheinlichkeit dieselbe Shell, die einen ähnlichen Prompt anzeigt. Damit hier keine Verwirrung entsteht (und Anwender z. B. auf dem falschen Computer eine Datei löschen), gibt der Rechnername im Prompt stets Auskunft darüber, welchen PC Sie gerade steuern.
  • Leicht zu übersehen ist die Tilde (~), die hier – abgetrennt durch einen Doppelpunkt – auf den Rechnernamen folgt: Sie zeigt das aktuelle Arbeitsverzeichnis an. Wenn Sie noch kein Verzeichnis namens ~ auf Ihrem Rechner entdeckt haben, liegt das daran, dass die schreibmüden Shell-Benutzer hier wieder eine Abkürzung verwenden: Die Tilde ist eine Abkürzung für Ihr persönliches Arbeitsverzeichnis, das auf Standard-Linux-Systemen immer /home/benutzername/ heißt.

Endlich was tun

Genug vom Shell-Prompt – jetzt ist es Zeit, einen ersten Befehl einzugeben. Haben Sie über die Erläuterungen zu den wenigen Zeichen im Prompt die Übersicht verloren, hilft es, sich über die eigene Identität Gewissheit zu verschaffen. Linux bietet dafür das hübsch benannte Kommando whoami. Es eignet sich gut als erstes Beispiel für einen Shell-Befehl, weil es (im Gegensatz zu einigen anderen Befehlen) auch bei falschem Gebrauch keinen Schaden anrichten kann.

Tippen Sie also die Buchstaben whoami ein und drücken Sie dann die Eingabetaste: Mit diesem letzten Tastendruck “schicken Sie den Befehl ab”, wie Shell-Anwender sagen. Solange Sie noch nicht die Eingabetaste gedrückt haben, können Sie Ihren Befehl verändern, z. B. Tippfehler korrigieren oder so genannte Argumente für ein Kommando ergänzen. Bei der Eingabe stehen Ihnen auch die Cursortasten zur Verfügung, mit denen Sie weiter nach vorne oder zurück nach hinten springen, in Verbindung mit [Strg] auch wortweise.

esser@netbookhg:~$ whoami
esser

In diesem Artikel (und allen anderen Texten in EasyLinux) stellen wir die Anzeigen in der Shell immer mit Buchstaben in fester Breite dar – Ihre eigenen Eingaben erscheinen dabei gefettet, die Ausgaben des Systems in normaler Schrift. So können Sie schnell unterscheiden, was Ein- und was Ausgabe ist.

Im Beispiel gibt das Kommando whoami einfach Ihren Benutzernamen aus. Etwas informativer ist ein anderes Kommando, das in der Langform “print working directory” (gib das Arbeitsverzeichnis aus) heißen würde – auch hierfür kennt die Shell nur eine Abkürzung, der Befehl heißt pwd.

esser@netbookhg:~$ pwd
/home/esser

Wie versprochen, erscheint das Arbeitsverzeichnis /home/benutzername (Abbildung 1).

Dateimanager eingebaut

Eine der Hauptaufgaben der Shell ist, Funktionen eines Dateimanagers zur Verfügung zu stellen. Wollen Sie Ihre Dateien suchen, öffnen, organisieren, umbenennen, kopieren oder über das Netzwerk auf einen anderen Computer übertragen, können Sie all diese Dinge direkt in der Shell erledigen – schließlich waren das schon Standardarbeiten, als es noch keine grafischen Oberflächen gab. Die Shell ist darum richtig gut darin, Sie diese Dinge erledigen zu lassen.

Jetzt erhält der Begriff “Arbeitsverzeichnis” auch endlich eine Bedeutung: Ähnlich wie ein grafischer Dateimanager immer den Inhalt eines ausgewählten Verzeichnisses anzeigt (und Sie dann nur Dateien in diesem Ordner unmittelbar über Mausklicks auswählen und damit arbeiten können), gibt es auch in der Shell immer ein aktuelles Arbeitsverzeichnis, und viele Kommandos, die Sie am Shell-Prompt eingeben, beziehen sich unmittelbar auf die Dateien in diesem Ordner, sofern Sie nichts Gegenteiliges in Ihrem Befehl verlangen.

Dass Sie mit pwd herausfinden können, wie der Name des aktuellen Arbeitsverzeichnisses lautet, haben Sie schon gesehen. cd ist – Sie ahnen es – eine weitere Abkürzung und steht für “change directory” (Arbeitsverzeichnis wechseln). Haben Sie etwa einen Unterordner Dokumente in Ihrem Home-Verzeichnis, gelangen Sie mit dem Kommando

esser@netbookhg:~$ cd Dokumente
esser@netbookhg:~/Dokumente$

dort hinein. Jetzt ändert sich auch der Prompt und zeigt an, dass Sie im gewünschten Verzeichnis gelandet sind. Genauso nützlich wie der Verzeichniswechselbefehl ist ein Kommando, das den Inhalt des aktuellen Ordners auflistet: also alle enthaltenen Dateien und Unterverzeichnisse. Das Kommando trägt den Namen ls (“list”).

esser@netbookhg:~/Dokumente$ ls
EasyLinux
FOS
Linux-Magazin
mini-os.txt
test
LinuxUser

Das ist jetzt nicht besonders informativ – Listing 1 zeigt die Ausgabe eines leicht veränderten Aufrufs des ls-Befehls: Hinter dem Kommandonamen folgt (nach einem Leerzeichen) eine Option (hier -l). Optionen können das Verhalten eines Befehls verändern. Im Beispiel sorgt die Option -l dafür, dass die Shell den Verzeichnisinhalt im Langformat ausgibt.

Listing 1

Lange Ausgabe bei

ls

esser@netbookhg:~/Dokumente$ ls -l
insgesamt 2676
drwxr-xr-x 5 esser esser    4096 2009-11-19 18:33 EasyLinux
drwxr-xr-x 9 esser esser    4096 2009-11-27 05:28 FOS
drwxr-xr-x 7 esser esser    4096 2009-08-17 12:01 Linux-Magazin
-rw-r--r-- 1 esser esser    1765 2009-02-26 19:36 mini-os.txt
drwxr-xr-x 2 esser esser    4096 2009-04-11 12:15 test
drwxr-xr-x 3 esser esser    4096 2009-08-21 08:43 LinuxUser

Auf den ersten Blick erkennbar sind von rechts nach links die Datei- oder Verzeichnisnamen, eine Uhrzeit und ein Datum. Letztere geben den Zeitpunkt der letzten Änderung an. Für die übrigen Spalten nun einige Erklärungen:

In der ganz linken Spalte stehen die Zugriffsrechte, die verschiedene Benutzergruppen für diese Dateien und Verzeichnisse haben. Eine genaue Beschreibung führt hier zu weit, einige ältere EasyLinux-Artikel [1,3] erklären die Rechte detailliert. Die folgenden beiden Spalten geben an, wer der Besitzer der Datei ist und zu welcher Benutzergruppe die Datei gehört. Bei selbst erstellten Dateien werden Sie hier in der ersten Spalte immer Ihren eigenen Benutzernamen sehen, in der zweiten Spalte steht – abhängig von der eingesetzten Linux-Distribution – erneut Ihr Benutzername (der gleichzeitig ein Gruppenname ist) oder der Gruppenname users. Danach folgt noch eine Spalte, die (bei Dateien) die Größe angibt.

Schieben, kopieren und löschen

Häufige Aktionen in der Shell bewegen Dateien durch die Gegend. Um etwa eine Datei aus dem aktuellen Arbeitsverzeichnis in den temporären Ordner /tmp/ zu verschieben, verwenden Sie das Kommando mv (“move”): Heißt die Datei test.txt, lautet der volle Befehl

mv test.txt /tmp/

Wichtig ist hier die Reihenfolge: Zunächst nennen Sie hinter dem Befehl mv den Namen der Datei, die Sie verschieben möchten, das zweite Argument ist dann der Zielordner /tmp/. Das Ganze geht auch in umgekehrter Richtung – um die Datei anschließend aus /tmp/ ins aktuelle Verzeichnis zurückzuholen, schreiben Sie

mv /tmp/test.txt .

Beachten Sie dabei, dass das zweite Argument nur ein einfacher Punkt ist: Über . sprechen Sie stets das aktuelle Verzeichnis an. Es gibt noch ein ähnliches Kürzel: .. (zwei Punkte) steht für das übergeordnete Verzeichnis – also für den Ordner, der eine Ebene höher (oder näher an der Wurzel) in der Verzeichnishierarchie liegt.

Fast genauso wie das Verschieben funktioniert das Kopieren. Ersetzen Sie dazu einfach den mv-Befehl durch cp (“copy”), die folgenden Argumente haben fürs Kopieren dieselbe Bedeutung wie fürs Verschieben. So erstellen Sie mit

cp test.txt /tmp/

eine (gleichnamige) Kopie von test.txt, die im Ordner /tmp/ liegt. Wollen Sie die Kopie unter einem anderen Namen erzeugen, schreiben Sie diesen direkt hinter den Verzeichnisnamen, z. B.

cp test.txt /tmp/kopie.txt

Die Kopie darf auch im selben Verzeichnis wie das Original liegen, muss dann aber zwingend einen anderen Namen erhalten. Das richtige Kommando wäre dann etwa

cp test.txt kopie.txt

Schließlich können Sie mv auch zum Umbenennen verwenden. Dabei geben Sie den bisherigen Namen als erstes Argument und den neuen Namen als zweites Argument an, z. B.

mv test.txt neuername.txt

Ein weiteres wichtiges Kommando ist rm (“remove”): Es entfernt oder löscht Dateien. Wollen Sie die eben erstellte Kopie kopie.txt wieder los werden, erledigt das ohne Rückfrage der Befehl

rm kopie.txt

Wichtig: Wenn Sie es von grafischen Dateimanagern gewohnt sind, dass gelöschte Dateien in einem speziellen Ordner namens Mülleimer landen, müssen Sie in der Shell umdenken. Eine gelöschte Datei ist weg, und es braucht schon einiges Expertenwissen und oft auch eine Portion Glück, um gelöschte Daten zurückzubringen. Setzen Sie das rm-Kommando also nur mit großer Vorsicht ein.

Andere Anwendungen starten

Viele Anwender nutzen ein dauerhaft geöffnetes Terminalfenster einfach dazu, schnell durch Eingabe eines Programmnamens eine bestimmte Anwendung zu starten, ohne sich durch die Hierarchie des Startmenüs zu hangeln. Das funktioniert aber nur, wenn Sie die exakte Schreibweise des Programmnamens (oder zumindest dessen erste Buchstaben) kennen. Wollen Sie etwa das Officepaket OpenOffice starten, könnte der Programmname auf Ihrem Linux-System ooffice oder soffice (in Anlehnung an die Herkunft des Programms von StarOffice) lauten. Probieren Sie ruhig beide Varianten in der Shell aus: Wenn Sie die richtige erwischt haben, wird OpenOffice starten. Bei vielen anderen Programmen funktioniert eine konsequente Kleinschreibung des Namens, so ist gimp etwa die richtige Wahl, um das Grafikprogramm Gimp zu starten.

In der Shell können Sie nach einem solchen Programmstart allerdings nicht weiter arbeiten – sie ist blockiert, bis Sie das aufgerufene Programm beenden. Das können Sie vermeiden, indem Sie beim Aufruf ein kaufmännisches Und-Zeichen (&) hinter den Programmnamen setzen. Schreiben Sie in der Shell also

gimp &

erscheint sofort nach dem Abschicken des Kommandos wieder der Shell-Prompt, und Sie können die Shell weiter verwenden (Abbildung 2). Mehr Informationen hierzu finden Sie in einem älteren EasyLinux-Artikel zum Job-Management in der Shell [2].

Mal als “root”

Für manche Aufgaben benötigen Sie Administratorrechte – etwa, wenn Sie eine der Linux-Konfigurationsdateien im Verzeichnis /etc/ in einem Editor bearbeiten möchten. Mit einfachen Benutzerrechten erhalten Sie bei entsprechenden Versuchen nur die Fehlermeldung, dass Sie die Datei nicht verändern dürfen (Abbildung 3). In der Shell werden Sie mit einem einfach Kommando zum Administrator – welches Kommando das ist, hängt von der Linux-Distribution ab:

  • Unter OpenSuse und Mandriva Linux verwenden Sie das Kommando su (substitute user: Benutzer ersetzen), das Sie nach dem Abschicken auffordert, das Root-Passwort (also das Passwort des Systemverwalters root) einzugeben.
  • Unter Ubuntu geben Sie stattdessen sudo su ein und müssen nun Ihr eigenes Passwort eingeben, weil Ubuntu kein Root-Passwort vergibt und stattdessen dem ersten angelegten Benutzer erlaubt, Systemverwaltungsaufgaben zu übernehmen.

Jetzt ändert sich der Prompt: Anstelle des bisher angezeigten Dollar- oder Größerzeichens erscheint eine Raute, welche die neu erworbenen Root-Rechte anzeigt. Alle Befehle, die Sie jetzt ausführen, laufen mit Maximalrechten. Damit verändern Sie Konfigurationsdateien, installieren oder löschen Software, (de)aktivieren das Netzwerk und vieles mehr. Um die Root-Rechte wieder abzugeben, verwenden Sie entweder das Kommando exit oder drücken (schneller) einfach [Strg]+[D].

Es kommt noch mehr

In diesem Artikel haben wir nur einen kleinen Einstieg in die Arbeit mit der Shell präsentiert, darum geht es in der nächsten Ausgabe weiter. Dann beschäftigen wir uns u. a. mit komplexeren Dateioperationen gehen, bei denen die Shell ihre Stärken im Vergleich zu grafischen Programmen ausspielen kann; beliebt ist hier etwa die Aufgabe, in einem ganzen Verzeichnisbaum alle enthaltenen Dateien nach einem bestimmten Schema umzubenennen.

Infos

[1] Artikel zu Zugriffsrechten: Elisabeth Bauer, “Alles, was recht ist”, EasyLinux 09/2003, S. 71 ff., http://www.easylinux.de/2003/09/071-guru-chmod/

[2] Artikel zu Job-Management in der Shell: Hans-Georg Eßer, “Jobkontrolle”, EasyLinux 03/2009, S. 124

[3] Artikel zu Rechten: Marcel Hilzinger, “Rechte vergeben”, EasyLinux 08/2006, S. 26 ff., http://www.easylinux.de/2006/08/026-benutzerrechte/

EasyLinux 01/2010 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

2 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Ferdinand Thommes
16 Jahre her

Trotzt Anmeldung kann ich den Artikel nicht lesen wogegen andere EasyLinux Artikel lesbar sind.

Ferdinand Thommes
16 Jahre her

Seltsam, mehrmaliges Aktualisieren half nicht. Nach dem Absenden des obigen Kommentars war der Artikel dann lesbar. Vorführeffekt :)

Nach oben