Di Linux, ketika Anda membuat folder, secara otomatis membuat dua tautan keras ke inode yang sesuai. Satu yang merupakan folder yang Anda minta untuk dibuat, yang lain menjadi .
folder khusus folder ini.
Contoh:
$ mkdir folder
$ ls -li
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 folder
$ ls -lai folder
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 .
124593716 drwxr-xr-x 3 fantattitude staff 102 18 oct 16:52 ..
Seperti yang Anda lihat, keduanya di dalam folder
dan .
di dalamnya folder
memiliki nomor inode yang sama (ditunjukkan dengan -i
opsi).
Apakah ada cara untuk menghapus .
hardlink khusus ini ?
Ini hanya untuk eksperimen dan rasa ingin tahu.
Saya kira jawabannya juga berlaku untuk ..
file khusus.
Saya mencoba untuk melihat rm
manusia tetapi tidak menemukan cara untuk melakukannya. Ketika saya mencoba untuk menghapus .
semua yang saya dapatkan adalah:
rm: "." dan ".." tidak dapat dihapus
Saya benar-benar ingin tahu tentang cara kerja hal-hal ini jadi jangan menahan diri untuk tidak terlalu bertele-tele pada subjek.
EDIT: Mungkin saya tidak jelas dengan posting saya, tetapi saya ingin memahami mekanisme yang mendasari yang bertanggung jawab untuk .
file dan alasan mengapa mereka tidak dapat dihapus.
Saya tahu standar POSIX melarang folder dengan kurang dari 2 hardlink, tetapi tidak benar-benar mengerti mengapa. Saya ingin tahu apakah itu bisa dilakukan.
sumber
Jawaban:
Secara teknis dimungkinkan untuk menghapus
.
, setidaknya pada sistem file EXT4. Jika Anda membuat gambar sistem filetest.img
, pasang dan buattest
folder, kemudian lepaskan kembali, Anda dapat mengeditnya menggunakandebugfs
:debugfs
tidak mengeluh dan dengan patuh menghapus.
entri direktori di sistem file. Thetest
direktori masih dapat digunakan, dengan satu kejutan:hanya menunjukkan
jadi
.
benar-benar hilang. Namuncd .
,ls .
,pwd
masih berperilaku seperti biasa!Saya sebelumnya telah melakukan tes ini menggunakan
rmdir .
, tetapi itu menghapus inode direktori ( terima kasih banyak kepada BowlOfRed untuk menunjukkan ini ), yang meninggalkantest
entri direktori yang menggantung dan merupakan alasan sebenarnya untuk masalah yang dihadapi. Dalam skenario ini,test
folder kemudian menjadi tidak dapat digunakan; setelah memasang gambar, menjalankanls
menghasilkandan log kernel menunjukkan
Menjalankan
e2fsck
dalam situasi ini pada gambar menghapustest
direktori sepenuhnya (inode direktori hilang sehingga tidak ada yang mengembalikan).Semua ini menunjukkan bahwa
.
ada sebagai entitas spesifik dalam sistem file EXT4. Saya mendapat kesan dari kode sistem file di kernel yang diharapkan.
dan..
ada, dan memperingatkan jika mereka tidak (lihatnamei.c
), tetapi denganunlink .
tes berbasis-saya tidak melihat peringatan itu.e2fsck
tidak suka.
entri direktori yang hilang , dan menawarkan untuk memperbaikinya:Ini menciptakan kembali
.
entri direktori.sumber
.
folder tersebut benar-benar ada di dalam FS dan alat berharap untuk berfungsi dengan baik.mount
atauls
). Saya belum melihat jika masalah lain muncul.rmdir .
benar-benar menghancurkantest
dan meninggalkannya sebagai entri direktori yang menggantung, yang Anda harapkan dapat menyebabkan masalah. Saya akan memeriksaunlink
dan memperbarui jawaban saya!Tidak ada cara untuk menghapus entri direktori ini. The
.
entri berarti "direktori ini", yang..
berarti masuk "direktori induk ini direktori". Itu sebenarnya bukan tautan keras, itu hanya bagaimana struktur direktori dibuat / diwakili.sumber
ls
atau alat lain secara otomatis yang tampaknya tidak realistis bagi saya.Seperti yang dijelaskan dalam Catatan Lion pada Kode Sumber Unix 6Unix awal memiliki file disk di mana file dan direktori diwakili pada disk oleh struktur inode. Ada bit khusus yang menunjukkan bahwa isi file adalah direktori. Setiap inode memiliki tautan ke inode miliknya yang memungkinkan file untuk mengetahui direktori apa itu. Pengecualiannya adalah direktori '/' yang memiliki dirinya sendiri. Ada juga tautan ke konten. Jika sebuah inode tidak memiliki konten, maka ia dapat dikembalikan ke daftar gratis. Karena direktori hanyalah file yang diberkati, bahkan direktori yang kosong harus memiliki konten agar tidak dikumpulkan menjadi sampah. Jadi .. adalah tautan inode ke inode induk dan. ada di sana untuk menunjukkan direktori masih dapat digunakan. rmdir (dengan memanggil pembatalan tautan) dapat menghapus.
sumber
Seperti 'kemungkinan duplikat ' dari jawaban postingan mengatakan, standar POSIX menentukan bahwa jika rmdir mencoba untuk menghapus direktori saat ini, itu akan gagal.
Dengan apa pun yang Anda bangun, Anda harus memiliki fondasi. Sulit untuk menentukan jalur relatif tanpa cara untuk mengatakan 'di sini'. Sehingga '.' didefinisikan sebagai 'di sini'.
Anda juga dapat menghapus 'titik' dan 'titik dot'. Tulis OS Anda sendiri yang tidak mendefinisikannya. Meskipun Unix (dan dengan ekstensi Mac OSX), Linux, dan bahkan MS DOS dan Windows semua menggunakan dot dan dotdot.
TL; DR - 'dot' ada dalam definisi OS.
sumber