Apa itu tautan keras di Linux?

9

Saya telah mencari-cari dan mencoba memahami perbedaan antara tautan keras dan tautan simbolis (tautan lunak).

Saya menemukan tautan ini cukup berguna. Tapi saya masih belum jelas. Saya mengerti soft link bukan salinan file asli, tetapi apakah hard link itu salinan atau bukan?

icn
sumber

Jawaban:

15

Untuk menggunakan analogi dari pengiriman surat, tautan simbolik adalah sesuatu seperti alamat penerusan ... ketika sesuatu mencoba membuka tautan simbolik, tautan itu membuka "file" (meskipun bukan file secara literal) yang disimpan di sana, dan melihatnya seharusnya melihat file dengan nama yang berbeda, jadi itu membuka file lain sebagai gantinya.

Tautan keras lebih seperti memiliki dua alamat untuk tempat yang sama. (Tentu saja ini tidak benar-benar mungkin di dunia fisik). Ketika sesuatu mencoba membaca salah satu nama file (alamat), mereka mendapatkan file fisik yang sama (lokasi).

Jadi tautan keras bukan salinan, karena file tersebut hanya disimpan sekali (tetapi dengan banyak nama). Tetapi berperilaku sangat mirip salinan, karena Anda dapat mengakses informasi yang sama dari dua nama file.

Flimzy
sumber
1 untuk analogi yang sangat bagus, yang akan menyederhanakan hal-hal untuk saya ketika saya mencoba untuk mendapatkan kepalaku sekitar ini.
John Gardeniers
1
+1, tetapi dua detail kecil: 1) Dimungkinkan untuk memiliki beberapa alamat untuk tempat yang sama di dunia nyata, hanya saja tidak umum. 2) Mungkin perbedaan yang paling penting antara hard link dan salinan adalah bahwa, jika Anda memiliki /foodan /bar, perubahan /foojuga akan berubah /barjika itu adalah hardlink (karena mereka adalah dua nama untuk file yang sama), tetapi tidak jika mereka salinan (karena mereka dua file yang sepenuhnya independen).
Dave Sherohman
3

Tidak. Tautan keras (kedua dan selanjutnya) ke sebuah file adalah penunjuk ke inode yang sama pada disk.

Ignacio Vazquez-Abrams
sumber
3

Ketika Anda membuat tautan keras, itu berarti file yang sama muncul di dua tempat yang berbeda. File sebenarnya hanya referensi ke sekumpulan blok data pada disk, jadi tautan keras menambahkan referensi lain. File jarang benar-benar dihapus; referensi hanya dihapus sehingga tidak mungkin untuk mengakses data. Itu sebabnya ketika Anda menghapus file yang Anda buat sebagai tautan keras, file asli lainnya tetap, dan sebaliknya.

Di sisi lain, symlink adalah arahan untuk mengakses file dengan nama tertentu. Ia memberi tahu program apa pun, "Jika Anda ingin menggunakan file ini, itu ada di sana". Inilah sebabnya mengapa jika Anda menghapus target symlink, symlink rusak. Dan jika Anda menghapus tautan, targetnya tidak terpengaruh.

Michael Lowman
sumber
2

File dalam sistem * nix memiliki dua bagian. satu bagian data dan lainnya adalah inode. inode menyimpan meta (informasi yang relevan dengan data seperti lokasi di mana dalam HDD disimpan) informasi. Hard link membuat salinan persis inode ini. Sedangkan sym link membuat inode yang menunjuk ke inode dari inode yang sebenarnya. Jadi data inode dalam hardlink sama dengan target tetapi data berbeda di tautan sym. Jadi untuk mempersingkat cerita panjang, sym link dan hard link berbeda dengan konten data inode mereka bukan data file. Ini adalah pemahaman saya tentang perbedaan antara sym link dan hard link. Awalnya saya mengalami kesulitan memahami hal ini karena ini adalah sesuatu yang lebih pengembang dan saya bukan pengembang. Oh yang berpengetahuan luas, tolong perbaiki saya jika saya salah.

bagavadhar
sumber
3
"Direktori" di * nix adalah daftar nama file dan nomor inode. Hard link adalah dua entri direktori yang memiliki nomor inode yang sama, dan karenanya merujuk ke inode yang sama persis, bukan ke salinan inode. Symlink adalah entri direktori yang menunjuk ke entri direktori lain (berdasarkan nama), bukan ke inode tertentu. (Ok, sebenarnya memiliki inode, tetapi inode itu merujuk pada entri direktori, bukan untuk mengajukan data.)
Randy Orrison