Verzeichnisstruktur vs Dateisystem

10

Was ist der Unterschied zwischen Verzeichnisstruktur und Dateisystem ?
Unix / Linux- Verzeichnisse und Dateisysteme sehen wie folgt aus:

Die folgenden zwei Verzeichnisse kennen wir offensichtlich.

  /home/abc/xyzdir1 --is a directory
  /home/abc/xyzdir2 -- is a directory

Die folgenden drei Beispiele sagen Dateisystem.

/proc -- is a file system
/ -- is a file system
/bin -- is a file system

Wie kann ich anhand der obigen Codeausschnitte erkennen, welches ein Dateisystem und ein Verzeichnis ist ?

Premraj
quelle
Ein Dateisystem enthält ein oder mehrere Verzeichnisse. Jedes Verzeichnis ist Teil eines Dateisystems (einschließlich /proc, /und /binanhand Ihrer Beispiele), daher ist mir nicht klar, wie Sie den "Unterschied" identifizieren möchten.
Roaima
@roaima finden Sie Code-Snippet für Beispiel
Premraj
Ihre Frage ist immer noch nicht eindeutig. /proc, /Und /binsind Verzeichnisse. Sie sind keine "Dateisysteme". Meinen Sie vielleicht, Sie möchten herausfinden, welche Verzeichnisse auch der Einhängepunkt (root) ihres Dateisystems sind?
Roaima

Antworten:

8

Die Leute gehen nicht zu vorsichtig mit dem Dateisystem um . In Ihrem Beispiel, würde ich sagen , dass /, /binund /procsind Dateisysteme , da eine ganze Partition (wie /dev/sdb1) auf diesen Verzeichnissen montiert ist. Mein Arch Linux-System hat kein /binDateisystem, daher ist dieses Beispiel nicht perfekt, aber ...

% ls -lid /proc /home /boot /
2 drwxr-xr-x  17 root root 4096 Feb 24 12:12 //
2 drwxr-xr-x   4 root root 4096 May 16 14:29 /boot/
2 drwxr-xr-x   5 root root 4096 Mar 14 18:11 /home/
1 dr-xr-xr-x 116 root root    0 May 16 17:18 /proc/

Inode Nummer 2 ist traditionell der "Root" -Inode eines gesamten On-Disk-Dateisystems (was die andere Verwendung des Ausdrucks ist). /, /bootUnd /homealle haben Inode - Nummer 2, während /proc, die vom Kernel vollständig präsentiert wird und nicht über eine On-Disk - Präsenz, hat Inode 1. Diese Inode - Nummern zeigt an, dass insgesamt On-Disk - Dateisystem oder einem virtuellen Dateisystem wird unter diesem Namen gemountet.

Der Satz " /home/abc/xyzdir1ist ein Verzeichnis" bedeutet im Grunde, dass kein Dateisystem auf der Festplatte unter diesem Namen bereitgestellt wird. Wenn Sie denselben ls -lidBefehl für ein Verzeichnis ausführen, erhalten Sie Folgendes:

 % ls -lid /home/bediger/src
3670039 drwxr-xr-x 29 bediger bediger 4096 May 17 19:57 /home/bediger/src/

Die Inode-Nummer 3670039 ist genau das, von dem der Inode im On-Disk-Dateisystem (auf meinem Computer) unter zugewiesen wurde /home.

Sie können Dateisysteme auch finden, indem Sie den mountBefehl aufrufen . Es listet alle gemounteten Dateisysteme auf und wo sie gemountet sind.

Bruce Ediger
quelle
Die "magische Inode" -Nummer ist spezifisch für die Dateisysteme der ext2-Serie. Es gilt nicht für die meisten (alle?) Anderen, wie z. B. xfs oder btrfs.
Psusi
Ich würde sagen , dass /, /binund /procsind Dateisysteme , da eine ganze Partition ... auf diese Verzeichnisse montiert ist. Dies gilt nicht für /proc, wie die Antwort später impliziert.
Max Nanasy
1
@MaxNanasy - vorausgesetzt, dass zwei Bedeutungen von "Dateisystem" gebräuchlich sind (1. Die Namen und die Anordnung von Verzeichnissen in einer Baumstruktur und 2. Das Format und Layout der Datei- und Verzeichnisstrukturdaten auf der Festplatte zusammen mit dem Code, um ihn zu pflegen und zu verwenden), ist es ziemlich schwierig, einen Begriff zu finden, der sowohl verständlich, nicht kreisförmig definiert als auch technisch korrekt ist. Ich entschied mich für verständliche und verwendete "Partition" anstelle anderer Begriffe. Ich lade Sie ein, Begriffe vorzuschlagen, die korrekter sind. Ich bin ratlos.
Bruce Ediger
4

