Thema: Die Linux Shell 
Autor Deine Nachricht
 : Die Linux Shell
BeitragVerfasst: Di 13. Okt 2009, 20:38 
In diesem Tutorial gibt es viel zu lesen.
Aber das ist etwas, was eine unumgängliche Tätigkeit bei Linux ist. Wer nicht lesen mag, der sollte Linux auch generell vermeiden :)

Hier ein Link zu diesem tutorial in simpler Form:
http://junemaster.ju.funpic.de/niff/linux-shell.php (Teil 1)
http://junemaster.ju.funpic.de/niff/linux-shell-2.php (Teil 2)

---

Einige von euch haben sicherlich schon mal mit dem Gedanken gespielt Linux auszuprobieren.
Ein Paar haben es vielleicht sogar schon getan, sind aber daran gescheitert, dass es "anders" ist als Windows... Man findet nicht mal die Systemsteuerung oder etwas ähnliches, und als ihr dann festgestellt habt, dass man für viele Systemeinstellungen die sogenannte "Shell" (oder Konsole oder Terminal) benötigt habt ihr aufgegeben, und seit wieder zu Windows gewechselt.
Die hartgesottenen unter euch, die nicht so schnell aufgegeben haben, haben das nutzen der Shell gelernt, und somit ihr Potential erkannt.

Hier möchte ich euch eine kleine Einführung in die Shell geben.
Wir werden ein paar Standardbefehle kennen lernen und ich werde euch zeigen, dass man mit der Shell ne menge interessanter Dinge machen kann.

Linux Distribution
Für die, die es noch nicht wissen, was eine Distribution ist:
http://de.wikipedia.org/wiki/Linux-Distribution
Im Prinzip ein gigantisches Sammelwerk an Software, welche alle zusammen arbeiten.

Als Distri (Kurzform von Distribution) habe ich Debian GNU/Linux gewählt. Die meisten hier im Tutorial verwendeten Befehle wird es auch auf den anderen Distributionen geben. Da Ubuntu von Debian abstammt, werden Ubuntuuser mit diesem Tutorial wahrscheinlich auch keinerlei Probleme haben. Ihr müsst also nicht extra die Distribution wechseln. Falls irgendwas nicht funktioniert, gebt mir in einem Beitrag bescheid und sagt welche Distri ihr nutzt.

Warum die Shell?
Eine Distribution ist, wie gesagt, ein Sammelwerk an Software.
Diese Software stammt nicht immer von den Entwicklern der Distribution, sondern von komplett anderen Entwicklern, die mit der Distri nicht direkt etwas zu tun haben. Die aktuelle Debian stable z.B. hat über 25.000 Software Pakete.
Das Prinzip der "Freien Software" (Frei wie in Freie Rede, nicht Freibier) erlaubt es den Debian Entwicklern Software Frei und ohne Grenzen zu nutzen. Die Debian Entwickler entscheiden lediglich welche software ins Projekt eingebunden wird und welche nicht.

Viele der Entwickler verzichten aus Perfomance gründen auf eine Grafische Benutzeroberfläche (so dass man das Programm mit der Maus bedienen kann), und geben stattdessen eine Reihe Möglichkeiten, das Programm über die Shell mithilfe von Parametern und Switches zu steuern.
Konfigurationen unter Linux werden in den allermeisten Fällen in simple Textdateien gespeichert. Sowas wie eine "Registry" gibt es unter Linux nicht.

Aus diesem Grund kann man die meisten Programme nur über die Shell bedienen.

Lasst uns als anfangen

---

Die Shell starten
Jede Distribution hat eine Shell. Je nach dem ob man eine Desktop Umgebung nutzt (GNOME, KDE, XFCE uvm.) hat man die Möglichkeit eine Shell über das Menü zu öffnen. Sucht nach Begriffen wie "Terminal" oder ähnliches. Unter Debian GNOME, befindet sich eine Shell standardmäßig unter:
Anwendungen -> Zubehör -> Terminal
So oder ähnliche könnte es dann ausschauen:

