Dateien und Verzeichnisse
[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
|
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.
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
|
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
|
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.
|
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
|
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
|
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
|
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
|