• Keine Ergebnisse gefunden

Speichermedien und Partitionen 1 Was ist ein Dateisystem? Inhalt Dateisystem

N/A
N/A
Protected

Academic year: 2021

Aktie "Speichermedien und Partitionen 1 Was ist ein Dateisystem? Inhalt Dateisystem"

Copied!
15
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Foliensatz 4

Dateisystem

Inhalt

• Dateisysteme in Linux

• Virtual Filesystem Switch (VFS)

• Filesystem Hierarchy Standard (FHS)

• Befehle für Verzeichnisse, Dateien und Dateisysteme

• Zugriffsrechte auf Dateien

• Harte und symbolische Links

Was ist ein Dateisystem?

• Ein Dateisystem kontrolliert, wie Daten auf einem Speichermedium angeordnet werden, damit diese Daten später wieder gefunden und gelesen werden können.

Wichtige Dateisysteme:

• Windows: FAT, NTFS

• Linux/Unix: Ext2-4, ReiserFS, XFS, JFS, ZFS, Btrfs (in Entwicklung)

• Netzwerk: NFS, SMB/CIFS (vorrangig Windows), Lustre (Supercomputing)

• Weiters wird unter Linux auch die Abstraktionsschicht im Kernel als Dateisystem bezeichnet, genauer gesagt als virtuelles Dateisystem.

Speichermedien und Partitionen 1

• Jedes Medium (USB-Stick, Festplatte, DVD) ist einfach eine Folge von Bits, hat keine Struktur; oft in Blöcke unterteilt, die nur auf einmal gelesen werden können.

• Die üblichen Dateisysteme organisieren die Daten in einem hierarchischen System bestehend aus Verzeichnissen und Dateien.

• Ein physisches Medium kann mit einem einzigen Dateisystem versehen sein oder mehrere Teile (Partitionen) besitzen, mit eventuell unterschiedlichen Dateisystemen. Das ist z.B. für das Aufteilen eines Systems in eine Betriebssystem-Partition und eine Daten-Partition nützlich.

Es gibt unterschiedliche Varianten, Partitionen auf einem physischen Medium zu kennzeichnen.

Früher wurde auf x86-Rechnern ein MBR (Master Boot Record) und die darin enthaltene Partitionstabelle verwendet, der Nachfolger nennt sich GPT (GUID Partition Table).

(2)

Speichermedien und Partitionen 2

• Partitionen einer Festplatte können (als Administrator) mittels fdisk -l /dev/[sdX|hdX] angezeigt werden. Partitionen einer Platte /dev/[sdX|hdX] heißen /dev/[sdX|hdX][1,2,3,...], wobei X ein Kleinbuchstabe ist. Dies ist jedoch nur eine gängige Konvention, es könnte auch anders sein!

• Ein gutes CLI-Programm für die Bearbeitung von Partitionen ist parted (es gibt auch eine GUI- Variante namens gparted).

• Ausgabe von fdisk für eine MBR-basierte Festplatte:

$ fdisk -l /dev/sda

Disk /dev/sda: 160.0 GB, 160041885696 bytes

255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b57a2

   Device Boot Start End Blocks Id System /dev/sda1 * 16065 34668269 17326102+ 83 Linux

/dev/sda2 34668270 43054199 4192965 82 Linux swap / Solaris /dev/sda3 43070326 312576704 134753189+ f W95 Ext'd (LBA) /dev/sda5 43070328 312576704 134753188+ 83 Linux

Speichermedien und Partitionen 3

• Ausgabe von fdisk für eine GPT-basierte Festplatte:

$ fdisk -l /dev/sda

Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 sectors Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt

Disk identifier: 7DC1C01A-22A6-4216-AA7A-68CE77861CA4 Device Start End Sectors Size Type /dev/sda1 2048 411647 409600 200M EFI System

/dev/sda2 411648 102811647 102400000 48,8G Microsoft basic data /dev/sda3 283414528 1000214527 716800000 341,8G Microsoft basic data /dev/sda4 102813696 200469945 97656250 46,6G Microsoft basic data /dev/sda5 200469946 283413887 82943942 39,6G Microsoft basic data Partition table entries are not in disk order.

Speichermedien und Partitionen 4

(3)

Linux Virtual Filesystem (VFS)

Der Linux-Kernel bietet eine Abstraktion von den Spezifika eines Dateisystems und dem Medium, auf dem es liegt, das sogenannte virtuelle Dateisystem (bietet sowohl Abstraktion Richtung spezifische Dateisysteme als auch Richtung Benutzer/Applikationen). Der Pfad, unter welchem eine Datei erreicht werden kann, gibt daher keinen Aufschluss darauf, wo die Datei physisch tatsächlich liegt.

