Die Linux Shell

Die Linux Shell| Datum: 13.10.2009 - 21:10 | Author: Anonymous

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 [i:2mpbjoum]Debian GNU/Linux[/i:2mpbjoum] 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 "[url=http://de.wikipedia.org/wiki/Freie_Software:2mpbjoum]Freien Software[/url:2mpbjoum]" (Frei wie in [i:2mpbjoum]Freie Rede[/i:2mpbjoum], 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:

[url=http://img.xrmb2.net/images/145206.png:2mpbjoum][/url:2mpbjoum]

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:

Code


balmung@ikarus:~$



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:

Code


balmung@ikarus:~$ pwd
/home/balmung



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.

Code


balmung@ikarus:~$ ls
Bilder ffmpeg.txt nvidia superumount
C firefox phoenix-streaming test
default.m3u firefox-3.5.3.tar.bz2



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.

Code


balmung@ikarus:~$ ls -l
insgesamt 12380
drwxr-xr-x 67 balmung balmung 106496 8. Sep 21:34 Bilder
lrwxrwxrwx 1 balmung balmung 14 19. Sep 19:13 C -> .wine/drive_c/
-rw-r--r-- 1 balmung balmung 645575 8. Okt 17:31 default.m3u
-rw-r--r-- 1 root root 4670 21. Sep 17:08 menu.lst
-rw-r--r-- 1 balmung balmung 617199 7. Okt 04:43 default-winamp.m3u8
drwxr-xr-x 2 balmung balmung 4096 18. Sep 06:29 Desktop
drwxr-xr-x 3 balmung balmung 4096 2. Okt 13:20 Dokumente
drwx------ 21 balmung balmung 12288 13. Okt 18:49 Downloads
prw-r--r-- 1 balmung balmung 0 13. Okt 19:34 testpipe



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:

Code


drwxr-xr-x



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 [i:2mpbjoum]alle anderen[/i:2mpbjoum], 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.

Code


balmung@ikarus:~$ ls -lh
insgesamt 14M
drwxr-xr-x 67 balmung balmung 104K 8. Sep 21:34 Bilder
lrwxrwxrwx 1 balmung balmung 14 19. Sep 19:13 C -> .wine/drive_c/
-rw-r--r-- 1 balmung balmung 631K 8. Okt 17:31 default.m3u
-rw-r--r-- 1 balmung balmung 603K 7. Okt 04:43 default-winamp.m3u8





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":

Code


balmung@ikarus:~$ man 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.

Code


cd "Mein Verzeichnis"



Ich Wechsel jetzt ins Verzeichnis "Dokumente":

Code


balmung@ikarus:~$ cd Dokumente
balmung@ikarus:~/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:

Code


balmung@ikarus:~/Dokumente$ pwd
/home/balmung/Dokumente



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

Code


balmung@ikarus:~/Dokumente$ cd ..
balmung@ikarus:~$ pwd
/home/balmung




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.

Code


balmung@ikarus:~$ cd ../..
balmung@ikarus:/$ pwd
/



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:

Code


balmung@ikarus:/$ cd ~
balmung@ikarus:~$



(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:

Code


balmung@ikarus:~$ ls -lh Bilder
drwxr-xr-x 7 balmung balmung 4,0K 30. Aug 2004 Andere
drwxr-xr-x 2 balmung balmung 4,0K 24. Okt 2005 Anime Bilder
...



oder mit absoluter Pfadangabe:

Code


balmung@ikarus:~$ ls -lh /home/balmung/Bilder
drwxr-xr-x 7 balmung balmung 4,0K 30. Aug 2004 Andere
drwxr-xr-x 2 balmung balmung 4,0K 24. Okt 2005 Anime Bilder
...



Mal ein anderes Verzeichnis:

Code


balmung@ikarus:~$ ls -lh /dev
balmung@ikarus:~$ ls -lh /dev
...
brw-rw---- 1 root disk 3, 0 13. Okt 16:29 hda
brw-rw---- 1 root disk 3, 1 13. Okt 16:29 hda1
brw-rw---- 1 root disk 3, 2 13. Okt 16:29 hda2
brw-rw---- 1 root disk 3, 64 13. Okt 16:29 hdb
brw-rw---- 1 root disk 3, 65 13. Okt 16:29 hdb1
...



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:

Code


balmung@ikarus:~$ echo hallo welt
hallo welt




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

Code


balmung@ikarus:~$ cat /etc/hosts

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
127.0.0.1 localhost



(Diese Datei schaut bei euch Wahrscheinlich anders aus).

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

Code


balmung@ikarus:~$ echo hallo welt > test.txt
balmung@ikarus:~$ cat test.txt
hallo welt



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:

Code


balmung@ikarus:~$ cat /etc/hosts | grep localhost
::1 localhost ip6-localhost ip6-loopback
127.0.0.1 localhost



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:

Code


balmung@ikarus:~$ ls -lh | grep test.txt
-rw-r--r-- 1 balmung balmung 11 13. Okt 20:39 test.txt




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

Code


balmung@ikarus:~$ ls -lh | grep ^d
drwxr-xr-x 67 balmung balmung 104K 8. Sep 21:34 Bilder
drwxr-xr-x 2 balmung balmung 4,0K 18. Sep 06:29 Desktop
drwxr-xr-x 3 balmung balmung 4,0K 2. Okt 13:20 Dokumente
...
balmung@ikarus:~$ ls -lh | grep ^-
-rw-r--r-- 1 balmung balmung 631K 8. Okt 17:31 default.m3u
-rw-r--r-- 1 balmung balmung 603K 7. Okt 04:43 default-winamp.m3u8
-rw-r--r-- 1 balmung balmung 30K 23. Sep 17:43 ffmpeg.txt
...



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.

Code


balmung@ikarus:~$ ls -lh | grep ^d | wc -l
17



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.

Code


balmung@ikarus:~$ su
Passwort:
ikarus:/home/balmung#



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.

Code


ikarus:/home/balmung# exit
exit
balmung@ikarus:~$




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:

Code


balmung@ikarus:~$ rm dateiname.txt
balmung@ikarus:~$



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).

Code


balmung@ikarus:~$ rm -r Verzeichnis
balmung@ikarus:~$



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.:

Code


balmung@ikarus:~$ chmod 777 test.txt
balmung@ikarus:~$ ls -lh | grep test.txt
-rwxrwxrwx 1 balmung balmung 11 13. Okt 20:39 test.txt



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

Code


balmung@ikarus:~$ chmod 700 test.txt
balmung@ikarus:~$ ls -lh | grep test.txt
-rwx------ 1 balmung balmung 11 13. Okt 20:39 test.txt



oder so:

Code


balmung@ikarus:~$ chmod 707 test.txt
balmung@ikarus:~$ ls -lh | grep test.txt
-rwx---rwx 1 balmung balmung 11 13. Okt 20:39 test.txt




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

Code


balmung@ikarus:~$ chmod 640 test.txt
balmung@ikarus:~$ ls -lh | grep test.txt
-rw-r----- 1 balmung balmung 11 13. Okt 20:39 test.txt



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.

Code


balmung@ikarus:~$ ls -lh | grep menu.lst
-rw-r--r-- 1 root root 4,6K 21. Sep 17:08 menu.lst
balmung@ikarus:~$ chmod 777 menu.lst
chmod: Beim Setzen der Zugriffsrechte für „menu.lst“: Die Operation ist nicht erlaubt
balmung@ikarus:~$ sudo chmod 777 menu.lst
[sudo] password for balmung:
balmung@ikarus:~$ ls -lh | grep menu.lst
-rwxrwxrwx 1 root root 4,6K 21. Sep 17:08 menu.lst



chown und chgrp sind auch recht simpel:

Code


balmung@ikarus:~$ sudo chown balmung menu.lst
balmung@ikarus:~$ sudo chgrp balmung menu.lst
balmung@ikarus:~$ ls -lh | grep menu.lst
-rwxrwxrwx 1 balmung balmung 4,6K 21. Sep 17:08 menu.lst




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

Code


balmung@ikarus:~$ chmod -R 777 /



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 [i:2mpbjoum]gesamten[/i:2mpbjoum] 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

Re: Die Linux Shell| Datum: 13.10.2009 - 22:10 | Author: Haruspex

Mein Mitadmin will mich ja schon lange zu einem Umstieg auf Linux nötigen, bin dazu bisher aber einfach zu faul :D
Wenn ich dann mal irgendwann umsteig, wird das bestimmt hilfreich, wenn ich denk "verdammt, wie mach ich das jetzt" und mein Mitadmin nicht on ist :P
Dann les ich das Tutorial auch *g*
*Thread unter ausführliche, auf den ersten Blick qualitative Tutorials ableg*

Re: Die Linux Shell| Datum: 14.10.2009 - 10:10 | Author: Anonymous

Danke, super Tutorial!!
Ich hoffe, jetzt kann ich mich auch mal an Linux & die Shell wagen xD
Grüße,
DHMH

Re: Die Linux Shell| Datum: 14.10.2009 - 13:10 | Author: SirZimt

Nett gemacht Balmung! Somit wird die Shell zu kapieren noch einfacher ^^.

PS: Eine Installroutine als Tut wäre auch nicht schlecht weil das schreckt noch mehr Leute ab als die Shell. Denn kein Schwein der Welt kapiert wie man Programme ohne den Paketmanager drauf bekommt!

Die Linux Shell - Teil 2| Datum: 14.10.2009 - 13:10 | Author: Anonymous

Ich hab auch den zweiten Link im ersten Beitrag eingefügt.
Viel spaß beim lesen und ausprobieren :)

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

Im letzten Teil haben wir einige Grundlegende Dinge über die Shell gelernt.
Wir wissen wie man den Inhalt eines Verzeichnisses ausgibt, wie man das Verzeichnis wechselt. Wir wissen wie man Dateien und Verzeichnisse löscht und wie man die Dateirechte verändern kann, dazu mussten wir auch lernen wie man den Benutzer wechselt.
Außerdem wurden kurz "unnamed pipes" angesprochen, wie man damit Ausgaben filtern/weiterverwenden kann.

Speicheranzeige
Manchmal möchte man auch gerne wissen, wieviel Speicher man auf den Festplatten verbraucht hat, oder verfügbar ist.
Dafür gibt es den kurzen befehl "df".
Wie bei "ls" kann man hier den Switch "-h" für human-readable angeben. Würde man das nicht machen, bekommt man Anzeigen in Milliarden Bereichen bei Gigabyte Festplatten... Billionen Byte währen es bei Terabyte.
Hier einmal meine Anzeige:

Code


balmung@ikarus:~$ df -h
Dateisystem Größe Benut Verf Ben% Eingehängt auf
/dev/mapper/ikarus-root
74G 63G 6,5G 91% /
tmpfs 379M 0 379M 0% /lib/init/rw
udev 10M 160K 9,9M 2% /dev
tmpfs 379M 0 379M 0% /dev/shm
/dev/hda1 228M 33M 184M 15% /boot
/dev/mapper/hdb1_crypt
147G 40G 101G 29% /media/music
/dev/mapper/sda1_crypt
917G 352G 519G 41% /media/super



Das ganze sieht ein bisschen unübersichtlich aus, weil bei einigen ein extra Zeilenumbruch mit drinne ist, damit man den kompletten Pfad des Geräts erkennen kann.
Ihr werdet wahrscheinlich eher solche Einträge wie folgendes haben:

Code


/dev/hda1 228M 33M 184M 15% /boot



Dass bei mir alle "Platten" unter dem Ordner "mapper" zu finden sind, und dort einige mit "_crypt" im Namen enden, liegt daran, weil ich diese Festplatten mit "cryptsetup" verschlüsselt habe.
Dazu zeige ich ein anderes mal vielleicht mehr :)