Bild

Ein bisschen Ähnlichkeit mit der Windows Eingabeaufforderung hat es schon (einige würde mich für dieses Statement wahrscheinlich erschlagen ^^).

Das was ihr dort lesen könnt ist folgendes:

Je nach Einstellung kann bei euch etwas anderes angezeigt werden.
Die Informationen die ich daraus lesen kann sind: Ich bin in der Shell angemeldet mit dem Benutzer "balmung", mein Rechnername ist "ikarus" und ich befinde mich momentan im Verzeichnis "~".
Die Tilde "~" ist eine Abkürzung für das "Home"-Verzeichnis des Benutzers Balmung (Ein Home-Verzeichnis ist vergleichbar mit dem Ordner "Eigene Dateien" unter Windows).
das Dollar Zeichen "$" signalisiert bei mir nur das Ende dieser kurzen Infos. dahinter befindet sich der Cursor, und ich kann meine Eingaben starten.

Um nicht immer Screenshots zu machen, werde ich einfach wie oben die Shell Befehle in code-Blöcken schreiben.

Der erste Befehl.
wie gesagt bedeutet die Tilde "~", dass ihr euch im Home-Verzeichnis es aktuell angemeldeten Benutzers befindet (wenn ihr das nicht dort stehen habt, ist es auch nicht so schlimm).
Um den exakten und absoluten Pfad zu ermitteln, zu dem Verzeichnis in dem ihr euch gerade befindet, gebt ihr den Befehl "pwd" ein:

pwd steht für "Print Working Directory" (zu Deutsch: Drucke Arbeitsverzeichnis). Es gibt mir also das Aktuelle Verzeichnis aus, in dem ich gerade mit der Shell "Arbeite".
Das Tilde-Symbol "~", ist also die Abkürzung für mein Home-Verzeichnis "/home/balmung".

Um zu gucken was für Dateien und Ordner ich in diesem Verzeichnis habe, nutzen wir den Befehl "ls", was wohl eine Art Abkürzung für "list" oder so ist.

Ein paar Sachen hab ich da schon aufzulisten. Ich habe jetzt nicht alles angezeigt, weil die Code-Blöcke sonst zu groß werden würden.
Es könnte sein dass bei die Dateien und Ordner in unterschiedlichen Farben angezeigt werden.
Um die Liste ein bisschen ausführlicher zu gestalten gibt es sogenannte "switches" für die meisten Programme.
So ein Switch besteht meistens aus einem Bindestrich und einem einzelnen Buchstaben, z.B "-a" Manchmal aber auch aus einem doppelten Bindestrich und einem Wort z.B. "--all".
Welche Switche es gibt, und wie diese Aufgebaut sind, hängt ganz vond em verwendeten Programm ab, und muss nicht immer genau das Format haben wie beschrieben.
Um die Dateiliste ausführlicher zu gestalten, gibt es den Switch "-l", für ein langes Listenformat.

Auch hier ist die Liste von mir etwas Verkürzt worden.
Bei euch werden wahrscheinlich nicht so viele Unterschiedliche Dateien vorhanden sein.
Wie ihr sichelrich schon bemerkt habt, stehen ganz links die Namen der Dateien und Ordner. Kurz davor ein Datum, welches man wahrscheinlich das Datum der letzten Veränderung (oder des Letzten Zugriffes, weiß ich jetzt nicht sooo genau ;-) ) ist.
Von Links angefangen stehen dort ne reihe buchstaben und Bindestriche:

