estructura de directorios vs sistema de archivos

10

¿Cuál es la diferencia entre la estructura de directorios y el sistema de archivos ?
Los directorios y el sistema de archivos de Unix / Linux tienen el siguiente aspecto:

Los siguientes dos directorios obviamente los conocemos.

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

Los siguientes tres ejemplos dicen sistema de archivos.

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

¿Cómo puedo identificar cuál es un sistema de archivos y un directorio de los fragmentos de código anteriores?

Premraj
fuente
Un sistema de archivos contiene uno o más directorios. Cada directorio es parte de un sistema de archivos (incluidos /proc, /y /binde sus ejemplos), por lo que no tengo claro cómo quiere identificar la "diferencia".
roaima
@roaima, busque el fragmento de código para la muestra
Premraj,
Tu pregunta sigue siendo ambigua. /proc, /y /binson directorios. No son "sistemas de archivos". ¿Quizás quiere decir que desea identificar qué directorios son también el punto de montaje (raíz) de su sistema de archivos?
roaima

Respuestas:

8

La gente no usa el sistema de archivos con mucho cuidado. En sus ejemplos, diría eso /, /biny /procson sistemas de archivos porque una partición completa (como /dev/sdb1) está montada en esos directorios. Mi sistema Arch Linux no tiene /binun sistema de archivos, por lo que este ejemplo no es perfecto, pero ...

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

El inodo número 2 es tradicionalmente el inodo "raíz" de todo un sistema de archivos en disco (que es el otro uso de la frase). /, /booty /hometodos tienen el inodo número 2, mientras /procque, que se presenta completamente por el núcleo y no tiene presencia en el disco, tiene el inodo 1. Esos números de inodo indican que un sistema de archivos completo en el disco o un sistema de archivos virtual se monta con ese nombre.

La oración ' /home/abc/xyzdir1es un directorio "básicamente significa que no se monta ningún sistema de archivos en el disco con ese nombre. Si haces el mismo ls -lidcomando en un directorio, obtienes algo como esto:

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

El número de código 3670039 es el inodo asignado en el sistema de archivos en disco montado (en mi máquina) en /home.

También puede encontrar sistemas de archivos invocando el mountcomando. Enumera todos los sistemas de archivos montados y dónde están montados.

Bruce Ediger
fuente
El número de "inodo mágico" es específico de la serie ext2 de sistemas de archivos. No se aplica a la mayoría (¿todos?) Otros, como xfs o btrfs.
psusi
Yo diría eso /, /biny /procson sistemas de archivos porque una partición completa ... está montada en esos directorios. Esto no es cierto para /proc, como la respuesta más tarde implica.
Max Nanasy
1
@MaxNanasy: dado que dos significados de "sistema de archivos" son de uso común (1. Los nombres y la disposición de los directorios en una estructura de árbol, y 2. El formato en el disco y el diseño de los datos estructurados de archivos y directorios, junto con el código para mantenerlo y usarlo), es bastante difícil encontrar un término que sea comprensible, no definido de forma circular y técnicamente correcto. Elegí ir con "partición" comprensible y usado en lugar de otros términos. Los invito a sugerir términos que sean más correctos, estoy perdido.
Bruce Ediger
4

A riesgo de simplificar demasiado,

  • Un sistema de archivos es como el motor de su automóvil y otros sistemas internos,
  • Una estructura de directorio es como un mapa de los lugares donde conduce.

Desde que me pidieron un bis,

  • Los sistemas de archivos son como la mecánica (detalles de implementación) de la distribución / propagación de señales de audio / video: transmisión de RF analógica, transmisión de RF digital, cable, Internet, cinta de video, disco de video, etc.
  • La estructura del directorio es como el contenido de la programación de televisión y su clasificación, por ejemplo, en comedia, drama, noticias, documentales, juegos, deportes, etc.

Si desea código, consulte la primera mitad de esta respuesta a Cómo determinar si un sistema de archivos Linux pertenece a un sistema en ejecución , la parte que verifica la validación root_dir. Simplemente está haciendo lo que dijo Bruce; verificar que es un directorio y verificar si su número de inodo es 1 o 2.

G-Man dice 'restablecer a Mónica'
fuente
1
Buen ELI5, pero ¿podría agregar un fragmento de código respondiendo? ¿Cómo puedo identificar cuál es un sistema de archivos y un directorio?
user1717828
4