• Es gibt ein einziges, zentrales Wurzelverzeichnis, das mit / bezeichnet wird und „root“ heißt.

• Verzeichnisse und Unterverzeichnisse werden mit / voneinander getrennt.

• Spezifische Dateisysteme werden unter Verzeichnisnamen in dieses virtuelle Dateisystem eingehängt.

Nähere Information zum VFS: Kernel Hackers‘ Guide: A tour of the Linux VFS und The „Virtual File System“ in Linux

Verzeichnisse

• Jeder Prozess hat ein assoziiertes Arbeitsverzeichnis. Startet man einen neuen Prozess von der Shell aus, so bekommt dieser das Arbeitsverzeichnis der Shell (genauer: das Arbeitsverzeichnis wird vom Elternprozess vererbt).

• Pfade können absolut oder relativ angegeben werden. Absolute Pfade beginnen immer mit dem Wurzelverzeichnis, d.h. mit /. Alles andere sind relative Pfade, welche ausgehend vom Arbeitsverzeichnis aufgelöst werden.

• Die speziellen Verzeichnisnamen . und .. stehen für das aktuelle Verzeichnis bzw. das Elternverzeichnis.

(4)

Dateien

• GROSZ- und kleinschreibung in Dateinamen machen (in der Regel, hängt vom spezifischen Dateisystem ab) einen Unterschied.

• Versteckte Dateien/Verzeichnisse beginnen mit einem Punkt (z.B. .profile)

• Dateien können auch für Geräte stehen, Verzeichnisse für Prozesse, System- und Kerneleinstellungen, Statusinformationen, …

• Dateiendungen haben i.a. keine Bedeutung, Linux orientiert sich am tatsächlichen Inhalt (Befehl file).

Es gibt verschiedene Dateitypen (mit deren Kurzbezeichnung):

• - → Reguläre Datei: Beinahe jede Datei

• d → Verzeichnis: Sammlung von Dateien

• c → „Character device“: Für ungepufferte, direkte Ein-/Ausgabe (z.B. Terminal)

• b → „Block device“: Für gepufferte Ein-/Ausgabe (z.B. Festplatten)

• p → „Named pipe“: Für Interprozesskommunikation (IPC)

• s → Socket: Erlaubt auch Interprozesskommunikation, flexibler als named pipes

• l → Link: Spezielle Datei, zeigt auf eine andere Datei/ein anderes Verzeichnis

Filesystem Hierarchy Standard (FHS)

Damit Unix-ähnliche Betriebssystem zueinander kompatibler sind und die Interoperabilität von Computerprogrammen gefördert wird, gibt es den Filesystem Hierarchy Standard. Dieser legt die Lage und Bezeichnung von wichtigen Verzeichnissen und Dateien fest.

Beispiele:

• /bin/ → Verzeichnis mit grundlegenden Systembefehlen für alle Benutzer

• /bin/ls → Datei ls ist das Programm zum Zeigen eines Verzeichnisinhalts

• /home/<BENUTZERNAME>/ → Benutzerdaten eines Benutzers

• /home/Name/Dokumente/ → Dokumentenverzeichnis für den Benuzter „Name“

• /proc/cpuinfo → Virtuelle Textdatei, die Infos über die CPU(s) enthält

• /media/ → Verzeichnis mit eingebundene Wechselmedien wie (DVD, USB-Stick, Digitalkamera, …)

• /media/cdrom/file.odf → ODF Dokument auf einer CD-ROM Referenz: Filesystem Hierarchy Standard bzw. Manpage hier

Befehle für Verzeichnisse 1 (pwd, cd)

pwd - Zeigt das aktuelle Arbeitsverzeichnis an.

» „print working directory“, builtin-Befehl

» $ pwd

/home/thomas/work/praxis_website cd - Wechselt das aktuelle Verzeichnis.

» „change directory“, builtin-Befehl; erster Parameter ist Zielverzeichnis

» Ohne Parameter nach $HOME (Umgebungsvariable)

» Ist der Parameter -, wechselt man in das letzte Verzeichnis.

Tipp: Besser als cd - sind popd und pushd (builtin-Befehle).

» $ cd /; pwd /

(5)

$ cd -

/home/thomas/work/praxis_website

$ cd; pwd /home/thomas

Befehle für Verzeichnisse 2 (ls)

ls - Listet Verzeichnisinhalte auf.

» „listing“, listet alle Dateien im aktuellen oder angegebenen Verzeichnis auf

» Viele Optionen, z.B.: -l → langes Format‘; -h → Größen sinnvoller ausgeben; -a → alles, auch versteckte Dateien, anzeigen; -t → nach Zeit sortieren; -d → Verzeichnis statt Inhalte

» $ ls -lt total 36