Der erste Buchstabe ganz links gibt immer an um was für eine Art von Datei es sich dabei handelt.
das "d" steht für "Directory", es handelt sich dabei also um ein Verzeichnis. "Bilder" ganz oben in der Liste ist also ein Ordner. Wenn ein einfacher Binderstrich an der Stelle zu finden ist, handelt es sich dabei um eine Normale Datei. ein "l" (kleines L) ist ein "Link", wie ihr an zweiter Stelle sehen könnt. Der Name des Links ist "C" und verweist (sogar mit nem schicken Pfeil schön dargestellt) auf das Verzeichnis ".wine/drive_c/".
Ganz unten finden wir auch eine Datei vom typ "p", was für "Pipe" (Rohr) steht. Diese sind nützlich um zwei Unterschiedliche Programme miteinander kommunizieren zu lassen, das ist hier aber nicht so wichtig.
Die Datei "default.m3u" (eine Playlist) ist also eine Stinknormale Datei. Während "Bilder", "Desktop", "Dokumente" und "Download" Verzeichnisse sind.
Die nächsten 6 Buchstaben bestehen, wenn alle gesetzt sind, wie man beim Link sehen kann, üblicherweise aus "rwxrwxrwx".
Dies sind die Rechte der Datei. Es sind immer Drei Gruppen bestehend aus "rwx".
r = Read = Lesezugriff, wenn der Buchstabe gesetzt ist, darf man die Datei Lesen
w = Write = Schreibzugriff, wenn gesetzt, darf man die Datei verändern und Löschen
x = eXecute = Ausführen, wenn gesetzt, darf man die Datei ausführen. Die datei ist dann wahrscheinlich ein Programm, ein Script oder ein Ordner.

die linken Drei "rwx" geben an was der Besitzer der Datei darf.
Die mittleren Drei "rwx" geben an was die Gruppe, die dieser Datei zugeweisen wurde, mit der Datei anstellen darf.
die letzten Drei "rwx" geben an was alle anderen, die die datei nicht besitzen, und nicht in der zugewiesenen Gruppe sind, mit der Datei anstellen dürfen.

Um herauszufinden wer der Besitzer und die Gruppe zu einer Datei ist, schaut man sich die beiden Namen an, die an Dritter und Vierter Stelle stehen.
Bei mir steht meistens "balmung balmung", und einmal "root root".
Der erste Name ist der Besitzer, der zweite Name die Gruppe. Es kommt häufig vor, dass ein Benutzer auch eine eigene Gruppe mit dem selben Namen bekommt.
Die Datei menu.lst gehört dem Benutzer "root" (Systemadministrator).

Da ich als Benutzer "balmung" in der Gruppe "balmung" weder root bin noch in seiner Gruppe bin, muss ich mir also den letzten "rwx" Block ganz rechts anschauen, um zu sehen, was ich mit dieser Datei anstellen darf.
Dort steht nur "r--". d.h. ich habe nur die Rechte diese Datei zu lesen. Ich darf sie also nicht Beschreiben oder Löschen und auch nicht Ausführen.

Die Zahle zwischen den Dateirechten und dem Namen des Besitzers ist bei Dateien immer 1, und bei Verzeichnissen gibt sie an wieviele Unterverzeichnisse sie hat. Wobei es mindestens immer 2 sind, da "." und ".." mitgezählt werden (sich selbst, und das übergeordnete Verzeichnis).

Die relativ großen Zahlen nach dem Gruppennamen, geben die Dateigröße an, ja Auch Ordner belegen Speicher auf dem Datenräger. Irgendwo muss ja abgelegt sein welche Dateien in dem Ordner enthalten sind ;-)
Wenn euch die Zahlen zu unleserlich sind, könnt ihr noch einen zweiten Switch hinzufügen. ds "h" was für Human-readable (für Menschen lesbar) steht.
Ihr könnt die Switche entweder zusammenfassen "-lh", oder einzeln Angeben "-l -h".
Ganz am Anfang steht "insgesamt 14M", was dann natürlich die Gesamtgröße der Dateien und Ordner in diesem Verzeichnis darstellt.



Viele Programme geben Informationen darüber, was für Switches sie anbieten.
dazu reicht es oftmals "--help" als Switch anzugeben, oder die Manuals zu lesen mit dem Befehl "man", hier ein Beispel für das Programm "ls":

Ihr kommt aus den Manuals wieder raus in dem ihr "Q" drückt.

