Direktori standar dan / atau umum pada OS Unix / Linux

25

Berasal dari dunia Windows, saya telah menemukan sebagian besar nama direktori folder cukup intuitif:

  • \Program Files berisi file yang digunakan oleh program (kejutan!)

  • \Program Files (x86) berisi file yang digunakan oleh program 32-bit pada OS 64-bit

  • \Users(sebelumnya Documents and Settings) berisi file pengguna, yaitu dokumen dan pengaturan

    • \Users\USER\Application Data berisi data khusus aplikasi

    • \Users\USER\Documents berisi dokumen milik pengguna

  • \Windows berisi file milik operasi Windows itu sendiri

    • \Windows\Fonts menyimpan file font (kejutan!)

    • \Windows\Temp adalah direktori sementara global

dan lain-lain. Bahkan jika saya tidak tahu apa yang dilakukan folder-folder ini, saya dapat menebak dengan akurasi yang baik dari nama mereka.

Sekarang saya mengamati Linux dengan baik, dan menjadi agak bingung tentang cara menemukan cara saya di sekitar sistem file.

Sebagai contoh:

  • /binberisi binari. Tapi begitu /sbin, /usr/bin, /usr/sbin, dan mungkin lebih bahwa saya tidak tahu tentang. Yang mana ?? Apa perbedaan di antara mereka? Jika saya ingin membuat biner dan meletakkannya di suatu tempat di seluruh sistem, di mana saya meletakkannya?

  • /mediaberisi sistem file media eksternal. Tapi begitu juga /mnt. Dan tak satu pun dari mereka mengandung apa pun di sistem saya saat ini; semuanya sepertinya ada di /dev. Apa bedanya? Di mana partisi lain di hard disk saya, seperti C:dan D:yang ada di Windows?

  • /homeberisi file dan pengaturan pengguna. Sebanyak itu intuitif, tapi kemudian, apa yang seharusnya masuk /usr? Dan kenapa /rootmasih terpisah, meskipun itu pengguna dengan file dan pengaturan?

  • /libberisi pustaka bersama, seperti DLL. Tapi begitu juga /usr/lib. Apa bedanya?

  • Apa adalah /etc ? Apakah itu benar-benar berarti "et cetera", atau yang lain? Apa jenis file yang harus ada di sana - global atau lokal? Apakah ini merupakan tangkapan untuk semua hal yang tidak ada yang tahu di mana harus meletakkannya, atau apakah ada kasus penggunaan khusus untuk itu?

  • Apa /opt, /procdan /var? Apa yang mereka perjuangkan dan untuk apa mereka digunakan? Saya belum pernah melihat yang seperti itu di Windows *, dan saya tidak tahu apa gunanya.

Jika ada yang bisa memikirkan tempat standar lain yang mungkin baik untuk diketahui, silakan menambahkannya ke pertanyaan; semoga ini bisa menjadi referensi yang baik untuk orang-orang seperti saya, yang mulai mengenal sistem * nix.

* OK, itu bohong. Saya telah melihat hal serupa di WinObj, tetapi jelas tidak secara teratur. Saya masih tidak tahu apa yang dilakukan di Linux.

Mehrdad
sumber
1
Terima kasih telah menjaga semangat belajar yang baik. Topik ini sering diperdebatkan. Lihat jawaban saya untuk pertanyaan ini untuk beberapa penjelasan tambahan tentang perbedaan mendasar antara struktur sistem file di Windows vs Linux.
Caleb
Jangan menganggap "usr" sebagai singkatan dari "pengguna" tetapi "Sumber Daya Sistem Unix" (bahkan jika itu mungkin sebuah backronym karena memang berisi direktori pengguna tahun lalu) ( linux-training.be/files/books/html /fun/ch09s08.html ).
lgeorget
Tidak ada gunanya mencoba membenarkan penamaan direktori cryptic Unix / Linux / etc terhadap Windows (Atau Mac OS X). Seperti itulah adanya.
Andrew Wolfe
Pada 2017, struktur folder Windows berantakan total. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Semua contoh di mana orang dapat menemukan executable pada Windows. Dan saya bahkan tidak akan berbicara tentang file konfigurasi & registri, saya tidak ingin menjadi lebih tertekan. PS: Saya bekerja terutama di Windows.
rsenna