-rw-rw-r-- 1 thomas thomas 3694 Oct 10 20:01 unterlagen.page drwxrwxr-x 2 thomas thomas 4096 Oct 9 17:23 scripts

drwxr-xr-x 7 thomas thomas 4096 Oct 8 16:19 src drwxrwxr-x 2 thomas thomas 4096 Oct 8 16:14 ext drwxrwxr-x 2 thomas thomas 4096 Oct 2 12:56 tmp drwxrwxr-x 7 thomas thomas 4096 Oct 2 12:56 out

-rw-rw-r-- 1 thomas thomas 147 Sep 30 12:18 webgen.config -rw-rw-r-- 1 thomas thomas 245 Sep 29 09:05 notizen.org drwxrwxr-x 4 thomas thomas 4096 Mar 5 2012 out_old

» Hinweis: Die Bedeutung der ersten vier Spalten wird später bei „Benutzer, Gruppen, Rechte“

erklärt. Ab der 5. Spalte sieht man die Dateigröße, das Datum der letzten Modifikation und den Namen.

Befehle für Verzeichnisse 3 (mkdir, rmdir)

mkdir - Erstellt ein oder mehrere Verzeichnisse.

» „make directory“, Parameter sind die zu erstellenden Verzeichnisse

» Mit der Option -p werden auch Elternverzeichnisse erstellt

» $ ls example/test

ls: cannot access example/test: No such file or directory

$ mkdir -p example/test

$ ls example test

rmdir - Löscht ein oder mehrere Verzeichnisse.

» „remove directory“; Parameter sind die zu löschenden Verzeichnisse

» Funktioniert nur, wenn das Verzeichnis leer ist!

» Mit der Option -p werden auch (leere) Elternverzeichnisse gelöscht

» $ rmdir example

rmdir: failed to remove `example': Directory not empty

$ rmdir -p example/test

$ ls example

ls: cannot access example: No such file or directory

Befehle für Dateien 1 (touch, cat, tac)

touch - Legt eine Datei an.

» Falls die Datei schon existiert, wird die Zugriffs- und Modifikationszeit auf die aktuelle Zeit gesetzt.

(6)

» -t [[CC]YY]MMDDhhmm[.ss] gibt das zu benutzende Datum an.

» $ touch file1

$ ls -l file1

-rw-rw-r-- 1 thomas thomas 0 Oct 11 10:37 file1

$ touch -t 201001010001 file1

$ ls -l file1

-rw-rw-r-- 1 thomas thomas 0 Jan 1 2010 file1 cat - Gibt den Inhalt einer oder mehrerer Dateien aus.

» „concatenate“; Parameter sind die Dateien.

» tac macht das gleiche, nur rückwärts (z.B. für die Ausgabe von Log-Dateien)

» $ echo -e "hallo\ndu" > file1

$ cat file1 hallo du

$ tac file1 du

hallo

Befehle für Dateien 2 (mv, cp, rm)

mv - Verschiebt eine Datei.

» „move“, wird auch zum Umbennen von Dateien verwendet.

» Hier wird entweder nur der Pfad geändert (im selben Dateisystem, sehr schnell), oder eine Kopie mit anschließendem Löschen gemacht.

» $ mv file1 file2

cp - Kopiert eine oder mehrere Dateien.

» „copy“, bei mehr als zwei Parametern muss der letzte ein Verzeichnis sein.

» Der Inhalt einer Datei wird in eine neue, unabhängige Datei geschrieben.

» Nützliche Optionen: -a → archivieren (Attribute identisch), -r → rekursiv kopieren, -i → beim Überschreiben nachfragen

» $ cp -a file2 file1

rm - Löscht eine oder mehrere Dateien.

» „remove“, Parameter sind die zu löschenden Dateien.

» Der Eintrag im Verzeichnis wird gelöscht. Die Daten könnten weiterhin erreichbar sein, wenn mehrere Dateinamen auf dieselbe Datei verweisen (harte Links).

» $ rm file1 file2

Befehle für Dateien 3 (stat, file)

stat - Liefert Details zu einer Datei.

» $ stat file1   File: `file1'

  Size: 9 Blocks: 8 IO Block: 4096 regular file Device: 806h/2054d Inode: 1485015 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 1515/ thomas) Gid: ( 1515/ thomas) Access: 2012-10-11 10:41:25.635363400 +0200

Modify: 2012-10-11 10:41:24.539366907 +0200 # Zeitstempel Änderung Inhalt Change: 2012-10-11 10:41:24.539366907 +0200 # Zeitstempel Änderung Metadaten  Birth: -

file - Erkennt Dateiformate.

(7)

» Das sind nicht die Dateitypen von Linux!

