Apa yang terjadi ketika Anda menghapus tautan keras?

59

Jika Anda melakukannya di rm myFilemana myFiletautan keras, apa yang terjadi?

trusktr
sumber

Jawaban:

110

Di Unix semua file normal adalah Hardlink. Hardlinks dalam sistem file Unix (dan sebagian besar (semua?)) Adalah referensi untuk apa yang disebut inode. The inodememiliki counter referensi, ketika Anda memiliki satu "link" ke file (yang merupakan modus operandi normal) counter adalah 1. Bila Anda membuat kedua, ketiga, keempat, hubungan dll, counter bertambah (meningkat) masing-masing waktu demi satu. Saat Anda menghapus ( rm) tautan penghitung dikurangi (dikurangi) oleh satu. Jika penghitung tautan mencapai 0, sistem file menghapus inodedan menandai ruang yang tersedia untuk digunakan.

Singkatnya, selama Anda tidak menghapus tautan terakhir, file akan tetap ada.

Edit:File akan tetap ada bahkan jika tautan terakhir dihapus . Ini adalah salah satu cara untuk memastikan keamanan data yang terkandung dalam file tidak dapat diakses oleh proses lain. Menghapus data dari sistem file sepenuhnya dilakukan hanya jika data memiliki 0 tautan ke sana seperti yang diberikan dalam metadata-nya dan tidak digunakan oleh proses apa pun.

Sejauh ini, IMHO ini adalah cara termudah untuk memahami tautan keras (dan perbedaannya dari softlink).

xenoterracide
sumber
7
Selain itu, panggilan sistem untuk menghapus file adalah unlink().
mouviciel
1
Ini tidak mencakup situasi di mana file terbuka saat tautan terakhir unlinkdiedit.
cjm
5
@OrangeDog, tidak sepenuhnya, karena hardlink tidak dapat melintasi filesystem, dan /procmerupakan filesystem (virtual) terpisah.
cjm
2
/ proc juga mencerminkan struktur data internal kernel (ini adalah cara bagi kernel Linux untuk mengekspos data tertentu dalam format yang didefinisikan dengan cukup baik tanpa memberikan semua dan berbagai akses langsung ke memori kernel). Jadi lebih akurat untuk mengatakan bahwa kernel melacak fakta bahwa file tersebut terbuka, dan mengekspos informasi itu melalui procfs.
CVn
1
Dan ya, menelepon unlink()untuk menghapus file membuat saya bingung ketika saya mulai bermain dengan pemrograman C pada MS-DOS beberapa waktu yang lalu di paruh pertama tahun 1990-an. :)
CVn
12

Pengujian lebih mudah daripada yang saya kira: Saya membuat file teks, kemudian sulit ditautkan. Menghapus tautan tidak menghapus file yang di- link -nya dan file yang ditautkan tetap berada di tempatnya.

trusktr
sumber
1
ini benar, tetapi bukan gambaran lengkap
xenoterracide
3
Kuncinya adalah membuat file teks juga menambahkan tautan keras. Dalam sistem file * NIX, semua file (inode) harus di-hardlink setidaknya sekali ke dalam struktur direktori.
Stop Harming Monica
0

semua file di disk Anda sebenarnya adalah petunjuk untuk data nyata di drive Anda. masukkan deskripsi gambar di sini

ketika Anda membuat hardlink untuk file itu, file hardlink-ed akan menunjuk ke data yang sama dengan file aslinya.

masukkan deskripsi gambar di sini

seperti pada contoh ini, a.txt menunjuk ke data (byte) dari file yang ada di drive, ketika hardlink b.txt dibuat, itu akan menunjuk ke apa yang ditunjuk oleh a.txt.

dengan demikian menghapus salah satu dari mereka tidak akan mempengaruhi yang lain mereka terpisah satu sama lain.

TETAPI, ketika Anda menghapus keduanya, sistem akan melihat bahwa data yang ada di disk tidak memiliki file yang menunjuk ke sana, sehingga sistem akan menganggapnya sebagai ruang kosong dan akan menimpanya saat diinginkan.

ZOLDIK
sumber
2
Saya pikir ini penting untuk Anda klarifikasi yang FILE "A.txt"identik dengan LINK "B.txt", terutama karena Anda telah memanggil satu FILEdan yang lainnya a LINK. Tautan ini benar-benar panah hitam.
roaima
ya, saya pikir tidak akan jelas bahwa b.txt adalah file yang ditautkan ...
ZOLDIK