Hard link dan symbolic link di Linux: perbedaan dan latihan ln

Hard link adalah nama lain untuk inode berkas yang sama, sedangkan tautan simbolis atau symbolic link adalah entri terpisah yang menyimpan jalur menuju lokasi lain. Keduanya memberi cara lain untuk mengakses berkas, tetapi perilakunya berbeda saat nama asal berubah atau tujuan berada pada sistem berkas lain. Latihan ini memperlihatkan perbedaannya melalui pembuatan, pemeriksaan, dan penggantian nama.

Untuk memahami nomor inode dan jumlah tautan, lihat cara membaca jenis dan metadata berkas dengan file dan stat.

Nama berkas, inode, dan jalur tujuan

Entri direktori seperti report.txt menyediakan nama yang dipakai dalam sebuah jalur. Sistem berkas mengelola metadata berkas melalui struktur yang disebut inode. Membuat hard link menambahkan nama untuk inode yang sama. Jika salah satu nama dihapus, nama lainnya tetap dapat dipakai untuk mengakses berkas. Kedua nama itu setara; tidak ada nama yang lebih asli dalam struktur hard link.

Tautan simbolis adalah entri tersendiri yang berisi string jalur tujuan. Saat dibuka, sistem mengikuti jalur tersebut. Jika nama tujuan hilang atau berpindah, tautan dapat tetap ada sementara akses melalui tautan gagal. Keadaan ini disebut tautan putus.

Perbandingan Hard link Tautan simbolis
Yang dirujuk Inode berkas yang sama String jalur tujuan
Inode Sama dengan nama asal Memiliki inode sendiri
Nama asal dihapus atau diganti Nama lainnya tetap berfungsi Dapat putus jika jalur tersimpan tidak lagi menemukan tujuan
Sistem berkas lain Tidak dapat melintasi batasnya Dapat menunjuk ke jalur pada sistem berkas lain
Tujuan berupa direktori Umumnya tidak dapat dibuat Dapat dibuat

Membuat berkas latihan dan kedua jenis tautan

Gunakan Bash di Linux, GNU Coreutils, dan akun pengguna biasa. Kerjakan latihan di direktori baru dalam home. Jika ~/linux-course-09-practice sudah ada, pilih nama lain dan sesuaikan jalur. mkdir berikut gagal ketika nama itu sudah ada. Berhenti jika mkdir atau cd gagal; melanjutkan dapat menulis berkas di lokasi yang salah atau menimpa data lama.

mkdir ~/linux-course-09-practice

cd ~/linux-course-09-practice

pwd

Periksa bahwa pwd menunjukkan direktori kosong yang baru dibuat sebelum menjalankan printf. Pengalihan > berikut menulis satu baris ke original.txt dan akan menimpa berkas bernama sama jika sudah ada.

printf 'version 1\n' > original.txt

ln original.txt hard.txt

ln -s original.txt shortcut.txt

ln pertama memakai perilaku bawaan untuk membuat hard link. ln dengan -s membuat tautan simbolis. shortcut.txt menyimpan jalur relatif original.txt. Jalur ini ditafsirkan dari direktori tempat tautan berada, bukan direktori kerja shell saat ini. Jika salah satu pembuatan tautan gagal, periksa pesan dan keadaan berkas sebelum meneruskan perbandingan.

Memeriksa inode dan tujuan tautan

GNU stat menampilkan nomor inode dengan %i dan jumlah hard link dengan %h. readlink mencetak jalur yang disimpan dalam tautan simbolis. GNU stat secara bawaan memeriksa tautan itu sendiri, sehingga inode shortcut.txt tidak tertukar dengan inode tujuannya.

stat -c '%i %h %n' original.txt hard.txt shortcut.txt

readlink shortcut.txt

Nomor inode sebenarnya bergantung pada sistem. Dalam ilustrasi berikut, original.txt dan hard.txt mempunyai nomor yang sama dan jumlah tautan dua; shortcut.txt mempunyai inode terpisah. Jarak baris hanya untuk memisahkan bagian ilustrasi, bukan format keluaran persis yang harus muncul di terminal.