» Das Programm benutzt mehrere Algorithmen, um das Dateiformat einer Datei zu erkennen. In der Regel ist die Ausgabe korrekt.

» $ file tutorial.html

tutorial.html: HTML document text

$ file 20090708.txt

20090708.txt: ASCII text, with CRLF, CR, LF line terminators, with overstriking

$ file dokument1

dokument1: PDF document, version 1.4

Befehle für Dateien 4 (split)

split -Spaltet eine Datei in Teile auf.

» Die Dateien können mit cat wieder zusammengefügt werden.

» Syntax: split [Optionen] Datei [Präfix] (Präfix ist standardmäßig ‚x‘)

» Optionen: -l N → N Zeilen pro Ausgabedatei, -b N → N Bytes pro Ausgabedatei, -n N → N Ausgabedateien erzeugen, -d → numerischen Suffix verwenden

» $ split -n 3 -d /etc/passwd passwd

$ split -l 10 /etc/passwd passwd

$ ls -l passwd*

-rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd00 -rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd01 -rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd02 -rw-r--r-- 1 thomas thomas 344 Dez 7 09:57 passwdaa -rw-r--r-- 1 thomas thomas 459 Dez 7 09:57 passwdab -rw-r--r-- 1 thomas thomas 642 Dez 7 09:57 passwdac -rw-r--r-- 1 thomas thomas 575 Dez 7 09:57 passwdad -rw-r--r-- 1 thomas thomas 449 Dez 7 09:57 passwdae

$ cat passwdac | wc -l 10

Sonstige Befehle (find)

find - Sucht nach Dateien in einem Verzeichnisbaum.

» Sehr mächtiges Werkzeug, sollte man sich gut ansehen!

» Syntax: find [OPTIONEN] [PFAD...] [AUSDRUCK]

» Ein Ausdruck besteht aus Optionen, Tests und Aktionen, separiert mit Operatoren:

• Optionen (beeinflussen die gesamte Suche):

• -mindepth → minimale Suchtiefe

• -maxdepth → maximale Suchtiefe.

• Tests (selektieren Dateien):

• -name PATTERN → Dateien, deren Namen dem Muster entsprechen.

• -iname PATTERN → Wie -name, aber Groß-/Kleinschreibung egal.

• -type TYP → Dateien eines bestimmten Linux-Dateityps.

• -perm [-/]MODE → Dateien nach Zugriffsrechten filtern.

• -size N → Dateien nach Größe filtern.

(8)

Sonstige Befehle (find)

find…

» • Aktionen (machen etwas mit gefundenen Dateien):

• -print → Namen der Datei ausgeben, danach Zeilenumbruch.

• -print0 → Namen der Datei ausgeben, danach Null-Zeichen.

• -delete → Datei löschen.

• -exec BEFEHL ; → Befehl auf Datei ausführen ({} wird mit Dateiname ersetzt)

• Operatoren:

• -or/-not/-and → Logische Verknüpfung (default ist -and).

• ( AUSDRUCK ) → Gruppieren von Anweisungen.

» Von der Shell verwendete Zeichen (z.B. (, ), ;, …) müssen mit dem Maskierungszeichen („escape character“) \ versehen werden, damit die Shell sie nicht interpretiert.

Verwenden von Dateisystemen 1

• Wie erwähnt, müssen Dateisysteme in das VFS eingehängt („gemountet“) werden, damit sie verwendet werden können. Wenn ein Dateisystem nicht mehr gebraucht wird, kann es ausgehängt werden.

• Ein Dateisystem kann unter einem beliebigen Verzeichnis (dem Mountpoint) eingehängt werden.

Die vorher unter diesem Verzeichnis verfügbaren Dateien und Verzeichnisse sind dann solange nicht mehr erreichbar, bis das Dateisystem wieder ausgehängt wird.

Achtung: Neue Dateisysteme nicht unter Systemverzeichnisse (z.B. /bin/, /etc/, …) einhängen!

• Um ein Dateisystem einzuhängen braucht man das Gerät, auf dem es liegt (z.B. das DVD-Gerät oder eine Festplattenpartition) und ein Verzeichnis. Falls der Typ des Dateisystems (z.B. FAT, EXT4, …) nicht erkannt wird, muss auch diesen zusätzlich angeben.

• Bei aktuellen Linux-Distributionen werden Wechselmedien wie USB-Sticks und -Festplatten sowie DVDs automatisch erkannt und, falls möglich, eingehängt (in automatisch erstellten Verzeichnissen unter /media/).

Verwenden von Dateisystemen 2

• Für jeden Typ von Dateisystem werden Programme zum Erstellen bzw. Bearbeiten zur Verfügung gestellt.

Z.B. EXT2-4: mke2fs (auch z.B. als mkfs.ext4 benutzbar), e2fsck, debugfs, dumpe2fs.