Auf die Gefahr einer starken Vereinfachung,

  • Ein Dateisystem ist wie der Motor Ihres Autos und andere interne Systeme.
  • Eine Verzeichnisstruktur ist wie eine Karte der Orte, an denen Sie fahren.

Da ich um eine Zugabe gebeten wurde,

  • Dateisysteme sind wie die Mechanik (Implementierungsdetails) der Verteilung / Weitergabe von Audio- / Videosignalen: analoge HF-Übertragung, digitale HF-Übertragung, Kabel, Internet, Videoband, Videoplatte usw.
  • Die Verzeichnisstruktur entspricht dem Inhalt von Fernsehprogrammen und deren Kategorisierung, z. B. in Comedy, Drama, Nachrichten, Dokumentationen, Spielshows, Sport usw.

Wenn Sie Code benötigen, lesen Sie die erste Hälfte dieser Antwort unter So ermitteln Sie, ob ein Linux-Dateisystem zu einem laufenden System gehört - der Teil, der die Validierung durchführt root_dir. Es macht nur das, was Bruce gesagt hat; Überprüfen Sie, ob es sich um ein Verzeichnis handelt, und überprüfen Sie, ob die Inode-Nummer 1 oder 2 ist.

G-Man sagt "Reinstate Monica"
quelle
1
Gute ELI5, aber könnten Sie ein Code-Snippet hinzufügen, das antwortet ? Wie kann ich feststellen, welches ein Dateisystem und ein Verzeichnis ist?
user1717828
4

So wie ich es sehe, ist ein Dateisystem im UNIX-Sinne eine Möglichkeit, einen Verzeichnisbaum (Verzeichnisstruktur) zu implementieren, genauer gesagt, eine Möglichkeit, die UNIX-Dateisystem-API zu implementieren. Das Root-Dateisystem wird von einer bestimmten Implementierung unterstützt. Wenn Sie ein Mountpoint-Verzeichnis eingeben, geben Sie einen Teilbaum ein, der von etwas anderem unterstützt wird.

Die Schnittstelle ist immer dieselbe, aber in einem Fall haben Sie eine bestimmte Festplattenpartition am Back-End, in einem anderen Fall gibt es ein Programm, das niemals auf ein Speichergerät schreibt. Das procDateisystem wird von einer Software unterstützt, die Kernel-Interna verfügbar macht. a tmpfswird von einer Software gesichert, die in den Arbeitsspeicher schreibt, und andere Dateisysteme schreiben möglicherweise in das Netzwerk oder anderswo.

Im Nicht-UNIXy-Sinne ist ein Dateisystem eine Möglichkeit, die Datenspeicherung zu organisieren. ext4, btrfs, fat, Und ntfssind Dateisysteme in diesem Sinne, sondern auch in der Unixy Sinnes sie den Dateisystem - API implementieren. procwürde nicht als Dateisystem innerhalb dieses, eingeschränkteren Paradigmas klassifiziert werden, da es die Datenspeicherung nicht organisiert.

TL; DR:

  • Verzeichnisstruktur / Baum = Frontend
  • Dateisystem = Backend
PSkocik
quelle
2

Während die Verzeichnisakzeptanz bei Dateisystemen eindeutig ist, kann das Dateisystem je nach dem, worüber Sie sprechen, unterschiedliche Bedeutungen haben.

In Ihren Beispielen sind alle aufgelisteten Pfade Verzeichnisse, aber nur einige von ihnen sind auch Mount-Punkte von Dateisystemen.

Mit dem dfBefehl können Sie feststellen , auf welchem ​​Dateisystem sich eine bestimmte Datei oder ein bestimmtes Verzeichnis befindet, und mit dem mountBefehl auf den meisten Unix- und Linux-Implementierungen können Sie herausfinden, welche Dateisysteme auf Ihrem Computer vorhanden sind, welchen Typ sie haben und welche Einhängepunkte sie haben. z.B:

$ df /proc
Filesystem     1K-blocks  Used Available Use% Mounted on
proc                   0     0         0    - /proc
$ mount | grep -w /proc
/proc is a file system of type proc

Die Aussage /binist ein Dateisystem ist zweifelhaft, /binwird fast immer gemountet /.

$ df -k /bin
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      206292664 180687360  15103212  93% /
$ mount | grep -w /
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
jlliagre
quelle
1

Zuerst eine Korrektur Ihrer Annahme über ein Dateisystem und ein Verzeichnis. Ein Dateisystem enthält ein oder mehrere Verzeichnisse. Verwenden Sie Ihre Beispiele /proc, /und /binsind Verzeichnisse. Sie sind an und für sich keine "Dateisysteme", aber sie können die Wurzel ihrer jeweiligen Dateisysteme sein.

Wenn Sie herausfinden möchten, welche Verzeichnisse auch der Einhängepunkt (Root) ihres Dateisystems sind, können Sie Folgendes verwenden:

F="$PWD"    # The directory to be tested
if test -d "$F"
then
    echo "$F is a directory"
    test "X$(stat --format '%m' "$F")" = "X$PWD" && echo "$F is a mountpoint"
fi
Roaima
quelle
1

Das Dateisystem ist eine Methode zum logischen Organisieren und Speichern großer Datenmengen, sodass das System einfach zu verwalten ist. Ein Dateisystem besteht aus Dateien, Beziehungen zu anderen Dateien sowie den Attributen (Dateityp, Dateiname, Dateigröße, Dateieigentümer, Dateizeitstempel) jeder Datei.

Verzeichnisse : Beispielsweise besteht das Unix-Dateisystem im Wesentlichen aus Dateien und Verzeichnissen. Verzeichnisse sind spezielle Dateien, die andere Dateien enthalten können. Das oberste Verzeichnis ist /(Schrägstrich), wobei die Verzeichnisse direkt darunter Systemverzeichnisse sind. Geben Sie hier die Bildbeschreibung ein

/ Root des Linux-Dateisystems

/bin Hier werden binär ausführbare Dateien gespeichert

/boot Bootbezogene Dateien werden hier gespeichert

/dev Gerätedateien werden hier gespeichert

/etc Hier werden systemweite Konfigurationsdateien gespeichert

/home Speicherort für die Home-Verzeichnisse der regulären Benutzer

/lib64 Hier werden Bibliotheken für ausführbare Binärdateien gespeichert

/mnt Temporärer Einhängepunkt für DVD-Rom, USB-Stick.

/optOptionale Programme werden hier wie Programme in Windows installiert

/proc Kernel-Pseudo-Dateisystem

/root Home-Verzeichnis von Super User Root

/sbin System Binary Executable-Dateien werden hier gespeichert

/tmp Temporäre Dateien werden hier aufbewahrt

/usr Benutzer-Dateisystem

/var Hier werden variable Dateien gespeichert

/srv ist ein Serve-Ordner, der standortspezifische Daten enthält, die von diesem System bereitgestellt werden.

src und für mehr

Die folgenden zwei Verzeichnisse sind benutzerdefinierte Verzeichnisse:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
quelle
Dieses Diagramm ist absolut veraltet. FHS 3.0 wurde im Juni 2015 veröffentlicht. Es sollte auch beachtet werden, dass FHS nur für Linux-Distributionen gilt.
fpmurphy
1

Wenn Sie nur einen Befehl benötigen, der Ihnen sagt, ob der Pfad ein Verzeichnis ist oder nicht, verwenden Sie mountpoint (1) .

Für mich druckt es

$ mountpoint /
/ is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
$ mountpoint some-file
some-file is not a mountpoint

Das Gute ist, dass der Exit-Status wieder dasselbe anzeigt, sodass Sie ihn in Ihren Skripten wie folgt verwenden können:

if mountpoint "$foo" >/dev/null; then
  : do mountpoint stuff
elif [ -d "$foo" ]; then
  : do directory stuff
elif [ -e "$foo" ]; then
  : do file stuff 
else
  echo "$foo does not exist!" >/2
fi
Lucas
quelle