Mengapa direktori root dilambangkan dengan tanda /?

95

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?

Ruban Savvy
sumber
12
Alasannya adalah bahwa '/' adalah pemisah direktori dan sementara direktori root itu sendiri tidak bernama, sama halnya cd /homedengan cd /home/menambahkan /pada akhir nama kosong memberikan akses ke direktori itu.
SF.
2
Sudahkah Anda membaca ini: en.wikipedia.org/wiki/Root_directory ?
Kevdog777
11
Itu tidak bernama, karena ketika dilihat dari dalam, itu adalah batas dari pohon direktori yang terlihat. Hirarki direktori yang terlihat mungkin hanya subtree dalam hierarki yang lebih besar, seperti ketika pencarian pathname telah dimodifikasi melalui chroot()panggilan, tetapi ketika dilihat dari dalam, ini diabstraksi.
Thomas Nyman
14
Karena senar kosong akan menjadi pilihan yang mengerikan!
Bakuriu
3
Selain apa yang disebutkan, menggunakan / untuk menunjukkan root memberikan efek samping tertentu dalam hal nama path absolut dan relatif. /some/dirSELALU berarti (root)/some/dirsementara some/dirselalu relatif terhadap direktori kerja saat ini. Prinsip ini juga dapat ditransfer ke penggunaan URL web.
Tor Valamo

Jawaban:

108

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:

tata letak keyboard terminal Lear-Siegler ADM-3A

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.

Thomas Nyman
sumber
2
"Sementara direktori lain mungkin ada di bawahnya, biasanya tidak ada alasan untuk merujuk apa pun di luar direktori root." Saya tidak mengerti ini. Saya tidak yakin ke arah mana yang Anda maksud dengan "di bawah", tetapi tidak ada "di luar" hierarki yang terpasang /. Filesystem Unix adalah pohon tunggal, dengan titik mount untuk berbagai drive.
alexis
4
Ada chrootdan semacamnya - Anda tidak dapat mengakses apa pun di luar root baru, tetapi itu tidak berarti mereka tidak ada di sana.
Bobson
1
@Gilles, lokasi fisik drive bukan pertanyaannya. Setiap partisi disk berada di luar partisi root dalam arti itu, tetapi ia dipasang di bawah root dalam hierarki sistem file. Bobson, poin bagus tentang chroot, tetapi tidak sesuai dengan apa yang dikatakan Thomas: Setelah chroot bukan berarti "biasanya tidak ada alasan" untuk keluar dari root sistem; tidak mungkin. Di Unix, semua yang ada di sistem file berada di bawah root.
alexis
1
"Setelah chroot bukan karena" biasanya tidak ada alasan "untuk pergi keluar dari sistem root; itu tidak mungkin." Ini jelas salah. Pada saat 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 menyebutkan chroot()dalam komentar sebelumnya .
Thomas Nyman
4
IIRC, konvensi Multics tidak hanya digunakan >sebagai pemisah direktori, tetapi juga <untuk merujuk ke direktori induk: <dengan sendirinya setara dengan .., sedangkan <foosetara dengan ../foo. Saya selalu menemukan bahwa secara estetika menyenangkan.
Mark Reed
55

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 Ppath ke direktori dan Fnama file, maka adalah sintaks untuk file yang disebut di dalam direktori yang pathnya berada .P>FFP

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, fooadalah file di direktori kerja; foo>baradalah file di direktori anak foodari 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 >foofile yang dipanggil foodi direktori root, >foo>baradalah file yang dipanggil bardi direktori yang disebutfoodi 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.

Gilles
sumber
11

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:

  • arahkan ke direktori root, dan gunakan karakter slash
  • jika ada lebih banyak materi di jalur, maka proseskan sebagai jalur relatif, jika tidak Anda selesai.

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 ededitor 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:

OLD_PATH=/old/path
NEW_HOME=/new/home

NEW_PATH="$NEW_HOME$OLD_PATH"  /new/home/old/path

Ini tidak akan berhasil jika kita menunjukkan jalur absolut dengan cara lain, seperti tanda dolar terkemuka atau apa pun yang lain:

OLD_PATH=^old/path  # ^ means absolute path
NEW_HOME=^new/home

# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"

Jenis pengkodean ini masih diperlukan dalam beberapa kasus ketika berhadapan dengan jalur gaya-Unix, tetapi jumlahnya lebih sedikit.

Kaz
sumber
8
"Slash mudah diketik, tidak perlu digeser." Mungkin Anda turun dengan mudah di seberang kolam, tetapi di sini di Finlandia kami tidak hanya harus menekan shift, tetapi juga menjangkau semua melintasi ke baris nomor juga. ; P
Thomas Nyman
1
@ThomasNyman Namun, tata letak keyboard asing mungkin bukan masalah bagi Ken Thompson. Slash mudah diketik untuk pengembang Unix dan pengguna awal mereka.
Kaz
1
Cukup adil. Meskipun saya kebanyakan bercanda, saya merasa menarik (dan kadang-kadang lucu) bagaimana beberapa kekhasan dalam perangkat lunak dengan warisan panjang dapat dijelaskan oleh kekhasan dalam perangkat keras kontemporer .
Thomas Nyman
@ThomasNyman Haha, saya ingin tahu apakah Bill Joy sendiri login dan memperbarui bagian {citation-needed} di halaman ADM-3A, akankah beberapa "Wikidickhead" kemudian membalas dengan: "artikel ini berisi penelitian asli". :)
Kaz
@ThomasNyman, Sekarang saya percaya ada "pedal" keyboard dimana Anda dapat mengetik /menggunakan kaki kanan Anda. Sama seperti bermain piano.
Pacerier