Saya telah melakukan beberapa penelitian tentang ini di Google, tetapi hasilnya mendung. Mengapa /
tanda digunakan untuk menunjukkan direktori root. Apakah ada alasan kuat di balik itu?
linux
directory-structure
history
Ruban Savvy
sumber
sumber
cd /home
dengancd /home/
menambahkan/
pada akhir nama kosong memberikan akses ke direktori itu.chroot()
panggilan, tetapi ketika dilihat dari dalam, ini diabstraksi./some/dir
SELALU berarti(root)/some/dir
sementarasome/dir
selalu relatif terhadap direktori kerja saat ini. Prinsip ini juga dapat ditransfer ke penggunaan URL web.Jawaban:
Garis miring
/
adalah karakter pembatas yang memisahkan direktori di jalur dalam sistem operasi mirip Unix. Karakter ini tampaknya telah dipilih sekitar tahun 1970-an, dan menurut sumber anekdotal , alasannya mungkin terkait dengan bahwa pendahulu Unix, sistem operasi Multics , menggunakan>
karakter sebagai pemisah jalur, tetapi desainer Unix telah memesannya. karakter>
dan<
untuk menandakan pengalihan I / O pada baris perintah shell jauh sebelum mereka memiliki sistem file multi-level. Jadi ketika tiba saatnya untuk merancang sistem file, mereka harus menemukan karakter lain untuk menandakan pemisahan elemen pathname.Satu hal yang perlu diperhatikan di sini adalah bahwa dalam terminal ADM-3A Lear-Siegler yang umum digunakan selama tahun 1970-an, dari mana antara lain praktik penggunaan
~
karakter untuk mewakili direktori home berasal , /kuncinya ada di samping >kunci:Adapun mengapa direktori root dilambangkan dengan satu
/
, itu adalah konvensi yang paling mungkin dipengaruhi oleh fakta bahwa direktori root adalah direktori tingkat atas dari hirarki direktori, dan sementara direktori lain mungkin berada di bawahnya, biasanya tidak ada ada alasan untuk merujuk pada apa pun di luar direktori root. Demikian pula entri direktori itu sendiri tidak memiliki nama, karena itu adalah batas pohon direktori yang terlihat.sumber
/
. Filesystem Unix adalah pohon tunggal, dengan titik mount untuk berbagai drive.chroot
dan semacamnya - Anda tidak dapat mengakses apa pun di luar root baru, tetapi itu tidak berarti mereka tidak ada di sana.chroot()
diperkenalkan, itu tidak memiliki sifat seperti penjara sama sekali , itu hanya mempengaruhi resolusi pathname. Bahkan hari ini, proses istimewa dapat keluar dari chroot dengan desain . Saya juga menyebutkanchroot()
dalam komentar sebelumnya .>
sebagai pemisah direktori, tetapi juga<
untuk merujuk ke direktori induk:<
dengan sendirinya setara dengan..
, sedangkan<foo
setara dengan../foo
. Saya selalu menemukan bahwa secara estetika menyenangkan.Sistem file hierarkis pertama seperti yang kita kenal hari ini dirancang untuk Multics . Desain dijelaskan dalam "Sistem File Tujuan Umum Untuk Penyimpanan Sekunder" oleh RC Daley dan PG Neumann. Karakteristik yang menonjol dari sistem file ini adalah bahwa direktori adalah file yang dapat dimuat dalam direktori seperti file lainnya. Struktur file membentuk pohon, di mana semua node non-daun adalah direktori. Akar pohon selalu merupakan direktori. Setiap file memiliki nama ( nama entri ) yang unik di dalam direktori induknya. Direktori root tidak memiliki nama karena tidak ada di direktori lain.
Untuk menunjuk suatu file, Anda perlu menggambarkan path dari root tree. Multics mengadopsi sintaksis alami untuk nama path di mana jika
P
path ke direktori danF
nama file, maka adalah sintaks untuk file yang disebut di dalam direktori yang pathnya berada .P>F
F
P
Untuk saat-saat ketika Anda tidak ingin membebani diri Anda dengan direktori, Multics memiliki gagasan tentang direktori yang berfungsi . Nama file telanjang tanpa indikasi direktori ditafsirkan sebagai file dalam direktori kerja.
Menggabungkan aturan-aturan ini,
foo
adalah file di direktori kerja;foo>bar
adalah file di direktori anakfoo
dari direktori kerja, dan sebagainya. Aturan-aturan ini menggambarkan jalur relatif, tetapi aturan tambahan diperlukan untuk membangun jalur absolut mulai dari direktori root. Mengingat bahwa membaca nama jalur dari kiri ke kanan sesuai dengan perpindahan dari akar ke daun pohon, akar harus ditandai dengan spidol khusus di sebelah kiri nama jalur. Karena nama file tidak pernah kosong (karena itu sering membingungkan), tidak ada nama path relatif yang dimulai dengan karakter>
, yang menjadikannya penanda yang mudah untuk nama path absolut. Dengan demikian>foo
file yang dipanggilfoo
di direktori root,>foo>bar
adalah file yang dipanggilbar
di direktori yang disebutfoo
di direktori root, dan sebagainya. Ini meninggalkan direktori root, yang bisa berupa string kosong; Namun, sering kali tidak nyaman untuk menggunakan string kosong sebagai pathname, jadi alih-alih ditulis>
, yang memiliki manfaat tambahan bahwa pathname absolut jika dan hanya jika karakter pertamanya>
.Unix mengadopsi desain ini dari Multics. Karena Unix sudah menggunakan karakter
>
untuk redirection output di shell perintahnya, desainernya memilih karakter yang berbeda/
untuk memisahkan direktori dalam nama path.sumber
Dalam komponen path name di Unix, hanya dua karakter yang tidak dapat digunakan: karakter null, yang mengakhiri string dalam C (bahasa kernel) dan slash, yang dicadangkan sebagai pemisah path. Selain itu, komponen jalur tidak boleh berupa string kosong.
Jadi, dalam nama jalur, kami hanya memiliki dua jenis token: garis miring, dan komponen.
Misalkan, tanpa menambahkan token baru , kami ingin mendukung dukungan dua jenis jalur, relatif dan absolut. Lebih jauh, kami ingin dapat merujuk ke direktori root, yang tidak memiliki nama (tidak memiliki orang tua yang akan memberinya nama).
Bagaimana kita bisa mewakili jalur relatif, jalur absolut, dan merujuk ke direktori root, hanya menggunakan garis miring?
Cara paling jelas untuk memperluas bahasa (selain pengenalan token baru) adalah dengan membuat sintaks baru: memberikan arti baru pada kombinasi token yang sintaks tidak valid.
Jalur yang dimulai dengan garis miring tidak masuk akal, jadi mengapa tidak menggunakan garis miring sebagai penanda yang menunjukkan "jalur ini mutlak, bukan relatif".
Jalur yang tidak berisi apa pun selain garis miring juga tidak valid, jadi mengapa tidak menetapkannya sebagai "direktori root".
Kedua makna ini bersatu karena jalur absolut mulai mencari di direktori root. Dengan kata lain garis miring dapat dianggap memiliki arti:
Kemudian, kita mungkin juga melemparkan garis miring, yang dapat berarti "jalur ini menegaskan bahwa komponen jalur terakhir adalah nama direktori daripada file biasa atau jenis objek lainnya: bahwa garis miring menunjukkan direktori yang mirip dengan cara slash terkemuka menunjukkan direktori root. "
Dengan semua sintaks di atas, kita masih memiliki sintaks dengan makna yang belum ditentukan: garis miring ganda, garis miring tiga, dan sebagainya.
Mengapa tidak memperkenalkan token lain saja dan melakukannya secara berbeda. Ini mungkin karena para desainer mengambil pendekatan minimalis pada umumnya. (Mengapa
ed
editor hanya menampilkan a?
ketika Anda melakukan sesuatu yang salah?) Garis miring mudah diketik, tidak memerlukan perubahan. Bahasa jalur dengan hanya dua jenis token (komponen dan garis miring) mudah diingat dan digunakan.Pertimbangan penting lainnya adalah manipulasi jalur yang mudah dimungkinkan hanya dengan menggunakan representasi string. Sebagai contoh, kita dapat "me-root" path absolut ke direktori induk baru dengan cukup mudah:
Ini tidak akan berhasil jika kita menunjukkan jalur absolut dengan cara lain, seperti tanda dolar terkemuka atau apa pun yang lain:
Jenis pengkodean ini masih diperlukan dalam beberapa kasus ketika berhadapan dengan jalur gaya-Unix, tetapi jumlahnya lebih sedikit.
sumber
/
menggunakan kaki kanan Anda. Sama seperti bermain piano.