Pertanyaan Apa alasan untuk direktori `/ usr`?


Apa alasan untuk "sumber daya sistem unix", atau /usr direktori, seperti yang dijelaskan sini, yang menduplikasi banyak nama direktori di bawah direktori root /?

Tujuan saya: Saya menginstal Oracle JDK untuk kesekian kalinya dan memutuskan kali ini untuk meletakkannya di bawah /home/user dan saya hanya membaca sedikit untuk melihat apakah itu adalah ide yang buruk pada mesin pengguna tunggal.


88
2018-05-02 16:46


asal


Direktori home Anda adalah tempat yang sempurna untuk menginstal perangkat lunak pihak ketiga sebagai non-root. - Lekensteyn
... Kesadaran yang menyedihkan karena kamu berpikir /usr berarti direktori "pengguna" yang tersembunyi selama bertahun-tahun ... - Govind Rai
Saya benar-benar berpikir itu "pengguna" sepanjang waktu ini. Seperti biner pengguna - Tanner Babcock


Jawaban:


Ada versi singkat dan versi panjang dari jawaban Anda ...

Versi pendek:

Seperti yang sudah dikatakan oleh tautan Anda, /usr adalah tempat untuk seluruh sistem, hanya-baca file. Jadi semua perangkat lunak yang Anda pasang ada di sana. Itu tidak menduplikasi nama apa pun / kecuali /bin dan /lib, tapi, awalnya, dengan tujuan berbeda: /bin, /lib hanya untuk binari dan pustaka diperlukan untuk boot, sementara /usr/bin, /usr/lib adalah untuk semua eksekutabel dan pustaka lainnya. (sekarang menjadi anak baik dan jangan bertanya tentang /sbin, ini adalah Versi Pendek setelah semua)

Saat ini, perbedaan antara "diperlukan untuk boot" telah berkurang, karena sebagian besar distro modern, termasuk Ubuntu, tidak dapat melakukan boot dengan benar tanpa beberapa file dari /usr. Dan itulah mengapa ada gerakan kuat menuju penggabungan /usr/bin dan /bin, jadi mungkin dalam waktu dekat (Ubuntu 12.10 mungkin?) /bin akan menjadi symlink ke /usr/bin.

Tapi mungkin kamu bingung /usr dan /usr/local? Karena ya, ada (dan seharusnya) a banyak nama direktori yang digandakan. Lebih lanjut tentang itu nanti ...

Versi panjang:

Kembali di tahun 70-an, di Unix (ya, Unix, jauh sebelum Linux), disket memiliki sedikit ruang (tidak ada HD, ingat?), Dan pada titik tertentu sistem binari tumbuh terlalu banyak dalam jumlah dan ukuran ke titik mereka tidak akan cocok dengan satu disk, dan pengembang harus membaginya di beberapa media dan dengan demikian membuat titik mount baru untuk mereka. /bin filesystem penuh, sehingga mereka menginstal binari baru di ... /usr/bin. Dan /usr adalah, pada waktu itu, ... pengguna direktori!

Setelah perpecahan (yang hampir memalukan dan sering dikatakan sebagai lelucon) terjadi, mereka mulai membuat pembenaran "buatan" (dan kriteria) untuk memutuskan apa yang akan dilakukan /bin dan apa yang akan terjadi /usr/bin. Aturan informal adalah: "penting" barang pergi ke /bin, "sisanya" pergi ke /usr/bin. Sama dengan /lib. Itu tidak lama sebelumnya /usr menjadi penuh sesak dengan direktori yang berhubungan dengan sistem, dicampur dengan user-dirs. Demikian /home lahir, untuk menjaga semua dir yang berhubungan dengan pengguna dan menyimpannya /usr bersih untuk sistem "barang" saja.

Ini jauh sebelum FHS ada. Ketika diciptakan, ia merangkul (dan meresmikan) tradisi saat ini dan menyimpan nama itu /usr, meskipun pada saat itu sudah tidak ada hubungannya dengan "pengguna" lagi. Jadi ya, nama-nama mewah "U NIX s milik kami r epository "atau"U NIX s ystem r Sumber-sumber "semuanya adalah nama-nama yang dibuat-buat, dan sudah terlambat untuk mengganti nama itu." Tetapi tidak terlambat untuk menggabungkan /binuntuk itu)

