Thema: Die Linux Shell 
Autor Deine Nachricht
 : Die Linux Shell - Teil 2
BeitragVerfasst: Mi 14. Okt 2009, 12:38 
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:

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:

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:

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 (Einhängen, 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

Die Schreibweise ist im Prinzip immer:

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

Meine (verschlüsselten) Partitionen sind folgende:

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:

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:

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

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:

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

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:

und NTFS:

Oder wenn ntfs-3g installiert ist:

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:

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

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:

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

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:

Und binden dann dort die iso Datei direkt ein:

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:

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

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 in 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):

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

Und dort wollen wir das neue Dateisystem einhängen:

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

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:


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


 
 Profil