• Die Funktionalität der Programme variert aber stark, weil nicht alle Dateisysteme gleich gut unterstützt werden bzw. sie sich in den Features unterscheiden.

Befehle für Dateisysteme 1 (mount)

mount - Hängt Dateisysteme in das VFS ein und listet sie auf.

» Ohne Parameter werden die eingebundenen Dateisysteme aufgelistet (Hinweis: mit mount | column -t bekommt man eine schönere Ausgabe)

(9)

» Üblicherweise kann nur der Administrator beliebige Dateisysteme einhängen.

» $ mount

/dev/sda1 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) udev on /dev type devtmpfs (rw,mode=0755)

none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda5 on /scratch type ext3 (rw,nosuid)

rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw) //share2/profiles on /profiles type cifs (rw)

Befehle für Dateisysteme 2 (mount)

mount…

» $ mount | column -t

/dev/sda1 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) udev on /dev type devtmpfs (rw,mode=0755)

none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda5 on /scratch type ext3 (rw,nosuid) rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)

//share2/profiles on /profiles type cifs (rw)

» In der obigen Ausgabe sieht man zum Beispiel, dass das EXT3-Dateisystem auf dem Gerät /dev/sda1 (also der ersten Partition auf der ersten Festplatte) unter /, dem Wurzelverzeichnis eingehängt ist. Weiters sieht man mehrere „virtuelle“ Dateisysteme (wie z.B. sysfs) und auch ein Netzwerkdateisystem (CIFS).

Befehle für Dateisysteme 3 (mount, umount)

mount…

» Im folgenden Beispiel wird ein NTFS-Dateisystem mit einigen Optionen unter /media/windows eingebunden.

» $ mount -o ro,noexec -t ntfs /dev/sdb1 /media/windows umount - Hängt Dateisysteme aus dem VFS aus.

» Als Parameter sind ein oder mehrere Mountpoints anzugeben.

» Wenn das Dateisystem noch in Verwendung ist, kann es nicht ausgehängt werden!

» $ umount /media/windows

Befehle für Dateisysteme 4 (df)

df - Zeigt die Festplattenbelegung an.

» „disk free“, Option -h („human readable“) nützlich.

» Eine Zeile pro eingehängtem Dateisystem.

» $ df -h

Filesystem Size Used Avail Use% Mounted on /dev/sda1 14G 8.1G 5.0G 62% /

udev 3.8G 4.0K 3.8G 1% /dev tmpfs 1.6G 1.1M 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 2.3M 3.8G 1% /run/shm /dev/sda6 79G 72G 2.3G 97% /home

(10)

/dev/sda4 9.6G 273M 8.9G 3% /data

Befehle für Dateisysteme 5 (du)

du - Zeigt den Platzverbrauch von Dateien/Verzeichnissen an.

» „disk usage“, als Parameter können Dateien/Verzeichnisse angegeben werden

» Standardeinheit der Größen ist 1024 Byte

» Verzeichnisse werden rekursiv behandelt

» Nützliche Optionen: --apparent-size → tatsächliche Größe anzeigen, -h → Größen sinnvoller ausgeben, -s → nur die Zusammenfassung, -c → Gesamtgröße ausgeben

» $ du -sc src tmp 1176 src 168 tmp 1344 total

$ du -sch src tmp 1.2M src 168K tmp 1.4M total

$ du --apparent-size -sch src tmp 988K src

159K tmp 1.2M total

Dateibesitzer und Zugriffsrechte 1

• Jede Datei gehört einem Benutzer (dem Besitzer) und einer Gruppe.

• Jedem Benutzer/jeder Gruppe ist eine eindeutige Nummer zugeordnet: die UID („User-ID“) dem Benutzer und die GID („Group-ID“) der Gruppe. Im Dateisystem selbst sind nur die UID/GID gespeichert!

• Diese Zuordnung kann auf jedem Linux-System anders sein (d.h. ein Benutzer auf System A muss nicht die selbe UID haben wie der gleiche Benutzer auf System B).

• Zusätzlich sind für jede Datei Zugriffsrechte definiert: Ein Set für den Besitzer (symbolisch u), eines für die Gruppe (symbolisch g) und eines für den Rest (symbolisch o, das sind alle außer dem Besitzer und den Gruppenmitgliedern). Es gibt drei verschiedene Arten von Zugriffsrechten:

• Lesen (symbolisch: r, numerisch: 4)

• Schreiben (symbolisch: w, numerisch: 2)

• Ausführen/Verzeichnis öffnen (symbolisch: x, numerisch: 1)

Manche Dateisysteme bieten darüber hinaus zusätzliche Dateiattribute an (z.B. EXT2/3/4-Attribute, POSIX ACLs).