"Ok, bagaimana dengan /usr/sbin? ", Anda bertanya. Sial, aku berharap kau lupa. Baik... /usr/sbin adalah untuk perintah yang hanya bisa (atau hanya bermakna saat) dieksekusi oleh root pengguna, suka mount dan fdisk.

"Tapi bukankah itu hampir sama dengan /bin? ". Ya, tentu, tapi ...

"Tunggu, lalu mengapa ada /sbin terlalu? Tidak masuk akal! ". Yah, itu karena ... err .. humm ..

Lihatlah, monyet berkepala 3 di belakang Anda!

Ok, semoga, Anda cukup terganggu. Bergerak...

(jika Anda berpikir saya curang, ya, Anda benar. Tapi begitu juga "resmi" jawaban "perintah penting yang hanya bisa dijalankan oleh root dan harus tersedia bahkan sebelum Anda me-mount /"). Kebenarannya adalah: garisnya memang buram, dan ada banyak nama warisan yang hanya" macet "dan sekarang cukup sulit untuk dihilangkan.

Lebih lanjut tentang Kasus untuk /usr menggabungkan, dari systemd dokumen:

Pembenaran historis untuk / bin, / sbin dan / lib terpisah dari / usr tidak lagi berlaku hari ini. Mereka dipisahkan untuk memiliki alat yang dipilih pada hard disk yang lebih cepat (yang kecil, karena lebih mahal) dan mengandung semua alat yang diperlukan untuk me-mount partisi lebih lambat / usr. Hari ini, partisi terpisah / usr sudah harus dipasang oleh initramfs selama boot awal, sehingga membuat pembenaran untuk split-off diperdebatkan. Selain itu, banyak alat di / bin dan / sbin di status quo sudah kehilangan kemampuan untuk menjalankan tanpa pra-mount / usr. Tidak ada alasan yang sah lagi untuk memiliki sistem operasi tersebar di beberapa hierarki, itu kehilangan tujuannya.

Dan pembacaan yang luar biasa tentang /usr split dan alasannya, oleh Rob Landley:

Memahami bin, sbin, usr / bin, usr / sbin split

Sekarang

Saat ini, mengenai pemasangan direktori, cara terbaik Anda untuk memahami adalah dengan berpikir seperti ini:

  • /usr - semua sistem, file read-only yang diinstal oleh (atau disediakan oleh) OS

  • /usr/local - sistem, read-only file yang diinstal oleh administrator lokal (biasanya, Anda). Dan itulah mengapa sebagian besar nama direktori berasal /usr digandakan di sini.

  • /opt - Kekejaman yang dimaksudkan untuk sistem-lebar, hanya-baca dan mandiri perangkat lunak. Artinya, perangkat lunak yang tidak membagi file mereka berakhir bin, lib, share, include seperti perangkat lunak yang berperilaku baik seharusnya.

  • ~/.local - mitra per pengguna dari /usr/local, yaitu: perangkat lunak yang diinstal oleh (dan untuk) setiap pengguna

  • ~/.local/opt - mitra per pengguna dari /opt

Jadi di mana menginstal perangkat lunak?

Daftar di atas sudah setengah jawaban dari pertanyaan Oracle JDK Anda, setidaknya itu memberikan beberapa petunjuk. Daftar periksa untuk "Di mana saya harus menginstal perangkat lunak X?" berjalan dengan:

  • Apakah ini adalah perangkat lunak direktori tunggal yang sepenuhnya berdiri sendiri, seperti Eclipse IDE dan aplikasi java yang diunduh lainnya, dan Anda ingin itu tersedia untuk semua pengguna? Kemudian instal di /opt

  • Sama seperti di atas, tetapi Anda tidak peduli dengan pengguna lain dan saya ingin menginstal untuk pengguna Anda sendiri? Kemudian instal di ~/.local/opt

  • File-filenya terbagi atas beberapa dir, seperti bin dan share, seperti perangkat lunak tradisional yang dikompilasi dan diinstal ./configure && make && sudo make install, dan harus tersedia untuk semua pengguna? Kemudian instal di /usr/local

  • Sama seperti di atas, tetapi hanya untuk pengguna Anda? Kemudian instal di ~/.local

  • Perangkat lunak yang diinstal oleh OS, atau melalui pengelola paket (seperti Pusat Perangkat Lunak), dan yang paling penting, yang mana setiap modifikasi lokal mungkin ditimpa ketika memperbarui manajer untuk meng-upgrade ke versi baru? Ini pergi ke /usr

