it-swarm-id.com

Apa perbedaan antara / opt dan / usr / local?

Menurut Standar Sistem Hierarki Files , /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 dikonfigurasi secara default untuk menginstal dalam /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?

440
Patches

Meskipun keduanya dirancang untuk berisi file yang bukan milik sistem operasi, /opt dan /usr/local tidak dimaksudkan untuk berisi kumpulan file yang sama.

/usr/local adalah tempat untuk memasang file yang dibangun oleh administrator, biasanya dengan menggunakan perintah make (mis., ./configure; make; make install). Idenya adalah untuk menghindari bentrokan dengan file yang merupakan bagian dari sistem operasi, yang akan ditimpa atau ditimpa yang lokal (misalnya, /usr/bin/foo adalah bagian dari OS sementara /usr/local/bin/foo adalah 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 didefinisikan sebagai hanya-baca, tetapi /usr/local/bin perlu dibaca-tulis agar instalasi perangkat lunak lokal berhasil. Standar sistem file SVR4, yang merupakan sumber inspirasi utama FHS, merekomendasikan untuk menghindari /usr/local dan gunakan /opt/local sebagai gantinya untuk mengatasi masalah ini.

/usr/local adalah warisan dari BSD asli. Pada saat itu, kode sumber /usr/bin Perintah OS ada di /usr/src/bin dan /usr/src/usr.bin, sedangkan sumber dari perintah yang dikembangkan secara lokal ada di /usr/local/src, dan binernya di /usr/local/bin. Tidak ada gagasan tentang pengemasan (di luar tarbal).

Di samping itu, /opt adalah direktori untuk menginstal paket tidak terikat (mis. 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, paket-paket ini mengikuti konvensi direktori (atau setidaknya seharusnya). Sebagai contoh, someapp akan dipasang di /opt/someapp, dengan salah satu perintahnya adalah /opt/someapp/bin/foo, file konfigurasinya akan berada di /etc/opt/someapp/foo.conf, dan file lognya di /var/opt/someapp/logs/foo.access.

393
jlliagre

Perbedaan dasarnya adalah bahwa /usr/local adalah untuk perangkat lunak yang tidak dikelola oleh paket sistem, tetapi masih mengikuti aturan penyebaran unix standar.

Itu sebabnya Anda memiliki /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".

89
Šimon Tóth

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 ini di sini .

18
philfr

Bagi saya, secara pribadi, itulah yang dikatakan Bill di tautan @ philfr:

Pada sistem pengembangan, atau kotak pasir, memiliki direktori/opt di mana Anda hanya bisa melemparkan sesuatu dan melihat apakah mereka bekerja masuk akal. Saya tahu saya tidak akan melalui upaya pengemasan barang sendiri untuk mencobanya. Jika aplikasi tidak berhasil, Anda dapat dengan mudah rm direktori/opt/mytestapp dan aplikasi itu adalah sejarah. Pengemasan mungkin masuk akal ketika Anda menjalankan penyebaran besar (ada kalanya saya membuat paket aplikasi), tetapi sering kali, senang melemparkan barang-barang ke/opt.

Sayangnya, kebanyakan make install skrip mendorong file ke /usr/local alih-alih hanya membuat symlink di sana: - /

13
pepoluan

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 diutamakan; 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-mount /usr read-only, yang berarti Anda tidak dapat menambahkan perangkat lunak baru ke dalamnya; mungkin itulah sebabnya /opt ditemukan. Seperti yang terjadi, ada begitu banyak perangkat lunak yang ada yang menulis ke /usr bahwa gagasan itu tidak pernah benar-benar muncul.

Preferensi pribadi saya adalah /opt, dengan subdirektori terpisah untuk setiap produk; ini membuat menghapus produk kasus sederhana rm -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 bawah /usr, tidak masalah juga, meskipun untuk alasan yang berlawanan.

12
James Kanze

Saya memiliki pandangan yang sedikit berbeda tentang masalah ini.
Sementara semuanya dalam jlliagre 's answer benar, aplikasi praktis bagi saya, ketika menggunakan perangkat lunak dalam sebuah cluster, turun ke variabel lingkungan default dan standar penggunaan kembali libs.

Sederhananya - /usr/local Dan semua direktori anaknya berada di env vars yang sesuai seperti PATH dan MANPATH, 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. modul-lingkungan atau koleksi perangkat lunak ), dan tidak menguntungkan karena berpotensi "membuang" ruang penyimpanan dengan menduplikasi pustaka bersama, karena setiap instalasi di /opt dapat sepenuhnya mandiri.

Agar sifat bersama /usr/local Berfungsi, diasumsikan bahwa mis. binari diinstal langsung ke /usr/local/bin (dan halaman manual untuk menyesuaikan /usr/local/share/man/...) daripada /usr/local/app/{bin,share/man,...} dll.

10
Dani_l

Singkatnya, nyali saya menjawab ...

Setelah menggunakan FreeBSD saya sejak 2.2.6 dan Red Hat Linux sejak versi 9 ...

/usr/local == Old School Conventions
/opt       == New School Conventions

Pengaturan hal-hal pada sistem file UNIX/Linux lebih berkaitan dengan konvensi dan tradisi, daripada logika absolut.

Kalau tidak, saya sebagian besar setuju dengan orang lain. :-)

Selalu ada beberapa pengecualian untuk aturan tersebut. Pada akhirnya, Anda memutuskan apa yang terbaik untuk pengaturan Anda (bila Anda bisa).

0
Anthony Rutledge