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/sbin
dan /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.
Jawaban:
1. Struktur direktori
Ini harus dicakup dalam Standar Hirarki Sistem Files ( 2.3 PDF )
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)
sumber
/usr/(s)bin
cenderung dipasang dari sistem file jaringan. Itu sebabnya semua yang diperlukan untuk mem-boot mesin harus ada/(s)bin
. Sebagian besar/usr/local
sekarang digunakan untuk program yang Anda instal di luar manajer paket (yang seharusnya tidak Anda lakukan).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.
/sbin
cenderung 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/sbin
binari 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/local
dapat 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.
sumber
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.sumber
Pandangan saya tentang arti direktori (dari pengalaman dengan Debian GNU Linux) adalah ini:
Perbedaan pertama:
s
adalah untuk pengguna supers
sebelumbin
direktori menunjukkan bahwa itu berisi alat yang biasanya hanya berguna bagi administrator. Perhatikan bahwa egifconfig
juga termasuk dalam kategori ini dan saya suka memohonifconfig
sebagai pengguna biasa (untuk memeriksa apakah saya mendapat alamat IP / konektivitas jaringan) yang membuat perbedaan ini tidak sesulit kelihatannya.Perbedaan kedua:
local
untuk "Data lokal"Dalam praktiknya, perbedaan paling penting di sini adalah bahwa manajer paket OS (seperti APT) menginstal paket ke
/usr
struktur normal dan membiarkannya/usr/local
tidak terpengaruh. Ini memungkinkan paket yang dikompilasi secara lokal atau skrip internal perusahaan yang disediakan oleh administrator sistem untuk ditempatkan di bawah di/usr/local
mana mereka tidak akan pernah mengganggu file yang dikemas dengan benar.Dapat diperdebatkan apakah
/usr/local
harus mengganti file yang ada dari/usr
struktur normal , lihat Apakah berbahaya memiliki / usr / local / bin di depan / usr / bin di PATH seseorang? untuk beberapa detail tentang ini.Perbedaan ketiga: Level teratas
/bin
dan/sbin
direktori.Di Debian, sebenarnya ada yang disebut UsrMerge . Dulu ada perbedaan itu
/bin
dan/sbin
tersedia dalam proses boot sebelumnya (bayangkan/usr
berada pada perangkat jaringan atau partisi yang berbeda, RAID dll), tetapi saat ini beberapa sistem Linux boot dengan baik tanpa/usr
itu sebabnya saya akan mempertimbangkan perbedaan antara top- level dan/usr
direktori 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
,info
dan file README yang mendukung berfungsi seperti yang diharapkan.Lebih mudah untuk mengandalkan program yang dipasang di tempat yang tetap. Semua orang menulis
#!/bin/sh -e
atau 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_PATH
mengarahkan 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).
sumber
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
dan instal dengan
Anda biasanya bisa melakukannya
yang menghapus file dari sistem file.
sumber
make install
output dan menghapus file yang disebutkan di sana.