zu der Übersicht:
die beiden "tmpfs" und "udev" kann man ignorieren. Welche von den Einträgen wichtig sind, erkennt man unter anderem ganz rechts unter der Spalte "Eingehängt auf".
der erste Eintrag hat dort "/" stehen.
Meine (verschlüsselte) Festplatte ikarus-root ist unter "/" eingehängt, und dort sind 91% Speicher benutzt. D.h. meine System-Partition ist pappenvoll. Wenn man bedenkt dass es ne 80 Gigabyte (bzw 74 GiB werden hier ja nur angezeigt) Platte ist.
Wenn es nicht anders eingestellt ist, entspricht der Speicherverbrauch des "/" Einhängepunktes auch dem Speicherverbrauch meines Home-Verzeichnisses.
Soll heißen, mein Home-Verzeichnis liegt auf der Partition ikraus-root (Was Partitionen sind wisst ihr doch noch?).
Man kann natürlich auch (sogar relativ leicht) das Home-Verzeichnis auf andere Partitionen verschieben.

Auch wichtig für mich sind die letzten beiden Einträge.
"hdb1_crypt" ist meine zweite Interne Festplatte von 160 GB, und "sda1_crypt" ist meine Externe 1 TB Festplatte.
Der Unterschied zwischen "h" und "s" bei den Festplatte liegt lediglich in der Bezeichnung.
Linux versucht automatisch zu erkennen um was für einen Datenträger es sich dabei handelt. "hdb1" steht für sowas wie "Harddisc Drive/Device B - Partition 1", während "sda1" für sowas wie "Special Device A - Partition 1" steht.
Special Devices sind es meistens dann, wenn sie per USB angeschlossen werden. Mir ist es aber auch schon untergekommen, dass intern angeschlossene Festplatten als "sda" etc. angezeigt wurden (was aber nicht wirklich schlimm ist).

