J'essaie de comprendre la norme de hiérarchie du système de fichiers. J'ai levé les deux binaires et les bibliothèques, et comme je le comprends actuellement:
binaires sont des fichiers de code lisible par ordinateur en format binaire, qui contrôlent la CPU et le processeur directement avec des bits.
Bibliothèques sont des fonctions utilisables par divers programmes, pour des raisons de commodité - comme lorsque vous avez besoin d'un module en JavaScript de PHP.
Cette compréhension est-elle correcte? Si c'est le cas, pourquoi séparons-nous encore des bibliothèques et des binaires? Certaines bibliothèques sont binaires, non? Et certains binaires (chat, moins, date, rm, cp, etc.) sont utilisés et réutilisés comme s'il s'agissait de bibliothèques ... une personne peut-elle aider à expliquer la différence et aidez-moi à trouver de meilleures définitions pour ces deux mots? Merci.
Votre compréhension est principalement correcte, mais il y a deux choses supplémentaires à considérer:
/lib
vont être des bibliothèques compilées au code de la machine.cat
sont utilisées dans Shell Script comme des appels vers le code dans les bibliothèques, ce ne sont pas des bibliothèques au sens de la FHS car elles peuvent être exécutées seules.À la suite de ces points, la terminologie la plus courante chez les personnes qui n'écrivent pas les documents de normalisation est la suivante:
Fichiers d'objet: Ceux-ci sont compilés de manière native Code de la machine, mais peuvent même pas courir ou être appelable. Ils ont généralement une extension .o
à moins de tomber dans l'une des autres catégories et ne sont presque jamais vues sur la plupart des systèmes, sauf lors de la construction de logiciels. Je les ai énumérées ici car ils sont importants pour comprendre quelques choses ci-dessous.
Fichiers exécutables: Ce sont des fichiers constitués de code principalement autonome pouvant être exécuté directement. Ils peuvent être soit des fichiers d'objet spécialement formatés qui peuvent être chargés directement par le noyau (des choses comme cat
, bash
, et python
sont tous ce type d'exécutable) ou sont tous ce type d'exécutable) ou interprété par un programme intermédiaire qui est lui-même exécutable (Minecraft, pydoc
, et cowsay
sont tous des exemples de ce type d'exécutable). Les exécutables du premier type n'ont presque jamais d'extension de fichier sur les systèmes UNIX, tandis que les exécutables du deuxième type peuvent ou non. C'est ce que la FHS se réfère à des "binaires". Ils peuvent être exécutés à partir d'autres exécutables, mais nécessitent des fonctions spéciales d'appeler pour les appeler (fork()
et exec()
en C et C++, les choses hors du module subprocess
en python , etc.) et exécuter comme un processus séparé.
Bibliothèques: Ce sont des fichiers contenant du code réutilisable pouvant être invoqué par une autre bibliothèque ou un exécutable. Le code dans les bibliothèques est invoqué (principalement) directement par autre code une fois la bibliothèque chargée (appelée "liaison" lorsque vous parlez du code compilé) et s'exécute dans le même processus que le code l'appelant. Il existe trois types de bibliothèques génériques:
.a
. Le concept de bibliothèques statiques n'existe pas vraiment en dehors des langages de programmation compilés..so
sur UNIX (.dll
est la norme sous Windows), qui est chargée au moment de l'exécution par exécutables qui l'utilisent. La plupart de ce que vous trouverez dans /lib
sur les systèmes de production est des bibliothèques dynamiques.http.server
dans la bibliothèque standard Python pour un exemple).