Dateibesitzer und Zugriffsrechte 2

• Die Darstellung der Zugriffsrechte erfolgt immer in der Reihenfolge Lesen, Schreiben und Ausführen für den Besitzer, die Gruppe und den Rest.

• Falls ein Zugriffsrecht nicht gesetzt ist, wird in der symbolischen Schreibweise ein - an dessen Stelle geschrieben.

Zum Beispiel bedeutet rwxr-xr--, dass der Besitzer alle Rechte hat, die Gruppe darf Lesen und

(11)

Ausführen und der Rest darf nur Lesen.

• Die numerische Schreibweise bedient sich dem Oktalsystem, d.h. den Ziffern von 0 bis 7. Die Werte der gesetzten Rechte werden dabei addiert.

Berechnung: r → 4 = 2^2, w → 2 = 2^1, x → 1 = 2^0

In der Oktalschreibweise würden die Zugriffsrechte beim obigen Beispiel 754 sein.

Besitzer Gruppe Rest

symbolisch rwx r-x r--

Bits 111 101 100

Zugriffsrechte bei Verzeichnissen

• Die Zugriffsrechte werden für Verzeichnisse wie folgt interpretiert:

• Lesen bedeutet, dass der Verzeichnisinhalt (i.e. die Dateinamen) angezeigt werden darf.

• Schreiben bedeutet, dass der Verzeichnisinhalt geändert werden darf (i.e. Einträge dürfen angelegt bzw. gelöscht werden)

• Ausführen bedeutet, dass auf Dateien im Verzeichnis generell zugegriffen werden darf. Ob man die jeweiligen Dateien dann lesen/schreiben/ausführen darf, hängt wiederum von den Zugriffsrechten der Dateien selbst ab.

• Hat man auf ein Verzeichnis das Lese-, aber nicht das Ausführrecht, so kann man zwar den Verzeichnisinhalt ausgeben, aber auf keine Dateien zugreifen.

Im umgekehrten Fall (Ausführ-, aber kein Leserecht) kann man sich den Verzeichnisinhalt nicht anzeigen lassen, könnte aber auf bekannte Dateien zugreifen.

Zugriffsrechte - SUID/SGID/Sticky-Bit 1

Zusätzlich zu den genannten Zugriffsrechten gibt es noch drei spezielle Rechte:

• „Set-User-ID“ bzw. SUID-Bit (symbolisch: s, numerisch: 4)

Eine ausführbare Datei wird mit den Rechten des Besitzers ausgeführt, nicht mit den Rechten des aufrufenden Benutzers.

• „Set-Group-ID“ bzw. SGID-Bit (symbolisch: s, numerisch: 2)

Eine ausführbare Datei wird mit den Rechten der zugehörigen Gruppe ausgeführt, nicht mit den Rechten der primären Gruppe des aufrufenden Benutzers.

Auf ein Verzeichnis gesetzt, erhalten neu angelegte Dateien nicht die primäre Gruppe des anlegenden Benutzers, sondern die Gruppe des Verzeichnisses.

• „Restricted Deletion Flag“ oder „Sticky-Bit“ (symbolisch: t, numerisch: 1)

Verbietet in einem Verzeichnis einem unpriviligierten Benutzer das Löschen von Dateien/Verzeichnissen, wenn er nicht deren Besitzer ist. Wird üblicherweise z.B. auf das /tmp -Verzeichnis gesetzt.

(12)

Auf eine Datei angewandt, macht es jetzt nichts mehr. Früher würde das Programm in den Swap- Speicher geschrieben, damit es bei mehrmaligem Aufruf schneller ausgeführt wird.

Zugriffsrechte - SUID/SGID/Sticky-Bit 2

• In der symbolischen Schreibweise werden diese Rechte wie folgt dargestellt:

Ausführen SUID-Bit Besitzer SGID-Bit Gruppe Sticky-Bit Rest

x - x - x - x

x s s s s t t

- s S s S t T

Angewandt auf das obige Beispiel ergibt das in der symbolischen Schreibweise rwsr-xr-T, falls die SUID- und Sticky-Bits gesetzt sind.

• In der Oktalschreibweise werden die Werte der drei Rechte addiert und als vierte Ziffer den anderen dreien vorangestellt, z.B. ergibt das 6754 für das obige Beispiel, falls die SUID- und SGID-Bits gesetzt sind.

Siehe auch info coreutils 'Mode Structure'

Dateibesitzer und Zugriffsrechte - Anzeigen

Den Besitzer, die Gruppe sowie die zugehörigen Rechte von Dateien kann man sich mittels ls -l anzeigen lassen:

$ ls -ltd *

