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)
fonte
/bin
,/etc
, de/
.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/usr
e 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,/etc
mais a lista de pacotes instalados). Também é útil definir estratégias de backup: o que há/etc
e/home
é extremamente importante, enquanto o conteúdo/usr
pode 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
/opt
estrutura) e criar florestas de links simbólicos dos diretórios de pacotes para uma/usr
estrutura. É 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.
fonte
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,
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 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 ).fonte
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.
fonte