Kadang kita ingin satu file bisa diakses dari beberapa lokasi sekaligus tanpa harus menyalinnya berulang kali: konfigurasi yang dipakai dua aplikasi, atau versi terbaru sebuah direktori yang ingin tetap diakses lewat nama lama. Linux menyediakan dua mekanisme untuk itu — symbolic link dan hard link — yang terlihat serupa tetapi bekerja dengan cara yang sepenuhnya berbeda. Pada Chapter ini kita akan membuat keduanya, membongkar perbedaannya di level inode, dan memilih kapan masing-masing layak dipakai.
Konsep Singkat: Nama File Bukan Isi File #
Sebelum membahas link, kita perlu satu fakta dasar filesystem: nama file hanyalah entri direktori yang menunjuk ke sebuah inode — struktur data yang menyimpan metadata dan lokasi data file di disk. Satu inode bisa ditunjuk oleh lebih dari satu nama, dan itulah inti dari hard link. Symbolic link bekerja berbeda: file link menyimpan path targetnya, seperti catatan kecil bertuliskan “lihat file di sana”.
Konsekuensi keduanya terasa ketika target dihapus. Hard link tetap hidup karena inode masih ditunjuk oleh nama lain; symbolic link menjadi dangling — jalan buntu yang menunjuk ke file yang tidak ada. Kita akan melihat keduanya secara langsung di bawah.
Membuat Symbolic Link #
Perintah ln -s target nama-link membuat symbolic link. Mari kita coba pada file laporan:
mkdir -p latihan
cd latihan
printf 'Laporan penjualan kuartal pertama.\n' > laporan-q1.txt
ln -s laporan-q1.txt laporan-terbaru
ls -FOutput yang Dihasilkan:
laporan-q1.txt
laporan-terbaru@Tanda @ di belakang nama laporan-terbaru pada listing ls -F menandakan bahwa entri tersebut adalah symbolic link. Untuk melihat ke mana link menunjuk, gunakan readlink — kita bangun ulang fixture yang sama terlebih dahulu:
mkdir -p latihan
cd latihan
printf 'Laporan penjualan kuartal pertama.\n' > laporan-q1.txt
ln -s laporan-q1.txt laporan-terbaru
readlink laporan-terbaru
cat laporan-terbaruOutput yang Dihasilkan:
laporan-q1.txt
Laporan penjualan kuartal pertama.Baris pertama menunjukkan bahwa laporan-terbaru menunjuk ke laporan-q1.txt. Baris kedua membuktikan bahwa membaca link sama hasilnya dengan membaca targetnya: cat mengikuti link secara transparan dan mencetak isi file target. Path target pada symbolic link boleh absolut maupun relatif; link relatif ikut “berpindah” bersama foldernya bila kita memindahkan keduanya bersama-sama, sehingga lebih sering dipakai untuk file yang berada di dalam satu pohon direktori.
Membuat Hard Link #
Tanpa option -s, perintah ln membuat hard link — nama lain untuk inode yang sama. Nomor inode bisa dilihat dengan ls -i atau stat -c '%i'; karena nomor inode berbeda-beda antar sistem, kita bandingkan keduanya secara langsung agar hasilnya bisa diverifikasi:
mkdir -p latihan
cd latihan
printf 'Laporan penjualan kuartal pertama.\n' > laporan-q1.txt
ln laporan-q1.txt laporan-salinan
if [ "$(stat -c %i laporan-q1.txt)" = "$(stat -c %i laporan-salinan)" ]; then
echo "inode sama"
else
echo "inode beda"
fiOutput yang Dihasilkan:
inode samaPesan inode sama membuktikan bahwa kedua nama menunjuk entri inode yang identik — keduanya bukan dua file, melainkan dua nama untuk satu inode. Anda juga bisa melihat nomor inodenya langsung dengan ls -i di komputer Anda; angkanya berbeda-beda di setiap sistem, tetapi keduanya selalu sama untuk hard link. Jumlah pointer ke sebuah inode disebut link count dan bisa dilihat dengan stat -c '%h', sekali lagi di atas fixture yang dibangun ulang:
mkdir -p latihan
cd latihan
printf 'Laporan penjualan kuartal pertama.\n' > laporan-q1.txt
ln laporan-q1.txt laporan-salinan
stat -c '%h %n' laporan-q1.txt laporan-salinanOutput yang Dihasilkan:
2 laporan-q1.txt
2 laporan-salinanAngka 2 pada kedua baris menunjukkan bahwa inode kini ditunjuk dua nama. File baru biasanya berangka 1. Ketika salah satu nama dihapus, link count turun; data baru benar-benar dilepas filesystem ketika link count mencapai nol dan tidak ada proses yang masih memegang file tersebut.
Ketika Target Dihapus #
Sekarang saatnya membuktikan perbedaan perilaku yang paling penting. Kita buat kedua jenis link, lalu hapus targetnya:
mkdir -p latihan
cd latihan
printf 'Data penting.\n' > asli.txt
ln -s asli.txt tautan-simbolik
ln asli.txt tautan-keras
rm asli.txt
cat tautan-kerasOutput yang Dihasilkan:
Data penting.Hard link tautan-keras masih bisa dibaca penuh karena inode-nya tetap hidup. Berbeda dengan symbolic link — coba membacanya:
cd latihan
cat tautan-simbolik 2>&1Output yang Dihasilkan:
cat: tautan-simbolik: No such file or directorycat melaporkan No such file or directory karena symbolic link hanya menyimpan path, dan path tersebut sudah tidak menunjuk ke file mana pun. Kondisi link semacam ini disebut dangling symlink dan sering terjadi setelah aplikasi dihapus atau direktori dipindahkan.
Memilih Antara Keduanya #
| Aspek | Symbolic link (ln -s) | Hard link (ln) |
|---|---|---|
| Yang disimpan | path target | rujukan langsung ke inode |
| Bisa menunjuk direktori | ya (dengan izin) | tidak, kecuali oleh root dan kasus khusus ./.. |
| Bisa lintas filesystem | ya | tidak, inode bersifat lokal per filesystem |
| Saat target dihapus | link rusak (dangling) | data tetap hidup selama ada nama lain |
| Mengikuti target yang berpindah | hanya bila path relatif ikut berpindah | ya, selalu |
Dalam praktik sehari-hari, symbolic link jauh lebih sering dipakai: kemampuannya menunjuk direktori dan lintas filesystem membuatnya cocok untuk /etc alias, pengelolaan versi di /opt, dan dotfile yang dikelola Git. Hard link unggul ketika kita butuh cadangan ruang tanpa menyalin data — misalnya sistem backup menyimpan satu salinan fisik untuk file yang tidak berubah.
Link adalah alat yang membuat pohon direktori Linux lentur: satu data, banyak pintu masuk. Dengan pemahaman inode dan kedua jenis link ini, kita siap melihat bagaimana perangkat penyimpanan utuh dipasang ke pohon direktori — konsep mount yang dibahas pada Chapter Mount dan Unmount.