/ usr / bin vs / usr / local / bin di Linux


445

Mengapa ada begitu banyak tempat untuk meletakkan biner di Linux? Setidaknya ada lima ini:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

Dan di kotak kantor saya, saya tidak punya izin menulis untuk beberapa di antaranya.

Apa jenis biner masuk ke mana dari ini bin?


28
Anda lupa /usr/sbin/.
Hello71

15
Dan ~/bin/untuk barang pribadi.
Calmarius

1
Ada lebih sedikit tempat saat ini, sejak /bindigabung dengan /usr/bindan /sbindigabung dengan /usr/sbin- lihat Kasus untuk Penggabungan / usr .
Piotr Dobrogost


@Calmarius, Apa? tidakkah seharusnya Anda gunakan /usr/local/bin?
Pacerier

Jawaban:


558
  1. /bin(dan /sbin) ditujukan untuk program yang perlu berada di /partisi kecil sebelum partisi yang lebih besar /usr, dll dipasang. Saat ini, sebagian besar berfungsi sebagai lokasi standar untuk program-program utama seperti /bin/sh, meskipun maksud aslinya mungkin masih relevan untuk misalnya instalasi pada perangkat tertanam kecil.

  2. /sbin, berbeda dari /bin, adalah untuk program manajemen sistem (biasanya tidak digunakan oleh pengguna biasa) yang diperlukan sebelum /usrdipasang.

  3. /usr/bin adalah untuk program pengguna normal yang dikelola distribusi.

  4. Ada hubungan /usr/sbindengan yang sama /usr/binseperti /sbinharus /bin.

  5. /usr/local/binuntuk program pengguna normal yang tidak dikelola oleh manajer paket distribusi, mis. paket yang dikompilasi secara lokal. Anda tidak boleh menginstalnya ke dalam /usr/binkarena upgrade distribusi masa depan dapat memodifikasi atau menghapusnya tanpa peringatan.

  6. /usr/local/sbin, Karena Anda mungkin bisa menebak pada titik ini, adalah untuk /usr/local/binsebagai /usr/sbinuntuk /usr/bin.

Selain itu, ada juga /optyang untuk paket non-distribusi monolitik, meskipun sebelum mereka terintegrasi dengan baik berbagai distribusi menempatkan Gnome dan KDE di sana. Umumnya Anda harus memesannya untuk paket pihak ketiga yang besar dan berperilaku buruk seperti Oracle.


37
Saya pikir jawaban ini melakukan pekerjaan yang baik untuk mengklarifikasi seperangkat konvensi umum, tetapi posting dari Rob Landley ini benar-benar bacaan yang bagus jika Anda ingin wawasan tentang omong kosong ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
Subfuzion

3
refspecs.linuxfoundation.org/fhs.shtml untuk referensi terkini kanonik. Tautan oleh @kojiro kedaluwarsa dan tidak memiliki spesifikasi baru.
Didier A.

2
Di mana saya meletakkan tempat sampah yang saya unduh dari internet? Dari uraian Anda, sepertinya harus masuk ke / usr / local / bin atau / usr / bin. Apakah / usr / bin sesuatu yang tidak boleh saya sentuh secara manual, dan biarkan hanya pengelola paket yang bermain?
Didier A.

3
@Dierka. letakkan di dalamnya ~/bindan tambahkan direktori itu ke PATH Anda sebagai pengguna ... Terima kasih atas catatannya, saya menghapus komentar saya yang sudah usang.
kojiro

3
Saya menemukan jawaban untuk bagian pertama dari pertanyaan saya di sini: superuser.com/a/238993/425838 . Diutamakan didasarkan pada urutan dalam PATHvariabel sistem , dan echo $PATHbagi saya menunjukkan /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, yang berarti bahwa executable di /usr/local/bindiutamakan daripada yang di /usr/binmana diutamakan daripada yang di /bin.
Gabriel Staples

65

Saya sarankan untuk melihat halaman manual hierarki sistem file:

man hier

Yang juga tersedia online, misalnya: http://linux.die.net/man/7/hier


1
Ini tidak menjawab pertanyaan pengguna.
Billy ONeal

14
Halaman manual memang berisi entri untuk masing-masing direktori bin, menjelaskan apa yang masuk ke dalamnya, yang merupakan salah satu pertanyaan.
davitenio

34

The Filesystem Hierarchy Standard entri di Wikipedia membantu saya menjawab pertanyaan yang sama ketika saya memiliki itu, ditambah ia memiliki meja yang sangat jelas.

Kutipan dari halaman 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Diperoleh pada 19 Juni 2019; permalink .


17

The sbindirektori berisi program yang umumnya sistem administrasi saja. Program untuk pengguna biasa tidak boleh masuk di dalamnya.