123456 2 original.txt

123456 2 hard.txt

789012 1 shortcut.txt

original.txt

Angka 123456 dan 789012 hanya contoh, bukan hasil pengukuran. readlink menampilkan original.txt, yang ditafsirkan dalam direktori tempat tautan berada. Saat ini ketiga nama dapat membaca isi yang sama:

cat original.txt

cat hard.txt

cat shortcut.txt

Setiap cat mencetak version 1 pada satu baris. Isi yang sama tidak berarti struktur ketiga nama sama: hard link berbagi berkas, sedangkan tautan simbolis menyimpan jalur menuju berkas.

Mengganti nama asal dan memeriksa tautan putus

Di direktori latihan yang sama, pastikan renamed.txt belum ada sebelum mengganti nama original.txt. hard.txt tetap terbaca karena merujuk ke inode yang sama. shortcut.txt tetap menunjuk ke jalur lama original.txt, sehingga menjadi putus.

mv original.txt renamed.txt

cat hard.txt

readlink shortcut.txt

cat hard.txt mencetak version 1, sementara readlink shortcut.txt tetap mencetak original.txt. Jika sekarang Anda menjalankan cat shortcut.txt, galat tujuan tidak ditemukan merupakan hasil yang diharapkan. Berhasil membaca string dengan readlink tidak membuktikan bahwa tujuan masih ada. Untuk membuat tautan baru ke nama yang berubah, Anda dapat memakai ln -s renamed.txt new-shortcut.txt selama nama baru itu belum dipakai.

Perintah rm shortcut.txt menghapus tautan itu sendiri, bukan berkas tujuannya. Jangan jalankan penghapusan opsional ini sebelum latihan pemulihan di bawah jika masih ingin menguji shortcut.txt. Garis miring di akhir jalur atau perintah yang menargetkan berkas di dalam direktori bertautan dapat mengubah objek yang diakses; periksa jalur tepatnya sebelum menghapus.

Memilih tautan dan mengembalikan latihan

Gunakan hard link untuk memberi nama tambahan kepada berkas pada sistem berkas yang sama, sehingga berkas tetap dapat diakses melalui nama lainnya jika satu nama hilang. Tautan simbolis lebih fleksibel untuk direktori atau jalur pada sistem berkas lain, serta memperlihatkan tujuan sebagai jalur. Bila akan memindahkan tautan atau mengganti nama tujuannya, perhitungkan bahwa tujuan relatif ditafsirkan dari lokasi tautan.

Hard link bukan salinan cadangan yang terpisah: perubahan isi berkas yang sama dapat terlihat melalui kedua nama. Untuk opsi dan penafsiran tujuan, baca panduan ln berbahasa Inggris. Panduan readlink berbahasa Inggris menjelaskan jalur tersimpan dan hasil penafsirannya.

Setelah membandingkan, kembalikan nama asal di direktori latihan yang sama. Jika Anda sempat membuat original.txt baru, periksa dahulu dan jangan menyetujui penimpaan tanpa memahami akibatnya. mv -i dapat meminta konfirmasi; hasil pemulihan berikut mengandaikan penggantian nama berhasil. Tautan opsional new-shortcut.txt masih menunjuk ke renamed.txt dan perlu ditangani terpisah.

mv -i renamed.txt original.txt
cat shortcut.txt
stat -c '%i %h %n' original.txt hard.txt

shortcut.txt yang masih ada kini kembali membaca version 1, dan original.txt serta hard.txt tetap berbagi inode dengan jumlah hard link dua. Jika Anda menolak pemindahan karena benturan nama, periksa hasil aktual sebelum menganggap latihan sudah kembali ke keadaan semula.

Dokumentasi resmi

Dokumentasi ln GNU Coreutils menjelaskan hard link dan tautan simbolis. Dokumentasi GNU readlink menjelaskan keluaran jalur tujuan.