Apa perbedaan antara tautan keras dan file yang disalin?

22

Pemahaman saya adalah bahwa tautan keras menyertakan salinan file asli dan bahwa saya dapat menghapus file yang ditautkan di satu direktori, dan itu akan tetap ada di direktori lain.

Jika itu masalahnya, mengapa saya ingin menggunakan tautan keras sama sekali? Mengapa tidak hanya memiliki dua file terpisah?

Mike B
sumber

Jawaban:

29

Jika Anda menyalin file, itu akan menggandakan konten. Jadi, jika Anda memodifikasi konten dari satu file, itu tidak berpengaruh pada yang lain.

Jika Anda membuat hardlink, itu akan membuat file menunjuk ke konten yang sama. Jadi, jika Anda mengubah konten salah satu file, perubahan akan terlihat di keduanya.

TheMeaningfulEngineer
sumber
3
Untuk file yang sangat besar, apakah membuat hard link selalu lebih cepat daripada menyalin file asli?
Jorge Bucaran
14

Tautan keras pada dasarnya adalah nama file kedua untuk file yang sama. Jadi jika Anda menghubungkan file, itu hanya akan menjadi satu kali pada sistem file, dan karena itu hanya menghabiskan satu kali. Jadi, Anda ingin menggunakan ini jika Anda ingin menyimpan ruang disk

Peter
sumber
4
Terima kasih atas tanggapan yang cepat. Lalu mengapa saya ingin menggunakan tautan keras alih-alih tautan lunak?
Mike B
5
Softlink pada dasarnya adalah penunjuk ke file lain. Jadi jika Anda menghapus file asli, softlink akan tetap ada tetapi akan rusak. Hardlink adalah 2 nama untuk file yang sama, sehingga mereka dapat dihapus secara individual.
Peter
19
Penjelasan Peter bagus, tapi dia tidak menyertakan "jumlah tautan". Dalam inode file (pada metadata disk) ada jumlah tautan. Sebuah tautan keras menambah jumlah tautan, tautan lunak tidak. Kernel diizinkan untuk menghapus konten file jika jumlah tautan turun ke nol.
Bruce Ediger
4
Saya pikir jawaban Alan untuk ini memiliki poin penting: mengubah file mengubah semua hardlinknya, dengan salinan mereka akan memiliki konten yang berbeda.
Donasi berhasil
6

Pada sistem file unix, setiap nama file sebenarnya merupakan tautan keras ke lokasi data pada disk, yang disebut inode. Jika Anda membuat tautan keras baru ke file yang sudah ada, itu tidak akan mengambil ruang tambahan pada disk karena itu hanya pointer lain ke data yang sama. Jika Anda mengedit data dengan satu atau tautan lainnya (atau mengedit inode secara langsung) kedua file akan diubah.

Sistem menyimpan hitungan berapa banyak tautan keras yang dimiliki masing-masing inode. Ketika jumlah tautan adalah 0, file tidak lagi dapat dijangkau, dan data ditandai sebagai aman untuk ditimpa. Jadi diberikan file dengan 2 tautan keras, jika Anda menghapus tautan mana pun, data tidak akan dihapus. Hanya jika Anda menghapus keduanya maka data akan hilang.

Anda dapat melihat nomor inode file menggunakan -isaklar ke lsperintah.

Tautan lunak, di sisi lain, menunjuk ke file lain dengan nama file-nya. Jika Anda memindahkan atau menghapus file asli, tautannya akan rusak.

rjmunro
sumber
0

Dengan merujuk pada bagian dari pertanyaan yang bertanya, "mengapa saya ingin menggunakan tautan keras sama sekali?":

File yang ditautkan dengan tautan keras (atau yang terkait dengan file lunak (simbolis) menawarkan cara yang bermanfaat untuk memiliki satu file yang dapat dieksekusi yang dapat dibuat untuk menyamar untuk tujuan yang berbeda.

Yaitu, nama yang digunakan oleh kode untuk diperiksa untuk menentukan opsi apa yang tersedia untuk dieksekusi. Ini memungkinkan pengembangan dan pengemasan satu bagian besar kode dengan semua fungsi bersama yang diperlukan untuk tujuan yang sedikit berbeda. Dari perspektif pengguna, spesifikasi "apa" untuk dijalankan (dengan nama) membatasi pilihan dan presentasi ke subset pilihan yang lebih mudah dikelola.

Contoh klasik adalah LVM. Pada suatu waktu HP-UX digunakan file hard-linked untuk berbagai executable (misalnya vgdisplay, vgcreate, vgextend, dll Hari ini, seperti Linux, perintah ini sebenarnya simbolis (soft) link ke lvmexecutable.

JRFerguson
sumber
Ini tidak ada hubungannya dengan pertanyaan.
rjmunro
1
@ rjmunro saya mohon berbeda. OP bertanya, "mengapa saya ingin menggunakan tautan keras sama sekali?"
JRFerguson
Saya tidak mengerti contoh terakhir. Dulu, ada tautan keras ke banyak executable, sekarang ada tautan lunak ke satu executable. Bagaimana tautan lunak itu dapat dibedakan?
Emanuel Berg
@ EmanuelBerg Maksud saya adalah bahwa terlepas dari apakah tautan keras atau lunak digunakan, itu adalah nama yang digunakan untuk mengeksekusi yang menjalankan opsi dan argumen yang valid untuk dieksekusi.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson