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 e outros arquivos em / var .. / log .. etc / e assim por diante.

Para mim, tudo bem, porque aprendi algo sobre o sistema de arquivos e a maioria dos diretórios existe para armazenar arquivos para uma finalidade específica. Isso se encaixa muito bem na filosofia do Unix "faça uma coisa e faça bem"

Mas minha pergunta é quais são as vantagens de uma estrutura de diretórios desse tipo? Ou é simplesmente a herança dos velhos tempos do unix. (por exemplo, em comparação com o que o Windows usa, onde todos os arquivos de um aplicativo estão em uma "pasta" específica)

Jan Koester
fonte

Respostas:

9

O que me parece a vantagem mais fácil de se pensar é que arquivos semelhantes vivem na mesma árvore de diretórios. Os arquivos de configuração residem /etc, os arquivos de log e / ou os arquivos de rastreamento em tempo de execução /var/log, os executáveis /usr/binpermanecem, as informações em tempo de execução, como os arquivos PID /var/run. Você quer saber o que há no arquivo de configuração NTP? Mude o diretório para /etce faça ls ntp*. Você deseja que algum programa assista a arquivos executáveis ​​para que algum vírus tradicional do sistema de arquivos não os infectem? Tudo /usr/bine /usr/local/binprecisa assistir.

A segunda vantagem em que consigo pensar é que o estilo de organização Unix promove uma separação de dados e executável. Os executáveis ​​vivem em um diretório que fica bem longe de onde os modelos moram ( /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 Pre-OSX anterior.

Bruce Ediger
fonte
Esses são bons pontos. Por que a separação de arquivos executáveis ​​e de dados, modelo, configuração é um motivo para mais proteção contra vírus?
Jan Koester
3
Muitos dos vírus e worms do mundo se propagam devido à capacidade de alterar dados para executáveis: estouros de pilha e injeção de SQL e injeção de código funcionam dessa maneira. Os vírus de macro "Word" propagaram-se pelo menos em parte porque as macros "Word" estão incluídas nos arquivos .doc. A separação de dados de executável por arquivo é um nível de proteção, colocando dados em um diretório, executável em um segundo, modelos em um terceiro, a configuração em um quarto, coloca ainda mais barreiras para confundir dados e executáveis.
Bruce Ediger
2
O argumento de separação de dados e executáveis ​​é um absurdo completo. A organização do sistema de arquivos é para um benefício humano; não é que exista alguma separação física entre os bits que os impeça de dar cooties um ao outro ou algo assim. A segurança do UNIX é historicamente melhor devido a um modelo de permissões mais forte e mais rigoroso em geral.
fofo
sistemas de arquivos separados @fluffy oferecer separação ligeiramente mais forte, mas esse ponto é parcialmente discutível, pois não é possível separar /bin, /etc, de /.
Jw013
@ fofo - concordou, nenhuma separação "física" existe ou é possível. Mas é uma separação por nome. O malware precisa procurar em outro diretório (em vez de "." Ou dirname $ 0 ou algo assim) para encontrar modelos ou outros dados. Não é segurança absoluta, assim como fechar uma janela de vidro é segurança absoluta. A segurança é um bem econômico, com valor marginal para cada unidade adicional de trabalho. Cada pedacinho ajuda.
Bruce Ediger
11

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

Organização de arquivos por tipos, o caminho Unix (Into bin, man, lib/python, ...), torna mais fácil de usar arquivos. Se você deseja executar um comando, sabe onde encontrá-lo, não importa qual pacote o forneça. Se você deseja pesquisar na documentação, está tudo em um só lugar. Se algum programa fornecer um módulo de destaque 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 possa encontrá-lo.

O Unix também organiza arquivos por padrões de uso. Os arquivos de configuração entram /etc, os arquivos que não mudam na operação normal entram /usre os arquivos que mudam automaticamente entram /var. Os dados do usuário ficam abaixo /home. Isso é muito útil para o gerenciamento de configurações (gerencie o conteúdo, /etcmais a lista de pacotes instalados). Também é útil definir estratégias de backup: o que há /etce /homeé extremamente importante, enquanto o conteúdo /usrpode ser facilmente baixado novamente.

O principal custo da maneira Unix é que a instalação de um software está espalhada por vários diretórios. No entanto, sistemas unix modernos têm 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 algumas vezes nas bibliotecas, quais programas cairiam em um diretório comum do sistema sem considerar conflitos ("DLL hell"). Com o tempo, o Windows tornou-se multiusuário, exigindo a separação dos diretórios do usuário dos diretórios do sistema. O Windows também criou um local central para arquivos de configuração (Unix /etc) e alguns dados do sistema (Unix's)./var), o registro. Esse é 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 termina no caminho de pesquisa de comando padrão, portanto, interage mal com qualquer forma de script. Os instaladores normalmente fornecem um ícone de menu como um caso especial - soltos em um diretório de sistema separado (à la Unix!).

Uma limitação da abordagem do Unix é que ela não permite facilmente a coexistência de várias 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 /optestrutura) e criar florestas de links simbólicos dos diretórios de pacotes para uma /usrestrutura. É isso que software como o stow faz.

Em resumo, a abordagem Unix facilita o uso de arquivos, o gerenciamento de arquivos e a permissão de pacotes para interagir; requer software de gerenciamento de pacotes, mas é desejável de qualquer maneira. A abordagem do Windows facilita o gerenciamento de pacotes manualmente, mas precisa se voltar para o modelo Unix para obter funcionalidades úteis.

Gilles 'SO- parar de ser mau'
fonte
1
Impressionante. Na minha opinião, porém, costumava ser mais fácil gerenciar pacotes individualmente. O advento do registro do Windows mudou tudo isso e mais alguns. Não é apenas gigantesco e labiríntico - também é intencionalmente - com alguns valores no código de bytes, enquanto outros não são e nenhuma rima ou razão verdadeira para a estrutura. Acho que é assim que as coisas devem ser se você deseja desenvolver um sistema operacional gerenciado e proteger segredos comerciais e métodos proprietários: confuso.
mikeserv
3

Um benefício primário não mencionado acima, e um dos motivos históricos da 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 otimizados para os dados do diretório. Por exemplo, tmpfspara /run; e /sbinem mídia somente leitura / ROM.

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

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

go2null
fonte
1

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

A principal coisa que uma convenção de sistema de arquivos fornece é exatamente isso - uma convenção, para que as pessoas saibam onde procurar arquivos (seja manualmente ou em código). Não existe uma verdadeira razão técnica para que isso ocorra de uma maneira ou de outra.

fofo
fonte