Beberapa program diperlukan saat startup, dan berakhir di /bin/atau /sbin/. Ini harus tersedia sebelum sistem file dipasang. Hal-hal seperti mount, dan fsckyang diperlukan untuk memeriksa dan me-mount sistem file harus ada di sana.

Sebagian besar program yang dikemas berakhir pada /usr/bin/dan /usr/sbin/. Ini mungkin pada sistem file selain dari sistem file root. Dalam beberapa kasus mereka mungkin berada pada drive yang dipasang jaringan.

Program dan skrip lokal termasuk dalam /usr/local/bin/dan /usr/local/sbin/. Ini mengidentifikasi mereka sebagai jelas non-standar, dan mungkin hanya tersedia di situs.

Untuk penjelasan lebih lanjut, coba jalankan perintah man hieryang harus memberikan deskripsi tentang hierarki sistem file yang direkomendasikan untuk distribusi Anda. Anda mungkin juga ingin membaca tentang Hirarki Sistem File di Wikipedia


1
+1 Penjelasan yang sangat singkat jika top sedikit terlalu banyak.
CppLearner

"Program dan skrip lokal termasuk dalam / usr / local / bin / dan / usr / local / sbin /" - Maksud Anda program lokal seperti pada "sama sekali bukan bagian dari OS, tetapi saya memutuskan untuk menginstalnya dan ingin menggunakannya "?
Jim Aho

11

Pada tahun 1970-an, UNIXada semua executable resmi di /bindan /usr/binmerupakan lokasi di bawah direktori home pengguna (misalnya /usr/dmr) yang tersedia bagi setiap pengguna untuk menyimpan binari sendiri yang mungkin juga menarik bagi orang lain.

Hasil dari pembukaan ini /usr/binadalah junk yard dari perangkat lunak tidak berdokumen dan karenanya Stephen Bournemenulis cron scriptyang memeriksa binari baru setiap malam dan menghapus semua binari yang tidak memiliki dokumentasi atau yang telah diperbarui tanpa memperbarui dokumentasinya juga.

Pada akhir 1970-an, /usr/bindiintegrasikan ke dalam distribusi basis OS dan orang-orang mulai menggunakan /usr/local/binuntuk tujuan pembukaan sebelumnya /usr/bin.

Setelah beberapa saat, sysadmin digunakan /usr/local/binuntuk menyimpan non-localperangkat lunak yang diimpor dari jaringan (mis. USENET) dan karena perusahaan UNIX tidak suka mengulangi kesalahan yang sama seperti /usr/binlagi, ada konferensi hierarki sistem file sekitar 1987 di mana semua perusahaan UNIX setuju menyerah /usr/local/bindan menggunakan /opt/<vendor>/bingantinya.

Sayangnya, distro Linux tidak mengikuti keputusan ini ....


Meskipun sangat menarik, semua ini bahkan tidak mencoba menjawab pertanyaan yang diajukan yang bukan tentang /optdan bukan tentang UNIX tetapi tentang Linux. Ini seperti menjawab "Mengapa mobil memiliki 4 roda?" dengan "Sepeda punya 2! Sayangnya, mobil tidak." yang tidak membantu OP memahami mengapa mobil memiliki 4.
terdon

2
Jika Anda tidak dapat menggunakan penjelasan yang diberikan sebagai penjelasan untuk latar belakang Linux dan fakta bahwa Linux suka meniru UNIX, Anda mungkin kehilangan latar belakang yang diperlukan.
schily

1
Menarik, tetapi sesuatu yang membuat saya bingung dan yang mungkin juga hanya historis. Saat ini, mengunduh nampan secara online, dan nampan perusahaan tidak jauh berbeda. Jika Joe Blow membuat program dan saya mengunduhnya, mengapa tidak memasukkannya ke / opt / JowBlow / bin alih-alih / usr / local / bin. Apakah ini masalah penyedia tepercaya versus tidak tepercaya? Sepertinya tidak masuk akal bagi saya.
Didier A.

1
Saya berharap saya tahu sejarah 'tepat' ini beberapa tahun yang lalu. a) Saya bertanya-tanya mengapa AIX menghindari / usr / local, menggunakan / opt / IBM dan / opt / ibm dan bullfreeware menggunakan / opt / freeware - dan mengapa saya HARUS menggunakan jalur yang berbeda (bukan hanya / opt / * sbin). Seperti semi-relevansi dengan Linux - alat GNU yang lebih baik - default --prefix di auto-tools adalah / usr / local. Autotool yang terlalu buruk (automake, autoconf, dll. Tidak mengikuti ... Tapi kita semua bertahan dan belajar di mana distrub. || vendor menempatkan program mereka.
Michael Felt

Bisakah kita mengadakan satu lagi konferensi ini? Kali ini saja, SEMUA ORANG MENDENGARKAN!
MemphiZ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.