Die beiden Partitionen sind an komplett anderen Orten Eingehängt.
Das Einhängen bzw auf englisch "mounting", ist etwas auf das ich auch gleich zurückkomme.

Wie die Informationen in der Übersicht oben zu Verstehen sind denke ich erkennt ihr selber (ist ja beschrieben).


Der nächste Befehl mit dem man Speicherverbrauch erkennen kann ist "du".
mit "du" kann man die Summe der Größen aller Dateien und Verzeichnisse herausfinden.
Am einfachsten ist es einfach "du" in die Shell zu tippen, dann bekommt man aber von jedem einzelnen Verzeichnis die Summe der Dateien ausgegeben.
Um das bissel einfacher zu gestalten gibt man den Switch "-s" für "summe" und unseren bekannten Switch "-h" für human-readable an.
Zusätzlich können wir noch angeben von welchem Verzeichnis aus wir den Kompletten Verbrauch ermitteln wollen.
In meinem Beispiel möchte ich die Gesamtgröße sämtlicher Dateien aus dem Ordner (Unterordner nimmt "du" automatisch mit) "Bilder" wissen:

Code


balmung@ikarus:~$ du -sh /home/balmung/Bilder
22G /home/balmung/Bilder



22 GiB Bilder ist schon ne ganze Ecke (zur Erleichterung für die Leser: es sind nicht alles Bilder ^^).

