Si j'installe une application sous Linux, par exemple Debian / Gnu Linux, les fichiers des applications sont copiés dans de nombreux répertoires différents du système de fichiers.
Certains scripts vont dans / usr / share .. / usr / local d' autres fichiers dans / var .. / log .. etc / et ainsi de suite.
Pour moi, c'est ok car j'ai appris quelque chose sur le système de fichiers et la plupart des répertoires sont là pour contenir des fichiers dans un but précis. Cela correspond très bien à la philosophie Unix "faire une chose et bien le faire"
Mais ma question est quels sont les avantages d'une telle structure de répertoires? Ou est-ce simplement l'héritage des vieux jours unix. (par exemple, par rapport à l'utilisation de Windows, où tous les fichiers d'une application se trouvent dans un "dossier" spécifique)
la source
/bin
,/etc
, de/
.Quelle que soit l'organisation choisie, cela rendra certaines choses plus faciles et d'autres plus difficiles.
Organisation des fichiers par types, comme Unix (en
bin
,man
,lib/python
, ...), il est plus facile d'utiliser des fichiers. Si vous souhaitez exécuter une commande, vous savez où la trouver, quel que soit le package qui la fournit. Si vous souhaitez rechercher dans la documentation, tout est au même endroit. Si un programme fournit un module de mise en évidence de la syntaxe Vim, une fonction d'achèvement zsh ou des liaisons Python, le fichier correspondant sera à un endroit où vim / zsh / python pourra le trouver.Unix organise également les fichiers par modèles d'utilisation. Les fichiers de configuration entrent
/etc
, les fichiers qui ne changent pas en fonctionnement normal entrent/usr
et les fichiers qui changent entrent automatiquement/var
. Les données des utilisateurs tombent sous/home
. Ceci est très utile pour la gestion de la configuration (gérez le contenu/etc
et la liste des packages installés). Il est également utile de définir des stratégies de sauvegarde: ce qui est/etc
et/home
est d'une importance cruciale, tandis que ce qui est/usr
peut être facilement téléchargé à nouveau.Le principal coût de la méthode Unix est que l'installation d'un logiciel est répartie sur de nombreux répertoires. Cependant, les systèmes Unix modernes ont quand même des gestionnaires de paquets; la gestion des fichiers dans de nombreux répertoires n'est de loin pas la chose la plus complexe qu'ils font (le suivi des dépendances est très utile et plus difficile).
Comparez cela avec Windows. Windows a commencé sans gestion de package et chaque application a créé son propre répertoire quelque part. Tous les fichiers se trouveraient normalement dans ce répertoire: programmes, données statiques, données utilisateur,… Sauf parfois pour les bibliothèques dont les programmes tomberaient dans un répertoire système commun sans tenir compte des conflits («DLL hell»). Au fil du temps, Windows est devenu multi-utilisateur, nécessitant la séparation des répertoires utilisateur des répertoires système. Windows a également créé un emplacement central pour les fichiers de configuration (Unix
/etc
) et certaines données système (Unix/var
), le registre. Il s'agit davantage d'un artefact historique en grande partie dû au manque de gestion des packages et aux débuts de l'histoire en tant que système mono-utilisateur. L'approche Windows a de nombreuses limites: elle ne permet pas aux packages logiciels d'interagir facilement. Par exemple, la plupart des logiciels installés ne se retrouvent pas sur le chemin de recherche de commandes par défaut, ils interagissent donc mal avec toute forme de script. Les installateurs fournissent généralement une icône de menu dans un cas spécial - déposée dans un répertoire système distinct (à la Unix!).Une limitation de l'approche Unix est qu'elle ne permet pas facilement la coexistence de plusieurs versions d'un package, ce qui est particulièrement problématique lors de la mise à niveau du package. Un moyen de tirer le meilleur parti des deux mondes serait de décompresser chaque package dans son propre répertoire (une
/opt
structure) et de créer des forêts de liens symboliques des répertoires des packages vers une/usr
structure. C'est ce que fait un logiciel comme stow .En résumé, l'approche Unix facilite l'utilisation des fichiers, la gestion des fichiers et l'interaction des packages; il nécessite un logiciel de gestion de paquets, mais c'est quand même souhaitable. L'approche Windows facilite la gestion manuelle des packages, mais doit virer vers le modèle Unix pour obtenir des fonctionnalités utiles.
la source
Un avantage principal non mentionné ci-dessus, et l'une des raisons historiques de la structure, est la séparation physique sur plusieurs volumes / disques disponibles à différentes étapes du processus de démarrage.
Un autre avantage est que les différents répertoires peuvent être montés sur des volumes / systèmes de fichiers optimisés pour les données du répertoire. Par exemple,
tmpfs
pour/run
; et/sbin
sur des supports / ROM en lecture seule.De plus, les volumes peuvent être locaux ou distants, personnels ou partagés.
Enfin, voir Répertoire d'applications pour une approche alternative (mentionnée par @fluffy) utilisée sous UNIX (OS X
.app
), Linux ( ROX Desktop ) et Windows ( PortableApps.com ).la source
Il n'y a pas vraiment d'avantages à cette disposition, à part qu'il est facile de deviner où se trouvent les fichiers partagés et de configuration pour une application. UNIX a un long héritage de ce type de disposition, et il serait assez difficile de le casser. Cependant, certaines distributions UNIX ont changé de modèle - elles ne fournissent les anciens emplacements qu'à des fins héritées, et d'autres applications sont regroupées dans son propre petit répertoire / package. Mac OS X en est l'exemple le plus frappant, et il existe quelques distributions Linux obscures qui font la même chose (et Android fait quelque chose de similaire, va un peu plus loin et installe et lance également chaque application sous son propre ID utilisateur). ).
La principale chose qu'une convention de système de fichiers fournit est juste cela - une convention, afin que les gens sachent où chercher les fichiers (que ce soit manuellement ou dans le code). Il n'y a aucune vraie raison technique pour que ce soit un moyen plutôt qu'un autre.
la source