Admin sys kami memasang aplikasi perangkat lunak (Maven) di server dan menyuruh semua orang untuk menambahkan /usr/local/maven/bin/
folder ke jalur mereka.
Saya pikir akan lebih mudah untuk hanya menautkan beberapa program di folder itu dari /bin
folder (atau folder lain yang dimiliki semua orang), seperti ini:
ln -s /usr/local/maven/bin/* /bin
Apakah ini benar? Apakah ada beberapa efek samping tersembunyi pada saran saya?
symlink
path
directory-structure
Erel Segal-Halevi
sumber
sumber
/opt
.Jawaban:
Saat menautkan
Anda biasanya tidak menghubungkan
/usr/local/*
dengan/bin
, tapi ini lebih dari praktek sejarah. Secara umum, ada beberapa alasan "teknis" mengapa Anda tidak dapat melakukan apa yang Anda sarankan.Membuat tautan ke file executable
/bin
dapat menyebabkan masalah:Mungkin peringatan terbesar adalah jika sistem Anda memiliki paket yang dikelola oleh semacam manajer paket seperti RPM, dpkg, APT, YUM, pacman, pkg_add, dll. Dalam kasus ini, Anda biasanya ingin membiarkan paket tersebut manajer melakukan tugasnya dan mengelola direktori seperti
/sbin
,/bin
,/lib
, dan/usr
. Satu pengecualian adalah tempat/usr/local
yang biasanya aman untuk dilakukan sesuai keinginan Anda, tanpa harus khawatir tentang manajer paket yang mengganggu file Anda.Sering kali executable yang dibangun untuk
/usr/local
memiliki PATH ini dikodekan ke dalam executable mereka. Mungkin juga ada file konfigurasi yang disertakan/usr/local
sebagai bagian dari instalasi aplikasi ini. Jadi menautkan hanya ke yang dapat dieksekusi dapat menyebabkan masalah dengan aplikasi ini menemukan.cfg
file di kemudian hari. Berikut ini contoh kasusnya:Masalah yang sama yang berlaku untuk menemukan
.cfg
file juga dapat terjadi dengan executable "pembantu" yang harus dijalankan aplikasi utama. Ini juga perlu dihubungkan/usr/bin
, mengetahui ini mungkin bermasalah dan hanya muncul ketika Anda benar-benar berusaha untuk mengeksekusi aplikasi tertaut.CATATAN: secara umum yang terbaik adalah menghindari godaan untuk menautkan ke satu aplikasi dalam
/usr/bin
./etc/profile.d
Alih-alih memiliki semua pengguna menyediakan manajemen ini, admin bisa dengan mudah menambahkan ini ke semua orang
$PATH
di kotak dengan menambahkan file yang sesuai di/etc/profile.d
direktori.File seperti ini
/etc/profile.d/maven.sh
,:Anda biasanya melakukan ini sebagai admin alih-alih mencemari semua pengaturan pengguna dengan ini.
Menggunakan alternatif
Kebanyakan distro sekarang menyediakan alat lain yang disebut
alternatives
(Fedora / CentOS) atauupdate-alternatives
(Debian / Ubuntu) yang juga dapat Anda gunakan untuk mengulang ke$PATH
alat yang mungkin berada di luar/bin
. Menggunakan alat seperti ini lebih disukai karena ini lebih mengacu pada apa yang oleh sebagian besar admin akan dianggap sebagai "praktik standar" dan dengan demikian membuat sistem lebih mudah untuk diserahkan dari satu admin ke admin lainnya.Alat ini melakukan hal serupa dalam membuat tautan di
/bin
; tetapi mengelola pembuatan dan penghancuran tautan-tautan ini, sehingga lebih mudah untuk memahami pengaturan yang dimaksudkan sistem ketika dilakukan melalui alat vs. dilakukan secara langsung seperti yang Anda sarankan.Di sini saya menggunakan sistem itu untuk mengelola Java Oracle pada sebuah kotak:
Anda dapat melihat efek dari ini:
$ 0,02 saya
Membuat tautan
/bin
, meskipun masuk akal, kemungkinan besar akan sangat tidak disukai oleh sebagian besar sysadmin:sumber
/bin
direktori. Ini sebuah contoh. Pada distro Red Hat yang menggunakan RPM jika file yang sudah ada di/bin
RPM tidak akan menginstal di atas seperti yang telah Anda jelaskan, kecuali coxed melakukannya menggunakan--replacefiles
saklar. Jadi itu bukan alasan teknis. Sama dengan direktori lain. Saya mengerti apa yang Anda katakan tentang OS "memiliki"/bin
tetapi tidak sejelas yang Anda katakan .Menjawab pertanyaan yang diajukan:
Tidak , ini adalah praktik yang buruk.
Ya ada beberapa efek samping. Saran Anda mungkin berfungsi atau tidak, tergantung pada aplikasi, dan mungkin mundur atau rusak dalam jangka panjang.
Ada alasan masuk akal untuk tidak membuat tautan simbolis seperti itu:
Administrator tidak "memiliki"
/bin
(lihat catatan 1) karena direktori ini milik pengembang sistem operasi / distribusi. Di sisi lain/usr/local
adalah lokasi tradisional untuk perangkat lunak yang dibangun oleh administrator lokal,/opt/<packagename>
menjadi satu untuk perangkat lunak yang tidak diikat. Jika Anda membuat file atau tautan/bin
, ada risiko ditimpa oleh instalasi paket, dalam kasus Andamaven
paket hipotetis yang disediakan oleh OS, yang mungkin mengarah pada regresi jika yang dibangun secara lokal dibuat dari yang lebih baru. kode sumber bahwa versi OS. Sebagai contoh, tarbal SVR4pkgadd
, debiandpkg
, red-hat,rpm
dan slackware semuanya akan secara tidak sengaja menimpa tautan simbolik Anda.Beberapa aplikasi memang melihat ke tempat mereka dipanggil untuk mengambil file konfigurasi, plugin dan sumber daya serupa. Jika Anda memanggil aplikasi dengan tautan simbolis, kodenya mungkin gagal mengikutinya dan kemudian mencari file sumber daya ini di sekitar
/usr/bin
tempat mereka tidak.Mungkin ada binari lain diDihapus karena Anda sudah memperhitungkannya dengan perintah Anda dengan menautkan semua perintah potensial./usr/local/maven/bin
dalamnya dan tidak menambahkan direktori ini ke PATH Anda akan membuatnya tidak tersedia.The halaman maven2 mengatakan untuk menambahkan direktori ini ke PATH anda (tepatnya: Tambah variabel lingkungan M2 untuk jalan Anda, misalnya export PATH = $ M2: $ PATH .), Dengan menggunakan pendekatan yang berbeda, Anda melanggar langkah yang begitu akan yang tidak didukung cara. Tentu saja, jika sebagian besar pengguna sistem adalah
maven
pengguna potensial , akan lebih masuk akal untuk mengaturPATH
global daripada pada masing-masing dan setiap.profile
.Catatan 1:
Dokumentasi Slackware:
Standar Hirarki Debian / Filesystem
Dokumentasi Solaris:
Tes sederhana yang menunjukkan Debian's
dpkg
tidak menyimpan tautan yang ada, meskipun--force-overwrite
opsi tidak digunakan:sumber
/bin
atau/usr/bin
. Setelah menemukan masalah biner sistem tersembunyi atau terganggu (yang paling terkenal adalahtest
) praktik terbaik untuk menginstal biner non sistem di tempat lain secara progresif diadopsi.Jika Anda ingin symlink, akan lebih baik symlink ke
/usr/local/bin
. Di server saya, saya biasa menginstal perangkat lunak lokal ke/opt/NAME
dan symlink binari ke/usr/local/bin
.sumber
Alternatif dari dua metode yang disarankan adalah membuat skrip shell
/usr/local/bin
, ketika dijalankan, mengeksekusi biner apa pun yang Anda tentukan dalam skrip. Sebagai contoh, menggunakan maven sebagai contoh, saya akan membuat skrip shell dengan/usr/local/bin
namamaven
yang memiliki skrip kecil di dalamnya untuk mengeksekusi biner maven di mana ia berada dan meneruskan argumen apa pun kepadanya:Ini memiliki kelemahan karena harus melakukan ini untuk setiap biner yang ingin Anda "tautkan", tetapi ini memungkinkan Anda untuk memanggil binari-binari tersebut dari baris perintah tanpa perlu membersihkan
$PATH
variabel lingkungan Anda .sumber