structure de répertoire vs système de fichiers


10

Quelle est la différence entre la structure du répertoire et le système de fichiers ?
Les répertoires et le système de fichiers Unix / Linux se présentent comme suit:

Les deux répertoires suivants, nous connaissons évidemment les répertoires.

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

les trois exemples suivants indiquent le système de fichiers.

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

Comment puis-je identifier lequel est un système de fichiers et un répertoire à partir des extraits de code ci-dessus?


Un système de fichiers contient un ou plusieurs répertoires. Chaque répertoire fait partie d'un système de fichiers (y compris /proc, /et /binde vos exemples), donc je ne suis pas clair comment vous voulez identifier la « différence ».
roaima

@roaima s'il vous plaît trouver un extrait de code pour l'exemple
Premraj

Votre question est toujours ambiguë. /proc, /Et /binsont des répertoires. Ce ne sont pas des "systèmes de fichiers". Voulez-vous dire que vous voulez identifier les répertoires qui sont également le point de montage (racine) de leur système de fichiers?
roaima

Réponses:


8

Les gens n'utilisent pas le système de fichiers trop soigneusement. Dans vos exemples, je dirais que /, /binet /procsont les systèmes de fichiers , car une partition entière (comme /dev/sdb1) est monté sur ces répertoires. Mon système Linux Arch n'a pas /binde système de fichiers, donc cet exemple n'est pas parfait mais ...

% 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'inode numéro 2 est traditionnellement l'inode "racine" de tout un système de fichiers sur disque (qui est l'autre usage de l'expression). /, /bootet /hometous ont l'inode numéro 2, tandis que /proc, qui est entièrement présenté par le noyau et n'a pas de présence sur le disque, a l'inode 1. Ces numéros d'inode indiquent qu'un système de fichiers entier sur disque ou un système de fichiers virtuel est monté en utilisant ce nom.

La phrase « /home/abc/xyzdir1est un répertoire» signifie essentiellement qu'aucun système de fichiers sur disque n'est monté avec ce nom. Si vous exécutez la même ls -lidcommande sur un répertoire, vous obtenez quelque chose comme ceci:

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

L'inode numéro 3670039 est exactement l'inode allouée dans le système de fichiers sur disque monté (sur ma machine) à /home.

Vous pouvez également trouver des systèmes de fichiers en appelant la mountcommande. Il répertorie tous les systèmes de fichiers montés et leur emplacement de montage.


Le numéro "d'inode magique" est spécifique à la série ext2 de systèmes de fichiers. Il ne s'applique pas à la plupart (tous?) D'autres, tels que xfs ou btrfs.
psusi

Je dirais cela /, /binet ce /procsont des systèmes de fichiers car une partition entière ... est montée sur ces répertoires. Ce n'est pas vrai pour /proc, comme la réponse l'implique plus tard.
Max Nanasy