Verzeichniss wechseln
in der Shell kann man natürlich auch durch die Verzeichnisse navigieren um sich mit "ls" dann auch den Inhalt von andere Verzeichnissen anzeigen zu lassen.
Der Befehl dazu heißt "cd", was für Change Directory (Wechsel Verzeichnis) steht.
man gibt einfach "cd Ordnername" ein, um in das gewünschte Verzeichnis zu gelangen. Ihr müsst aber bedenken dass Linux "Case Sensitve" ist, das heißt, es unterscheidet zwischen Groß- und Kleinschreibung. Wie ihr in meiner Liste oben sehen könnt habe ich ein Verzeichnis Names "Dokumente". wenn ich also "cd dokumente" eingebe, würde ein Fehler ausgespuckt werden. "cd Dokumente" ist richtig.
Info: Wenn euer Verzeichnisname Leerfelder enthält, dann gibt den Namen in Anführungsstriche an.
z.B.

Ich Wechsel jetzt ins Verzeichnis "Dokumente":

Das was ihr sehen könnt ist, dass sich der Teil vor dem $-Zeichen bei mir verändert hat. Dort steht jetzt "~/Dokumente". (Es kann aber sein, dass bei euch der Pfad nicht angezeigt wird, das ist immer abhängig von der Distribution, und was dort eingestellt ist)
Und weil "~" für "/home/balmung" steht, müsste mein aktuelles Verzeichnis also "/home/balmung/Dokumente" sein.
Das prüfen wir mal nach:

:)
Wenn ihr wieder zurück ins übergeorndete Verzeichnis wechseln wollt, dann müsst ihr vom aktuellen Verzeichnis aus ins Verzeichnis ".." wechseln.


Ihr könnte auch mehrere Verzeichnisse auf einmal zurückwechseln, einfach mit einem "/" trennen.
Info: unter Windows nutzt man "\", unter Linux nutzt man "/" um Verzeichnisse zu trennen.

Jetzt bin ich im Verzeichnis "/". Dieses Verzeichniss ist das root-Verzeichnis. Als das Wurzel Verzeichnis, von dem aus man alle andere Verzeichniss erreichen kann.
Man kommt dort auch schneller hin in dem man einfach "cd /" eingibt.
Wenn man beim Befehl "cd" den Ordnernamen mit einem Führenden "/" angibt, dann wird IMMER von diesem root verzeichnis ausgegangen. d.h. um von IRGENDWO ins Heimverzeichnis zu wechseln, gibt man ein: "cd /home/balmung".
Der Befehle "pwd" gibt auch immer den kompletten Pfad von "/" Root-verzeichnis aus.
Info: in Home-Verzeichnis kommt man meistens schneller wenn man infach "cd ~" eingibt.

Wenn ihr im Root Verzeichnis "/" seid, und dort "ls" eingibt, findet ihr wahrscheinlich Verzeichnisse wie "dev", "etc", "bin", "mnt" usw.
Diese Verzeichnisse spielen alle in einem Linux system relevante Rollen.
Das Verzeichnis "/dev" z.B. enthält Schnittstellen zu sämtlichen angeschlossenen Devices (Geräte).
So zum Beispiel findet man seine Festplatte oft unter dem Dateinamen "/dev/hda" oder "/dev/sda". Und die Partitionen heißen dann "/dev/hda1" und "/dev/hda2" etc.
Unter Linux werden selbst Festplatten und andere Geräte wie Dateien behandelt. Man kann diese Dateien natürlich nicht mit jedem x-beliebigen Programm öffnen (sollte man auch nicht, wenn man nicht weiß was man tut).

Wir wechseln wieder ins Home-Verzeichnis:

(oder absoluter Pfad: "cd /home/balmung")

Man kann auch ein Verzeichnis ausgeben, wenn man sich nicht in diesem Befindet.
Einfach den Pfad zum Verzeichnis als letztes angeben:

oder mit absoluter Pfadangabe:

Mal ein anderes Verzeichnis:

Typ "b" ist ein block-device. hierbei handelt es sich um meine Festplatten und den darauf befindlichen Partitionen :)


