Quais são as vantagens da estrutura do sistema de arquivos Unix?

9

Se eu instalar um aplicativo no Linux, por exemplo, Debian / Gnu Linux, os arquivos dos aplicativos serão copiados para vários diretórios diferentes no sistema de arquivos.

Alguns scripts entram em / usr / share .. / usr / local em outros arquivos em / var .. / log .. etc / e assim por diante.

Para mim, isso é o.k porque aprendi algo sobre o sistema de arquivos e a maioria dos diretórios está lá para armazenar arquivos para um propósito específico. Isso se encaixa muito bem na filosofia Unix "fazer uma coisa e fazê-lo bem"

Mas a minha pergunta é quais são as vantagens de tal estrutura de diretório? Ou é simplesmente a herança dos antigos dias unix. (por exemplo, em comparação com o uso de um windows, onde todos os arquivos para um aplicativo estão em uma "pasta" específica)

    
por Jan Koester 17.01.2013 / 20:13

4 respostas

9

O que me parece mais fácil de pensar é que arquivos semelhantes vivem na mesma árvore de diretórios. Os arquivos de configuração residem em /etc , arquivos de log e / ou arquivos de rastreamento em tempo de execução ao vivo em /var/log , executáveis em /usr/bin , informações em tempo de execução como arquivos PID em /var/run . Você quer saber o que está no arquivo de configuração NTP? Altere o diretório para /etc e do ls ntp* . Você quer que algum programa assista arquivos executáveis para que algum vírus tradicional do sistema de arquivos não os infecte? Tudo em /usr/bin e /usr/local/bin precisa ser assistido.

A segunda vantagem que posso pensar é que o estilo de organização Unix promove uma separação de dados e executável. Os executáveis estão em um diretório que está bem longe de onde os modelos vivem ( /usr/share , provavelmente) e bem longe de onde os dados residem. Essa separação pode ser uma razão pela qual o Unix / Linux / * BSD tem mais resistência a vírus do sistema de arquivos do que o Windows, ou o antigo Mac Pré-OSX tinha.

    
por 17.01.2013 / 20:26
8

Não importa qual organização seja escolhida, isso facilitará algumas coisas e algumas coisas serão mais difíceis.

Organizando arquivos por tipos, a maneira Unix (em bin , man , lib/python ,…) facilita o uso de arquivos. Se você deseja executar um comando, sabe onde encontrá-lo, não importa qual pacote o forneça. Se você quiser pesquisar por documentação, tudo estará em um só lugar. Se algum programa fornecer um módulo de realce de sintaxe do Vim, uma função de conclusão do zsh ou ligações do Python, o arquivo relevante estará em um local onde o vim / zsh / python poderá encontrá-lo.

O Unix também organiza arquivos por padrões de uso. Os arquivos de configuração entram em /etc , os arquivos que não são alterados na operação normal entram em /usr e os arquivos que mudam automaticamente vão em /var . Os dados do usuário vão para /home . Isso é muito útil para o gerenciamento de configuração (gerenciar o que está em /etc mais a lista de pacotes instalados). Também é útil definir estratégias de backup: o que está em /etc e /home é extremamente importante, enquanto o que está em /usr pode ser facilmente baixado novamente.

O principal custo da maneira Unix é que a instalação de um software é distribuída por vários diretórios. Entretanto, os modernos sistemas unix possuem gerenciadores de pacotes de qualquer maneira; gerenciar arquivos em muitos diretórios não é, de longe, a coisa mais complexa que eles fazem (rastrear dependências é muito útil e mais difícil).

Compare isso com o Windows. O Windows começou sem gerenciamento de pacotes e cada aplicativo criou seu próprio diretório em algum lugar. Todos os arquivos normalmente estariam dentro desse diretório: programas, dados estáticos, dados do usuário,… Exceto, às vezes, para bibliotecas, quais programas cairiam em um diretório comum do sistema, sem levar em conta conflitos (“inferno da DLL”). Com o tempo, o Windows tornou-se multiusuário, exigindo a separação de diretórios de usuários dos diretórios do sistema. O Windows também criou um local central para arquivos de configuração ( /etc do Unix) e alguns dados do sistema ( /var do Unix), o registro. Este é mais um artefato histórico em grande parte devido à falta de gerenciamento de pacotes e ao histórico inicial como um sistema de usuário único. A abordagem do Windows tem muitas limitações: não permite que os pacotes de software interajam facilmente. Por exemplo, a maioria dos softwares instalados não acaba no caminho de pesquisa de comandos padrão, portanto, ele interage mal com qualquer forma de script. Os instaladores geralmente fornecem um ícone de menu como um caso especial - colocado em um diretório de sistema separado (à la Unix!).

Uma limitação da abordagem Unix é que ela não permite facilmente a coexistência de múltiplas versões de um pacote, o que é especialmente problemático enquanto o pacote está sendo atualizado. Uma maneira de obter o melhor dos dois mundos seria descompactar cada pacote em seu próprio diretório (uma estrutura /opt ) e criar florestas de links simbólicos de diretórios de pacotes para uma estrutura /usr . É isso que um software como o stow faz.

Em resumo, a abordagem Unix facilita o uso de arquivos, o gerenciamento de arquivos e a permissão de interação entre pacotes; requer software de gerenciamento de pacotes, mas isso é desejável de qualquer maneira. A abordagem do Windows facilita o gerenciamento de pacotes manualmente, mas tem que se direcionar para o modelo Unix para obter funcionalidade útil.

    
por 10.06.2014 / 03:19
2

Não há realmente nenhuma vantagem nesse layout, além de ser fácil adivinhar onde os arquivos compartilhados e de configuração são para um aplicativo. O UNIX tem um longo legado desse tipo de layout, e quebrá-lo seria bem difícil. No entanto, algumas distribuições do UNIX alteraram seu modelo - elas fornecem apenas os locais antigos para fins de legado, e outros aplicativos são empacotados em seu próprio diretório / pacote pequeno. O Mac OS X é o exemplo mais proeminente disso, e há algumas distribuições Linux obscuras que fazem a mesma coisa (e o Android faz algo semelhante, só leva um pouco mais longe e instala e lança todos os aplicativos com seu próprio ID de usuário também ).

A principal coisa que uma convenção de sistema de arquivos fornece é exatamente isso - uma convenção, para que as pessoas saibam onde procurar por arquivos (seja manualmente ou em código). Não há uma razão técnica real para ser um caminho em detrimento de outro.

    
por 17.01.2013 / 22:20
2

Um benefício principal não mencionado acima e um dos motivos históricos para a estrutura é a separação física em vários volumes / discos disponíveis em diferentes estágios no processo de inicialização.

Outro benefício é que os vários diretórios podem ser montados em volumes / sistemas de arquivos que são otimizados para os dados do diretório. Por exemplo, tmpfs para /run ; e /sbin em mídia somente leitura / ROM.

Além disso, os volumes podem ser locais ou remotos, pessoais ou compartilhados.

Por fim, consulte Diretório de aplicativos para obter uma abordagem alternativa (mencionada por @fluffy) usada no UNIX (OS X .app ), Linux ( ROX Desktop ) e Windows ( PortableApps.com ).

    
por 12.10.2015 / 02:48