Linux Dateisystem

12 June 2019 DebXWoody

Um das Linux Dateisystem kommt keiner drum herum. Da unter Linux alles eine Datei ist, ist das Dateisystem ein wichtiges Konzept innerhalb des Systems.

Alles ist eine Datei

Vielleicht für einige etwas ungewohnt, aber in vielen Fällen sehr praktisch, unter Linux ist fas ales als Datei im Dateisystem abgebildet. Die erste Festplatte ist in den meisten Fällen /dev/sda. Die dritte Partition auf der 2. Festplatte /dev/sdb3. Informationen zur CPU findet man in der Datei /proc/cpuinfo

Hierarchie des Dateisystems

Das Dateisystem ist hierarchisch in einer Baumstruktur aufgebaut. Es beginnt bei dem Wurzelverzeichnis /.

Einsteiger müssen sich bei der folgende Liste keine Sorgen machen, für Benutzer ist es wichtig es mal gehört zu haben. Jedoch wird man die gesamte Verzeichnisstruktur von Linux nicht verstehen müssen. Die Liste zeigt einen kleinen Ausschnitt aus einem Debian GNU/Linux Dateisystem.

$ tree -L 2 -d /
/
├── bin -> usr/bin
├── boot
│   ├── efi
│   └── grub
├── dev
│   ├── block
│   ├── bsg
│   ├── bus
│   ├── char
│   ├── cpu
│   ├── disk
│   ├── dri
│   ├── fd -> /proc/self/fd
│   ├── hugepages
│   ├── input
│   ├── mapper
│   ├── mqueue
│   ├── net
│   ├── pts
│   ├── shm
│   ├── snd
│   ├── v4l
│   ├── vboxusb
│   └── vfio
├── etc
│   ├── acpi
│   ├── alsa
│   ├── alternatives
│   ├── rc0.d
│   ├── rc1.d
│   ├── rc2.d
│   ├── rc3.d
│   ├── rc4.d
│   ├── rc5.d
│   ├── rc6.d
│   ├── rcS.d
│   ├── reader.conf.d
│   ├── resolvconf
│   ├── rsyslog.d
├── home
│   ├── user1
│   ├── lost+found
│   └── user2
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── lost+found [error opening dir]
├── media
│   ├── cdrom
│   ├── user1
│   └── user2
├── mnt
├── opt
│   ├── eclipse
│   ├── jbake -> jbake-2.6.4
│   └── jbake-2.6.4
├── proc
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   ├── acpi
│   ├── asound
│   ├── bus
│   ├── driver
│   ├── fs
│   ├── irq
│   ├── net -> self/net
│   ├── self -> 2514
│   ├── sys
│   ├── sysvipc
│   ├── thread-self -> 2514/task/2514
│   └── tty
├── root [error opening dir]
├── run
│   ├── avahi-daemon
│   ├── console-setup
│   ├── cups
│   ├── dbus
│   ├── initramfs
│   ├── lock
│   ├── log
│   ├── mount
│   ├── network
│   ├── NetworkManager
│   ├── pcscd
│   ├── systemd
│   ├── udev
│   ├── udisks2
│   ├── user
├── sbin -> usr/sbin
├── srv
├── sys
│   ├── block
│   ├── bus
│   ├── class
│   ├── dev
│   ├── devices
│   ├── firmware
│   ├── fs
│   ├── hypervisor
│   ├── kernel
│   ├── module
│   └── power
├── tmp
├── usr
│   ├── bin
│   ├── games
│   ├── include
│   ├── lib
│   ├── lib32
│   ├── lib64
│   ├── libexec
│   ├── libx32
│   ├── local
│   ├── sbin
│   ├── share
│   └── src
└── var
    ├── backups
    ├── cache
    ├── lib
    ├── local
    ├── lock -> /run/lock
    ├── log
    ├── mail
    ├── opt
    ├── run -> /run
    ├── spool
    └── tmp

Die wichtigsten Grundlagen

Mit dem Befehl pwd - print working directory - wird das aktuelle Verzeichnis, in dem man sich befindet zurück gegeben.

$ pwd
/usr/local/bin

Mit dem Befehl cd kann man das aktuelle Verzeichnis wechseln.

$ pwd
/usr/local/bin
$ cd /tmp/
$ pwd
/tmp

In der Regel hat jeder Benutzer ein eigenes Homeverzeichnis - seinen persönlichen Ort. Dieses Verzeichnis kann man auch für jeden Benutzer mit ~ erreichen. So ist das Verzeichnis ~ für den Benutzer user1 das Verzeichnis /home/user1 für den Benutzer user2 jedoch /home/user2. Die Dateien eines Benutzer liegen also i.d.R. im Verzeichnis ~.

Der Befehl ls zeigt die Dateien in einem Verzeichnis an. Oft wird der Befehl ls mit den Optionen -l -a aufgerufen: ls -la, um alle Dateien und Verzeichnisse mit weiteren Informationen anzuzeigen.

$ ls -la
insgesamt 40
drwxr-xr-x  4 user1 user1    4096 Jun 12 11:31 .
drwxrwxrwt 14 root   root   28672 Jun 12 11:26 ..
drwxr-xr-x  2 user1 user1    4096 Jun 12 11:26 dir1
drwxr-xr-x  2 user2 user2    4096 Jun 12 11:26 dir2
-rw-r--r--  1 user1 user1       0 Jun 12 11:26 file1
-rw-r--r--  1 user2 user2       0 Jun 12 11:26 file2

Die ersten 10 Zeichen in der Ausgabe geben Informationen über den Typ und die Berechtigungen an. In dem oben abgebildeten Beispiel, sind zwei Typen zu erkennen. Das erste Zeichen - steht für reguläre Datei. Das Zeichen d für directory (Verzeichnis). Es gibt noch weitere Typen (c,b,l) auf die wir jetzt noch nicht eingehen wollen.

Alle Einträge die mit einem d beginnen sind somit Verzeichnisse. Jedes Verzeichnis hat ein Verzeichnis mit dem Namen .. Das Verzeichnis . ist immer das aktuelle Verzeichnis. D.h. ein Verzeichniswechsel cd . wird im aktuellen Verzeichnis bleiben. Jedes Verzeichnis hat ein übergeordnetes Verzeichnis. Dieses Verzeichnis ist in jedem Verzeichnis mit .. benannt. D.h. ein Wechsel von einem Verzeichnis in das Verzeichnis .. mit cd .. wird in das übergeordnete Verzeichnis wechseln.

$ pwd
/tmp/test
$ cd ..
$ pwd
/tmp

Die nächsten 9 Zeichen sind 3x 3er Blöcke. Etwas vereinfacht, jeder Block besteht aus der rwx. Das r steht für read (lesen), w steht für write (schreiben) und das x steht für execute (ausführen). Jeder der 3 Blöcke hat somit ein Kennzeichen für das Recht lesen, schreiben und ausführen.

Jeder Datei ist einem Benutzer und einer Gruppe zugeordnet. Der erste Block, bezieht sich auf den Benutzer. Der zweite Block auf die Gruppe und der dritte Block auf alle anderen.

In folgenden Beispiel hat der Benutzer user1 die Rechte rw- (lesen und schreiben, aber nicht ausführen). Die Gruppe gruppe1 hat das Recht r-- - also nur lesen. Alle anderen haben wegen --- keine Berechtigung.

-rw-r-----  1 user1 gruppe1       0 Jun 12 11:26 file1