Mac OS X: звичайні місця, де мають жити бінарні файли


61

Я завантажив додаток, який є програмою командного рядка, і хочу розмістити його десь там, де я можу запустити його з командного рядка, не вводячи явно шлях.

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

  2. Або я повинен розмістити його у власному каталозі під каталогом Applications та додати його до контуру? Якщо так, то який файл керує, де встановлено шлях?

Відповіді:


53

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

ОНОВЛЕННЯ 12-01-2018 У якийсь момент, коли я написав свою оригінальну відповідь, Apple змінила свій дефолт $PATH. Як результат, багато що з того, що я кажу нижче, не має значення для останніх Macs. Якщо ви введете 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замість цього, який має інший синтаксис.

Я сподіваюся, що це допоможе ...


1
/usr/local/binвже в OS X за замовчуванням $PATH(хоч і пізно - див. мою відповідь). Якщо ви використовуєте MacPorts, його інсталятор повинен редагувати ваш шлях за необхідності - принаймні, це завжди є в моєму досвіді. Однак, користувачеві добре знати, що це робить (і чому).
Телемах

добре помічений @Telemachus: щоразу, коли я будую Mac для себе, я в першу чергу налаштовую чорт із шляху, тому я ніколи не можу згадати, що є стандартним, а що моє!
avstrallen

1
Я знаю, про що ти мрієш про встановлення MacPorts, налаштовуючи шляхи в .profile, але в мене було випадки, коли я чомусь не знаю, що це не вдалося (це збентежило пекло від мене досить довго!) ... тому з тих пір я схильний передавати його вручну ...
avstrallen

"що приховано, тому CLI - найкращий спосіб зробити це": німе питання, як запустити TextEdit у файлі з командного рядка?
Джейсон S

Немає такого поняття, як німе запитання: використовуйте openкоманду з назвою файлу як аргумент, і вона повинна відкриватися, якщо встановлено текстовий редактор за замовчуванням (TextEdit як стандарт).
avstrallen

7

Я схильний їхати /usr/local. Ось приємне пояснення того , чому йдеться про стандарт ієрархії файлової системи (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, який в черга говорить про /usr/local:

Третя ієрархія місцевих даних, специфічна для цього хоста. Зазвичай має додаткові підкаталоги, наприклад, bin, lib, share.⁢


Так, це майже те саме, що й інші * nix операційні системи в цьому плані.
jtbandes

2
Будь ласка, цитуйте основні частини відповіді із посилальних посилань (ив), оскільки відповідь може стати недійсною, якщо змінена пов’язана сторінка.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.