Jawaban:

29

Distribusi Linux menggunakan FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

Anda juga dapat mencoba man hier.

Saya akan mencoba meringkas jawaban pertanyaan Anda dari atas kepala saya, tetapi saya sangat menyarankan agar Anda membaca FHS:

  • / bin adalah untuk binari sistem non-superuser
  • / sbin adalah untuk binari sistem superuser (root)
  • / usr / bin & / usr / sbin adalah untuk masing-masing biner non-superuser atau superuser yang tidak kritis, masing-masing
  • / mnt untuk sementara memasang partisi
  • / media adalah untuk memasang banyak media yang dapat dilepas sekaligus
  • / dev berisi file perangkat sistem Anda; ceritanya panjang :)
  • Folder / usr, dan subfoldernya, dapat dibagikan dengan sistem lain, sehingga mereka akan memiliki akses ke program / file yang sama yang diinstal di satu tempat. Karena / usr biasanya pada sistem file yang terpisah, / usr tidak mengandung binari yang diperlukan untuk membawa sistem online.
  • / root terpisah karena mungkin diperlukan untuk membawa sistem online tanpa memasang direktori lain yang mungkin berada di partisi / hard drive / server terpisah
  • Ya, / etc adalah singkatan dari "et cetera". File konfigurasi untuk sistem lokal disimpan di sana.
  • / opt adalah tempat di mana Anda dapat menginstal program yang Anda unduh / kompilasi. Dengan begitu Anda dapat memisahkannya dari bagian sistem lainnya, dengan semua file di satu tempat.
  • / proc berisi informasi tentang kernel dan proses yang berjalan
  • / var berisi file ukuran variabel seperti log, mail, halaman web, dll.

Untuk mengakses sistem, Anda biasanya tidak memerlukan / var, / opt, / usr, / home; beberapa direktori berpotensi terbesar pada suatu sistem.

Salah satu favorit saya, yang tidak digunakan sebagian orang, adalah / srv. Ini untuk data yang dihosting melalui layanan seperti http / ftp / samba. Saya telah melihat / var sering digunakan untuk ini, yang sebenarnya bukan tujuannya.

bhinesley
sumber
Tinjauan umum yang baik untuk menjawab pertanyaan spesifik. Perhatikan bahwa beberapa distro digunakan /home/users/usernameuntuk pengguna dan /home/services/servicenameuntuk apa yang Anda sebutkan /src. Saya pikir ini berfungsi lebih baik karena lebih fleksibel untuk dipartisi. Anda dapat memilikinya di partisi itu sendiri atau menggunakan partisi yang sama dan data pengguna Anda, yang sering kali ingin saya lakukan.
Caleb
+1 terima kasih atas tautan dan deskripsinya, itu luar biasa! :)
Mehrdad
/ usr harus berisi file khusus untuk aplikasi yang ada di sistem operasi dan / atau file pihak ketiga. Ini tidak bisa dibagi secara intriniscally! Meskipun LSB berpendapat bahwa ini tetap di / opt. / usr / share di sisi lain dapat berisi file-file yang dapat dibagi di berbagai mesin dari berbagai arsitektur / versi OS. Ini semua hanya konvensi! Sangat mungkin (walaupun banyak kerja keras) untuk menggunakan struktur yang sama sekali berbeda. Ada konvensi lain - seperti Oracle's Optimal Flexible Architecture
symcbean
1
Satu hal yang perlu diingat tentang Unix adalah konsep bahwa " semuanya adalah file " (atau setidaknya terlihat seperti satu). Sebagai contoh, barang-barang di / proc terlihat seperti file dan direktori, tetapi isinya benar-benar dibuat secara dinamis oleh kernel ketika Anda mengaksesnya. Ini berarti Anda dapat menggunakan alat yang sama (ls, cat, dll.) Untuk mengakses informasi ini.
KeithB
1
@symcbean Dari FHS: "... / usr adalah data yang dapat dibagikan, hanya-baca. Itu berarti bahwa / usr harus dapat dibagikan di antara berbagai host yang sesuai dengan FHS ...". Jelas beberapa file tergantung arsitektur, dan beberapa distribusi mengharapkan hierarki direktori yang sangat berbeda. Solusinya adalah mengerjakan pekerjaan rumah Anda, seperti Admin yang baik :)
bhinesley
18

Saya tidak akan menjawab tentang apa artinya semua itu (yang lain miliki), tetapi berikan sedikit konteks historis.

Pertama, ingatlah bahwa UNIX semakin mendekati 40 tahun, kembali pada zaman pita kertas dan 300 terminal hard-code ke mainframe (sistem Windows XP hampir 10 tahun). Mengetik lambat dan kebutuhan akan efisiensi dalam mengetik melebihi banyak pertimbangan lainnya. Itulah alasan perintah dasar yang sangat singkat (yaitu 'ls', 'cat', 'cc', 'dd', dll.). Hal yang sama terjadi pada struktur direktori. Pikirannya adalah bahwa jika perintah lebih dari tiga atau empat karakter maka nama itu terlalu panjang.

Direktori / usr awalnya berisi direktori home pengguna karena sebagian besar perintah ada di / bin dan semua file perangkat ada di / dev. Kemudian ia dianggap membuat drive utama (sistem file root, '/') kecil untuk waktu boot yang lebih cepat. Jadi struktur lain seperti / usr / bin, / usr / include dan / usr / lib muncul, di mana / usr adalah "drive" yang terpisah. Jauh kemudian, dianggap memiliki direktori home pengguna di / home, namun drive lain. Dan lebih lama dari itu, untuk memiliki / var (kependekan dari variabel / berubah-ubah). Direktori / etc memang berarti 'dan lain-lain' karena itu adalah lokasi tangkap semua file konfigurasi sistem. / Mnt digunakan sebagai tempat sementara untuk mengakses drive (seringkali drive cadangan). Direktori seperti / opt, / proc dan / media datang jauh lebih lama.

Ada banyak yang ditinggalkan (seperti / usr / local dan / net), tetapi ini memberikan deskripsi singkat tentang mengapa nama-nama 'kurang intuitif'.

Arcege
sumber
2
+1 Saya suka konteks sejarah, ini mengatur otak saya. :) Terima kasih telah meluangkan waktu untuk menulis ini!
Mehrdad
5

Seperti yang telah disebutkan di sini, distribusi Linux kebanyakan menggunakan FHS, lihat di sini untuk ikhtisar tutorial-seperti, khusus cocok untuk seseorang yang datang dari windows.

Sebagai catatan, direktori Windows tampaknya intuitif, dangkal. Tapi izinkan saya bertanya kepada Anda, di mana pengaturan untuk suatu program termasuk, sebagai *.inifile di folder program, di Documents and Settings\User( \Application Dataatau \Local Settings\Application Data), atau di registri yang terkenal? tidak ada yang tahu, bahkan Microsoft. Jadi kita bisa terus dan terus.

Philomath
sumber
1
Saya pikir nama folder Windows 7 lebih baik. yaitu AppData \ Roaming vs. AppData \ Local - mereka menggambarkan jenis data di sana. Adapun informasi konfigurasi: Saya pikir saya tahu di mana harus meletakkannya ketika saya melihatnya, tapi saya tidak bisa menggambarkannya dengan baik, saya setuju. :)
Mehrdad