Mac OS X: обычные места, где должны жить бинарные файлы

61

Я скачал приложение, которое является приложением командной строки, и хочу поместить его где-нибудь, где я могу запустить его из командной строки без необходимости явно указывать путь.

  1. Какие обычные пути используются для чего-то подобного? /usr/bin? Существуют ли разные варианты: один, если я хочу, чтобы он был для всех пользователей, и один, если я хочу, чтобы он был только для определенного пользователя, например моей учетной записи администратора?

  2. Или я должен поместить его в свой собственный каталог в каталоге Приложения и добавить его в путь? Если да, какой файл контролирует, где указан путь?

Джейсон С
источник

Ответы:

53

Основной ответ: вы, вероятно, хотите /usr/local/bin. В зависимости от того, насколько недавно установлена ​​ваша macOS, вам может потребоваться обновить настройки по умолчанию $PATH. Смотрите ниже для более подробной информации.

ОБНОВЛЕНИЕ 12-01-2018 В какой-то момент, так как я написал свой оригинальный ответ, Apple изменила его по умолчанию $PATH. В результате многое из того, что я скажу ниже, не имеет отношения к последним Mac. Если вы наберете echo $PATHтерминал, и /usr/local/binпервым, то вы можете игнорировать все ниже об изменении вашего $PATH.

Оригинальный ответ

Маки необычны в этом отношении. $PATHПеременная по умолчанию для обычного пользователя выглядит следующим образом:

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

Поставив /usr/local/bin после /usr/bin и /bin, Mac переворачивает обычную систему. Обычно вы можете что-то вставить /usr/local/bin(скажем, второй интерпретатор Perl, скомпилированный нестандартным способом), и тогда обычный пользователь сначала обратится к пользовательскому, а не общесистемному. Это хорошо. Пользователи могут получить варианты, но система остается чистой. Однако, учитывая настройки Apple по умолчанию $PATH, предметы в /usr/binили /binбудут найдены раньше, чем что-либо в /usr/local/bin. (Это в основном отрицает цель установки, например, пользовательского Perl в /usr/local/bin.)

Чтобы это исправить, вы можете изменить обычного пользователя, $PATHотредактировав .profileфайл в его домашнем каталоге. (Этот файл может не существовать, если у вас новая установка. В этом случае создайте его.)

Полусвязанный: Homebrew обеспечивает отличное управление пакетами для Mac. По умолчанию Homebrew устанавливает программное обеспечение в систему /usr/local, но делает это таким образом, чтобы можно было легко удалять вещи и позже возвращаться в ванильное состояние.

Телемах
источник
1
На моем только что установленном OsX 10.13.6 (High Sierra) путь по умолчанию содержит / usr / local / bin (хотя папка даже не существует) по умолчанию.
Леголас
1
@Legolas Apple, похоже, изменила то, как они справляются с этим. Я буду редактировать пост.
Телемах
9

/usr/local/binи /usr/local/sbinих стоит добавить к вашему пути, так как многие сборочные файлы для исходных сборок по умолчанию установлены там.

Если вы используете MacPorts , то стоит добавить /opt/local/binи /opt/local/sbinкак хорошо.

Лучший способ сделать это - добавить

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

к .bashrcфайлу в вашем домашнем каталоге (который скрыт, так что CLI - лучший способ сделать это), или, если вы хотите изменить системный путь, добавьте ту же строку в /etc/bashrc(не скрытый), но вы будете надо sudoсделать это.

Если у вас .bashrcдома нет ни одного пользователя, вы можете создать его и добавить к нему эту строку, но не забудьте изменить разрешения для файла, который вы создаете, чтобы сделать его читаемым для данного пользователя (очевидно, не имеет значения, если вы ' делаю это для вашего собственного профиля).

В $PATHконце добавляется системный путь по умолчанию ко всему, что вы положили раньше. Обратите внимание, что система ищет двоичные файлы в порядке указанных путей, поэтому, если вы устанавливаете двоичный файл /usr/localили /opt/localон также установлен по умолчанию в системе, сначала будут найдены устанавливаемые вами версии, что может (хотя и редко) расстраивать вещи. Это стоит остерегаться.

Хорошая информация здесь .

Я должен отметить, что вышеизложенное предполагает, что вы используете Bash для оболочки, которая используется по умолчанию в Mac OS X v10.4 (Tiger) и Mac OS X v10.5 (Leopard), но не в более ранних системах, которые использовали tcshвместо этого, который имеет другой синтаксис.

Надеюсь, это поможет...

avstrallen
источник
1
/usr/local/binуже в OS X по умолчанию $PATH(хотя слишком поздно - см. мой ответ). Если вы используете MacPorts, его установщик должен отредактировать ваш путь по мере необходимости - по крайней мере, так было всегда. Тем не менее, пользователям полезно знать, что они делают (и почему).
Телемах
@Telemachus: каждый раз, когда я создаю Mac для себя, я первым делом настраиваю адский путь, так что я никогда не могу вспомнить, что является стандартным, а что моим!
Австраллен
1
Я знаю, что вы думаете об установщике MacPorts, настраивающем пути в .profile, но у меня был случай в прошлом, когда по какой-то причине, я не знаю, что, это не удалось (что смутило меня из-за какое-то время!) ... так что с тех пор я
стараюсь подключить
«который скрыт, поэтому CLI - лучший способ сделать это»: тупой вопрос, как вы запускаете TextEdit для файла из командной строки?
Джейсон С
Нет такой вещи, как глупый вопрос: используйте openкоманду с именем файла в качестве аргумента, и она должна открываться с тем, что установлено в качестве текстового редактора по умолчанию (TextEdit в качестве стандарта).
Австраллен
7

Я , как правило, идут с /usr/local. Вот хорошее объяснение, почему , что относится к стандарту иерархии файловой системы (FHS).), Который в Поворот говорит о /usr/local:

Третичная иерархия для локальных данных, характерных для этого хоста. Обычно имеет дополнительные подкаталоги, например, bin, lib, share.⁢

Джон Топли
источник
Да, это почти то же самое, что и в других операционных системах * nix в этом отношении.
Jtbandes
2
Пожалуйста, процитируйте основные части ответа по ссылочной ссылке (ссылкам), так как ответ может стать недействительным, если связанные страницы изменятся.
DavidPostill