struttura della directory vs file system


10

Qual è la differenza tra la struttura delle directory e il file system ?
Le directory e il file system Unix / Linux sono i seguenti:

Le seguenti due directory ovviamente conosciamo le directory.

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

i seguenti tre esempi stanno dicendo file system.

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

Come posso identificare quale è un file system e una directory dai frammenti di codice sopra?


Un filesystem contiene una o più directory. Ogni directory fa parte di un filesystem (incluso /proc, /e /bindai tuoi esempi), quindi non sono chiaro come si desidera identificare la "differenza".
roaima,

@roaima, trova lo snippet di codice per l'esempio
Premraj,

La tua domanda è ancora ambigua. /proc, /E /binsono le directory. Non sono "filesystem". Intendi forse che vuoi identificare quali directory sono anche il mount point (root) del loro filesystem?
roaima,

Risposte:


8

Le persone non usano il file system con troppa attenzione. Nei tuoi esempi, direi questo /, /bine /procsono file system perché un'intera partizione (come /dev/sdb1) è montata su quelle directory. Il mio sistema Linux Arch non ha /bincome file system quindi questo esempio non è perfetto ma ...

% 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/

L'iodo numero 2 è tradizionalmente l'inode "root" di un intero file system su disco (che è l'altro uso della frase). /, /bootE /hometutti hanno inode numero 2, mentre /proc, che viene presentato interamente dal kernel e non avere una presenza su disco, ha inode 1. Tali numeri di inode indica che un intero, su disco del file system, o di un file system virtuale è montato usando quel nome.

La frase " /home/abc/xyzdir1è una directory" significa sostanzialmente che nessun file system su disco è montato usando quel nome. Se si esegue lo stesso ls -lidcomando su una directory si ottiene qualcosa del genere:

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

Il numero di nodo 3670039 è esattamente qualsiasi inode assegnato nel file system su disco montato (sulla mia macchina) su /home.

È inoltre possibile trovare i file system invocando il mountcomando. Elenca tutti i file system montati e dove sono montati.


Il numero di "inode magico" è specifico della serie ext2 di filesystem. Non si applica alla maggior parte (tutti?) Altri, come xfs o btrfs.
psusi,

Direi che /, /bine /procsono file system perché un'intera partizione ... è montata su quelle directory. Questo non è vero per /proc, come implica la risposta in seguito.
Max Nanasy,

1
@MaxNanasy - dato che due significati di "file system" sono di uso comune (1. I nomi e la disposizione delle directory in una struttura ad albero e 2. Il formato e il layout su disco dei dati strutturati di file e directory, insieme al codice per mantenerlo e utilizzarlo), è piuttosto difficile trovare un termine che sia comprensibile, non definito in modo circolare e tecnicamente corretto. Ho scelto di usare una "partizione" comprensibile e usata invece di altri termini. Ti invito a suggerire termini più corretti, sono in perdita.
Bruce Ediger,

4

A rischio di semplificare eccessivamente,

  • Un filesystem è come il motore della tua auto e altri sistemi interni,
  • Una struttura di directory è come una mappa dei luoghi in cui guidi.

Da quando mi è stato chiesto un bis,

  • I filesystem sono come la meccanica (dettagli di implementazione) della distribuzione / propagazione del segnale audio / video: trasmissione RF analogica, trasmissione RF digitale, cavo, Internet, nastro video, disco video, ecc.
  • La struttura delle directory è come il contenuto della programmazione televisiva e la sua categorizzazione, ad esempio, in commedie, drammi, notizie, documentari, spettacoli di giochi, sport, ecc.

Se si desidera il codice, consultare la prima metà di questa risposta a Come determinare se un filesystem Linux appartiene a un sistema in esecuzione, la parte su cui viene eseguita la verifica della convalida root_dir. Sta solo facendo quello che ha detto Bruce; verifica che sia una directory e verifica se il suo numero di inode è 1 o 2.


1
Buon ELI5, ma potresti aggiungere uno snippet di codice che risponde Come posso identificare quale è un file system e una directory?
user1717828,

4

Per come la vedo io, un filesystem, nel senso di UNIX, è un modo di implementare un albero di directory (struttura di directory), o più precisamente, un modo di implementare l'API di filesystem UNIX. Il file system di root è supportato da una particolare implementazione e ogni volta che si accede a una directory mountpoint, si immette una sottostruttura che è supportata da qualcosa di diverso.

L'interfaccia è sempre la stessa, ma in un caso, hai una partizione del disco particolare sul back-end, in un altro caso, ci sarà un programma che non scrive nemmeno su un dispositivo di archiviazione. Il procfilesystem sarà supportato da un software che espone gli interni del kernel; una tmpfsverrà eseguito il backup da un software che scrive di RAM, e altri file system possono scrivere alla rete o altrove.

Nel senso non UNIX della parola, un file system è un modo di organizzare la memorizzazione dei dati. ext4, btrfs, fat, E ntfssono i file system in questo senso, ma anche nel senso Unixy-implementano l'API del filesystem. procnon classificherebbe come filesystem all'interno di questo paradigma, più limitato, in quanto non organizza l'archiviazione dei dati.

TL; DR:

  • struttura di directory / albero = front-end
  • file system = back-end

2

Mentre l'accettazione della directory è inequivocabile quando si parla di file system, il file system potrebbe significare cose diverse a seconda di cosa si sta parlando.

Nei tuoi esempi, tutti i percorsi elencati sono directory ma solo alcuni di essi sono anche punti di montaggio dei file system.

È possibile utilizzare il dfcomando per sapere su quale file system è un determinato file o directory e il mountcomando sulla maggior parte delle implementazioni Unix e Linux per capire quali file system sono presenti sulla macchina, il loro tipo e i loro punti di montaggio. per esempio:

$ 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

L'affermazione /binè che un file system è dubbio, /binè quasi sempre montato /.

$ 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)