Catatan:

  • Ini menjelaskan mengapa default prefix install untuk perangkat lunak yang dikompilasi adalah /usr/local, dan mengapa Anda harus mengubahnya ./configure --prefix=$HOME/.local saat menginstal perangkat lunak hanya untuk pengguna Anda sendiri

  • Anda mungkin telah memperhatikan hal itu semua direktori di atas adalah hanya-baca (kecuali, tentu saja, ketika Anda menginstal / menghapus perangkat lunak). File yang dapat ditulis (seperti file konfigurasi) biasanya digunakan /etc (untuk perangkat lunak sistem-lebar) dan ~/.config (untuk pengaturan per pengguna). Meskipun banyak perangkat lunak warisan (dan, sayangnya, beberapa modern juga) digunakan ~/.<software-name>, mengacaukan folder rumah Anda dengan miliaran dirs dan file.

  • ~/.local dan ~/.config bukan bagian dari spesifikasi FHS. FHS tidak berhubungan dengan folder home pengguna. Mereka adalah upaya XDG, organisasi standar lain yang diarahkan untuk Desktop Environment (seperti Gnome, KDE, dan Unity), untuk mencoba menetapkan beberapa konvensi mengenai struktur rumah pengguna. Tidak semua perangkat lunak mengikutinya (sebagai contoh, ~/.local/bin tidak ada di default pengguna $PATH, sementara dengan logika seharusnya), dan tidak ada pengguna yang dipaksa untuk mengikutinya, tetapi keduanya mendapatkan banyak manfaat interoperabilitas jika mereka melakukannya.

Saya harap ini membantu untuk memperjelas hal-hal sedikit. Jangan ragu untuk bertanya apa pun sehingga saya dapat meningkatkan jawabannya!

(dan saya juga berharap orang-orang puritan tidak membunuh saya untuk bahasa dan penjelasan yang sangat tidak resmi. Itu disengaja, dan itu pasti memiliki banyak ketidakakuratan, tapi saya percaya itu adalah cara yang baik untuk membuat pendatang baru memiliki pemahaman gambaran singkat tentang penginstalan rationales direktori)


135
2018-05-11 20:49



Anda menyimpulkannya dengan sangat singkat dan ya, itu benar - jawaban lengkapnya adalah cerita yang jauh lebih panjang daripada yang di atas! - papashou
Kenapa tidak? Logika yang sama berlaku: penyerang dapat membuat dieksekusi di bawah rumah atau subdirektori, yang diberi nama setelah perintah sistem. - ignis
@ignis: jika penyerang memiliki akses untuk membuat dan memodifikasi file di bawah rumah pengguna, maka pengguna tersebut sudah sepenuhnya dikompromikan, dan $PATH tidak relevan. Si penyerang bahkan bisa berubah bahwa melalui ~/.profile, jadi maksud Anda diperdebatkan. ~/.local/bin aman (atau tidak aman, jika Anda mau) sebagai ~/bin, yang merupakan praktik umum di sebagian besar distro. Ide yang seharusnya tidak dimiliki oleh pengguna apa saja dir untuk menyimpan dan mengeksekusi skrip pribadi $PATHtidak masuk akal. - MestreLion
Demikian, ~/bin seaman mungkin ~/.profile, dan $PATH tidak melindungi saya dari malware yang dijalankan oleh saya (yang memiliki izin untuk menulis di rumah saya sendiri). Saya tidak tahu file ini, saya minta maaf. Terima kasih atas klarifikasi, maaf atas komentar saya sebelumnya. - ignis
Semakin lama sejarahnya, semakin banyak perbaikan / kekacauan. - smwikipedia