Apa arti dari / usr / sbin, / usr / local / sbin dan / usr / local / bin?

23

Mari kita perjelas dengan semua folder bin dan sbin (dari standar hirarki filesystem):

  • /bin adalah untuk binari tingkat sistem
  • /sbin adalah untuk binari tingkat sistem lainnya yang sebagian besar untuk boot loader dan administrator sistem
  • /usr/bin adalah untuk binari tidak penting
  • /usr/sbin- ini adalah awal kekacauan - bukan alat penting untuk administrator sistem? Apa artinya? Untuk eksperimen?
  • /usr/local/bin - tidak ada kata tentang folder ini
  • /usr/local/sbin- program administrasi sistem yang dipasang secara lokal. Lagi? Bagaimana dengan /usr/sbin?

Jadi pertanyaannya adalah: Mengapa ada begitu banyak direktori dan apa artinya /usr/sbin, /usr/local/sbindan /usr/local/bin?

Banyak program didistribusikan melalui arsip dan kami harus membangunnya dari kode sumber. Biasanya mereka memiliki makefile sehingga cukup mudah. Proses ini melibatkan pembuatan file di usr / local / lib, usr / local / bin ... usr / local / apa pun tanpa membuat folder spesifik untuk program yang diberikan.

Kenapa gitu?

Saya pikir itu tidak benar karena jika kita perlu menghapus program, kita harus menghapus setiap file secara manual jika pembuat program tidak menanganinya.

Sergey
sumber
Sergey, silakan gunakan sintaks penurunan harga untuk menulis posting di Super User. Memiliki HTML di dalamnya membuat mereka sangat sulit untuk membaca dan mengedit dalam teks biasa.
slhck
Oke, saya akan coba
Sergey
Saya benci sistem file direktori. mengapa tidak ada yang menciptakan sistem file di mana file hanya ditandai? Di atasnya, direktori tidak masuk akal karena inode memungkinkan file terfragmentasi. Direktori harus menjadi bagian yang dialokasikan dari ruang memori hard drive, bukan jalur, sebagian besar seperti partisi.
jokoon
Pada [FilesystemQA] ada penjelasan ini: askubuntu.com/questions/138547/…
Btw. cara normal untuk menangani masalah "uninstallability" dari program yang dibuat secara lokal adalah dengan membuat paket lokal untuk mereka. Namun, proses ini sangat tergantung pada distribusi Linux. Jika aplikasi mendukung mode penyebaran itu, suplemen modern ke sistem pengemasan yang sudah ada seperti Flatpack atau Docker muncul di pikiran.
linux-fan

Jawaban:

23

1. Struktur direktori

Ini harus dicakup dalam Standar Hirarki Sistem Files ( 2.3 PDF )

/ bin / binari perintah esensial yang perlu tersedia dalam mode pengguna tunggal;
            untuk semua pengguna, misalnya, cat, ls, cp

/ sbin / binari sistem esensial, misalnya, init, ip, mount.

/ usr / bin / binari perintah Non-esensial (tidak diperlukan dalam mode pengguna tunggal); 
            untuk semua pengguna

/ usr / sbin / binari sistem yang tidak penting, mis. daemon untuk berbagai layanan jaringan.

/ usr / local / Hierier tersier untuk data lokal, khusus untuk host ini. 
            Biasanya memiliki subdirektori lebih lanjut, misalnya, bin /, lib /, bagikan /

2. Instalasi

Saya menggunakan manajer paket sedapat mungkin (misalnya yum atau apt-get). Ini dimungkinkan untuk sejumlah besar aplikasi, dalam beberapa kasus Anda mungkin harus menambahkan repositori. Pilihan kedua saya adalah paket tingkat lebih rendah seperti RPM dan kompilasi dari sumber akan menjadi pilihan terakhir saya (tetapi beberapa orang lebih suka ini)

Beberapa manajer paket dapat menginstal dari RPM (mis. yum install oddity.rpm)

Jika Anda mengkompilasi dari sumber, itu mungkin bukan langkah besar untuk membuat paket Anda sendiri sehingga installer sistem tahu apa yang telah Anda lakukan.

Maka masalah Anda berkurang menjadi misalnya yum remove packagename

Alternatifnya adalah menyimpan dokumentasi yang baik tentang semua aktivitas sysadmin yang dilakukan (saya tetap menyimpan jurnal dalam file teks)

RedGrittyBrick
sumber
3
Saya masih belum mendapatkan perbedaan antara usr / sbin, usr / local / bin dan usr / local / sbin. usr / local dikatakan khusus untuk host ini, bukankah usr / sbin, usr / bin juga khusus untuk host? pertanyaan kedua adalah tentang program-program yang tidak ada dalam repo - membuat uninstall tidak berfungsi selalu - jadi saya bertanya bagaimana cara menghapusnya?
Sergey
3
@Sergey Ini bersejarah. /usr/(s)bincenderung dipasang dari sistem file jaringan. Itu sebabnya semua yang diperlukan untuk mem-boot mesin harus ada /(s)bin. Sebagian besar /usr/localsekarang digunakan untuk program yang Anda instal di luar manajer paket (yang seharusnya tidak Anda lakukan).
Let_Me_Be
untuk program yang diinstal secara manual yang Anda tidak perlu lagi hanya melakukan penghapusan rutin (rm). / usr / local adalah untuk data spesifik mesin seperti untuk sistem booting jaringan / usr yang sering berupa pembagian jaringan. @Let_Me_Jadi menginstal program dari luar manajer paket baik-baik saja dan sering kali diperlukan.
Lamar B
@Sergey: Jika Anda memiliki dua komputer, diinstal dari media yang sama dan kemudian secara manual menambahkan beberapa perangkat lunak hanya ke salah satu dari mereka, secara tradisional ini akan masuk / usr / lokal karena lokal ke mesin itu dan bukan bagian dari "standar" serangkaian program yang disediakan oleh vendor. Seperti yang dikatakan orang lain, praktik historis ini saat ini tidak banyak diikuti oleh pembuat paket - saya kira perangkat lunak dalam repositori standar secara efektif diperlakukan lebih sebagai perangkat lunak opsional yang disediakan vendor daripada sebagai penyesuaian lokal yang diinstal pengguna.
RedGrittyBrick
3

Isi di semua direktori * / sbin cenderung hanya berguna untuk administrator sistem. Anda dapat mencegah mereka keluar dari PATH Anda jika Anda adalah pengguna normal.

Direktori yang berbeda tidak masuk akal jika Anda memiliki mesin unix tunggal pada disk tunggal, tetapi lebih masuk akal jika Anda memiliki sistem besar dan partisi yang berbeda. Ingatlah bahwa banyak kebiasaan ini dibuat pada tahun 80-an dan 90-an ketika sistemnya sedikit berbeda.

/sbincenderung sangat kecil. Ini adalah utilitas yang Anda butuhkan ketika Anda benar-benar disemprot. Anda meletakkan ini di partisi root minimal dengan / root dan / lib. Hal-hal di / sbin dulunya terhubung secara statis, karena jika partisi / usr Anda disembunyikan, semua aplikasi yang terhubung secara dinamis tidak berguna. fsck ada di sini dan terhubung secara statis. Jika Anda memiliki ketergantungan pada / usr, jelas Anda tidak dapat fsck / usr /. Tentu saja, jika partisi root disembunyikan, Anda sangat kacau. Inilah sebabnya mengapa ini adalah partisi sekecil itu - kecilkan peluang blok disk buruk dengan menggunakan sangat sedikit blok di sini.

/usr/sbinbinari adalah alat sysadmin umum tempat Anda setidaknya bisa masuk ke mode pengguna tunggal dan me-mount semua volume Anda. Mereka diizinkan untuk dihubungkan secara dinamis.

Partisi yang terpisah untuk / sbin (well, / sbin on / partisi) dan / usr juga lebih masuk akal ketika Anda ingat bahwa cadangan sangat mahal baik dalam waktu maupun untuk pita. Jika mereka berada di partisi yang terpisah, Anda dapat menjadwalkannya secara berbeda.

/usr/localdapat berupa sistem file jaringan. Jadi alat sysadmin yang ditulis secara lokal yang dapat dibagi di banyak mesin kadang-kadang masuk ke / usr / local / sbin. Jelas tidak ada utilitas perbaikan jaringan yang bisa masuk ke sana.

Sekali lagi, banyak hal yang lebih masuk akal pada mesin besar di lingkungan jaringan pada mesin yang dikelola dengan banyak volume, lebih sedikit dengan satu mesin Linux pada satu partisi root.

Homolka yang kaya
sumber
2

Anda seharusnya memiliki pertanyaan kedua menjadi pertanyaan terpisah di sini di Superuser. Ini tidak terkait dengan yang pertama.

Ya, memiliki file di semua tempat itu menyebalkan. Itu sebabnya ada banyak solusi pengemasan. RedHat menciptakan RPM yang digunakan di mana-mana. Solaris memiliki format paket mereka. HP / UX punya, dan ada banyak format paket lainnya. Simpan barang-barang di tempat yang tepat (/ usr / bin, / usr / lib) yang sesuai, tetapi memungkinkan penambahan dan penghapusan yang mudah.

Untuk sumber, dulu ada alat yang akan memungkinkan Anda mengkonfigurasi dan menginstal di subdir dari / usr / local dan itu akan menangani symlink ke / usr / local / bin untuk Anda. Karena proliferasi alat paket yang luas, ini kurang perlu, dan saya lupa nama mereka.

Beberapa orang suka menginstal di / opt / nama paket dan menyimpan semuanya bersama di sana. Bagusnya: semuanya ada dalam satu direktori dan uninstall adalah rm -rf /opt/packagename. Kelemahan dari ini adalah harus menambahkan / opt / nama paket / bin ke PATH semua orang, dan fakta bahwa orang biasanya tidak meletakkan / memilih pada partisi yang terpisah, dan Anda mengisi partisi root.

Homolka yang kaya
sumber
1
RPM digunakan di mana-mana? Bukankah lebih dekat dengan kebenaran untuk mengatakan bahwa format Debian digunakan di mana-mana?
iconoclast
Saya berpendapat bahwa RPM sama seperti DEB. Ini sangat tergantung pada tempat Anda bekerja: Di komunitas Open Source, saya pikir ada kecenderungan terhadap Linux Desktop dan Server Linux dengan paket berbasis Debian. Dalam lingkungan perusahaan, Linux sering sama dengan Red Hat yang kompatibel (yaitu CentOS, RHEL, Oracle Linux dll) atau didefinisikan sebagai "Red Hat atau SLES" dan dengan demikian sekali lagi semua RPM :)
linux-fan
1

Pandangan saya tentang arti direktori (dari pengalaman dengan Debian GNU Linux) adalah ini:

Perbedaan pertama: sadalah untuk pengguna super

ssebelum bindirektori menunjukkan bahwa itu berisi alat yang biasanya hanya berguna bagi administrator. Perhatikan bahwa eg ifconfigjuga termasuk dalam kategori ini dan saya suka memohon ifconfigsebagai pengguna biasa (untuk memeriksa apakah saya mendapat alamat IP / konektivitas jaringan) yang membuat perbedaan ini tidak sesulit kelihatannya.

Perbedaan kedua: localuntuk "Data lokal"

Dalam praktiknya, perbedaan paling penting di sini adalah bahwa manajer paket OS (seperti APT) menginstal paket ke /usrstruktur normal dan membiarkannya /usr/localtidak terpengaruh. Ini memungkinkan paket yang dikompilasi secara lokal atau skrip internal perusahaan yang disediakan oleh administrator sistem untuk ditempatkan di bawah di /usr/localmana mereka tidak akan pernah mengganggu file yang dikemas dengan benar.

Dapat diperdebatkan apakah /usr/localharus mengganti file yang ada dari /usrstruktur normal , lihat Apakah berbahaya memiliki / usr / local / bin di depan / usr / bin di PATH seseorang? untuk beberapa detail tentang ini.

Perbedaan ketiga: Level teratas /bindan /sbindirektori.

