estrutura de diretórios vs sistema de arquivos

10

Qual é a diferença entre a estrutura de diretórios e o sistema de arquivos ? Diretórios
Unix / Linux e sistema de arquivos têm a seguinte aparência:

Os seguintes dois diretórios obviamente conhecemos diretórios.

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

os três exemplos a seguir estão dizendo sistema de arquivos.

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

Como posso identificar qual é um sistema de arquivos e um diretório dos trechos de código acima?

Premraj
fonte
Um sistema de arquivos contém um ou mais diretórios. Todo diretório faz parte de um sistema de arquivos (incluindo /proc, /e /binde seus exemplos), então não estou claro como você deseja identificar a "diferença".
Roaima 18/05
@roaima por favor, encontrar trecho de código para a amostra
Premraj
Sua pergunta ainda é ambígua. /proc, /E /binsão diretórios. Eles não são "sistemas de arquivos". Você talvez queira dizer que deseja identificar quais diretórios também são o ponto de montagem (raiz) do sistema de arquivos?
roaima

Respostas:

8

As pessoas não usam o sistema de arquivos com muito cuidado. Em seus exemplos, eu diria que /, /bine /procsão sistemas de arquivos, porque uma partição inteira (como /dev/sdb1) é montado sobre os diretórios. Meu sistema Arch linux não tem /bincomo sistema de arquivos, portanto, este exemplo não é perfeito, mas ...

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

O inode número 2 é tradicionalmente o inode "raiz" de um sistema de arquivos inteiro em disco (que é o outro uso da frase). /, /boote /hometodos têm o número de inode 2, enquanto /procque, que é apresentado inteiramente pelo kernel e não possui presença em disco, possui o inode 1. Esses números de inode indicam que todo um sistema de arquivos em disco ou um sistema de arquivos virtual é montado usando esse nome.

A frase ' /home/abc/xyzdir1é um diretório "significa basicamente que nenhum sistema de arquivos em disco é montado usando esse nome. Se ls -lidvocê executar o mesmo comando em um diretório, obterá algo como isto:

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

O número do inode 3670039 é exatamente o que o inode foi alocado no sistema de arquivos em disco montado (na minha máquina) em /home.

Você também pode encontrar sistemas de arquivos chamando o mountcomando Ele lista todos os sistemas de arquivos montados e onde eles estão montados.

Bruce Ediger
fonte
O número "Magic Inode" é específico para a série ext2 de sistemas de arquivos. Não se aplica à maioria (todos?) Dos outros, como xfs ou btrfs.
Psusi 18/05/2015
Eu diria que /, /bine /procsão sistemas de arquivos, porque uma partição inteira ... é montado sobre os diretórios. Isso não é verdade /proc, como a resposta mais tarde implica.
Max Nanasy
1
@MaxNanasy - considerando que dois significados de "sistema de arquivos" são de uso comum (1. Os nomes e a organização dos diretórios em uma estrutura em árvore e 2. O formato e o layout em disco dos arquivos estruturados em arquivos e diretórios, juntamente com o código para mantê-lo e usá-lo), é muito difícil criar um termo que seja compreensível, não definido de maneira circular e tecnicamente correto. Eu escolhi usar a "partição" compreensível e usada em vez de outros termos. Convido você a sugerir termos mais corretos, estou perdido.
Bruce Ediger
4

Correndo o risco de simplificar muito,

  • Um sistema de arquivos é como o motor do seu carro e outros sistemas internos,
  • Uma estrutura de diretórios é como um mapa dos lugares onde você dirige.

Desde que me pediram um bis,

  • Os sistemas de arquivos são como a mecânica (detalhes da implementação) da distribuição / propagação do sinal de áudio / vídeo: transmissão RF analógica, transmissão digital RF, cabo, Internet, fita de vídeo, disco de vídeo, etc.
  • A estrutura de diretórios é semelhante ao conteúdo da programação de televisão e sua categorização, por exemplo, em comédia, drama, notícias, documentários, programas de jogos, esportes, etc.

Se você deseja código, consulte a primeira metade desta resposta em Como determinar se um sistema de arquivos Linux pertence a um sistema em execução - a parte que faz a validação root_dir. É apenas fazer o que Bruce disse; verificando se é um diretório e verificando se seu número de inode é 1 ou 2.

G-Man diz que 'restabelece Monica'
fonte
1
Bom ELI5, mas você poderia adicionar um trecho de código respondendo Como identificar qual é um sistema de arquivos e um diretório?
User1717828
4