-rw-rw-r-- 1 thomas thomas 3694 Oct 10 20:01 unterlagen.page drwxrwxr-x 2 thomas thomas 4096 Oct 9 17:23 scripts

drwxr-xr-x 7 thomas thomas 4096 Oct 8 16:19 src drwxrwxr-x 2 thomas thomas 4096 Oct 8 16:14 ext drwxrwxrwt 2 thomas thomas 4096 Oct 2 12:56 tmp drwxrwxr-x 7 thomas thomas 4096 Oct 2 12:56 out

-rw-rw-r-- 1 thomas thomas 147 Sep 30 12:18 webgen.config -rw-rw-r-- 1 thomas thomas 245 Sep 29 09:05 notizen.org

$ ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 42824 Apr 9 2012 /usr/bin/passwd

• 1. Spalte: Linux-Dateityp (erstes Zeichen) und Zugriffsrechte.

• 2. Spalte: Link-Zähler (wird später bei „Harte und symbolische Links“ erklärt)

• 3. Spalte: Besitzer

• 4. Spalte: Gruppe

Die Rechte können mit chmod geändert werden, die Gruppe mit chgrp und der Besitzer mit chown.

Dateibesitzer und Zugriffsrechte - Befehle (chmod)

chmod - Ändert die Zugriffsrechte.

» Zwei Aufrufvarianten:

• chmod [OPTION]... OKTAL DATEI...: Mittels Oktalschreibweise.

(13)

• chmod [OPTION]... [ugoa...][+-=][rwxXst] DATEI...: Mittels symbolischer Schreibweise.

• u → Besitzer, g → Gruppe, o → Rest, a → Alle

• + → hinzufügen, - → löschen, = → exakt auf die Rechte setzen

• rwxst → klar (siehe oben), X → x setzen, falls auf ein Verzeichnis angewandt oder irgendein Benutzer schon das Recht hat

» Die Option -R erlaubt das rekursive Setzen der Zugriffsrechte.

» $ chmod a=rwx datei; ls -l datei

-rwxrwxrwx 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod o-rwx datei; ls -l datei

-rwxrwx--- 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod a-x,o+r datei; ls -l datei

-rw-rw-r-- 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod 6744 datei; ls -l datei

-rwsr-Sr-- 1 thomas thomas 0 Oct 17 19:15 datei

Dateibesitzer und Zugriffsrechte - Befehle (chown, chgrp)

chown - Ändert den Besitzer (und optional auch die Gruppe) einer Datei.

» Syntax: chown [OPTION]... [BESITZER][:[GROUP]] DATEI...

» Aus Sicherheitsgründen darf nur der Administrator darf den Besitzer ändern!

» Option -R für rekursives Ändern.

» $ chown root datei

