GNU/Linux >> Belajar Linux >  >> Linux

Mengapa direktori root dilambangkan dengan tanda /?

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 pendahulu Unix, sistem operasi Multics, menggunakan kode > karakter sebagai pemisah jalur, tetapi perancang Unix telah mencadangkan karakter > dan < untuk menandakan pengalihan I/O pada baris perintah shell jauh sebelum mereka memiliki sistem file multi-level. Jadi ketika saatnya tiba untuk mendesain sistem file, mereka harus menemukan karakter lain untuk menandai pemisahan elemen pathname.

Satu hal yang perlu diperhatikan di sini adalah bahwa di terminal Lear-Siegler ADM-3A yang umum digunakan selama tahun 1970-an, dari mana antara lain praktik penggunaan ~ karakter untuk mewakili asal direktori home, / kuncinya ada di sebelah > kunci:

Adapun mengapa direktori root dilambangkan dengan satu / , ini adalah konvensi yang kemungkinan besar dipengaruhi oleh fakta bahwa direktori root adalah direktori tingkat atas dari hierarki direktori, dan sementara direktori lain mungkin berada di bawahnya, biasanya tidak ada alasan untuk merujuk ke apa pun di luar direktori root . Demikian pula entri direktori itu sendiri tidak memiliki nama, karena itu adalah batas pohon direktori yang terlihat.


Sistem file hierarkis pertama seperti yang kita kenal sekarang dirancang untuk Multics. Desainnya dijelaskan dalam "Sistem File Serba Guna Untuk Penyimpanan Sekunder" oleh R.C. Daley dan P.G. Neumann. Karakteristik yang menonjol dari sistem file ini adalah direktori adalah file yang dapat dimuat dalam direktori seperti file lainnya. Struktur file membentuk pohon, di mana semua simpul non-daun adalah direktori. Akar pohon selalu berupa 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 file, Anda perlu menjelaskan jalur dari akar pohon. Multics mengadopsi sintaks alami untuk nama jalur di mana if P adalah jalur ke direktori dan F adalah nama file, lalu P>F adalah sintaks untuk file bernama F di dalam direktori yang jalurnya adalah P .

Untuk saat-saat ketika Anda tidak ingin membebani diri sendiri dengan direktori, Multics memiliki gagasan tentang direktori kerja. Nama file kosong tanpa indikasi direktori ditafsirkan sebagai file di direktori kerja.

Menggabungkan aturan ini, foo adalah file di direktori kerja; foo>bar adalah file di direktori anak foo dari direktori kerja, dan seterusnya. Aturan ini menjelaskan jalur relatif, tetapi aturan tambahan diperlukan untuk membangun jalur absolut mulai dari direktori root. Mengingat bahwa membaca nama jalur dari kiri ke kanan sama dengan berpindah dari akar ke daun pohon, akar harus ditandai dengan penanda khusus di sebelah kiri nama jalur. Karena nama file tidak pernah kosong (karena sering membingungkan), tidak ada nama jalur relatif yang dimulai dengan karakter > , yang menjadikannya penanda yang nyaman untuk nama jalur absolut. Jadi >foo adalah file bernama foo di direktori root, >foo>bar adalah file bernama bar dalam direktori bernama foo di direktori root, dan seterusnya. Ini meninggalkan direktori root, yang bisa menjadi string kosong; namun, sering kali tidak nyaman menggunakan string kosong sebagai nama path, jadi malah ditulis > , yang memiliki manfaat tambahan bahwa nama path bersifat absolut jika dan hanya jika karakter pertamanya adalah > .

Unix mengadopsi desain ini dari Multics. Karena Unix sudah menggunakan karakter > untuk pengalihan keluaran di shell perintahnya, perancangnya memilih karakter yang berbeda / untuk memisahkan direktori dalam nama jalur.


Dalam komponen nama jalur di Unix, hanya dua karakter yang tidak boleh digunakan:karakter nol, yang mengakhiri string di C (bahasa kernel) dan garis miring, yang dicadangkan sebagai pemisah jalur. 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 dua jenis jalur, relatif dan absolut. Selain itu, kami ingin dapat merujuk ke direktori root, yang tidak memiliki nama (tidak memiliki induk yang akan memberinya nama).

Bagaimana kita bisa merepresentasikan 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:beri arti baru pada kombinasi token yang sintaksnya tidak valid.

Jalur yang dimulai dengan garis miring tidak masuk akal, jadi mengapa tidak menggunakan garis miring di depan sebagai penanda yang menunjukkan "jalur ini mutlak, bukan relatif".

Jalur yang hanya berisi garis miring juga tidak valid, jadi mengapa tidak menetapkannya sebagai "direktori root".

Kedua makna ini mengikat bersama karena jalur absolut mulai mencari di direktori root. Dengan kata lain garis miring dapat dianggap memiliki arti:

  • navigasi ke direktori root, dan konsumsi karakter garis miring.
  • jika ada lebih banyak materi di jalur, maka proses itu sebagai jalur relatif, jika tidak, Anda sudah selesai.

Kemudian, kita mungkin juga memasukkan garis miring, yang bisa berarti "jalur ini menegaskan bahwa komponen jalur terakhir adalah nama direktori daripada file biasa atau jenis objek lainnya:garis miring itu menunjukkan direktori itu mirip dengan cara garis miring di depan menunjukkan direktori root."

Dengan semua sintaks di atas, kita masih memiliki sintaks dengan arti yang belum ditetapkan:garis miring ganda, garis miring tiga, dan seterusnya.

Mengapa tidak memperkenalkan token lain dan melakukannya secara berbeda. Ini mungkin karena para desainer mengambil pendekatan minimalis secara umum. (Mengapa ed editor hanya menampilkan ? ketika Anda melakukan kesalahan?) 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 bahwa manipulasi jalur yang mudah dimungkinkan hanya dengan menggunakan representasi string. Misalnya, kita dapat melakukan "root ulang" jalur 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 kami menunjukkan jalur absolut dengan cara lain, seperti tanda dolar terkemuka atau apa pun:

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 saat menangani jalur bergaya Unix, tetapi jumlahnya lebih sedikit.


Linux
  1. Cara Menemukan File Terlama Di Pohon Direktori Di Linux

  2. Mengapa Rm Dapat Menghapus File Read-only?

  3. Mengapa Skrip Bash Tidak Mengenal Alias?

  1. Mengapa '~' Dipilih Untuk Mewakili Direktori Rumah?

  2. Gagal Menandatangani Csr Dengan Kunci Root Ca?

  3. Linux – Mengapa Direktori Root Dilambangkan Dengan A / Sign?

  1. Inti dibuang, tetapi file inti tidak ada di direktori saat ini?

  2. Bagaimana cara mengubah direktori root dari server Apache?

  3. Menggunakan chown untuk mengubah pemilik grup direktori tidak diizinkan....Mengapa?