Di Windows, drive sistem C:
memiliki direktori program_files
, di mana setiap program memiliki direktori sendiri.
Di Linux, di bawah /usr/
dan /usr/local/
, ada /bin, /etc, /share, /src
, dll.
Jadi di windows, semua file dari setiap program dikelompokkan dalam direktori yang sama, sedangkan di Linux, file dengan tipe yang sama dari semua program tersebut.
Saya merasa cara Windows mengatur program yang diinstal lebih logis daripada cara Linux, dan dengan demikian program yang diinstal lebih mudah dikelola secara manual.
Apa manfaat dari cara Linux mengatur file program yang diinstal? Terima kasih.
Saya memiliki pertanyaan ini ketika memiliki masalah tentang Bagaimana mengatur program yang terinstal di $ HOME untuk mencari shell ketika menjalankannya? , di mana saya mencoba untuk mengatur program saya di $HOME
jalan Windows, tetapi memiliki masalah menentukan jalur pencarian untuk program tersebut.
Jawaban:
Di Linux, lokasi yang berbeda biasanya, jika dirawat dengan baik, mencerminkan beberapa logika. Misalnya.:
/bin
berisi alat (program) paling dasar/sbin
berisi program admin paling dasarKeduanya berisi perintah-perintah dasar yang digunakan oleh boot dan pemecahan masalah mendasar. Dan di sini Anda melihat perbedaan pertama. Beberapa program tidak dimaksudkan untuk digunakan oleh pengguna biasa.
Kemudian lihat
/usr/bin
. Di sini Anda harus menemukan pilihan perintah (program) yang lebih besar, biasanya lebih dari 1000 di antaranya. Mereka adalah alat standar, tetapi tidak sepenting yang ada di/bin
dan/sbin
./usr/bin
berisi perintah, sementara file konfigurasi berada di tempat lain. Ini memisahkan entitas fungsional (program) dan konfigurasi mereka dan file lainnya, tetapi dalam hal fungsionalitas pengguna, ini berguna, karena memiliki perintah yang tidak dicampur dengan yang lain memungkinkan penggunaan sederhana dariPATH
variabel yang menunjuk ke executable. Ini juga memperkenalkan kejelasan. Apa pun yang harus dieksekusi.Lihatlah saya
PATH
,Tepatnya ada enam lokasi yang berisi perintah yang dapat saya panggil secara langsung (mis. Bukan dengan jalurnya, tetapi dengan nama yang dapat dieksekusi).
/home/tomas/bin
adalah direktori pribadi saya di folder rumah saya untuk executable pribadi saya./usr/local/bin
Saya akan jelaskan secara terpisah di bawah ini./usr/bin
dijelaskan di atas./bin
juga dijelaskan di atas./usr/local/games
adalah kombinasi/usr/local
(yang akan dijelaskan di bawah) dan game/usr/games
adalah game. Tidak dicampur dengan executable utilitas, mereka memiliki lokasi masing-masing.Sekarang untuk
/usr/local/bin
. Yang ini agak licin, dan sudah dijelaskan di sini: Apa itu / usr / local / bin? . Untuk memahaminya, Anda perlu tahu bahwa folder tersebut/usr
mungkin dibagikan oleh banyak mesin dan dipasang dari lokasi bersih. Perintah-perintah di sana tidak diperlukan pada saat bootup, seperti disebutkan sebelumnya, tidak seperti yang ada dalam/bin
, sehingga lokasi dapat dipasang pada tahap selanjutnya dari proses bootup. Ini juga dapat dipasang dengan mode read-only./usr/local/bin
, di sisi lain, adalah untuk program yang diinstal secara lokal, dan perlu ditulis. Jadi, sementara banyak mesin jaringan mungkin berbagi/usr
direktori umum , masing-masing dari mereka akan memiliki/usr/local
mount sendiri di dalam common/usr
.Akhirnya, lihat pada
PATH
pengguna root saya:Ini berisi ini:
/usr/local/sbin
, yang berisi perintah admin dari tipe tersebut/usr/local
/usr/local/bin
, yang sama dengan yang biasa digunakan pengguna. Sekali lagi, tipe mereka dapat digambarkan sebagai/usr/local
./usr/sbin
adalah utilitas administrasi yang tidak penting./usr/bin
adalah administrasi yang tidak esensial dan utilitas pengguna reguler./sbin
adalah alat admin penting./bin
adalah admin dan alat penting pengguna biasa.sumber
/home/tomasz/bin/
, lihat unix.stackexchange.com/questions/431793/…/bin
dan/usr/bin
memang untuk menghindari masalah dengan/usr
direktori yang dipasang jaringan , pemisahan/usr
dan/usr/local
untuk membedakan antara file yang disediakan vendor (/usr
) dan file yang diinstal secara manual pada mesin itu sendiri (/usr/local
) dan tidak ada hubungannya dengan masalah pemasangan jaringan. Apakah ini akurat?/usr
-off-a-network (vs/usr/local
being, well, local ) bukan tidak pernah terdengar dari.Saat ini saya pikir ini adalah warisan sejarah dari UNIX klasik.
Dalam versi UNIX pertama, program tidak begitu besar seperti saat ini. Program sering terdiri dari satu file yang dapat dieksekusi yang menggunakan pustaka sistem. Jadi, tidak ada yang memikirkan program yang akan terdiri dari beberapa perpustakaan sendiri. Perpustakaan utama adalah perpustakaan C dan setiap program tahu tentang lokasi itu.
Juga, lingkungan UNIX dianggap sebagai produk jadi (untuk menyiapkan dokumentasi). Oleh karena itu path-s ke semua alat diperbaiki.
Beberapa manfaat dari jalur tetap dalam HDD (Hard Disk Drive) hari hadir di saat ini. Jika FSH (File System Hierarchy) terpecah pada partisi disk terpisah dan meletakkan partisi dengan binari dan pustaka di dekat sektor utama HDD, maka waktu mulai program akan sedikit lebih cepat.
sumber
/usr/bin
, file data statis/usr/share
dan file yang dapat dimodifikasi/var
atau/usr/var
berarti bahwa langkah-langkah keamanan dapat digunakan untuk menegakkan bahwa tidak ada di dalamshare
atauvar
yang dapat dieksekusi (dengan menggunakannoexec
flag untuk mount mereka); bahwa tidak ada yang di luarvar
dapat dimodifikasi (pada sistem yang menggunakandm_verity
atau tindakan serupa untuk menghasilkan media yang ditandatangani, hanya baca); dll.Apa yang Anda lihat sebagai sistem mirip Unix modern tidak terlalu tradisional.
Biasanya, akan ada hirarki yang cukup minimal
/
dan/usr
hanya dengan utilitas sistem, dan program kemudian diinstal secara terpisah ke dalam subdirektori/usr/local
, dan kemudian dibuat tersedia dengan membuat tautan simbolik.Pengaturan yang sangat khas untuk perangkat lunak GNU adalah untuk dikompilasi dan diinstal
Utilitas gudang GNU membuat tautan simbolis untuk membuat perangkat lunak tersedia di jalur standar, tanpa harus menambahkan direktori ke variabel PATH (seperti Windows, dan cruft cenderung menumpuk di sana).
Namun distribusi Linux modern mengirimkan semuanya sebagai paket yang sudah jadi, sehingga program telah menjadi bagian dari "sistem". Karena manajer paket menangani instalasi, tidak perlu tautan simbolis, dan memisahkan program tidak memiliki tujuan yang berguna (tetapi akan memperlambat startup program karena banyak direktori kecil harus dipindai).
Jika Anda ingin menginstal perangkat lunak ke direktori home Anda, saya sarankan Anda juga menggunakan GNU stow - ini akan memungkinkan Anda untuk menjaga program Anda terpisah, yang masuk akal jika Anda tidak menggunakan manajer paket.
Pengaturan tradisional saya untuk itu adalah satu direktori tempat
~/software/DIR
saya menginstal program, kemudian menggunakan stow insideDIR
untuk membuat~/software/bin
,~/software/share
dll. Ini berarti saya hanya perlu menambahkan~/software/bin
ke variabel PATH untuk mendapatkan semua perangkat lunak yang saya instal.Menggunakan:
untuk menginstal jika program mengikuti konvensi GNU.
sumber
Anda tampaknya berbicara tentang gaya membagi file individu dengan tujuan (
/usr/bin
untuk executable,/usr/lib
untuk perpustakaan) daripada dengan paket aplikasi (C ++ compiler dalam satu dir, program editing gambar di yang lain). Sementara dalam sistem Unix banyak alasan untuk sejarah ini, ada juga kekuatan saat ini yang cenderung membuat sistem seperti Unix condong ke arah ini: manajer paket yang mengelola sebagian besar program pada suatu sistem.Pada Windows, secara historis dan masih cukup banyak saat ini, aplikasi telah bertanggung jawab untuk menyediakan installer mereka sendiri dan, terutama, uninstaller, dan bahkan sekarang sering tidak mendaftarkan diri dengan daftar aplikasi pusat. Dalam situasi seperti ini, umumnya lebih baik bagi aplikasi untuk memiliki direktori "sendiri" untuk sebanyak mungkin file-nya. Ini membantu menghindari konflik dengan aplikasi lain, meskipun ini tidak selalu berhasil (terutama dalam kasus DLL ).
Sistem Unix, di sisi lain, sejak tahun 90-an umumnya masing-masing memiliki manajer paket tunggal yang diterima dan kelompok yang menyediakan sejumlah besar perangkat lunak yang biasa digunakan melalui manajer paket ini. (Manajer paket resmi untuk berbagai Unix termasuk
yum
danapt
untuk sistem Linux,pkgsrc
untuk NetBSD, danports
untuk FreeBSD. Seringkali sistem Unix komersial juga berakhir dengan manajer paket tidak resmi tetapi juga diterima secara luas, sepertibrew
untuk MacOS.)Manajer paket ini memiliki keunggulan yang mereka dapat dan lakukan melacak setiap file pada sistem di berbagai subdirektori yang mereka "miliki." Karena satu grup menetapkan nama dan lokasi setiap file di sini, mereka semua dapat menggunakan sekumpulan direktori kecil yang dibagikan di antara mereka. Ini menawarkan berbagai keuntungan, terutama di bidang berbagi file antara aplikasi dan menjaga jumlah jalur yang Anda perlukan untuk mencari perpustakaan dan file yang dapat dieksekusi.
Yang mengatakan, ada tradisi panjang instalasi "direktori terpisah per aplikasi" di Unix juga, biasanya di bawah
/opt
direktori.sumber