Was für weitere Optionen es gibt erfahrt ihr mit "du --help" oder "man du" für die Manpages (Manuals).


Mounting
Das Mounten ([i:15d08sq0]Einhängen[/i:15d08sq0], wie oben weiter schon erwähnt) ist eine der wichtigeren und interessanteren Dinge unter Linux.

Jede Festplatte/Partition in einem System muss "gemountet" werden, damit man auf das darauf liegende Dateisystem zugreifen kann.
Dateisysteme gibt es eine Reihe unterschiedlicher. Windows Usern sind vielleicht die Begriffe "FAT" (File Allocation Table, oft auch FAT32) oder "NTFS" (New Technology Filesystem), welches beide Windowstypische Dateisysteme sind. Unter Linux werden meistens Dateisysteme wie "ext3" oder "reiserfs" geuntzt.
Ext3 nutzt ich für alle meine Partitionen und ist auch das was von Debian und soweit ich weiß auch Ubuntu, standardmäßig genutzt wird.

Wie gesagt muss man, um auf das Dateisystem zugreifen zu können (und somit auch auf die Dateien und Ordner die sich auf der Partition befinden), die Partition mounten.
Windows "mountet" die Partitionen ebenfalls. zu finden sind sämtliche Partitionen bei Windows unterm Arbeitsplatz (oder neuerdings dem "Computer").
Auf die Partitionen kommt man dann über Pfade wie "C:\..." oder "D:\..."

