Mac OS X: endroits classiques où les fichiers binaires doivent vivre

61

J'ai téléchargé une application qui est une application de ligne de commande et je souhaite la placer à un emplacement où je peux l'exécuter à partir de la ligne de commande sans avoir à taper explicitement le chemin.

  1. Quels sont les chemins conventionnels utilisés pour quelque chose comme ça? /usr/bin? Existe-t-il différentes options, une si je le souhaite pour tous les utilisateurs et une autre si je le souhaite uniquement pour un utilisateur en particulier, tel que mon compte d'administrateur?

  2. Ou devrais-je le placer dans son propre répertoire, sous le répertoire Applications, et l'ajouter au chemin? Si tel est le cas, quel fichier contrôle où le chemin est défini?

Jason S
la source

Réponses:

53

Réponse centrale: vous voulez probablement /usr/local/bin. En fonction de la date récente de votre macOS, vous devrez peut-être mettre à jour vos paramètres par défaut $PATH. Voir ci-dessous pour plus de détails.

MISE À JOUR 12-01-2018 À un moment donné, depuis que j'ai écrit ma réponse originale, Apple a changé sa valeur par défaut $PATH. Par conséquent, une grande partie de ce que je dis ci-dessous n’est pas pertinente pour les Mac récents. Si vous tapez echo $PATHun terminal, et que /usr/local/binvous êtes le premier, vous pouvez alors ignorer tout ce qui suit pour changer votre $PATH.

Réponse originale

Les Mac sont inhabituels à cet égard. La $PATHvariable par défaut pour un utilisateur régulier ressemble à ceci:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

En mettant /usr/local/bin après /usr/bin et /bin, Mac améliore le système habituel. Normalement, vous pouvez mettre quelque chose dans /usr/local/bin(disons un deuxième interpréteur Perl, compilé de manière non standard), puis un utilisateur habituel utilisera d'abord le type personnalisé plutôt que l'ensemble du système. C'est bon. Les utilisateurs peuvent obtenir des variantes, mais le système reste pur. $PATHToutefois, étant donné le défaut d'Apple , les éléments /usr/binou /binseront trouvés avant tout /usr/local/bin. (Cela va à l’encontre du but de l’installation, par exemple, le Perl in personnalisé /usr/local/bin.)

Pour résoudre ce problème, vous pouvez changer l'utilisateur habituel $PATHen modifiant le .profilefichier dans le répertoire de base de l'utilisateur. (Ce fichier peut ne pas exister, si vous avez une nouvelle installation. Dans ce cas, créez-le.)

En partie lié: Homebrew fournit une excellente gestion des packages pour les Mac. Par défaut, Homebrew installe le logiciel /usr/local, mais de manière à ce qu'il soit très facile de supprimer des éléments et de revenir ultérieurement à l'état de vanille.

Télémaque
la source
1
Sur mon OsX 10.13.6 (High Sierra) fraîchement installé, le chemin d'accès contient d'abord / usr / local / bin (même si le dossier n'existe pas) par défaut.
Legolas
1
@Legolas Apple semble avoir changé la façon dont ils gèrent cela. Je vais éditer le post.
Télémaque
9

/usr/local/binet /usr/local/sbinvalent bien d’être ajoutés à votre chemin, car beaucoup de makefiles pour les builds sources sont installés par défaut.

Si vous utilisez MacPorts , il vaut la peine d' ajouter /opt/local/binet /opt/local/sbinaussi bien.

La meilleure façon de faire est d’ajouter

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

au .bashrcfichier de votre répertoire personnel (ce qui est masqué, la CLI est donc le meilleur moyen de le faire), ou, si vous souhaitez modifier le chemin d'accès au système, ajoutez la même ligne à /etc/bashrc(non masqué), mais besoin de sudole faire.

Si vous n’avez pas .bashrcd’accueil chez un utilisateur, vous pouvez en créer un et y ajouter cette ligne, mais n'oubliez pas de modifier les autorisations sur le fichier que vous créez pour le rendre lisible par l'utilisateur en question (évidemment non pertinent si ' faites-le pour votre propre profil).

À $PATHla fin, le chemin par défaut du système est ajouté à ce que vous avez précédemment indiqué. Notez que le système recherche les fichiers binaires dans l'ordre des chemins. Ainsi, si vous installez un fichier binaire /usr/localou /opt/localest également installé par défaut sur le système, les versions que vous installez seront trouvées en premier, ce qui peut (bien que rarement) perturber des choses. Cela vaut la peine de faire attention.

Bonne information est ici .

Je dois noter que ce qui précède suppose que vous utilisez Bash pour le shell, qui est la valeur par défaut sous Mac OS X v10.4 (Tiger) et Mac OS X v10.5 (Leopard), mais pas sur les systèmes antérieurs, qui utilisaient à la tcshplace, qui a une syntaxe différente.

J'espère que ça aide ...

avstrallen
la source
1
/usr/local/binest déjà dans un OS X par défaut $PATH(bien que trop tard - voir ma réponse). Si vous utilisez MacPorts, son installateur devrait modifier votre chemin si nécessaire - du moins, il l’a toujours fait. Cela dit, il est bon que les utilisateurs sachent ce qu’il fait (et pourquoi).
Télémaque le
bien repéré @Telemachus: chaque fois que je construis un Mac pour moi-même, je personnalise l'enfer en priorité, de sorte que je ne me souvienne jamais de ce qui est standard et de ce qui est à moi!
avstrallen
1
Je sais ce que vous faites au sujet du programme d’installation de MacPorts qui personnalise les chemins dans .profile, mais j’ai déjà eu une occasion dans le passé où, pour une raison quelconque, je ne savais pas quoi, cela ne tenait pas ! un bon moment) ... donc depuis, je tends à câbler à la main ...
avstrallen
"qui est caché, la CLI est donc le meilleur moyen de le faire": question idiote, comment exécuter TextEdit sur un fichier à partir de l'invite de commande?
Jason S
Aucune question idiote: utilisez la opencommande avec le nom de fichier comme argument et elle devrait s'ouvrir avec tout ce qui est défini comme éditeur de texte par défaut (TextEdit en standard).
avstrallen
7

J'ai tendance à aller avec /usr/local. Voici une bonne explication pourquoi , qui fait référence à FHS (Filesystem Hierarchy Standard) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, qui dans tour dit à propos de /usr/local:

Hiérarchie tertiaire pour les données locales, spécifiques à cet hôte. A généralement des sous-répertoires supplémentaires, par exemple, bin, lib, share.

John Topley
la source
Oui, c'est à peu près la même chose que les autres systèmes d'exploitation * nix à cet égard.
Jtbandes
2
Veuillez citer les parties essentielles de la réponse à partir du (des) lien (s) de référence, car la réponse peut devenir invalide si la ou les pages liées changent.
DavidPostill