Apakah slash ( /
) benar-benar bagian dari nama direktori root Linux? Atau itu hanya simbol untuk itu?
Bagaimana dengan /etc
dan seterusnya?
Memperbarui
Misalkan /dev/sda2
adalah perangkat blok direktori root Linux.
$ sudo debugfs / dev / sda2 debugfs 1.44.1 (24-Mar-2018) debugfs: pwd [pwd] INODE: 2 PATH: / [root] INODE: 2 PATH: / debugfs: stat / Inode: 2 Jenis: Mode direktori : 0755 Bendera: 0x80000 Generasi: 0 Versi: 0x00000000: 00000077 Pengguna: 0 Grup: 0 Proyek: 0 Ukuran: 4096 File ACL: 0 Tautan: 25 Blockcount: 8 Fragmen: Alamat: 0 Nomor: 0 Ukuran: 0 ctime: 0x5b13c9f1: 3f017990 - Sun 3 Jun 15:28:57 2018 atime: 0x5b13ca0f: 3b3ee380 - Sun 3 Jun 15:29:27 2018 mtime: 0x5b13c9f1: 3f017990 - Sun 3 Jun 15:28:57 2018 crtime: 0x5aad1843: 00000000 - Sabtu 17 Maret 16:59:39 2018 Ukuran bidang inode ekstra: 32 EXTENTS: (0): 9249
Jadi ada direktori di sana, inode # 2, tetapi tidak memiliki nama.
linux
filesystems
filenames
fhs
mlibre
sumber
sumber
debugfs
output. Bisakah Anda mengklarifikasi bagaimana ini mengubah pertanyaan?Jawaban:
Standar POSIX.1-2008 mengatakan
Standar lebih lanjut membuat perbedaan antara nama file dan nama path .
/
adalah pathname untuk path dari direktori root. Nama direktori adalah "direktori root", tetapi dalam sistem file itu tidak bernama, itu tidak memiliki nama file. Jika memiliki nama file, nama itu akan menjadi entri direktori di direktori di atas direktori root, dan tidak ada direktori seperti itu.Karakter
/
tidak pernah bisa menjadi bagian dari nama file karena merupakan pemisah jalur.Untuk kejelasan:
/
bukan nama direktori root, tetapi path untuk itu, pathname -nya ./etc
adalah nama path lain. Ini adalah nama jalur absolut keetc
direktori. Nama direktori pada path tersebut adalahetc
(nama file-nyaetc
)./usr/local/bin/curl
adalah pathname daricurl
file yang dapat dieksekusi dengan cara yang sama yaitu/etc
pathname darietc
direktori.sumber
/..
menunjuk kembali ke/
, dan/
memang memiliki entri direktori untuk dirinya sendiri - itu yang lama yang baik/.
; semua 3 hal menunjuk ke inode yang sama - 2./
didefinisikan dalam istilah per-proses root tetapi saya tidak tahu bahwa inodechroot
belum tentu 2. Fakta yang sangat menarik. Ini juga menimbulkan pertanyaan tentang apa/
direktori untuk proses kernel istimewa. Apakah itu berarti hanya proses ruang pengguna/
yang terkait dengannya?slash adalah pemisah ; nama direktori tidak termasuk pemisah, tetapi nama path lengkap termasuk pemisah.
Jadi "root-level"
/
tidak memiliki nama . Pada kebanyakan sistem mirip Unix, ini diperlakukan sebagai kasus khusus seperti.
dan..
(walaupun tentu saja tidak ada perbedaan antara keduanya di tingkat root).Nomenklatur dapat berbeda. POSIX.1-2017, misalnya, mencantumkan beberapa definisi yang umum digunakan :
3.2 Pathname absolut
3.271 Pathname
3.272 Komponen Pathname
3.170 Nama file
Jadi ... jika Anda mencari klarifikasi , itu mungkin bukan pemberhentian pertama Anda. Tutorial seperti halaman Konsep UNIX ini bermanfaat, misalnya, menunjukkan bahwa "nama path lengkap" identik dengan "absolut" pathname ".
sumber
/
bukan nama file yang valid atau komponen pathname, dan itu bukan string yang berisi komponen seperti itu tetapi masih pathname yang benar-benar valid untuk satu direktori tertentu. Yang harus ada, meskipun bagian yang menuntut ini tidak menyebut "namanya". Entah bagaimana, saya menemukan ini sedikit menghibur...
pada/
menghubungkan/
.Di Unix, file (dan direktori hanyalah file) tidak memiliki "nama". Tautan memiliki nama, tautan adalah entri dalam direktori yang memetakan nama ke file.
Anda mungkin mengatakan, bahwa tautan memberi nama ke file, tetapi perhatikan: ini menyiratkan bahwa suatu file dapat memiliki lebih dari satu nama, karena dapat memiliki lebih dari satu tautan.
Karena direktori root adalah, well, direktori root, tidak ada direktori "lebih tinggi" di mana mungkin ada tautan ke sana, jadi tidak mungkin ada nama yang dikaitkan dengannya. Secara teori dimungkinkan untuk menambahkan tautan ke direktori root di dalam beberapa direktori lain, tetapi sebagian besar Unices melarang menambahkan tautan ke direktori yang ada, karena hal itu dapat menyebabkan siklus dalam hierarki sistem file (yang sebenarnya merupakan grafik berarah), dan mendeteksi siklus dalam grafik itu mahal, tetapi tidak mendeteksi mereka dapat menyebabkan rekursi tak terbatas ketika mencoba untuk menyelesaikan nama dalam kernel.
Jadi, pada dasarnya, direktori root tidak memiliki nama, karena tidak ada direktori di atasnya di mana kita dapat merekam nama.
Seperti yang ditunjukkan dalam jawaban lain, kita perlu membedakan antara nama dan jalur (nama). Direktori root dapat dirujuk melalui jalur (nama)
/
.sumber
Penggunaan kata "nama" sedikit fleksibel; itu bisa merujuk ke "nama jalur yang sepenuhnya memenuhi syarat"; itu bisa merujuk ke "entri direktori"; itu bisa merujuk ke "nama file" yang diteruskan ke berbagai fungsi atau rutinitas.
Jadi, misalnya,
/etc/foo
dan/var/tmp/../../etc/foo
dan/tmp/../../../../../../foo
semua cara merujuk ke file yang sama; mereka semua nama yang valid , sepertifoo
ketika di/etc
direktori.Jadi mari kita kembali ke dasar.
Nama file di unix terbuat dari komponen yang dipisahkan oleh pemisah direktori
/
. Cukup banyak satu-satunya batasan pada komponen adalah bahwa mereka tidak dapat berisi karakter/
atau NUL; hal lain diizinkan.Jadi "memenuhi syarat nama jalan" dari
/etc
adalah string lengkap:/etc
. Ini berarti memilikietc
komponen dalam direktori root.Demikian pula
/x/y/z/foo
akan memilikifoo
komponen dalam/x/y/z
direktori.Sekarang direktori root unik karena tidak memiliki komponen dalam direktori induk; itu hanya memiliki nama path lengkap sebagai nama:
/
.sumber