Das besondere an Linus ist, dass es dort keinen "Arbeitsplatz" in dem Sinne gibt. Stattdessen gibt einem Linux die absolute freie Wahl, wo man die Dateisysteme mounten möchte. Und das kann nahezu jedes Verzeichnis überall auf dem System sein.

Wenn ihr Linux installiert habt dann sollte bei euch ja auch mindestens die System-Partition gemountet sein.
Nachschauen was alles gemountet ist könnt ihr einfach mit dem Befehle "mount" ohne igendwelche Argumente.
balmung@ikarus:~$ mount

Code


/dev/mapper/ikarus-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/hda1 on /boot type ext2 (rw)
/dev/mapper/hdb1_crypt on /media/music type ext3 (rw)
/media/music on /home/balmung/Musik type none (rw,bind,noatime)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
/dev/mapper/sda1_crypt on /media/super type ext3 (rw)
/media/super on /home/balmung/Videos type none (rw,bind)



Die Schreibweise ist im Prinzip immer:

Code


/dev/hda1 on /irgendein/verzeichnis ...



Links steht dabei üblicherweise das "Gerät" und rechts wo dieses Gerät einghängt wurde.

Meine (verschlüsselten) Partitionen sind folgende:

Code


/dev/mapper/ikarus-root on /
/dev/mapper/hdb1_crypt on /media/music
/dev/mapper/sda1_crypt on /media/super
/media/super on /home/balmung/Videos



Die ersten drei sind bekannt. Das letzte ist ein Sonderfall.
Dort habe ich Das Verzeichnis "/media/super" an den Ort "/home/balmung/Videos" eingehängt.
d.h. Wenn ich Dateien ins Verzeichnis "/home/balmung/Videos" schreibe, landen die automatisch im Verzeichnis "/media/super", und weil hinter "/media/super" Die verschlüsselte Partition sda1_crypt steckt, werden alle Daten auf meine Externe Platte geschrieben.
Kurz: Alles was ich ins Verzeichnis (natürlich auch Unterverzeichnisse) "/home/balmung/Video" Lege, landet direkt auf meiner Externen Festplatte sda1_crypt.
Dateien die ich direkt in "/home/balmung" lege, landen hingegen auf ikarus-root, da "/home/balmung" an der Stelle noch ein Unterverzeichnis von "/" ist.

Das Mounten von neuen Geräten übernehmen die meisten Linux Distributionen von selbst. d.h. wenn ihr einen USB-Stick anschließt, sollter dieser Automatisch, meistens unter /mnt oder /media, erscheinen.

Ein Gerät zu Mounten ist jetzt ein bisschen schwierig, wenn man keines zur Verfügung hat.
Wenn ihr aber eine Externe Festplatte, einen USB Stick oder eine interne Festplatte habt, welche ihr NICHT für das System benötigt, kann ich damit ein bisschen demonstrieren wie das Mounten in etwa funktioniert.

Als erstes solltet ihr den Device-Namen eures Datenträgers herausfinden (der unter /dev).
Wenn ihr einen Externen Datenträger über USB anschließt sollte es recht einfach mit dem "mount" Befehl nachweisbar sein.
In dem Fall ist es wahrscheinlich der letzte dort zu sehende Eintrag. Bei USB-Geräten ist es wie gesagt meistens eine Form von "/dev/sdxy" wobei das x ein buchstabe von a bis z sein kann und y eine Beliebige Zahl für die Partition.
Habt ihr einen internen Datenträger, müsst ihr wohl oder übel im Verzeichnis /dev nachschauen (mir ist momentan keine schnellere Methode bekannt), ob dort mehrere "/dev/hdx" oder "/dev/sdx" auftauchen. Wenn Die Festplatte bereits gemountet ist (ihr könnt auf die Daten der Festplatte zugreifen), dann sollte sie auch unter dem Befehl "mount" auftauchen.
Wichtig ist nur, dass ihr nicht die Partition nimmt, die unter "/" Eingehängt ist.

