Mengapa direktori root '/' memiliki referensi ke "induknya"?

6

Saat ini saya sedang mengembangkan sistem file palsu untuk browser. Baru-baru ini saya menerapkan ".." dan "." folder sehingga setiap folder memiliki referensi ke induknya. Kemudian saya memeriksa terminal saya jika "/" juga memiliki folder ini. Sebenarnya saya sangat terkejut bahwa ia memiliki direktori ".." yang jelas merupakan referensi untuk dirinya sendiri.

Apakah alasan untuk konsistensi ini atau ada penjelasan yang lebih baik?

Sunting: Saya pada dasarnya mencari dokumen tempat dokumen ini didokumentasikan.

Julian Hollmann
sumber
tidak terkait langsung tetapi juga melihat unix.stackexchange.com/questions/61984/…
deepak
Bagus. Terima kasih untuk tautannya. Tapi pertanyaan saya tetap tidak dijawab di sana. Jawabannya semua "tebak" itu karena konsistensi.
Julian Hollmann
1
btw LFS tidak mengatakan apa-apa tentang '..' & '.' tldp.org/LDP/Linux-Filesystem-Hierarchy/html/…
deepak
1
@JourneymanGeek Tidak akan. Itulah inti saya. ".." hanyalah Hardlink ke folder induk. Jika tidak ada, Anda tidak dapat melakukannya.
Julian Hollmann

Jawaban:

3

Ada definisi POSIX ini :

3.144 Direktori Kosong

Direktori yang paling banyak berisi entri direktori untuk titik dan titik-titik , dan memiliki tepat satu tautan ke sana (selain entri titiknya sendiri, jika ada), dalam titik-titik .

Definisi ini diulang dengan frasa yang berbeda dalam deskripsi POSIX dari semua perintah file.
Misalnya untuk rmdir :

Definisi direktori kosong adalah definisi yang paling banyak berisi entri direktori untuk titik dan titik-titik.

Definisi berbelit-belit di atas untuk Direktori Kosong ternyata di balik konvensi lucu ini, dan tujuannya adalah untuk menghindari pengecualian terhadap aturan, bahkan untuk slash (/).

harrymc
sumber
5

The Single UNIX Specification menyatakan:

Sebagai kasus khusus, di direktori root, dot-dot dapat merujuk ke direktori root itu sendiri.

Tidak ada alasan yang dinyatakan dalam standar. Untuk seorang pejabat "mengapa?" jawab, Anda mungkin perlu bertanya langsung kepada Ken Thompson.

Foo Bar
sumber
5

Traversal sistem file.

Saat Anda melihat nama file di sistem Unix, Anda sedang melihat pohon yang di-root.

Saat Anda melihat file, itu ada di direktori. Anda dapat bertanya direktori apa itu, dengan naik level (..), dan memeriksa inode direktori tempat Anda berada. Anda kemudian ulangi, dan Anda dapat membangun di mana Anda berada. Tetapi ketika Anda mencapai root, tidak ada up. Hanya ada 'di sini'. Dengan mengatur '.' dan '..' dengan nilai yang sama, Anda mengatur sinyal unik yang tidak dimiliki direktori lain dalam sistem file tersebut. Itu adalah akarnya.

Ketika Anda me-mount sistem file ke titik mount lain - Anda memiliki sistem file / home pada disk lain, misalnya, Anda menimpa '..' dengan referensi ke titik mount pada sistem file root. Jadi root file system yang di-mount dulu punya '.' dan '..' yang sama, sekarang memiliki nilai yang berbeda.

Memiliki '.' dan '..' mengulangi data yang sama adalah sinyal penting dan unik, hanya berlaku untuk puncak pohon. Dan itu memberitahu program traversal mereka dapat berhenti mencari node induk.

Saya pikir ada dokumentasi tangensial di Lions Commentary To The Unix Kernel versi 6 . Sekitar Halaman 84, tempat ini menjelaskan bagaimana titik mount ditangani.

JezC
sumber
1

Saya suka jawaban lain yang diberikan, dan akan menambahkan bagian dari apa yang masuk akal (setidaknya bagi saya) adalah bahwa direktori, pada kenyataannya, jenis file khusus. Setiap jenis file "khusus" dalam UNIX memiliki atribut yang diperlukan yang membuatnya sesuai dengan klasifikasi jenis "khusus". Tanpa SEMUA atribut ini di tempat, sistem mungkin tidak mengenalinya untuk apa yang seharusnya atau mungkin salah menafsirkannya. Anda dapat melihat direktori sebagai file menggunakan, katakanlah, vim. Jika Anda melihat hampir semua direktori di sistem Anda dengan vim, misalnya,

$ vim ~

Anda akan melihat bahwa hal pertama tanpa komentar yang tercantum dalam "file" itu adalah "../", yaitu, hal pertama yang tercantum dalam file khusus ini adalah direktori induk, dan seperti yang Anda harapkan, induknya adalah satu tingkat "naik" . Tetapi jika Anda mencoba

$ vim /

Anda akan melihat pada baris tanpa komentar pertama yang tertulis "./" bukannya "../". Mengapa perbedaannya dan mengapa harus ada di sini? "/" harus memiliki "induk" yang terdaftar agar sesuai dengan persyaratan untuk dikenali sebagai file khusus jenis "direktori." Tanpa daftar ini terlebih dahulu, itu akan seolah-olah "/" memiliki orang tua yang berbeda ditentukan (yaitu, apa pun yang lebih dulu dalam file khusus "/"), dan saya curiga (tetapi belum mengkonfirmasi) bahwa ini akan menyebabkan salah satu dari anak-anaknya untuk ditafsirkan sebagai induknya, membuat bundaran dalam sistem file, yaitu, itu TIDAK akan menjadi sistem file yang di-root lagi, melainkan yang melingkar! Dengan kata lain, jika sistem akan selalu menginterpretasikan entri pertama dalam "file direktori" sebagai "induk direktori ini",

flaxplus
sumber
Jawaban ini tidak masuk akal. Ya, editor tertentu memungkinkan Anda untuk melihat konten direktori dengan "membuka" direktori. Yang lain tidak. Ya, direktori internal sering direpresentasikan sebagai beberapa jenis file "khusus" dengan set atribut tertentu, dan beberapa set entri yang direferensikan darinya, tetapi saya ragu urutan pada disk (atau bahkan dalam enumerasi) dari entri tersebut dijabarkan dalam standar apa pun yang menurut desain harus bekerja di beragam OS dan arsitektur.
CVn
..Entri direktori menunjuk ke induk direktori; di akar pohon, ada yang tidak ada orang tua. Solusi mudahnya adalah dengan hanya ..menunjuk ke direktori yang ada di dalamnya. (Itu juga berarti bahwa ketika Anda memasang sistem file itu di lokasi non-root, ..dapat diperbarui secara dinamis untuk menunjuk ke induknya; tidak perlu membuat entri direktori tambahan.)
CVn