Katakanlah saya baru saja membuat direktori newDirectory dan kemudian saya melakukan perintah ls -ld. Saya melihat bahwa jumlah tautan keras adalah 2. Apa yang sebenarnya membuat tautan keras 2 sejak awal? Juga apakah jumlah subdirektori dalam direktori saat ini sama dengan jumlah tautan keras - 2?
38
Jawaban:
Secara historis , sistem file Unix pertama menciptakan dua entri di setiap direktori:
.
menunjuk ke direktori itu sendiri, dan..
menunjuk ke induknya. Ini memberikan cara mudah untuk melintasi sistem file, baik untuk aplikasi maupun untuk OS itu sendiri.Dengan demikian setiap direktori memiliki jumlah tautan 2 + n di mana n adalah jumlah subdirektori. Tautan adalah entri untuk direktori tersebut di induknya,
.
entri direktori itu sendiri , dan..
entri di setiap subdirektori. Misalnya, anggap ini isi dari subtree yang di-root di/parent
, semua direktori:Kemudian
dir
memiliki jumlah tautan 5:dir
entri masuk/parent
,.
entri masuk/parent/dir
, dan tiga..
entri di masing-masing/parent/dir/sub1
,/parent/dir/sub2
dan/parent/dir/sub3
. Karena/parent/dir/sub1
tidak memiliki subdirektori, jumlah tautannya adalah 2 (sub1
entri masuk/parent/dir
dan.
entri masuk/parent/dir/sub1
).Untuk meminimalkan jumlah casing khusus untuk direktori root, yang tidak memiliki induk yang "layak", direktori root berisi
..
entri yang menunjuk ke direktori itu sendiri. Dengan cara ini, juga memiliki jumlah tautan 2 ditambah jumlah subdirektori, 2 sedang/.
dan/..
.Kemudian filesystem cenderung melacak direktori induk dalam memori dan biasanya tidak perlu
.
dan..
ada sebagai entri aktual; sistem unix modern yang khas memperlakukan.
dan..
sebagai nilai khusus sebagai bagian dari kode sistem file-jenis-independen. Beberapa sistem file masih termasuk.
dan..
entri, atau berpura-pura meskipun tidak ada yang muncul pada disk.Sebagian besar filesystem masih melaporkan jumlah tautan 2 + n untuk direktori terlepas dari apakah
.
dan..
entri ada, tetapi ada pengecualian, misalnya btrf tidak melakukan ini.sumber
..
menunjuk ke induk tidak memengaruhi jumlah tautan direktori saat ini. Hitungan 2 berasal dari.
dan nama direktori (asli) mendaftar sendiri. Cara Anda mengatakannya agak ambigu, dan membuatnya terdengar seperti.
dan..
keduanya...
harus digunakan hanya untuk menjelaskan bagaimana matematika bekerja dengan2+n
:).
di dalamnya." Jika masih belum jelas bagi Anda, saya minta maaf saya tidak dapat menjelaskan lebih lanjut. Yang bisa saya lakukan lebih baik adalah menyalin + menempelkan jawabannya di sini di komentar.Ada satu untuk direktori itu sendiri, dan satu untuk
.
di dalamnya.Itu masuk akal, karena setiap subdirektori membuat
..
hardlink, dan di luar itu Anda tidak dapat membuat hardlink ke direktori. 1 Namun, saya tidak akan mempercayai ini untuk hal yang serius, esp. karena mudah untuk menghitung subdirektori dan mendapatkan bilangan real.Jika Anda hanya melihat
ls
output untuk ide berapa banyak subs yang ada, maka itu memberi Anda ide yang layak.1 Atau setidaknya, Anda tidak dapat melakukannya
ln
. Saya belum mencoba secara pemrograman, danman 2 link
ambigu - tidak ada kesalahan yang jelas untuk menautkan ke direktori, meskipun ada beberapa yang mungkin berlaku (EMLINK
,EPERM
). Jadi, kecuali ada beberapa standar di suatu tempat yang mengatakan bahwa satu-satunya tautan keras ke direktori adalah.
dan..
, sekali lagi, saya hanya akan memperlakukan tautan keras itu sebagai petunjuk biasa.sumber