Perbedaan antara / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin

283

Saya memiliki enam direktori dengan file perintah. Ini adalah /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bindan /usr/local/sbin.

Apa perbedaan di antara ini? Jika saya menulis skrip saya sendiri, di mana saya harus menambahkannya?


Terkait:


sumber
1
Pertanyaan terkait: unix.stackexchange.com/questions/8656/…
Gabriel Staples
@Keelan Pertanyaan Anda dekat dengan pertanyaan yang saya posting setahun lalu +: askubuntu.com/questions/830074/…
WinEunuuchs2Unix

Jawaban:

349

Silakan merujuk ke Filesystem Hierarchy Standard (FHS) untuk Linux untuk ini.

  • /bin: Untuk binari yang dapat digunakan sebelum /usrpartisi dipasang. Ini digunakan untuk binari sepele yang digunakan pada tahap boot paling awal atau yang perlu Anda miliki dalam mem-boot mode single-user. Pikirkan binari seperti cat, ls, dll

  • /sbin : Sama, tetapi untuk binari dengan hak superuser (root) diperlukan .

  • /usr/bin: Sama seperti yang pertama, tetapi untuk binari umum sistem-lebar .

  • /usr/sbin : Sama seperti di atas, tetapi untuk binari dengan hak superuser (root) diperlukan.


jika saya menulis skrip saya sendiri, di mana saya harus menambahkan ini?

Bukan dari salah satu di atas. Anda harus menggunakan /usr/local/binatau /usr/local/sbinuntuk skrip yang tersedia di seluruh sistem. The localpath berarti itu tidak dikelola oleh paket sistem (ini adalah kesalahan paket Debian / Ubuntu).

Untuk skrip yang dijalankan pengguna, gunakan ~/bin(folder tempat sampah pribadi di direktori home Anda)

FHS mengatakan untuk /usr/local:

Hirarki tersier untuk data lokal, khusus untuk host ini . Biasanya memiliki subdirektori lebih lanjut, misalnya, bin/, lib/, share/.

gertvdijk
sumber
jadi / bin adalah tempat semua file inti diinstal. seperti ls, cat, pwd, dll? Jadi, / usr / bin adalah tempat aplikasi yang diinstal pengguna? apa sajakah contoh dari apa yang seharusnya ada di / usr / bin?
Patoshi パ ト シ
1
Apakah menempatkan skrip /binmenyebabkan masalah? Saya telah memindahkan skrip saya sesuai dengan jawaban Anda tetapi saya masih penasaran
Rumesh
5
@RumeshSudhaharan Anda tidak boleh melakukan itu, karena dikelola oleh manajemen paket. Jika ada paket lain yang juga ingin menggunakan jalur itu, itu akan menimpa file Anda. File dalam paket tidak pernah bisa tumpang tindih (setidaknya untuk repositori resmi), jadi Anda lebih aman saat memasang di jalur lokal. Juga, itu hanya untuk kenyamanan dan keamanan Anda sendiri. Di jalur lokal Anda tidak dapat mengacaukan sistem dengan cara yang buruk dan Anda tidak dapat secara tidak sengaja mengganti sistem biner.
gertvdijk
8
Saya suka penjelasan di halaman kesalahan:Severity:Serious Certainty:Certain
cutrightjm
1
Saya telah meletakkan beberapa file di / usr / local / bin dan saya dapat mengeksekusinya, namun saya tidak dapat mengeditnya, ls -latidak menunjukkan apa
M. Reza Nasirloo
6

Saya memiliki pertanyaan serupa sendiri setahun + yang lalu: Direktori terbaik untuk menempatkan skrip bash saya?

Direktori sistem untuk binari

man hier(hierarki) mencantumkan semua direktori. Untuk mendapatkan yang hanya untuk binari gunakan:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

Di mana menempatkan skrip Anda sendiri?

Agar semua pengguna dapat mengakses skrip Anda, Anda dapat memasukkannya /usr/local/bin. Ingatlah bahwa Anda memerlukan sudoakses untuk menambah / mengubah file di sini. Lihat: Apakah ada tempat standar untuk menempatkan skrip Linux khusus?

Untuk skrip ID pengguna Anda sendiri, masukkan /home/YOUR_NAME/bin. Ingatlah bahwa Anda harus membuat direktori ini terlebih dahulu dan meluncurkan kembali terminal untuk mendapatkan jalur yang secara otomatis diatur oleh ~/.profile. Lihat: Bagaimana cara menambahkan / home / nama pengguna / bin ke $ PATH?


Apa yang saya tahu saya tidak tahu

Saya sedang mempertimbangkan untuk mengambil beberapa skrip bash saya yang lebih kompleks di Ask Ubuntu dan menyiapkannya dengan menginstal skrip github. Berikut ini beberapa contoh:

Saya pikir skrip harus diinstal di /usr/bin$ PATH, tapi saya belum yakin di tempat yang tepat.

WinEunuuchs2Unix
sumber
1
Saya menghargai upaya Anda, tetapi, kecuali bagian "Apa yang saya tahu saya tidak tahu", Anda mengulangi jawaban gertvdijk.
danzel
1
@danzel Saya pikir bagian kuncinya adalah man hierbagian yang tidak dijawab oleh jawaban gertvdijk. yaitu Anda bisa mendapatkan struktur hierarki direktori di baris perintah tanpa harus membacanya di web (yaitu di sini).
WinEunuuchs2Unix
1
itu informasi yang menarik, saya setuju. Tetapi gertvdijk telah menyebutkan Standar Hierarki Filesystem (yang man hiermerupakan kutipan IMO yang tidak memadai secara informasi). Namun, ini mungkin pendapat pribadi saya.
danzel
@danzel Saya setuju situs web memiliki analisis yang lebih mendalam daripada yang ada di hard drive kami. Saya hanya mencoba menunjukkan informasi ada di hard drive kami tanpa menggunakan Internet. Selain itu tautan wikipedia yang dikutip hilang /usr/X11R6/bin dan /usr/local/bintermasuk dalam man heir.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, ulang para terakhir; Mengapa tidak /usr/local/binkarena Anda bukan pengelola paket?
Pacerier