Di Debian, sebenarnya ada yang disebut UsrMerge . Dulu ada perbedaan itu /bindan /sbintersedia dalam proses boot sebelumnya (bayangkan /usrberada pada perangkat jaringan atau partisi yang berbeda, RAID dll), tetapi saat ini beberapa sistem Linux boot dengan baik tanpa /usritu sebabnya saya akan mempertimbangkan perbedaan antara top- level dan /usrdirektori menjadi sejarah yang menarik bagi Linux.

Akhirnya: Kelebihan dan masalah file "hamburan".

Benar-benar tidak ada jawaban "satu benar" untuk ini. Keuntungan dari sistem file Linux yang tersebar adalah:

  • Semua binari berada di beberapa direktori. Ini berarti Anda dapat memanggil setiap program dari shell. Bandingkan Windows, di mana orang selalu perlu mengedit %PATH%variabel lingkungan untuk menambahkan program apa pun yang menarik. Saya telah melihat lingkungan jalur yang sangat panjang pada Windows.

  • Semua perpustakaan berada di tempat sentral. Ini berarti mereka tidak perlu diinstal dua kali ketika digunakan oleh beberapa aplikasi.

  • Karena Linux dirancang untuk sebagian besar file sistem dilacak oleh manajer paket , tidak perlu menyimpan tinjauan umum file dari sudut pandang pengguna.

  • Karena standarisasi FHS, dokumentasi juga berada di tempat-tempat sentral yang memungkinkan sistem seperti man, infodan file README yang mendukung berfungsi seperti yang diharapkan.

  • Lebih mudah untuk mengandalkan program yang dipasang di tempat yang tetap. Semua orang menulis #!/bin/sh -eatau serupa di awal skrip dan hanya berfungsi . Pertimbangkan sebuah sistem di mana shell akan pergi ke direktori yang berbeda: Bagaimana orang tahu nama apa yang akan diambil? Jika tertarik, periksa berbagai cara untuk menginstal Perl atau LaTeX di Windows untuk melihat seberapa rumitnya ini ...

Kerugian yang saya temukan sejauh ini adalah ini:

  • Biasanya, lebih sulit untuk menjalankan aplikasi "dengan mudah" dalam arti "aplikasi portabel untuk Windows". Di Linux, tidak mudah untuk hanya menyalin program ke komputer lain ... seseorang harus memiliki paket (yang memerlukan izin root) atau berurusan dengan LD_LIBRARY_PATHmengarahkan aplikasi ke jalur pencarian yang berbeda untuk perpustakaan yang direquried.

  • Menginstal banyak versi dari program yang sama perlu didukung secara eksplisit sedangkan pada sistem dengan "satu direktori per program" ini sering kurang menjadi masalah.

  • Mengelola file tanpa manajer paket rentan kesalahan (sebagaimana telah disebutkan).

linux-fan
sumber
0

Untuk menjawab pertanyaan kedua Anda:
Biasanya program didistribusikan dengan yang disebut manajer paket . Pengelola paket biasanya mengambil paket biner (perangkat lunak yang dikompilasi untuk platform tertentu) dan melemparkannya ke direktori (ada beberapa yang mengunduh kode sumber, mengompilasinya di mesin Anda dan menginstalnya). Dengan demikian, manajer paket tahu di mana file-file milik "program" tertentu (paket) berada, dan ketika Anda ingin menghapus paket, manajer paket menangani pembersihan semuanya.
Bahkan ketika Anda mengkompilasi kode sumber Anda sendiri

make

dan instal dengan

make install

Anda biasanya bisa melakukannya

make uninstall

yang menghapus file dari sistem file.

Matej Repinc
sumber
make uninstall dapat dilakukan hanya di programmer menambahkan proses ini ke file make. pertanyaannya adalah - bagaimana cara menghapus yang mana make uninstall tidak berfungsi?
Sergey
1
Benar, tapi saya rasa cukup sulit untuk menemukan proyek serius tanpa menghapus instalasi di makefile (tidak pernah punya masalah dengan itu). Jika Anda mengkompilasi dari sumber, dan makefile tidak memiliki uninstall, maka saya pikir itu bukan cara yang mudah untuk melakukannya, tetapi Anda masih bisa menulis skrip yang mem-parsing make installoutput dan menghapus file yang disebutkan di sana.
Matej Repinc