Andere nützliche Befehle
Mit "echo" lässt sich Text direct auf der Shell ausgeben:


Mit "cat" lässt sich der Inhalt von Dateien (vorzugsweise Textdateien) auf die Shell ausgeben:

(Diese Datei schaut bei euch Wahrscheinlich anders aus).

Man kann die Ausgaben der Shell auch in Dateien umleiten mit dem Shell Parameter ">".

Sowas wie "ls -lh > dateiliste.txt" geht natürlich auch.

mit "grep" und einer sogenannten "unnamed pipe" (wir hatten vorhin schon was mit einer pipe kurz zu tun gehabt), kann man die Ausgabe der Shell filtern.
zum Beispiel möchte ich aus der /etc/hosts alle Zelien die "localhost" enthalten angezeigt bekommen:

Das Zeichen "|" ist die "unnamed pipe". Die Ausgabe des Programms "cat" wird umgeleitet in die Eingabe des Programms "grep".

Wenn man mit "ls" eine bestimmte Datei ausgegeben haben möchte, kann man das mit grep auch machen:


Da "grep" etwas ähnliches wie Reguläre Ausdrücke verwendet, kann man sich so auch alle Verzeichnisse oder normale Dateien auflsiten lassen:

das "^" signalisiert, dass das "d" bzw der Binderstrich am Anfang der Zeile stehen muss.

und Die Ausgabe von "grep" lassen wir dann durch noch eine unnamed pipe in das Programm "wc" mit dem switch "-l" ein, mit dem wir die Anzahl der Ausgegebenen Zeilen zählen können.

Ich weiß jetzt also dass ich 17 Ordner im aktuellen Verzeichnis habe.
as kann man natürlich auch mit Dateien und andere Dateiarten machen.


mit dem Befehl "su" könnt ihr Benutzer wechseln.
"su" steht für Switch User. Wenn "su" ohne einen Benutzer angegeben wird. wird versucht sich als Benutzer "root" anzumelden, wofür ihr natürlich ein Passwort benötigt.

Bei der Eingabe des Passwortes wird nichts erscheinen. Einfach eingeben und Enter drücken.
Bei Ubuntu muss ich euch (soweit ich weiß) leider enttäuschen. Der "root" Benutzer ist deaktiviert (kann man aber aktivieren, weiß nur nicht wie :P - Google hilft da sicherlich).
Wenn ihr unter Ubuntu einen Befehl als "root" ausführen wollt, müsst ihr einfach nur "sudo" vorne anstellen. z.B. "sudo ls", der fragt euch dann nach dem Passwort für euren normalen Benutzer.

Wir ihr sehen könnt hat ist bei der Shell der Benutzername balmung verschwunden. Jetzt steht dort nur noch der Computername (weil ich jetzt als Systemadministrator unterwegs bin), und der absolute Pfad zum home-Verzeichnis von balmung.

Um sich wieder auszuloggen einfach "exit" eingeben, dann solltet ihr wieder als euer Benutzer (also bei mir "balmung") unterwegs sein.


Dateien und Verzeichnisse kann man natürlich auch löschen.
Der Befehl "rm" wird dafür benutzt.
Dateien löscht man einfach in dem man den Dateinamen angibt:

Wenn das löschen erfolgreich war, gibts keine Fehlermeldung.
Ein Verzeichnis kann man nicht so einfach Löschen, da erst alle Dateien (und Unterverzeichnisse) in diesem Verzeichnis gelöscht werden müssen.
"rm Verzeichnis" würde also einen Fehler ausspucken, dass es sich dabei um ein Verzeichnis handelt.
Wenn ihr dieses effektvi löschen wollt gebt bei rm den switch "-r" an, für Rekursion. Bei einigen Programmen ist es ein kleines "r" (wie bei rm) bei anderen ein großes "R" (wie bei chmod oder ls).