1
@MaxNanasy - étant donné que deux significations de «système de fichiers» sont couramment utilisées (1. Les noms et la disposition des répertoires dans une arborescence, et 2. Le format sur disque et la disposition des données structurées de fichiers et de répertoires, ainsi que le code pour le maintenir et l'utiliser), il est assez difficile de trouver un terme à la fois compréhensible, non défini de façon circulaire et techniquement correct. J'ai choisi d'utiliser une «partition» compréhensible et utilisée au lieu d'autres termes. Je vous invite à suggérer des termes qui sont plus corrects, je suis perdu.
Bruce Ediger

4

Au risque de trop simplifier à l'extrême,

  • Un système de fichiers est comme le moteur de votre voiture et d'autres systèmes internes,
  • Une structure de répertoires est comme une carte des endroits où vous conduisez.

Depuis qu'on m'a demandé un rappel,

  • Les systèmes de fichiers sont comme les mécanismes (détails d'implémentation) de la distribution / propagation du signal audio / vidéo: diffusion RF analogique, diffusion RF numérique, câble, Internet, bande vidéo, disque vidéo, etc.
  • La structure du répertoire est semblable au contenu de la programmation télévisuelle et à sa catégorisation, par exemple en comédie, dramatique, actualités, documentaires, jeux télévisés, sports, etc.

Si vous voulez du code, consultez la première moitié de cette réponse à Comment déterminer si un système de fichiers Linux appartient à un système en cours d'exécution - la partie qui vérifie la validation root_dir. Il fait juste ce que Bruce a dit; vérifier qu'il s'agit d'un répertoire et vérifier si son numéro d'inode est 1 ou 2.


1
Bon ELI5, mais pourriez-vous ajouter un extrait de code répondant Comment puis-je identifier lequel est un système de fichiers et un répertoire?
user1717828

4

Selon moi, un système de fichiers, au sens UNIX, est un moyen d'implémenter une arborescence de répertoires (structure de répertoires), ou plus précisément, un moyen d'implémenter l'API de système de fichiers UNIX. Le système de fichiers racine est soutenu par une implémentation particulière, et chaque fois que vous entrez dans un répertoire de point de montage, vous entrez un sous-arbre qui est soutenu par quelque chose de différent.

L'interface est toujours la même, mais dans un cas, vous avez une partition de disque particulière à l'arrière, dans un autre cas, il y aura un programme qui n'écrira même jamais sur un périphérique de stockage. Le procsystème de fichiers sera soutenu par un logiciel qui expose les composants internes du noyau; an tmpfssera sauvegardé par un logiciel qui écrit sur la RAM, et d'autres systèmes de fichiers peuvent écrire sur le réseau ou ailleurs.

Au sens non UNIXy du terme, un système de fichiers est un moyen d'organiser le stockage des données. ext4, btrfs, fatEt ntfssont des systèmes de fichiers dans ce sens, mais aussi dans le sens, ils unixy mettre en œuvre l'API du système de fichiers. procne serait pas classé comme un système de fichiers dans ce paradigme, plus limité, car il n'organise pas le stockage de données.

TL; DR:

  • structure de répertoire / arborescence = frontal
  • système de fichiers = back-end

2

Bien que l'acceptation des répertoires ne soit pas ambiguë lorsque l'on parle de systèmes de fichiers, le système de fichiers peut signifier différentes choses selon ce dont vous parlez.

Dans vos exemples, tous les chemins répertoriés sont des répertoires, mais seuls certains d'entre eux sont également des points de montage de systèmes de fichiers.

Vous pouvez utiliser la dfcommande pour savoir sur quel système de fichiers se trouve un fichier ou un répertoire donné, et la mountcommande sur la plupart des implémentations Unix et Linux pour déterminer quels systèmes de fichiers sont présents sur votre machine, leur type et leurs points de montage. par exemple:

$ 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

La déclaration /binest qu'un système de fichiers est douteux, /binest presque toujours monté /.

$ 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

Commencez par corriger votre hypothèse concernant un système de fichiers et un répertoire. Un système de fichiers contient un ou plusieurs répertoires. En utilisant vos exemples, /proc, /et /binsont des répertoires. Ce ne sont pas des «systèmes de fichiers» en soi, mais ils peuvent être la racine de leurs systèmes de fichiers respectifs.

Si vous souhaitez identifier les répertoires qui sont également le point de montage (racine) de leur système de fichiers, vous pouvez utiliser quelque chose comme ceci:

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

Le système de fichiers est une méthodologie pour organiser et stocker logiquement de grandes quantités de données de sorte que le système est facile à gérer. un système de fichiers se compose de fichiers, de relations avec d'autres fichiers, ainsi que des attributs (type de fichier, nom de fichier, taille de fichier, propriétaire du fichier, horodatage du fichier) de chaque fichier.

Répertoires : par exemple, le système de fichiers Unix est essentiellement composé de fichiers et de répertoires. Les répertoires sont des fichiers spéciaux qui peuvent contenir d'autres fichiers. le répertoire le plus haut est /(barre oblique), les répertoires se trouvant directement sous les répertoires système. entrez la description de l'image ici

/ Racine du système de fichiers Linux

/bin Les fichiers exécutables binaires sont conservés ici

/boot Les fichiers liés au démarrage sont conservés ici

/dev Les fichiers de l'appareil sont conservés ici

/etc Les fichiers de configuration à l'échelle du système sont conservés ici

/home Emplacement des répertoires personnels des utilisateurs réguliers

/lib64 Les bibliothèques pour les exécutables binaires sont conservées ici

/mnt Point de montage temporaire pour DVD-Rom, lecteur flash USB.

/optLes programmes facultatifs sont installés ici comme les fichiers de programme dans les fenêtres

/proc Pseudo-système de fichiers du noyau

/root Répertoire personnel de superutilisateur root

/sbin Les fichiers exécutables binaires du système sont conservés ici

/tmp Les fichiers temporaires sont conservés ici

/usr Système de fichiers utilisateur

/var Les fichiers variables sont conservés ici

/srv est un dossier de service, contient des données spécifiques au site qui sont traitées par ce système.

src et pour plus

Les deux répertoires suivants sont des répertoires définis par l'utilisateur:

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

Ce diagramme est malheureusement obsolète. FHS 3.0 est sorti en juin 2015. Il convient également de noter que FHS s'applique uniquement aux distributions Linux.
fpmurphy

1

Si vous avez juste besoin d'une commande qui vous indique si path est un répertoire ou non, utilisez mountpoint (1) .

Pour moi ça imprime

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

La bonne chose est que l'état de sortie indique à nouveau la même chose afin que vous puissiez l'utiliser dans vos scripts comme ceci:

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.