estrutura de diretórios vs sistema de arquivos

9

Qual é a diferença entre estrutura de diretórios e sistema de arquivos ?
Os diretórios do Unix / Linux e o sistema de arquivos são exibidos da seguinte forma:

Os seguintes dois diretórios, obviamente, sabemos diretórios.

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

as três amostras a seguir estão dizendo o sistema de arquivos.

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

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

    
por Premraj 18.05.2015 / 14:18

7 respostas

8

As pessoas não usam o sistema de arquivos com muito cuidado. Nos seus exemplos, eu diria que / , /bin e /proc são sistemas de arquivos porque uma partição inteira (como /dev/sdb1 ) é montada nesses diretórios. Meu sistema Linux não possui /bin como sistema de arquivos, então 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 número de nó 2 é tradicionalmente o inode "raiz" de todo um sistema de arquivos em disco (que é o outro uso da frase). / , /boot e /home todos têm inode número 2, enquanto /proc , que é apresentado inteiramente pelo kernel e não tem uma presença no disco, tem inode 1. Esses números de inode indicam que um inteiro , sistema de arquivos em disco ou um sistema de arquivos virtual é montado usando esse nome.

A sentença ' /home/abc/xyzdir1 é um diretório' basicamente significa que nenhum sistema de arquivos em disco é montado usando esse nome. Se você fizer o mesmo comando ls -lid em um diretório, terá algo parecido com 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 é o que quer que o inode tenha sido alocado no sistema de arquivos em disco montado (na minha máquina) em /home .

Você também pode encontrar sistemas de arquivos invocando o comando mount . Ele lista todos os sistemas de arquivos montados e onde eles são montados.

    
por 18.05.2015 / 14:45
4

Correndo o risco de simplificar excessivamente,

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

Desde que me pediram um encore,

  • Sistemas de arquivos são como a mecânica (detalhes de implementação) de distribuição / propagação de sinais de áudio / vídeo: transmissão analógica RF, transmissão de RF digital, cabo, Internet, fita de vídeo, disco de vídeo, etc.
  • A estrutura de diretórios é como o 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ê quiser código, veja a primeira metade desta resposta para Como determinar se um sistema de arquivos do Linux pertence a um sistema em execução - a parte que faz a validação verifica root_dir . Está apenas fazendo o que Bruce disse; verificando se é um diretório e verificar se o seu número de inode é 1 ou 2.

    
por 18.05.2015 / 15:01
4

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

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

No sentido não-UNIXy da palavra, um sistema de arquivos é uma maneira de organizar o armazenamento de dados. ext4 , btrfs , fat e ntfs são sistemas de arquivos nesse sentido, mas também no sentido UNIXy - eles implementam a API do sistema de arquivos. proc não classificaria como um sistema de arquivos dentro deste paradigma, mais limitado, já que ele não organiza o armazenamento de dados.

TL; DR:

  • estrutura de diretórios / árvore = front end
  • sistema de arquivos = back end
por 18.05.2015 / 20:56
2

Enquanto a aceitação do diretório não é ambígua quando se fala de sistemas de arquivos, o sistema de arquivos pode significar coisas diferentes dependendo do que você está falando.

Em 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 comando df para saber qual sistema de arquivos é um determinado arquivo ou diretório e o comando mount na maioria das implementações Unix e Linux para descobrir quais sistemas de arquivos estão presentes em sua máquina, seu tipo e seus 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 declaração /bin é um sistema de arquivos duvidoso, /bin é quase sempre montado em / .

$ 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)
    
por 18.05.2015 / 21:32
1

Primeiro, uma correção para 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 /bin são diretórios. Eles não são "sistemas de arquivos" por si mesmos, mas podem ser a raiz de seus respectivos sistemas de arquivos.

Se você quiser identificar quais diretórios são também o ponto de montagem (root) de seu sistema de arquivos, você pode usar algo assim:

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
    
por 18.05.2015 / 20:09
1

Se você precisar apenas de um comando que diga se o caminho é um diretório ou não use ponto de montagem ( 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, então você pode usá-lo em seus scripts assim:

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
    
por 22.07.2018 / 17:59
0

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, bem como 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 de 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.

/raizdosistemadearquivosLinux

/binArquivosexecutáveisbináriossãomantidosaqui

/bootOsarquivosrelacionadosainicializaçãosãomantidosaqui

/devOsarquivosdodispositivosãomantidosaqui

/etcOsarquivosdeconfiguraçãodetodoosistemasãomantidosaqui

/homeLocalizaçãodosdiretóriospessoaisdosusuáriosregulares

/lib64Bibliotecasparaexecutáveisbináriossãomantidasaqui

/mntPontodemontagemtemporárioparaDVD-Rom,unidadeflashUSB.

/optOsprogramasopcionaissãoinstaladosaquicomoArquivosdeProgramasnoWindows

/procpseudosistemadearquivosdokernel

/rootDiretórioinicialdaraizdesuperusuário

/sbinArquivosExecutáveisdoSistemaBináriosãomantidosaqui

/tmpOsarquivostemporáriossãomantidosaqui

/usrSistemadearquivosdousuário

/varArquivosvariáveissãomantidosaqui

/srvéumapastadesaque,contémdadosespecíficosdositequesãoservidosporestesistema.

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
    
por 22.02.2017 / 03:23