A meu ver, um sistema de arquivos, no sentido UNIX, é uma maneira de implementar uma árvore de diretórios (estrutura de diretórios), ou mais precisamente, uma maneira de implementar a API do sistema de arquivos UNIX. O sistema de arquivos raiz é apoiado por uma implementação específica e, sempre que você insere um diretório de ponto de montagem, insere uma subárvore apoiada por algo diferente.

A interface é sempre a mesma, mas em um caso, você tem uma partição de disco específica no back-end; em outro caso, haverá um programa que nunca grava em um dispositivo de armazenamento. O procsistema de arquivos será apoiado por software que expõe os componentes internos do kernel; O tmpfsbackup será feito por um software que grava na RAM e outros sistemas de arquivos podem gravar na rede ou em outro local.

No sentido não UNIXy da palavra, um sistema de arquivos é uma maneira de organizar o armazenamento de dados. ext4, btrfs, fat, E ntfssão sistemas de arquivos neste sentido, mas também no sentido UNIXy-se implementar a API do sistema de arquivos. procnão seria classificado como um sistema de arquivos nesse paradigma mais limitado, pois não organiza o armazenamento de dados.

TL; DR:

  • estrutura de diretórios / tree = front end
  • sistema de arquivos = back-end
PSkocik
fonte
2

Embora a aceitação do diretório seja inequívoca ao falar sobre sistemas de arquivos, o sistema de arquivos pode significar coisas diferentes, dependendo do que você está falando.

Nos seus exemplos, todos os caminhos listados são diretórios, mas apenas alguns deles também são pontos de montagem de sistemas de arquivos.

Você pode usar o dfcomando para saber em qual sistema de arquivos um determinado arquivo ou diretório é, e o mountcomando na maioria das implementações de Unix e Linux para descobrir quais sistemas de arquivos estão presentes em sua máquina, seu tipo e pontos de montagem. por exemplo:

$ 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

A afirmação de que /binum sistema de arquivos é dúbio, /binquase sempre é 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
fonte
1

Primeiro, corrija sua suposição sobre um sistema de arquivos e um diretório. Um sistema de arquivos contém um ou mais diretórios. Usando seus exemplos, /proc, /e /binsão diretórios. Eles não são "sistemas de arquivos" por si só, mas podem ser a raiz de seus respectivos sistemas de arquivos.

Se você deseja identificar quais diretórios também são o ponto de montagem (raiz) do sistema de arquivos, use algo como isto:

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

O File System é uma metodologia para organizar e armazenar logicamente grandes quantidades de dados, de modo que o sistema seja fácil de gerenciar. um sistema de arquivos consiste em arquivos, relacionamentos com outros arquivos e os atributos (tipo de arquivo, nome do arquivo, tamanho do arquivo, proprietário do arquivo, registro de data e hora do arquivo) de cada arquivo.

Diretórios : por exemplo, o sistema de arquivos Unix é essencialmente composto por arquivos e diretórios. Diretórios são arquivos especiais que podem conter outros arquivos. o diretório mais alto é /(barra), com os diretórios diretamente abaixo dos diretórios do sistema. insira a descrição da imagem aqui

/ Raiz do sistema de arquivos Linux

/bin Arquivos executáveis ​​binários são mantidos aqui

/boot Os arquivos relacionados à inicialização são mantidos aqui

/dev Os arquivos do dispositivo são mantidos aqui

/etc Os arquivos de configuração em todo o sistema são mantidos aqui

/home Local para os diretórios pessoais de usuários regulares

/lib64 Bibliotecas para executáveis ​​binários são mantidas aqui

/mnt Ponto de montagem temporário para DVD-Rom, unidade flash USB.

/optProgramas opcionais são instalados aqui, como Arquivos de Programas no Windows

/proc Pseudo sistema de arquivos do kernel

/root Diretório inicial da raiz do superusuário

/sbin Os arquivos executáveis ​​binários do sistema são mantidos aqui

/tmp Os arquivos temporários são mantidos aqui

/usr Sistema de Arquivos do Usuário

/var Arquivos variáveis ​​são mantidos aqui

/srv é uma pasta de veiculação, contém dados específicos do site que são veiculados por este sistema.

src e para mais

Os dois diretórios a seguir são diretórios definidos pelo usuário:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
fonte
Esse diagrama está desatualizado. O FHS 3.0 foi lançado em junho de 2015. Deve-se observar também que o FHS se aplica apenas às distribuições Linux.
fpmurphy
1

Se você precisar apenas de um comando que informe se path é um diretório ou não use mountpoint (1) .

Para mim, imprime

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

O bom é que o status de saída indica o mesmo novamente para que você possa usá-lo em seus scripts como este:

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
fonte