Di mana seharusnya executable lokal ditempatkan?

62

Saya memiliki executable untuk klien kontrol versi perforce ( p4). Saya tidak dapat menempatkannya /opt/localkarena saya tidak memiliki hak akses root. Apakah ada lokasi standar di mana ia harus ditempatkan $HOME?

Apakah Hirarki Sistem File memiliki konvensi yang mengatakan bahwa executable / binari lokal perlu ditempatkan $HOME/bin?

Saya tidak dapat menemukan konvensi yang disebutkan di artikel Wikipedia untuk FHS .

Juga, jika memang ada konvensi, apakah saya harus secara eksplisit menyertakan path ke $HOME/bindirektori atau apa pun lokasi bindirektori itu?

pengguna640378
sumber

Jawaban:

64

Secara umum, jika non-sistem yang diinstal dan dipelihara biner harus dapat diakses di seluruh sistem untuk beberapa pengguna, itu harus ditempatkan oleh administrator /usr/local/bin. Ada hierarki lengkap di bawah /usr/localyang umumnya digunakan untuk paket perangkat lunak yang disusun dan diinstal secara lokal.

Jika Anda adalah satu-satunya pengguna biner, menginstal ke $HOME/binadalah lokasi yang tepat karena Anda dapat menginstalnya sendiri dan Anda akan menjadi satu-satunya konsumen. Jika Anda mengkompilasi paket perangkat lunak dari sumber, itu juga tepat untuk membuat hierarki lokal parsial atau penuh di $HOMEdirektori Anda . Hirarki lokal lengkap akan terlihat seperti ini.

  • $HOME/bin Binari lokal
  • $HOME/etc Konfigurasi sistem khusus host untuk binari lokal
  • $HOME/games Binari game lokal
  • $HOME/include File header C lokal
  • $HOME/lib Perpustakaan lokal
  • $HOME/lib64 Perpustakaan 64-bit lokal
  • $HOME/man Manual online lokal
  • $HOME/sbin Binari sistem lokal
  • $HOME/share Hirarki arsitektur-independen lokal
  • $HOME/src Kode sumber lokal

Saat menjalankan configure, Anda harus menentukan hierarki lokal Anda untuk instalasi dengan menetapkan $HOMEsebagai awalan untuk instalasi default.

./configure --prefix=$HOME

Sekarang ketika make && make installdijalankan, binari yang dikompilasi, paket, halaman manual, dan perpustakaan akan diinstal ke dalam $HOMEhierarki lokal Anda . Jika Anda belum secara manual membuat $HOMEhierarki lokal, make installakan membuat direktori yang dibutuhkan oleh paket perangkat lunak.

Setelah terinstal di $HOME/bin, Anda dapat menambahkan $HOME/binuntuk Anda $PATHatau hubungi biner menggunakan mutlak $PATH. Beberapa distribusi akan termasuk $HOME/binke dalam Anda $PATHsecara default. Anda dapat menguji ini dengan echo $PATHmelihat apakah $HOME/binada, atau memasukkan biner $HOME/bindan menjalankannya which binaryname. Jika kembali $HOME/bin/binaryname, maka secara default $ PATH Anda.

George M
sumber
5
selama $ HOME tidak berada pada sistem file yang dipasang noexec. / tmp / biasanya juga dipasang noexec.
ewanm89
3
Ini benar, bagiannya dari Filesystem Hierarchy Standard (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick
29
Saya tidak akan merekomendasikan menggunakan $HOME. Ini membanjiri direktori home Anda dengan banyak direktori yang Anda tidak tertarik sama sekali. Yang ingin memiliki man, lib, dll di dir rumah yang? Saya lebih suka membuat hierarki di bawah $HOME/binatau $HOME/local. Itu menambahkan hanya satu subdirektori ke direktori home Anda, bukan sepuluh. The PATHdapat dengan mudah disesuaikan untuk memasukkan $HOME/bin/binatau $HOME/local/bin.
Marco
18
Salah satu opsi adalah menggunakan $ HOME / .local / {bin, lib, dll.}, Seperti yang digunakan oleh mis. Spesifikasi berbasis XDG ( standar.freedesktop.org/basedir-spec/basedir-spec-latest.html ) dan python ( python.org/dev/peps/pep-0370 )
janneb
4
@janneb Spesifikasi Direktori Pangkalan XDG yang Anda rujuk hanya menyebutkan $HOME/.local/share(Versi 0.7, 24 November 2010).
Piotr Dobrogost
28

Seperti yang disebutkan sebelumnya , /usr/localdimaksudkan sebagai awalan untuk, pada dasarnya, perangkat lunak yang diinstal oleh administrator sistem, sedangkan /usrharus digunakan untuk perangkat lunak yang diinstal dari paket distribusi.

Gagasan di balik ini adalah untuk menghindari bentrokan dengan perangkat lunak terdistribusi (seperti rpmdan debpaket) dan memberikan admin pemerintahan penuh atas awalan "lokal".

Ini berarti bahwa admin dapat menginstal perangkat lunak yang dikompilasi khusus saat masih menggunakan distro seperti debian.

Dari FHS

Perangkat lunak yang ditempatkan di / atau / usr dapat ditimpa oleh peningkatan sistem (meskipun kami menyarankan distribusi tidak menimpa data di / etc dalam keadaan ini). Untuk alasan ini, perangkat lunak lokal tidak boleh ditempatkan di luar / usr / local tanpa alasan yang kuat.

Saat memasang perangkat lunak khusus pengguna, uther menyarankan penggunaan $HOMEsebagai awalan karena ini memastikan Anda memiliki izin menulis. Secara pribadi, saya merasa menggunakan $HOME/.localuntuk menjadi solusi yang lebih elegan, karena itu menghindari kekacauan direktori rumah Anda (semoga) bagus dan rapi!

$HOME/.local/sharesudah digunakan dalam spesifikasi Direktori Dasar XDG freedesktop.org , jadi tidak perlu banyak membayangkan menambahkan sebuah $HOME/.local/binke Anda $PATHdan membuat $HOME/.local/lib, dll, saat Anda sedang menggunakannya.

Jika Anda tidak benar-benar ingin awalan Anda menjadi direktori tersembunyi, Anda juga dapat membuat tautan simbolis dengan mudah, misalnya:

ln -s .local ~/local

Sidenote

Perlu dicatat bahwa .config(tidak .local/etc) adalah nilai default untuk $XDG_CONFIG_HOMEdigunakan untuk file konfigurasi khusus pengguna. Saya juga harus menunjukkan bahwa, sayangnya, sebagian besar perangkat lunak mengabaikan XDG dan membuat file konfigurasi di mana pun mereka suka (biasanya di root $HOME). Perhatikan juga bahwa $XDG_CONFIG_HOMEmungkin tidak disetel jika default $HOME/.configdiinginkan.

Anehnya, tidak ada direktori yang disediakan untuk file konfigurasi default distribusi, jadi tidak ada cara untuk mengetahui apakah suatu file /etcyang disediakan oleh distro atau diedit oleh administrator sistem.

MattSturgeon
sumber
1
Saya tidak dapat menemukan penyebutan .localdalam FHS
Daniel Serodio
@DanielSerodio Ada dalam spesifikasi direktori XDG, standar yang lebih baru yang membuatnya menonjol. Lihat unix.stackexchange.com/questions/316765/… dan superuser.com/questions/1170793/…
ivan_pozdeev
Catatan samping /etcitu benar-benar menyebalkan ketika mengelola server dengan banyak admin - cukup sulit untuk melacak pengeditan khusus untuk file conf.
nucky101