Yet Another Linux Tutorial

Die Shell Dateien Editoren Backups Archive Laufwerke Prozesse
Administration Netzwerk Userverwaltung Rechte Links Suchen

Dateien und Verzeichnisse


Die Verzeichnis-Hierarchie unter Linux.
Auflisten mit ls
Verzeichnis wechseln mit cd
Dateien kopieren mit cp
Dateien verschieben mit mv
Dateien löschen mit rm
Dateien erstellen mit touch
Verzeichnisse erstellen mit mkdir
Verzeichnisse löschen mit rmdir
Anzeigen mit cat
Anzeigen mit less
Anzeigen mit grep
Bearbeiten mit sed
Suchen mit find
Suchen mit updatedb und locate
Konvertieren mit recode
Zählen mit wc
Speicherplatz anzeigen mit du
Nummerieren mit nl

[top] Die Verzeichnis-Hierarchie unter Linux.


Also was haben wir da? Ganz oben ist die Wurzel auch root genannt, dargestellt durch einen einfachen Slash. Darunter kommen jede Menge interessante Verzeichnisse. Schauen wir mal was da so ist:

bin enthält eine Vielzahl an Kommandos die im täglichen Leben gebraucht werden (cp, mv, rm, kill,...)
boot in /boot befindet sich der zu ladende Kernel und seine Konfig. /boot sollte sich in den ersten 1024 Zylindern der Festplatte befinden. Ich mache immer eine eigene Partition mit ca. 50-100MB ganz am Anfang der Platte für /boot
dev in /dev befinden sich alle Gerätedateien, auch Treiber. Das heißt das jede Hardware hier ihren Einhängepunkt findet im System. z.B. /dev/hd* für IDE Geräte, /dev/sd* für SCSI, /dev/fd* für Floppy, /dev/tty* für Terminal, /dev/usb/* für USB-Geräte usw. Schaut man sich die Dateien und Verzeichnisse hier an sieht man 2 Nummern, wo sonst die Größe steht. Die erste Zahl ist die "major device number". Sie steht für den benutzten Treiber, die zweite ist die "minor device number" und steht für die jeweilige Instanz des Treibers. Bei den Rechten haben wir am Anfang ein b oder ein c. Das b steht für blockorientiert (z.B. HDD, Floppy) und c steht für zeichenorientiert (z.B. Monitor)


Besondere Gerätedateien:


/dev/null ist das Datennirvana alles was man hier hinein verschiebt ist für immer weg, und
/dev/zero ist der Nullenbrunnen, hieraus kann man unendlich viele Nullen kopieren
/dev/random Erzeugt so lange Zufallszahlen, bis der Entropy Pool leer ist. Der Entropy Pool besteht aus "zufälligen äußeren Ereignissen" wie Mausklicks und Tastatureingaben und wird mit diesen auch wieder gefüllt. Die Zahlen von hier sind sehr zufällig und dafür eher langsam.
/dev/urandom Erzeugt unendliche viele (pseudo)Zufallszahlen die in vielen Fällen ausreichen und ist auch um einiges schneller als /dev/random
/dev/full alles was man hier her kopiert endet mit einer Meldung das kein Platz mehr vorhanden ist
etc hier befinden sich die Konfigurationen von (fast) allen Programmen und vom System selbst. So findet man unter /etc/network die Grundeinstellungen für sein Netzwerk, /etc/lilo seine boot-Konfiguration, in /etc/X11 die Config für den x-server, usw. In /etc/init.d sind die ganzen Dienste zu finden und in /etc/rc2.d kann man einstellen welche Dienste im 2er Runlevel gestartet werden sollen. Auch nützlich für eigene Startscripte.
home unter home hat jeder User standardmäßig sein eigenes Verzeichnis in dem man seine Dateien abspeichern kann. Es befinden sich auch userspezifische Konfigurationen von Programmen und der Shell.
lib Hier befinden sich benötigte libraries (Bibliotheken). Im Unterverzeichnis /lib/modules/kernelversion findet man die vorhandenen Kernelmodule.
mnt Das Verzeichnis ist dazu gedacht um dort zusätzliche Laufwerke hinein zu mounten z.B. Floppy oder CD-ROM.
opt hier wird üblicherweise zusätzliche Software installiert
proc Enthält Kernel- und Prozessinformationen. Jeder Prozess ist hier durch ein Verzeichnis mit seiner PID vertreten in dem man diverse Infos dazu sehen kann. Man findet auch alle möglichen Infos über das System (z.B. loadavg, meminfo, cpuinfo), einfach mal die Dateien mit cat und/oder less anschauen
sbin die Programme hier benötigen meist root-Rechte und sind dementsprechend auch administrativer Natur (shutdown, iptables, mkfs,...)
tmp für alle Daten die man nur vorübergehend braucht also temporäre Daten
usr Die Verzeichnisse hier werden auch "zweite Hierarchie" genannt. Es befinden sich einige Ordner die man auch unter / findet. Die wichtigsten sind:
bin - Nutzerprogramme
doc - Dokumentation der Programme
include - Headerdateien
lib - Allgemeine Bibliotheken
src - Quelldateien
var var steht für variable und ist für Dateien gedacht die sich ständig ändern wie z.B. Logfiles oder Druckaufträge. Wichtige Unterverzeichnisse sind wiederum:
cache - Zwischenspeicher von Programmen
log - Alle möglichen Logfiles
mail - Die Mailboxen der User
run - Dateien zu laufenden Prozessen
spool - gespoolte Daten (Druckaufträge)
tmp - Temporäre Dateien, die bei einem Neustart erhalten bleiben

[top] Auflisten mit ls


ls ist wohl einer der Grundbefehle, ls bedeutet list und listet dementsprechend auch den Inhalt eines Verzeichnisses auf

ls Verzeichnis listet den Inhalt des Verzeichnisses auf, ohne Verzeichnisangabe den Inhalt des aktuellen Verzeichnisses
-a listet alle Dateien, auch versteckte
-h Dateigröße in lesbarer Form mit kB und MB
-n UID und GID statt Name und Gruppe
-l Breitformat mit mehr Infos
-R auch den Inhalt der Unterverzeichnisse auflisten
-X Nach Erweiterung sortieren
-S nach Größe sortieren
-t nach Zeit sortieren
Beispiele
ls -al listet alles (a) im Breitformat (l) auf
ls -lS ~ listet das HOME-Verzeichnis im Breitformat (l) auf und sortiert nach Größe (S)

[top] Verzeichnis wechseln mit cd


cd ist wie ls ein Grundbefehl. cd steht für change direcory und wechselt dementsprechend das aktuelle Verzeichnis

cd Verzeichnis wechselt in das angegebene Verzeichnis. Ohne Verzeichnisangabe landet man in seinem Home Verzeichnis

[top] Dateien kopieren mit cp


cp steht für copy also kopieren, damit kann man Dateien kopieren

cp Quelle Ziel kopiert die Dateien von der Quelle zum Ziel
-i interaktiv, fragt nach bevor eine Datei überschrieben wird
-l linkt die Dateien nur anstatt sie zu kopieren
-f force, wenn ein file nicht geöffnet werden kann wird es entfernt und macht dann weiter
-d folgt keinen symbolischen links
-p preserve, behaltet den Eigentümer, die Gruppe und die Änderungszeit bei.
-R rekursiv, kopiert auch Unterverzeichnisse mit
-S erzeugt nur symbolische Links
-u update kopiert nur neuere Dateien
Beispiele
cp -Rp /home/* /var/backup/home/ erzeugt ein Backup von den Homeverzeichnissen samt Unterverzeichnissen (-R) mit den jeweiligen Privilegien (p) nach /var/backup/home
cp -uRp /home/* /var/backup/home/ kopiert nur die neueren Dateien (-u) von den Homeverzeichnissen samt Unterverzeichnissen (R) mit den jeweiligen Privilegien (p) nach /var/backup/home
cp /var/www/index.html ./ kopiert die Datei /var/www/index.html ins aktuelle Verzeichnis (./)

[top] Dateien verschieben mit mv


mv steht für move und verschiebt Daten von A nach B.

mv Quelle Ziel verschiebt die Daten von der Quelle zum Ziel
-b backup, macht von jedem File ein Backup bevor es überschrieben wird.
-f force, überschreibt ohne nachzufragen
-i interaktiv, fragt nach bevor überschrieben wird
-u update, verschiebt nur neuere Dateien
Beispiele
mv -b config/* /etc/ verschiebt die Dateien aus "config/" nach /etc und erstellt dort ein Backup von den bereits vorhandenen Dateien.
mv ./* /dev/null verschiebt den ganzen Inhalt des aktuellen Verzeichnisses nach /dev/null. Es wird alles gelöscht

[top] Dateien löschen mit rm


rm steht für remove und löscht Dateien oder Verzeichnisse.

rm Datei Löscht die angegebene Datei oder den Ordner
-d directory, löscht auch nicht leere Verzeichnisse, nur root
-f force, löscht ohne nachzufragen
-i interaktiv, fragt nach bevor gelöscht wird
-r rekursiv, Löscht auch den Inhalt der Unterverzeichnisse
Beispiele
rm -rf test/ löscht das Gesamte Verzeichnis samt Unterverzeichnissen (-r) test/ ohne nachzufragen (f)

[top] Dateien erstellen mit touch


mit touch Dateiname kann man eine neue Datei erstellen oder das Datum/die Zeit einer vorhandenen Datei aktualisieren. Dazu gibt es noch ein paar Schalter:

-a nur die Zugriffszeit aktualisieren
-m nur die Änderungszeit aktualisieren
-t YYMMTTssmm sezt das angegebene Datum (MM-Monat, TT-Tag) / die angegebene Zeit (ss-Stunde, mm-Minute). Das Jahr (YY) ist optional und kann auch 4 stellig angegeben werden

[top] Verzeichnisse erstellen mit mkdir


Verzeichnisse erstellt man mit mkdir Verzeichnis. Die einzige Option die ich ab und zu benutze ist -m um gleich die Rechte mit anzugeben.

-m RECHTE setzt beim erstellen gleich die Berechtigung z.B. 750. Rechteangaben sind wie bei chmod
-p erstellt alle Verzeichnisse. Bei zB. mkdir -p html/projekt/css werden die 3 Verzeichnisse angelegt wobei sich css in projekt befindet und projekt wiederum in html.

[top] Verzeichnisse löschen mit rmdir


Mit rmdir Verzeichnis kann man ein leeres Verzeichnis löschen. Mit der Option -p werden alle Verzeichnisse im angegebenen Pfad gelöscht, ähnlich wie bei mkdir.


[top] Anzeigen mit cat


Wenn man sich eine Datei auf der Konsole anschauen will kann man cat dazu benutzen. Wenn man es noch mit grep kombiniert kommt man ganz schnell zu den gewünschten Zeilen. Ist der Text zu lang kann man noch less benutzen um den Text Seitenweise zu sehen.

cat Datei zeigt den Inhalt der angegebenen Datei
-b nummeriert alle Zeilen die nicht leer sind
-n nummeriert alle Zeilen
Beispiele
cat /proc/cpuinfo | grep -i mhz cat zeigt uns die CPU Infos aus /proc und mit grep picken wir uns die MHz raus
cat /var/log/kern.log | less so kann man sich die letzten Kernel Meldungen ansehen

[top] Anzeigen mit less


Da cat die Dateien doch recht schnell auflistet eignet sich das nicht besonders für lange Dateien. Da ist man mit less besser bedient. Man kann Zeilen- oder Seitenweise vor- bzw. zurück- springen, nach Begriffen suchen und noch ein wenig mehr. Wenn man sich eine Datei mit less anschaut kann man mit folgenden Tasten Navigieren/suchen:

j eine Zeile vor, wenn man vorher eine Zahl eintippt dann um so viele Zeilen wie angegeben
k eine Zeile zurück, wenn man vorher eine Zahl eintippt dann um so viele Zeilen wie angegeben
f eine Seite vor
b eine Seite zurück
g zur ersten Zeile springen, wenn man vorher eine Zahl eintippt dann zur angegebenen Zeile springen
G zur letzten Zeile springen, wenn man vorher eine Zahl eintippt dann zur angegebenen Zeile springen
/Begriff sucht den Begriff vorwärts
?Begriff sucht den Begriff rückwärts
n zur nächsten Übereinstimmung vor springen
N zur vorherigen Übereinstimmung zurück springen

[top] Anzeigen mit grep


Wenn man in einem langen Text nach einem gewissen Begriff oder Zeile sucht, ist man bei grep genau richtig. grep wird auch oft benutzt um von irgendeinem Output nur die wichtigen Zeilen raus zu picken.

grep begriff zeigt nur Zeilen mit "begriff"
-i unterscheidet nicht zwischen Groß- und Klein
-n gibt bei der Ausgabe der Zeile deren Zeilennummer an
-v Zeigt alle Zeilen an, die das Muster nicht enthalten
-w sucht exakt nach dem Begriff, nicht nur als Teil eines Wortes
-e eine weitere Suchregel
Beispiele
grep -i raid /var/log/kern.log grep pickt uns nur die Zeilen raus die raid enthalten unabhängig ob groß oder klein (-i) geschrieben. In /var/log/kern.log stehen die Kernel Meldungen drinnen, nach einem Start stehen da die ganzen Bootmeldungen drinnen. Damit kann man raus finden ob der Kernel ein RAID gefunden hat.
grep -ie href= index.html zeigt uns nur die Zeilen die einen Link beinhalten
ifconfig | grep -i addr wenn man mehrere Netzwerkkarten hat und nur schnell deren IP braucht geht es mit dieser Zeile recht übersichtlich.

[top] Bearbeiten mit sed


sed ist kein normaler Editor wie vi oder nano sondern ein so genannter Stream-editor. Damit wird hauptsächlich nach Begriffen gesucht und diese durch andere ersetzt. Man kann sich aber auch nur gewisse Zeilen anzeigen lassen oder aus einer HTML Datei alle Tags entfernen.

sed
s besagt das ein Zeichen ersetzt werden soll
g Alles ersetzen, sonst wird nur jeder erste Fund einer Zeile ersetzt.
d Zeile löschen
p print, also anzeigen
-n Es wird nichts ausgegeben außer es wird verlangt.
-f script Führt die Anweisungen in einem script durch
Reguläre Ausdrücke
^ Muster am Beginn der Zeile
$ Muster am Ende der Zeile
. Genau ein beliebiges Zeichen
* Beliebig viele des vorangegangenen Zeichens
[] Ein Zeichen aus dem Bereich. Es sind auch ein paar Klassen erlaubt wie:
[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], und [:xdigit:] oder [a-z] für Klein-, [A-Z] für Großbuchstaben und [0-9] für Ziffern
[^] Kein Zeichen aus dem Bereich
\< Muster am Wortanfang suchen
\> Muster am Wortende suchen
\( \) Muster vormerken um später darauf zugreifen zu können. So kann man bis zu 9 Muster speichern, welche mit \1 - \9 angesprochen werden können
Beispiele
cat buch.txt | sed s/kapitel/Kapitel/g ersetzt kapitel durch Kapitel
sed -e 's/ +/ /g' Datei Ersetzt mehrere Leerzeichen durch eines. Das + bedeutet das das Zeichen mehrfach, oder auch nur einfach vorhanden ist
sed -n -e '/Suchtext/p' Datei gibt wie grep nur die Zeilen aus die den Suchtext beinhalten
sed -n 10,15p Datei > Datei.neu gibt nur die Zeilen 10 bis 15 aus und leitet diese (>) in eine neue Datei
sed -e 's/<a href=.*>\(.*\)<\/a>/\1/' findet alle Links in einer Datei und ersetzt sie durch den Linknamen
sed s/\<[^\>]*\>//g index.html > index.txt löscht alle html-Tags aus einem .html File und speichert es in einer .txt Datei ab

[top] Suchen mit find


Oft sucht man bestimmte Dateien und noch öfter weis man nicht wo diese sind, da kann find sehr hilfreich sein. Mit find kann man nach verschiedenen Argumenten suchen z.B. nach Dateien die einem User gehören, eine bestimmte Größe haben oder seit einem bestimmten Datum geändert worden sind

-name Dateiname Sucht nach der angegebenen Datei
-ctime +n sucht Dateien die älter als n Tage sind, -n entsprechend Dateien die jünger sind
-group Gruppenname sucht nach Dateien der Gruppe "gruppenname"
-user Username sucht nach Dateien des User "Username"
-nogroup sucht nach Dateien ohne Gruppe
-nouser sucht nach Dateien ohne User
-path 'begriff' sucht ob der Begriff im Pfad enthalten ist
-size +5k sucht Dateien größer 5kByte, -5k entsprechend Dateien die kleiner sind, auch eine genaue Angabe ist möglich ohne +/-. Lässt man das k weg werden die Blöcke angegeben, ein Block=512Bytes
-exec \; Führt ein Kommando auf alle Übereinstimmungen durch. Das Kommando muss zwischen -exec und dem \ stehen
Beispiele
find /var/www/ -name *.temp -exec rm {} \; findet alle ".temp" Dateien in /var/www/ und löscht diese
find / -size +100000k -user linux findet alle Dateien die größer als "100MByte" sind und dem User "linux" gehören

[top] Suchen mit updatedb und locate


Schneller als mit find geht es mit locate. Dazu muss man allerdings zuerst mit updatedb eine Datenbank mit allen Dateien erstellen. Dabei wird von jeder Datei im System ein Eintrag mit dem Pfad erstellt. Danach kann man mit locate Datei in dieser Datenbank ganz flott suchen.


[top] Konvertieren mit recode


Wer kennt sie nicht diese lästigen DOS Dateien mit den ^M. Um sie schnell und einfach ins Linuxformat umzuwandeln benutzt man recode.

recode ibmpc..latin1 <dosdatei> linuxdatei Konvertiert DOS Dateien ins Linuxformat um

[top] Zählen mit wc


Wenn man von einem Output nur die Zeilenanzahl braucht oder in einer Datei Wörter zählen will benutzt man wc.

wc zählt Zeilen Wörter Zeichen
-l nur Zeilen
-c zählt die bytes
-w zählt die Wörter
-m zählt die Zeichen
-L zählt die Zeichen der längste Zeile
Beispiele
ps U camel | wc -l ps listet uns alle Prozesse vom User camel auf und wc zählt diese, so erfährt man schnell wer wie viele Prozesse hat
wc -c Datei zählt die Bytes (-c) einer Datei, so kann man auch raus finden wie groß ein File ist.
find /var/www/projekt -name *.php -exec cat {} \; \
|grep ^function | wc -l
mit find suchen wir im Verzeichnis /var/www/projekt nach .php Dateien und lassen uns diese mit cat auflisten. Mit grep picken wir uns nur die Zeilen raus die mit function beginnen und wc zählt wieder die Zeilen (-l) mit. So kann man schnell mal nachsehen wie viele Funktionen ein Projekt hat.

[top] Speicherplatz anzeigen mit du


Wenn man wissen will wie groß ein Ordner ist schaut man einfach mit du nach. du hat auch noch ein paar nützliche Optionen wie Unterverzeichnisse auslassen und kann natürlich auch auf einzelne files angewandt werden.

du
-c zeigt auch das Totale Ergebnis an
-h Anzeige in lesbarer Form mit GByte und MByte
-m Anzeige in MByte
-k Anzeige in kByte
-s Ergebnis ist Total für alle Treffer
-S lässt Unterverzeichnisse aus
-x lässt Dateien auf anderen Filesystemen aus
Beispiele
du -chs /home/* zeigt die Gesamtgröße (c) von /home in lesbarer Form (h) an und zusätzlich die Größe jedes (s) Unterverzeichnisses /home/*
du -cmSs /etc zeigt die Gesamtgröße (c) von /etc ohne (S), und mit Unterverzeichnissen in MByte (m) an

[top] Nummerieren mit nl


Wenn man die Zeilen eines Output nicht nur mit wc gezählt haben will sondern gewisse Zeilen durchnummerieren will kann man das mit nl machen.

nl Datei Datei nummeriert ausgeben
-w Zahl Nummer breite, Abstand vom linken Rand zur Einerstelle (Standard 6)
-b Style Nummeriert nur bestimmte Zeilen a -alle, t - alle außer Leerzeilen (Standard), und mit pXXXX nur die Zeilen in denen der Begriff vorkommt (muss in einem sein pBEGRIFF)
Beispiele
nl -w 2 -b pTest Datei.txt Gibt die Datei aus und Nummeriert alle Zeilen die "Test" enthalten