Menurut Standar Hierarki Filesystem , /opt
adalah untuk "instalasi paket perangkat lunak aplikasi tambahan". /usr/local
adalah "untuk digunakan oleh administrator sistem ketika menginstal perangkat lunak secara lokal". Kasing ini tampaknya sangat mirip. Perangkat lunak yang tidak termasuk dalam distribusi biasanya dikonfigurasikan secara default untuk menginstal di salah satu /usr/local
atau /opt
tanpa sajak atau alasan tertentu yang mereka pilih.
Apakah ada beberapa perbedaan yang saya lewatkan, atau keduanya melakukan hal yang sama, tetapi ada karena alasan historis?
directory-structure
fhs
Tambalan
sumber
sumber
/usr/local
adalah versi lokal dari/usr
sistem file, sedangkan/opt
place holder untuk barang-barang miscJawaban:
Sementara keduanya dirancang untuk berisi file yang bukan milik sistem operasi,
/opt
dan/usr/local
tidak dimaksudkan untuk berisi set file yang sama./usr/local
adalah tempat untuk menginstal file yang dibangun oleh administrator, biasanya dengan menggunakanmake
perintah (misalnya,./configure; make; make install
). Idenya adalah untuk menghindari bentrokan dengan file yang merupakan bagian dari sistem operasi, yang akan ditimpa atau ditimpa yang lokal sebaliknya (misalnya,/usr/bin/foo
merupakan bagian dari OS sementara/usr/local/bin/foo
merupakan alternatif lokal).Semua file di bawah
/usr
dapat dibagikan di antara instance OS, meskipun ini jarang dilakukan dengan Linux. Ini adalah bagian di mana FHS sedikit kontradiktif dengan diri sendiri, seperti/usr
yang didefinisikan sebagai read-only, tetapi/usr/local/bin
perlu dibaca-tulis agar instalasi perangkat lunak lokal dapat berhasil. Standar sistem file SVR4, yang merupakan sumber inspirasi utama FHS, merekomendasikan untuk menghindari/usr/local
dan menggunakan/opt/local
sebagai gantinya untuk mengatasi masalah ini./usr/local
adalah warisan dari BSD asli. Pada saat itu, kode sumber/usr/bin
perintah OS berada di/usr/src/bin
dan/usr/src/usr.bin
, sedangkan sumber perintah yang dikembangkan secara lokal berada di/usr/local/src
, dan binari mereka di/usr/local/bin
. Tidak ada gagasan tentang pengemasan (di luar tarbal).Di sisi lain,
/opt
adalah direktori untuk menginstal paket tidak terikat (yaitu paket bukan bagian dari distribusi Sistem Operasi, tetapi disediakan oleh sumber independen), masing-masing dalam subdirektori sendiri. Mereka sudah membangun seluruh paket yang disediakan oleh distributor perangkat lunak pihak ketiga yang independen. Tidak seperti/usr/local
barang-barang, paket-paket ini mengikuti konvensi direktori (atau setidaknya seharusnya demikian). Sebagai contoh,someapp
akan dipasang di/opt/someapp
, dengan salah satu perintahnya/opt/someapp/bin/foo
, file konfigurasinya akan berada/etc/opt/someapp/foo.conf
, dan file log-nya/var/opt/someapp/logs/foo.access
.sumber
Perbedaan mendasarnya
/usr/local
adalah untuk perangkat lunak yang tidak dikelola oleh pemaket sistem, tetapi masih mengikuti aturan penyebaran unix standar.Itu sebabnya Anda punya
/usr/local/bin
,/usr/local/sbin
/usr/local/include
dll .../opt
di sisi lain adalah untuk perangkat lunak yang tidak mengikuti ini dan digunakan secara monolitik. Ini biasanya termasuk perangkat lunak komersial dan / atau lintas-platform yang dikemas dalam gaya "Windows".sumber
Mereka memang sangat mirip, dan penggunaan satu atau yang lain lebih merupakan masalah pendapat. Jurnal Linux mengadakan diskusi titik / tandingan ini tentang topik yang tepat di sini .
sumber
Bagi saya, secara pribadi, itulah yang dikatakan Bill di tautan @ philfr:
Sayangnya, sebagian besar
make install
skrip mendorong file ke dalam/usr/local
alih-alih hanya membuat symlink di sana: - /sumber
make install
target memasukkan file ke/usr/local
; fungsi ini mudah berubah dengan melewati sebuah--prefix=
parameter baris perintah ke./configure
naskah, atau jika tidak ada./configure
naskah, Anda dapat melewatkan parameter kemake
sasaran seperti:make --prefix=/usr install
./opt/foo-1.1
dan/opt/foo-1.2
. Saat saya memutakhirkan,foo
symlink dalam/usr/local/bin
poin ke foo-1.2. Jika karena alasan tertentu saya perlu mengembalikan, saya hanya mengganti symlink dengan yang menunjuk ke foo-1.1. Jika 1.2 baik-baik saja setelah beberapa minggu, cepatrm -rf /opt/foo-1.1
menghapus versi yang lebih lama dengan cepat dan bersih.Pertama, saya kira tidak ada jawaban yang tegas; administrator yang berbeda akan memiliki pendapat yang berbeda, sesuai dengan latar belakang mereka. Secara historis,
/usr/local
prioritas utama; itu adalah kebaktian di Berkley, IIRC. Pada satu titik selama pengembangan Sistem V, jika saya tidak salah (ini semua sudah lama sekali, dan saya tidak mencatat), ada keputusan atau keinginan untuk dapat me/usr
- mount hanya-baca, yang berarti Anda tidak dapat menambahkan perangkat lunak baru ke dalamnya; mungkin itulah sebabnya/opt
ditemukan. Ketika itu terjadi, ada begitu banyak perangkat lunak yang ada yang menulis untuk/usr
ide itu tidak pernah benar-benar turun.Preferensi pribadi saya adalah
/opt
, dengan subdirektori terpisah untuk setiap produk; ini membuat menghapus produk kasus sederhanarm -fr
. Tetapi jika semua perangkat lunak Anda diinstal melalui manajer paket yang baik, itu tidak masalah, dan jika perangkat lunak yang Anda instal tidak sepenuhnya mematuhi konvensi ini, dan menulis konfigurasi dan semacamnya di suatu tempat di bawah/usr
, tidak masalah juga, meskipun untuk alasan yang berlawanan.sumber
Saya memiliki pandangan yang sedikit berbeda tentang masalah ini.
Sementara segala sesuatu di jlliagre 's jawabannya benar, aplikasi praktis bagi saya, ketika deploying software dalam sebuah cluster, turun ke variabel lingkungan default dan penggunaan kembali default libs.
Sederhananya -
/usr/local
dan semua direktori anaknya berada di env vars yang sesuai sepertiPATH
danMANPATH
, dan/usr/local/lib{,64}
berada di ldconfig's (/etc/ld.so.conf.d/
)./opt/
OTOH tidak - yang menguntungkan ketika membutuhkan beberapa versi atau paket yang saling bertentangan untuk hidup berdampingan dalam sistem, tetapi membutuhkan semacam manajemen lingkungan (mis. Koleksi modul-lingkungan atau perangkat lunak ), dan tidak menguntungkan karena berpotensi "membuang" "Ruang penyimpanan dengan menduplikasi pustaka bersama, karena setiap instalasi di/opt
dapat sepenuhnya lengkap.Untuk sifat
/usr/local
kerja bersama, diasumsikan bahwa misalnya biner dipasang langsung ke/usr/local/bin
(dan halaman manual yang sesuai/usr/local/share/man/...
) daripada/usr/local/app/{bin,share/man,...}
dll.sumber