chown: changing ownership of `datei': Operation not permitted

$ sudo chown root datei; ls -l

-rw-rw-r-- 1 root thomas 0 Oct 17 19:29 datei

$ sudo chown thomas:adm datei; ls -l

-rw-rw-r-- 1 thomas adm 0 Oct 17 19:29 datei chgrp - Ändert die Gruppe einer Datei.

» Syntax: chgrp [OPTION]... GRUPPE DATEI...

» Option -R für rekursives Ändern.

» $ sudo chgrp staff datei; ls -l

-rw-rw-r-- 1 thomas staff 0 Oct 17 19:29 datei

Dateibesitzer und Zugriffsrechte - Befehle (umask)

umask - Zeigt und ändert die Maske der Standarddateiberechtigungen.

» Ist ein builtin-Befehl!

» Wird für die Zugriffsrechte benutzt, wenn eine neue Datei angelegt wird.

» Die Maske wird von den Zugriffsrechten (normalerweise 666 für Dateien und 777 für Verzeichnisse) abgezogen!

» Die Option -S gibt die Maske in symbolische Schreibweise aus.

» $ umask 0002

$ umask -S u=rwx,g=rwx,o=rx

$ umask 022

$ umask 0022

$ umask u=rwx,g=rx,o=

(14)

$ umask 0027

$ touch file; ls -l file; rm -f file

-rw-r--- 1 thomas thomas 0 Oct 17 20:04 file

Harte und symbolische Links

• Alle Informationen (Besitzer, Gruppe, Zugriffsrechte, Anzahl und Speicherort der Datenblöcke, …) zu einer Datei, bis auf den Namen, werden im VFS in einem sogenannten „inode“ („index node“) verwaltet. D.h. einer Datei entspricht immer ein inode.

• Zugriff auf eine Datei erhält man, indem man in einem Verzeichnis einen Namen mit dem inode der Datei verbindet. Dieses Zuordnen eines Namens zu einer Datei bezeichnet man als „linken“ und so einen Eintrag als harten Link (oder Hardlink).

Harte Links sind auf Grund der engen Verbundheit mit dem Dateisystem immer nur innerhalb eines physischen Dateisystems möglich!

Siehe z.B. Dateiformat von Verzeichnissen im EXT4-Dateisystem

• Es ist möglich, mehrere harte Links auf die selbe Datei zu setzen, auch in unterschiedlichen Verzeichnissen des selben Dateisystems. Aber man kann nur einen harten Link auf ein Verzeichnis setzen!

Harte und symbolische Links 2

• Neben den harten Links gibt es auch noch die sogenannten symbolischen Links (oder Softlinks).

• Im Unterschied zu harten Links verweisen symbolische Links nur auf eine andere Datei/ein anderes Verzeichnis. Das bedeutet, das beim Anlegen eines symbolischen Links eine neue Datei erstellt wird, dessen Inhalt der Pfadname auf die verwiesene Datei ist (kurze Pfadnamen – derzeit bis zu 60 Bytes – werden aus Platz/Geschwindigkeitsgründen direkt im inode gespeichert).

Dieser Pfadname kann absolut (vom Wurzelverzeichnis ausgehend) oder relative (zum Verzeichnis, in dem der symbolische Link liegt) sein.

Wenn das Ziel des symbolischen Links nicht (mehr) existiert, dann verweist der Link „ins Leere“.

Man spricht dann von einem „dangling or broken link“.

• Symbolische Links sind im Gegensatz zu harten Links auch auf Verzeichnissen und dateisystemübergreifend erlaubt.

Harte und symbolische Links - Befehle (ln)

ln - Legt harte oder symbolische Links an.

» Meistgenutzte Syntax: ln [-s] ZIEL [LINK_NAME]

» Die Option -s erlaubt das Anlegen von symbolischen statt harten Links.

» $ touch datei; ln datei hardlink; ln -s datei softlink; ls -il * 1485109 -rw-rw-r-- 2 thomas thomas 0 Oct 18 07:51 datei

1485109 -rw-rw-r-- 2 thomas thomas 0 Oct 18 07:51 hardlink

1485447 lrwxrwxrwx 1 thomas thomas 5 Oct 18 07:52 softlink -> datei

$ echo inhalt > datei; cat datei hardlink softlink

(15)

inhalt inhalt inhalt

$ rm datei; cat hardlink softlink inhalt

cat: softlink: No such file or directory

$ cp hardlink datei; ln softlink softlink.2; ls -l * 1484535 -rw-rw-r-- 1 thomas thomas 7 Oct 18 07:53 datei 1485109 -rw-rw-r-- 1 thomas thomas 7 Oct 18 07:53 hardlink

1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink -> datei 1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink.2 -> datei Mit Hilfe von cp -l kann man auch massenhaft harte Links erzeugen.

Harte und symbolische Links - Befehle (readlink)

readlink - Liest den Verweise eines symbolischen Links aus.

» Mit der Option -f wird der kanonische Dateiname (vollständiger Pfad mit aufgelösten symbolischen Links) zurückgegeben.

» $ readlink datei

$ readlink -f datei

/home/thomas/work/praxis_website/tmp/link/datei

$ readlink softlink datei

$ readlink -f softlink

/home/thomas/work/praxis_website/tmp/link/datei

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Basiert teilweise auf den Folien von Harald Schilly harald.schilly@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

Referenzen

ÄHNLICHE DOKUMENTE

• &lt;stdio.h&gt; bietet mehrere Funktionsklassen für Dateizugriffe fopen().

Lokale Registerzuteilung linear scan register allocation Graphf¨ arbung nach Chaitin Graphf¨ arbung nach Hack/Goos.. Idee Grundlagen Graphenf¨

 Adressierung nicht über einzelne Zellen (Flash) sondern Wort.  32-Bit-System: 4

In 2005 entsteht bei Alleinstehenden (Renteneintritt bis einschließlich 2005) bis zu einer Jahresbruttorente von rund 19.000 € (etwa 1.583 € pro Monat) keine Einkommensteuer,

Speichern der Daten im Dateisystem, also: eine Datei für Artikel, eine Datei für Kunden, eine Datei für Bestellungen usw.. Welche Probleme

1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink -&gt; datei 1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink.2 -&gt; datei Mit Hilfe von cp -l kann man

Eine Datei wird hierbei angesprochen für einen sogenannten Pfad (z.B. /ordner1/unterordner3/datei.php).. In diesem Beispiel entsprechen die einzelnen Teile des Pfades den Körben

atime (access-time) Lese- oder Schreibzugriff auf Inhalt: touch, cat datei ls -lu mtime (modification-time) Änderung des Dateiinhalts: touch, echo text &gt;&gt; datei ls -l ctime