Mac OS X: tempat konvensional di mana file biner harus hidup

61

Saya telah mengunduh aplikasi yang merupakan aplikasi baris perintah, dan ingin meletakkannya di suatu tempat di mana saya dapat menjalankannya dari baris perintah tanpa harus mengetikkan lintasan secara eksplisit.

  1. Apa jalur konvensional yang digunakan untuk sesuatu seperti ini? /usr/bin? Apakah ada opsi berbeda, satu jika saya menginginkannya untuk semua pengguna, dan satu jika saya menginginkannya hanya untuk pengguna tertentu, seperti akun administrator saya?

  2. Atau haruskah saya meletakkannya di direktori sendiri di bawah direktori Aplikasi, dan menambahkannya ke jalur? Jika demikian, file mana yang mengontrol di mana jalur ditetapkan?

Jason S
sumber

Jawaban:

53

Inti jawabannya: Anda mungkin mau /usr/local/bin. Bergantung pada seberapa baru macOS Anda, Anda mungkin perlu memperbarui default Anda $PATH. Lihat di bawah untuk rincian lebih lanjut.

UPDATE 12-01-2018 Pada titik tertentu sejak saya menulis jawaban asli saya, Apple mengubah default-nya $PATH. Akibatnya, banyak yang saya katakan di bawah ini tidak relevan dengan Mac baru-baru ini. Jika Anda mengetikkan echo $PATHterminal, dan /usr/local/binyang pertama, maka Anda dapat mengabaikan segala sesuatu di bawah ini tentang mengubah terminal Anda $PATH.

Jawaban asli

Mac tidak biasa dalam hal ini. $PATHVariabel default untuk pengguna biasa terlihat seperti ini:

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

Dengan meletakkan /usr/local/bin setelah /usr/bin dan /bin, Mac mengubah sistem yang biasa. Biasanya, Anda dapat memasukkan sesuatu ke dalam /usr/local/bin(katakanlah penerjemah Perl kedua, dikompilasi dalam beberapa cara non-standar), dan kemudian pengguna biasa akan menekan yang kustom daripada yang di seluruh sistem terlebih dahulu. Ini bagus. Pengguna bisa mendapatkan varian, tetapi sistemnya tetap murni. Mengingat bawaan Apple $PATH, namun, item dalam /usr/binatau /binakan mendapatkan ditemukan sebelum apa pun di /usr/local/bin. (Ini pada dasarnya mengalahkan tujuan pemasangan, misalnya, custom Perl in /usr/local/bin.)

Untuk memperbaikinya, Anda dapat mengubah pengguna biasa $PATHdengan mengedit .profilefile di direktori home pengguna. (File itu mungkin tidak ada, jika Anda memiliki instalasi baru. Dalam hal ini, buatlah.)

Semi-terkait: Homebrew menyediakan manajemen paket yang sangat baik untuk Mac. Secara default, Homebrew menginstal perangkat lunak ke dalam /usr/local, tetapi melakukannya dengan cara yang membuatnya sangat mudah untuk menghapus hal-hal dan kembali ke keadaan vanilla nanti.

Telemakus
sumber
1
Pada OsX 10.13.6 saya yang baru diinstal (High Sierra), path memang mengandung / usr / local / bin terlebih dahulu (meskipun folder itu bahkan tidak ada) secara default.
Legolas
1
@ Legolas Apple tampaknya telah mengubah cara mereka menangani ini. Saya akan mengedit posting.
Telemakus
9

/usr/local/bindan /usr/local/sbinlayak untuk ditambahkan ke jalur Anda, karena banyak makefile untuk build source secara default diinstal di sana.

Jika Anda menggunakan MacPorts , ada baiknya menambahkan /opt/local/bindan /opt/local/sbinjuga.

Cara terbaik untuk melakukan ini adalah menambahkan

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

ke .bashrcfile di direktori home Anda (yang disembunyikan, jadi CLI adalah cara terbaik untuk melakukan ini), atau, jika Anda ingin mengubah jalur lebar sistem, tambahkan baris yang sama ke /etc/bashrc(tidak tersembunyi), tetapi Anda akan perlu sudomelakukan ini.

Jika Anda tidak memiliki .bashrcdi rumah pengguna mana pun, Anda dapat membuatnya dan menambahkan baris ini ke dalamnya, tetapi ingatlah untuk mengubah izin pada file yang Anda buat agar dapat dibaca oleh pengguna yang bersangkutan (jelas tidak relevan jika Anda ' sedang melakukannya untuk profil Anda sendiri).

Pada $PATHakhirnya menambahkan jalur default sistem untuk apa pun yang Anda masukkan sebelumnya. Perhatikan bahwa sistem mencari binari dalam urutan lintasan yang diberikan, jadi jika Anda menginstal biner di /usr/localatau /opt/localyang juga diinstal secara default pada sistem, versi yang Anda instal akan ditemukan terlebih dahulu, yang dapat (meskipun jarang) mengganggu hal-hal. Perlu diperhatikan.

Informasi bagus ada di sini .

Saya harus mencatat bahwa di atas mengasumsikan Anda menggunakan Bash untuk shell, yang merupakan default pada Mac OS X v10.4 (Tiger) dan Mac OS X v10.5 (Leopard), tetapi tidak pada sistem sebelumnya, yang digunakan tcshsebagai gantinya, yang memiliki sintaks yang berbeda.

Saya harap itu membantu...

Avstrallen
sumber
1
/usr/local/binsudah dalam OS X standar $PATH(meskipun terlambat - lihat jawaban saya). Jika Anda menggunakan MacPorts, penginstalnya harus mengedit jalur Anda seperlunya - setidaknya selalu ada dalam pengalaman saya. Yang mengatakan, itu baik bagi pengguna untuk mengetahui apa yang dilakukannya (dan mengapa).
Telemachus
Terlihat dengan baik @Telemachus: setiap kali saya membangun Mac untuk diri saya sendiri, saya menyesuaikan neraka keluar dari jalur hal pertama, jadi saya tidak pernah bisa mengingat apa yang standar dan apa milik saya!
avstrallen
1
Saya tahu apa yang Anda cari tentang penginstal MacPorts yang mengkustomisasi path di. Profil, tetapi saya pernah memiliki kesempatan di masa lalu ketika karena suatu alasan, saya tidak tahu apa, ini gagal menempel (yang membingungkan saya untuk ! cukup lama) ... jadi sejak itu saya cenderung untuk kawat dalam dengan tangan ...
avstrallen
"yang disembunyikan, jadi CLI adalah cara terbaik untuk melakukan ini": pertanyaan bodoh, bagaimana Anda menjalankan TextEdit pada file dari command prompt?
Jason S
Tidak ada yang namanya pertanyaan bodoh: gunakan openperintah dengan nama file sebagai argumen dan harus terbuka dengan apa pun yang ditetapkan sebagai editor teks default (TextEdit sebagai standar).
avstrallen
7

Saya cenderung ikut /usr/local. Inilah penjelasan yang bagus mengapa , yang mengacu pada Filesystem Hierarchy Standard (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, yang dalam gilirannya mengatakan tentang /usr/local:

Hirarki tersier untuk data lokal, khusus untuk host ini. Biasanya memiliki subdirektori lebih lanjut, misalnya, bin, lib, bagikan.⁢

John Topley
sumber
Yap, ini hampir sama dengan sistem operasi * nix lain dalam hal itu.
jtbandes
2
Silakan kutip bagian-bagian penting dari jawaban dari tautan referensi, karena jawabannya dapat menjadi tidak valid jika halaman yang tertaut berubah.
DavidPostill