A mi modo de ver, un sistema de archivos, en el sentido de UNIX, es una forma de implementar un árbol de directorios (estructura de directorios), o más precisamente, una forma de implementar la API del sistema de archivos UNIX. El sistema de archivos raíz está respaldado por una implementación particular, y cada vez que ingresa un directorio de punto de montaje, ingresa un subárbol respaldado por algo diferente.

La interfaz es siempre la misma, pero en un caso, tiene una partición de disco en particular en la parte posterior, en otro caso, habrá un programa que ni siquiera escribe en un dispositivo de almacenamiento. El procsistema de archivos estará respaldado por un software que expone los elementos internos del núcleo; Una tmpfscopia de seguridad estará respaldada por un software que escribe en la RAM y otros sistemas de archivos pueden escribir en la red o en otro lugar.

En el sentido de la palabra que no es UNIXy, un sistema de archivos es una forma de organizar el almacenamiento de datos. ext4, btrfs, fat, Y ntfsson los sistemas de archivos en este sentido, sino también en el sentido UNIXy-que implementan la API del sistema de archivos. procno se clasificaría como un sistema de archivos dentro de este paradigma, más limitado, ya que no organiza el almacenamiento de datos.

TL; DR:

  • estructura de directorio / árbol = front end
  • sistema de archivos = back end
PSkocik
fuente
2

Si bien la aceptación del directorio no es ambigua cuando se habla de sistemas de archivos, el sistema de archivos puede significar cosas diferentes dependiendo de lo que esté hablando.

En sus ejemplos, todas las rutas enumeradas son directorios, pero solo algunos de ellos también son puntos de montaje de los sistemas de archivos.

Puede usar el dfcomando para saber en qué sistema de archivos se encuentra un determinado archivo o directorio, y el mountcomando en la mayoría de las implementaciones de Unix y Linux para averiguar qué sistemas de archivos están presentes en su máquina, su tipo y sus puntos de montaje. p.ej:

$ 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 afirmación /bines que un sistema de archivos es dudoso, /bincasi siempre está montado /.

$ 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
fuente
1

Primero, una corrección a su suposición sobre un sistema de archivos y un directorio. Un sistema de archivos contiene uno o más directorios. Usando sus ejemplos /proc, /y /binson directorios. No son "sistemas de archivos" en sí mismos, pero podrían ser la raíz de sus respectivos sistemas de archivos.

Si desea identificar qué directorios son también el punto de montaje (raíz) de su sistema de archivos, puede usar algo como esto:

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
fuente
1

File System es una metodología para organizar y almacenar lógicamente grandes cantidades de datos de manera que el sistema sea fácil de administrar. un sistema de archivos consta de archivos, relaciones con otros archivos, así como los atributos (tipo de archivo, nombre de archivo, tamaño de archivo, propietario del archivo, marca de tiempo del archivo) de cada archivo.

Directorios : por ejemplo, el sistema de archivos Unix se compone esencialmente de archivos y directorios. Los directorios son archivos especiales que pueden contener otros archivos. el directorio superior es /(barra oblicua), con los directorios directamente debajo de los directorios del sistema. ingrese la descripción de la imagen aquí

/ Raíz del sistema de archivos Linux

/bin Los archivos ejecutables binarios se guardan aquí

/boot Los archivos relacionados con el arranque se guardan aquí

/dev Los archivos del dispositivo se guardan aquí

/etc Los archivos de configuración de todo el sistema se guardan aquí

/home Ubicación de los directorios principales de usuarios habituales.

/lib64 Las bibliotecas para ejecutables binarios se mantienen aquí.

/mnt Punto de montaje temporal para DVD-Rom, unidad flash USB.

/optLos programas opcionales se instalan aquí como archivos de programa en Windows

/proc Kernel pseudo sistema de archivos

/root Directorio de inicio de superusuario root

/sbin Los archivos ejecutables binarios del sistema se guardan aquí

/tmp Los archivos temporales se guardan aquí.

/usr Sistema de archivos de usuario

/var Los archivos variables se guardan aquí

/srv es una carpeta de servicio, contiene datos específicos del sitio que sirve este sistema.

src y para más

Los siguientes dos directorios son directorios definidos por el usuario:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
fuente
Ese diagrama está lamentablemente desactualizado. FHS 3.0 se lanzó en junio de 2015. También se debe tener en cuenta que FHS se aplica solo a las distribuciones de Linux.
fpmurphy
1

Si solo necesita un comando que le indique si la ruta es un directorio o no, use mountpoint (1) .

Para mí imprime

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

Lo bueno es que el estado de salida indica lo mismo nuevamente para que pueda usarlo en sus scripts de esta manera:

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
fuente