Quel est le but de / usr / libexec?

Les exécutables sont stockés dans /usr/libexec sur les systèmes de type Unix. La FHS dit (section 4.7. /usr/libexec : Binaries run by other programs (optional)" :

/usr/libexec inclut des binarys internes qui ne sont pas destinés à être exécutés directement par les users ou les scripts shell. Les applications peuvent utiliser un seul sous-directory sous /usr/libexec .

Sur Mac OS X, rootless-init un programme appelé par launchd immédiatement après le démarrage, est stocké dans /usr/libexec . Pourquoi serait-il stocké dans /usr/libexec quand il s'agit d'un exécutable autonome qui pourrait être stocké dans /usr/bin ou /usr/sbin ? init et les autres programmes qui ne sont pas directement appelés par les scripts shell sont également stockés dans des dossiers comme [/usr]/{bin,sbin} .

Je pense que c'est plus récent init – l'idée est, comme elle a dit, d'avoir des exécutables (donc ils ne devraient pas être dans /usr/lib ) que vous ne vous attendrez jamais à avoir dans $PATH n'importe qui.

OS X ne respecte pas la norme FHS. Il a sa propre hiérarchie de système de files (similaire à la hiérarchie du système de files FreeBSD). La page de man hier états-

libexec/ system daemons & system utilities (executed by other programs)

Il s'agit d'une question de soutenabilité – les fournisseurs de plates-forms ont appris par des années d'expérience que si vous mettez des binarys dans PATH par défaut, les gens en dépendront et dépendront des arguments et des options spécifiques qu'ils soutiennent.

Par contre, si quelque chose est placé dans /usr/libexec/ c'est une indication claire qu'il s'agit d'un détail d'implémentation interne, et l'appeler directement en tant qu'user final n'est pas officiellement pris en charge.

Vous pouvez quand même décider d'accéder directement à ces binarys, mais vous ne recevrez aucun soutien ou sympathie de la part du fournisseur de la plateforme si une future mise à jour casse les interfaces privées que vous utilisez.

libexec est destiné aux démons système et aux utilitaires système exécutés par d'autres programmes. C'est-à-dire que les files binarys mis dans ce directory namespaced sont destinés à la consommation d'autres programmes et ne sont pas destinés à être exécutés directement par les users.