Keine Fehler = Keine Probleme. Das Verzeichnis und ALLES was da drinne war, wird danach unwiderruflich! gelöscht sein.
Die Linux Löschalgorithmen sind "stärker" als die von Windows. generell kann man die Dateien nur mit sehr mühsamen Methoden wieder herstellen. Seid also vorsicht und passt auf was ihr da löscht.
Und traut niemandem der euch sagt man könne mit "rm -rf /" Die Festplatte optimieren. ;-)


Dateirechte
Die Dateirechte kann man natürlich auch verändern.
Für sowas gibt es die Befehle:
chmod - change mode - Ändert die Dateirechte (die Drei "rwx").
chown - change owner - Ändert den Besitzer der Datei
chgrp - change group - Ändert die Zugehörige Gruppe der Datei.

diese Befehle sind natürlich nur dann erfolgreich, wenn man die nötigen Rechte dazu hat.
Wenn man der Besitzer der Datei ist, sollte man die Rechte ohne Probleme verändern können.
Als "root" oder mit dem Befehl "sudo" vorangestellt, sollte es aber immer klappen.

Man kann die Rechte einfach vergeben oder entziehen: in dem man -w +w oder ähnliches angibt.
"genauer" Geht es aber mit einer Oktalen Notation.
Man gibt Drei Zahlen an, die jeweils die Werte 0 bis 7 enthalten können.
0 Bedeutet dabei keine von den drei "rwx" rechten, 7 steht für alle Drei.
Bsp.:

Jeder der Drei Zahlen steht für eien rwx Block. Um das mal zu verdeutlichen, setze ich die letzten beiden auf 0:

oder so:


um jetzt die Unterschiedlichen Buchstaben einzeln setzen zu können, muss man nur ein bisschen Mathe beherrschen.
in jedem der "rwx" Block stehen die Buchstaben für jeweils einen Zahlenwert:
r = 4
w = 2
x = 1
Und um jetzt einen Bestimmten Modus zu setzen, muss man den einfach hinzuaddieren.
Möchte man nur "r" (lesen) für den owner setzen, setzt man den Modus "400"
möchte man auch noch dass die Gruppe lesen darf setzt man die Mittlere Zahl auch auf 4: 440
usw. Möchte man jetzt dass der Besitzer auch noch Schreiben darf ("w"), dann addiert man die 2 einfach hinzu. der der Komplette Modus lautet also: 640

Mit den Zahlen 1, 2 und 4 kann man sämtliche Zahlen von 1 bis 7 durch addieren Berechnen. d.h. es gibt keine Kombination die man mit den drei Buchstaben nicht darstellen kann :)

Bei chmod brauch man gelegentlich "root" Rechte um den Befehl auszuführen.
Also muss man manchmal entweder mit "su" wechseln, oder vor chmod "sudo" voranstellen.

chown und chgrp sind auch recht simpel:


Tipp: Man sollte auf gar keinen Fall Die Rechte sämtlicher Dateien auf dem System verändern.
sowas wie folgendes:

Wobei der Switch "-R" für "rekursion" steht (Auch unterverzeichnisse einbeziehen), würde dazu führen, dass jede einzelne Datei und jedes einzelen Verzeichnis auf dem gesamten system von jedem lesbar, schreib- und löschbar und ausführbar ist... Was natürlich ein erhebliches Sicherheitsrisiko darstellt. Beim verändern der Attribute also sicherheit geboten.
Wenn mal eine Datei den zugriff verweigert, dann lieber als root anmelden (mit "su"), oder die gewünschten Befehle mit "sudo" ausführen.

--------------------------------

Das wars erstma von menier Seite aus. Ich werde vll später noch mehr solcher kleinen Tutorials schreiben. Unter anderem fürs "mounten", oder die netten Befehle "dd", "df" und "du".

Ich hoffe es hat euch gefallen und war hilfreich. Wenn ihr Fragen habt, nur her damit. Stellt diese am besten einfach hier im Thread.

mfg Balmung

Dateien:
http://img.xrmb2.net/?imgID=145206


Zuletzt geändert von Balmung am Mi 14. Okt 2009, 12:39, insgesamt 2-mal geändert.

 
 Profil