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.
unix
filesystems
Julian Hollmann
sumber
sumber
Jawaban:
Ada definisi POSIX ini :
Definisi ini diulang dengan frasa yang berbeda dalam deskripsi POSIX dari semua perintah file.
Misalnya untuk rmdir :
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 (/).
sumber
The Single UNIX Specification menyatakan:
Tidak ada alasan yang dinyatakan dalam standar. Untuk seorang pejabat "mengapa?" jawab, Anda mungkin perlu bertanya langsung kepada Ken Thompson.
sumber
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.
sumber
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,
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
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",
sumber
..
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.)