Geht sicher dass auf dem Datenträger ein Dateisystem installiert ist. Am besten eines von Linux (z.B. ext3). Wenn ihr einen USB-Stick zum rumprobieren habt, wäre dieser Ideal :)
Das Programm "gparted" (mit root-rechten starten) unterstütz eine nette Grafische Benutzeroberfläche um Datenträger zu formatieren.

Zu Testzwecken habe ich meinen 4 GiB USB-Stick Missbraucht, auf dem ohnehin nichts drauf war.
Manchmal kann man sich auch die letzten Hardware Meldungen mit dem Befehl "dmesg" ausgeben lassen.
Da ich meinen USB-Stick gerade erst angeschlossen habe, erwarte ich also irgendeine Reaktion:

Code


balmung@ikarus:~$ dmesg
...
(ganz ganz viel)
...
[72265.972907] scsi 1:0:0:0: Direct-Access USB 2.0 Flash Disk 5.00 PQ: 0 ANSI: 2
[72265.978241] sd 1:0:0:0: [sdb] 8166912 512-byte hardware sectors: (4.18 GB/3.89 GiB)
[72265.978744] sd 1:0:0:0: [sdb] Write Protect is off
[72265.978752] sd 1:0:0:0: [sdb] Mode Sense: 0b 00 00 08
[72265.978756] sd 1:0:0:0: [sdb] Assuming drive cache: write through
[72265.981483] sd 1:0:0:0: [sdb] Assuming drive cache: write through
[72265.981497] sdb: unknown partition table
[72265.985913] sd 1:0:0:0: [sdb] Attached SCSI removable disk



stehen ein paar Zeilen von "sdb", Mein USB-Stick sollte also unter /dev/sdb erreichbar sein. Da ich ne "unknown partition table" habe, muss ich meinen Stick also selbst erstmal formatieren (gparted) ^^
Formatierung abgeschlossen und sdb und sdb1 mit ext3 sind jetzt unter /dev zu finden :)

Um die Dynamik des Mounting nochmal zu verdeutlichen schlage ich vor, wir erstellen uns erst ein Beliebiges Verzeichnis, wo wir den Inhalt unseres Datenträgers angezeigt haben wollen.
wir wechseln ganz normal ins Home Verzeichnis ("cd ~") und erstellen dort Ein neues Verzeichnis:

Code


balmung@ikarus:~$ mkdir myusb
balmung@ikarus:~$



Keine Fehler = Keine Probleme.
Hineinwechseln wollen wir noch nicht, aber wir können uns ja mal den Inahtl des Verzeichnisses ausgeben lassen:

Code


balmung@ikarus:~$ ls -l myusb
insgesamt 0



Keine Dateien und keine Verzeichnisse, genau so wie man es von einem gerade erst erstelltem Verzeichnis erwartet.

Jetzt kommt der wichtige Part.
Ihr habt herausgefunden unter welchem Namen euer Datenträger verfügbar ist? Und es befindet sich eine Partition mit einem Dateisystem drauf?
Meine USB-Stick-Partition ist "/dev/sdb1" mit dem Dateisystem ext3.

Der mount Befehl lautet auf die einfache Art wie folgt:

Code


balmung@ikarus:~$ mount /dev/sdb1 myusb
mount: only root can do that



Wie wir feststellen kann nur root mounten. Also "sudo" voranstellen oder den Benutzer zu root wechseln.

Code


balmung@ikarus:~$ sudo mount /dev/sdb1 myusb
balmung@ikarus:~$



Wieder gilt: Keine Fehler = Keine Probleme.
Wenn ihr FAT oder NTFS auf dem Datenträger habt, ist es gut möglich dass man noch zusätzlich den Typ des Dateisystems angeben muss.

Für FAT lautet der Befehl dann:

Code


balmung@ikarus:~$ sudo mount -t vfat /dev/sdb1 myusb



und NTFS:

Code


balmung@ikarus:~$ sudo mount -t ntfs /dev/sdb1 myusb



Oder wenn ntfs-3g installiert ist:

Code


balmung@ikarus:~$ sudo mount -t ntfs-3g /dev/sdb1 myusb