1

Innanzitutto una correzione alla tua ipotesi su un filesystem e una directory. Un filesystem contiene una o più directory. Usando i tuoi esempi /proc, /e /binsono le directory. Non sono "filesystem" in sé e per sé, ma potrebbero essere la radice dei rispettivi filesystem.

Se vuoi identificare quali directory sono anche il mount point (root) del loro filesystem puoi usare qualcosa del genere:

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

1

Il file system è una metodologia per l'organizzazione e l'archiviazione logiche di grandi quantità di dati in modo che il sistema sia facile da gestire. un file system è costituito da file, relazioni con altri file, nonché dagli attributi (tipo di file, nome del file, dimensione del file, proprietario del file, data / ora del file) di ciascun file.

Directory : ad esempio, il file system Unix è essenzialmente composto da file e directory. Le directory sono file speciali che possono contenere altri file. la directory più in alto è /(barra), con le directory direttamente sotto le directory di sistema. inserisci qui la descrizione dell'immagine

/ Root del filesystem Linux

/bin I file eseguibili binari sono conservati qui

/boot I file relativi all'avvio sono conservati qui

/dev I file del dispositivo sono conservati qui

/etc I file di configurazione dell'intero sistema sono conservati qui

/home Posizione per le home directory degli utenti regolari

/lib64 Le librerie per eseguibili binari sono conservate qui

/mnt Punto di montaggio temporaneo per DVD-Rom, unità flash USB.

/optI programmi opzionali sono installati qui come Programmi in Windows

/proc Pseudo filesystem del kernel

/root Home directory di super user root

/sbin I file eseguibili binari del sistema sono conservati qui

/tmp I file temporanei sono conservati qui

/usr File system utente

/var I file variabili sono conservati qui

/srv è una cartella di servizio, contiene dati specifici del sito forniti da questo sistema.

src e per di più

Le seguenti due directory sono directory definite dall'utente:

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

Questo diagramma è tristemente obsoleto. FHS 3.0 è stato rilasciato a giugno 2015. Va inoltre notato che FHS si applica solo alle distribuzioni Linux.
fpmurphy,

1

Se hai solo bisogno di un comando che ti dice se path è una directory o non usa mountpoint (1) .

Per me stampa

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

La cosa buona è che lo stato di uscita indica di nuovo lo stesso in modo da poterlo usare nei tuoi script in questo modo:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.