Bei FAT und NTFS kann es gut angehen dass man zusätzliche Optionen beim mounten angeben muss um auf die Partitionen überhaupt lesen und schreiben zu können.
Bei ext3 und andere Linux Dateisysteme ist das nicht nötig, da man dort einfach die Dateirechte mit root ändern kann.
Info: Windows Dateisysteme haben eine eigene Rechteverwaltung, und sind deshalb generell nicht mit den Linux Befehle chmod, chown etc. kompatibel.
FAT hat, soweit ich weiß, überhaupt keine Rechtekontrolle.

Sollten keine weiteren Fehler aufgetreten sein, können wir ja mal versuchen den Inhalt vom Verzeichnis "myusb" erneut auszugeben:

Code


balmung@ikarus:~$ ls -l myusb
insgesamt 16
drwx------ 2 root root 16384 14. Okt 12:38 lost+found



Bei mir wird ein Verzeichnis angezeigt. Dieses Verzeichnis wird bei ext3 Dateisystemen Automatisch angelegt.
Sollten auf euren USB Stick irgendwelche Dateien sein, müssten die jetzt im Verzeichnis myusb angezeigt werden :)

"unmounten" also aushängen, könnt ihr mit dem Befehl "umount" (nicht "u[i:15d08sq0]n[/i:15d08sq0]mount"). Dieser Befehl muss natürlich auch mit root-rechten ausgeführt werden.
Als erstes Argument geht es oftmals am besten, wenn das Ziel, also der Ort an dem Der Datenträger eingehängt wurde angibt.

Code


balmung@ikarus:~$ sudo umount myusb
balmung@ikarus:~$



Manchmal tauchen Fehler auf wie "device is busy".
In dem Fall liegt es daran, dass noch irgendein Programm versucht auf den Inhalt des Datenträgers zuzugreifen.
Manchmal helfen da Programme wie "lsof myusb" um zu erkennen welcher User und welches Programm auf das Verzeichnis zugreifen. Diese müssen dann einfach nur geschlossen werden.


Wer mal schnell eine komplette Verzeichnis Struktur an einem anderen Ort braucht, kann diese dort mit dem mount Befehl ohne Probleme einhängen.
Als Beispiel:
Ich habe lokal einen Webserver installiert, auf den man von Außen zugreifen kann.
Des Webverzeichnis befindet sich Beispielsweise unter "/home/balmung/www"
Nun möchte ich gerne ein paar mp3s zum Download freigeben. (natürlich sind diese mp3s Lizenzfrei).
Diese mp3s befinden sich aber unter diesem Verzeichnis:
/home/bamlung/Musik/Lieblings_Band

Ich hätte jetzt einige Möglichkeiten. Ich könnte ein zusätzliches Webverzeichnis (z.b. in dem ich eine subdomain erstelle) einrichten, oder ich könnte einfach sämtliche mp3s ind das Webverzeichnis kopieren.
Da das aber alles ziemlich mühsam und Zeitaufwendig ist, hab ich mich für die Dritte Methode entschieden: Ich Binde das Verzeichnis einfach in einem Unterordner des Webverzeichnisses ein.
ich erstelle mir erst einen passenden Ordner:

Code


balmung@ikarus:~$ mkdir /home/balmung/www/mp3s



und Geben dann (mit root rechten) den Befehl ein:

Code


balmung@ikarus:~$ sudo mount --bind /home/balmung/Musik/Lieblings_Band /home/balmung/www/mp3s
balmung@ikarus:~$



Keine Fehler = Keine Probleme.
Ab sofort sollten alle Dateien aus "/home/balmung/Musik/Lieblings_Band" AUCH unter "/home/balmung/www/mp3s" erreichbar sein. Und das beste: Der Webserver bekommt davon nicht das geringste mit. Der denkt das ist ein stinknormales Verzeichnis wie jedes andere auch.


Auch interessant ist die "loop" option.
Mit der kann man Dateien mounten, die ein Dateisystem enthalten. Das beste Beispiel sind ISO-Dateien (also CD-Images).
Wenn du ein CD-iso-Datei hast, kannst du die einfach an einem Beliebigen Punkt einhängen.
Wir erstellen erst ein Verzeichnis:

Code


balmung@ikarus:~$ mkdir meinecd



Und binden dann dort die iso Datei direkt ein:

Code


balmung@ikarus:~$ sudo mount -o loop cdimage.iso meinecd



War der Befehl erfolgreich, findet ihr unter dem Verzeichnis jetzt den Inhalt des CD-Images.

Das gleiche gilt auch für andere Dateisystem innerhalb von Dateien.
Das ganze können wir auch recht leicht demonstrieren.

Als erstes erstellen wir eine Datei mit einer größe von, sagen wir 50 MiB.
Das sollte zum rumprobieren ausreichen.
Um die Datei zu erstellen benutzen wir das Programm "dd". Folgender Befehl sollte auch ohne root-Rechte funktionieren:

Code


balmung@ikarus:~$ dd if=/dev/zero of=dateisystem bs=1M count=50
50+0 Datensätze ein
50+0 Datensätze aus
52428800 Bytes (52 MB) kopiert, 0,606923 s, 86,4 MB/s



Dort steht was von "(52 MB)", aber wenn wir uns den Ordnerinhalt mit ls -lh anschauen sehen wir dass die größe stimmt:

Code


balmung@ikarus:~$ ls -lh | grep dateisystem
-rw-r--r-- 1 balmung balmung 50M 14. Okt 13:20 dateisystem



Die Datei wurde mit 50 Megabyte aus "/dev/zero" erstelt. /dev/zero ist kein wirkliches Gerät sondern nur virtuell, und gibt nur "null-bytes" aus. Die Datei ist also mit 50 Megabyte Nullen gefüllt.
Um [i:15d08sq0]in[/i:15d08sq0] diese DAtei jetzt ein Dateisystem zu quetschen, benutzen wir den Befehl "mkfs" (make filesystem), und geben mit einem Punktgetrennt den Typ des Dateisystems an (mit root-Rechte):

Code


balmung@ikarus:~$ sudo mkfs.ext3 dateisystem
[sudo] password for balmung:
mke2fs 1.41.9 (22-Aug-2009)
dateisystem ist kein spezielles Block-Gerät.
Trotzdem fortsetzen? (j,n) j <-- mit "j" Bestätigen
...
Ein paar Informationen
...



Fertig. Das Dateisystem sollte jetzt in der Datei enthalten sein.
Um das nutzen zu können erstellen wir wieder ein Verzeichnis:

Code


balmung@ikarus:~$ mkdir mein_dateisystem



Und dort wollen wir das neue Dateisystem einhängen:

Code


balmung@ikarus:~$ sudo mount -o loop dateisystem mein_dateisystem



Wenn keine Fehler auftreten, sollte jetzt im Verzeichnis "mein_dateisystem" der Ordner "lost+found" liegen, welche bei ext3 System ja automatisch erstellt wird.

Code


balmung@ikarus:~$ ls -l mein_dateisystem
insgesamt 12
drwx------ 2 root root 12288 14. Okt 13:25 lost+found



Alles was jetzt ins Verzeichnis "mein_dateisystem" gelegt wird, landet direkt in der Datei "dateisystem".
Beim Befehl "df" könnt ihr jetzt auch den "Datenträger" erkennen.
schaut wahrscheinlich etwa so aus:

Code


balmung@ikarus:~$ df -h
Dateisystem Größe Benut Verf Ben% Eingehängt auf
...
/dev/loop0 49M 4,9M 42M 11% /home/balmung/mein_dateisystem




mit "umount mein_dateisystem" könnt ihr es wieder entfernen.


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

Das wars erstma wieder von menier Seite aus. Ich hoffe der zweite hat euch geholfen. Mal schauen was ich als nächstes nehme. Vielleicht was mit Verschlüsselung? ;)

---

Fragen? Kritik? Verbesserungsvorschläge?
Dann Kontakt aufnehmen unter:
Jabber: chaozzbubi [at] jabber.hot-chilli.net (bevorzugt)
Mail: lars.peter.sondergaard [at] gmx [dot] net

---

mfg Balmung