Perintah ln Linux: tautan keras, symlink, dan jalur relatif

Perintah ln membuat tautan keras secara bawaan; tambahkan -s untuk membuat tautan simbolik yang menyimpan jalur tujuan. Tautan keras berbagi file yang sama dalam satu sistem berkas, sedangkan tautan simbolik dapat menunjuk ke direktori atau sistem berkas lain dan dapat menjadi putus jika jalurnya hilang.

Contoh-contoh menggunakan perilaku GNU Coreutils. Periksa ln --help, man ln, dan dokumentasi distribusi Anda saat portabilitas atau opsi spesifik versi menjadi penting.

Apa itu perintah ln?

Tautan keras (hard link) adalah nama tambahan untuk inode yang sama. Inode menyimpan identitas dan metadata file pada satu sistem berkas; tidak ada nama yang lebih “asli” daripada nama lain. Tautan simbolik (symbolic link atau symlink) adalah file tersendiri yang berisi string jalur, bukan salinan isi target.

Sintaks Dasar

ln [OPSI]... [-T] TARGET NAMA_TAUTAN
ln [OPSI]... TARGET... DIREKTORI

Kutip jalur yang mengandung spasi. Jika didukung, letakkan -- sebelum operand yang diawali dengan tanda hubung sehingga tidak diinterpretasikan sebagai opsi.

Penggunaan dasar ln

Membuat hard link

Gunakan direktori latihan baru milik Anda, misalnya direktori hasil mktemp -d yang Anda masuki dengan cd. Buat sumber dengan printf 'awal\n' > original.txt dan pastikan hard-link.txt belum ada. Kedua nama berikut kemudian merujuk pada file yang sama.

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

Dua baris stat menampilkan nomor inode yang sama dan jumlah tautan 2 untuk sumber latihan yang baru. Menulis langsung, misalnya printf 'baru\n' > hard-link.txt, mengubah isi yang juga terlihat melalui original.txt. Namun, editor yang menyimpan dengan mengganti file melalui rename dapat membuat inode baru dan memutus hubungan nama tersebut. Tautan keras bukan cadangan independen; menghapus satu nama hanya mengurangi jumlah tautan.

Membuat symbolic link

Gunakan -s untuk menyimpan string tujuan. Pada Linux, contoh membuat app-current di direktori kerja dan menyimpan /opt/myapp/current; direktori induk nama tautan harus tersedia dan nama itu belum boleh ada. Target /opt/myapp/current tidak harus sudah ada agar tautan dapat dibuat.

ln -s /opt/myapp/current app-current
readlink app-current

Keluaran yang diharapkan dari readlink adalah /opt/myapp/current. Itu hanya membuktikan string yang disimpan, bukan keberadaan target. Jika target tidak ada, tautan tetap tercipta tetapi tidak dapat dipakai untuk membuka data target. Untuk latihan tanpa jalur sistem, ganti target dengan jalur absolut direktori milik Anda.

Membuat beberapa tautan dalam direktori

Buat file1 dan file2 di direktori kerja dengan touch file1 file2, lalu siapkan links dengan mkdir links. Pada GNU, gabungan -sr menghitung string relatif dari lokasi setiap tautan; hasilnya links/file1 menunjuk ke ../file1 dan links/file2 ke ../file2.

ln -sr -- file1 file2 links/

Alternatif dengan direktori tujuan eksplisit adalah ln -sr -t links -- file1 file2; pilih salah satu bentuk, bukan menjalankannya berurutan pada nama yang sama. Tanpa -r, ln -s file1 links/ menyimpan string file1 pada links/file1, sehingga tautan itu merujuk ke dirinya sendiri, bukan ke file pada direktori kerja.

Memeriksa jalur yang dituju oleh tautan simbolik

Setelah ln -s berhasil, periksa string yang disimpan dengan readlink untuk string tautan dan resolusi jalur. Contoh terpisah ini memakai demo-target.txt agar tidak menulis ulang sumber latihan tautan keras sebelumnya. Pastikan kedua nama contoh belum ada.

printf 'demo\n' > demo-target.txt &&
ln -s -- demo-target.txt shortcut.txt &&
readlink -- shortcut.txt

Keluaran yang diharapkan adalah demo-target.txt. Tautan dan target berada di direktori yang sama sehingga resolusi relatifnya benar. readlink -e -- shortcut.txt dapat memeriksa jalur akhir yang seluruh komponennya tersedia, sedangkan readlink tanpa opsi tetap dapat membaca string pada tautan yang putus.

Opsi utama

Opsi Tujuan
-s Membuat tautan simbolik.
-r Hasilkan target simbolik relatif; gunakan dengan -s.
-f Mengganti entri tujuan yang sudah ada; juga dapat menghilangkan nama file biasa, bukan hanya symlink.
-i Meminta keputusan sebelum mengganti entri tujuan yang sudah ada.
-n Memperlakukan tujuan berupa symlink ke direktori sebagai tautan itu sendiri; direktori nyata tetap diperlakukan sebagai direktori.
-T Memperlakukan nama tautan sebagai satu jalur tepat, bukan direktori tempat tautan baru dimasukkan.
-b Cadangkan tujuan yang ada.
-v Laporkan tautan yang dibuat.

Opsi panjang sering membuat skrip yang ditinjau lebih mudah dipahami. Ketika skrip harus dijalankan di sistem non-GNU, verifikasi setiap opsi non-POSIX pada platform target.

Contoh praktis

Membuat tautan simbolik relatif

Siapkan mkdir -p releases/2026-09 app dalam direktori latihan dan pastikan app/current serta app/current-auto belum ada. Bentuk pertama menyimpan string relatif yang dihitung sendiri. Bentuk kedua memberi jalur absolut dan meminta GNU menghitung jalur relatifnya.

ln -s ../releases/2026-09 app/current
ln -sr -- "$(pwd)/releases/2026-09" "$(pwd)/app/current-auto"

Pada pohon latihan tanpa symlink di direktori induk, kedua tautan menyimpan ../releases/2026-09. Jika pohon app dan releases dipindahkan bersama dengan hubungan direktori tetap sama, tautan relatif tetap berguna. GNU -r mengkanonisasi target dan direktori tempat tautan dibuat, sehingga symlink pada komponen induk dapat memengaruhi hasil perhitungannya.

Mengganti tautan deployment setelah pemeriksaan

Siapkan dua direktori rilis dengan mkdir -p releases/2026-09 releases/2026-10 dan tautan latihan dengan ln -s releases/2026-09 current. Rangkaian berikut mensyaratkan current berupa symlink sebelum mengganti nama yang tepat tersebut. Baca hasil pembacaan pertama dan pastikan rilis baru benar-benar siap sebelum menyetujui pertanyaan penggantian.

test -L current &&
readlink -- current &&
ln -sinT -- releases/2026-10 current &&
readlink -- current

Setelah penggantian disetujui dan berhasil, pembacaan terakhir seharusnya menghasilkan releases/2026-10. -i meminta keputusan sebelum menimpa; -T mencegah tujuan diperlakukan sebagai direktori. Jika ditolak, tautan lama tetap ada; status penolakan berbeda menurut versi, jadi periksa hasil dan bantuan lokal. Bila -T sudah dipakai, -n tidak menambah efek. Direktori nyata tidak diganti oleh contoh ini, tetapi tanpa pemeriksaan test -L, penggantian juga dapat mengenai file biasa. Pemeriksaan awal tidak menghilangkan risiko perubahan serentak oleh proses lain, dan mengganti satu tautan tidak menjadikan seluruh langkah deployment satu transaksi.

Memeriksa jenis tautan dan resolusi target

Jalankan pemeriksaan berikut pada app-current yang dibuat sebelumnya. Baca hasil dan status setiap perintah secara terpisah. Untuk membuat semua pemeriksaan berhasil dalam latihan, gunakan tautan yang targetnya memang ada di direktori milik Anda.

ls -l -- app-current
readlink -- app-current
readlink -e -- app-current
stat -- app-current
stat -L -- app-current

ls -l menunjukkan jenis tautan dan panah ke string tujuan. readlink -e gagal jika resolusi lengkap tidak berhasil, misalnya karena komponen hilang, izin akses, atau loop; kegagalan tidak selalu membuktikan data target sudah terhapus. stat bawaan memeriksa symlink itu sendiri, sedangkan stat -L mengikuti target. Lihat stat untuk identitas inode dan jumlah tautan bila membandingkan nama tautan keras. Nomor inode saja harus dinilai bersama identitas perangkat atau sistem berkas.

ln dan perintah terkait

Perintah atau metode Peran utama Penggunaan yang sesuai
Hard link Nama lain untuk satu inode File reguler pada sistem file yang sama
Symbolic link File terpisah yang menyimpan jalur target Direktori, target lintas sistem file, dan pointer
cp Salinan data independen Salinan yang dapat diubah secara terpisah
Bind mount Mengekspos jalur di titik mount lain Pemetaan direktori pada tingkat sistem berkas

Perhatian Penting

Ingat urutan operand

Bentuk umum adalah ln TARGET NAMA_TAUTAN: target lebih dahulu, nama baru kemudian. Secara bawaan, nama tujuan yang sudah ada menyebabkan kegagalan, bukan penimpaan. Bila tujuan berupa direktori atau symlink ke direktori, tautan dapat dibuat di dalamnya; gunakan -T saat yang dimaksud adalah satu nama yang tepat.

Target relatif didasarkan pada lokasi tautan

Hitung string relatif dari direktori tempat tautan dibuat, bukan dari shell. Memindahkan hanya tautan atau hanya target dapat memutus hubungan. Tautan absolut cocok untuk jalur tetap, tetapi isi pada jalur absolut itu tetap dapat berubah dan namespace atau mesin lain dapat menafsirkan jalur yang sama secara berbeda.

Hard link tidak dapat melintasi sistem berkas

Pada Linux, tautan keras berbagi inode pada satu sistem berkas sehingga tidak dapat dibuat melintasi batas sistem berkas, dan tautan keras direktori umumnya dilarang. Izin direktori serta kebijakan perlindungan tautan juga dapat menolak operasi. Jika operand sumber sudah berupa symlink dan Anda membuat tautan keras, tentukan -L untuk mengikuti target atau -P untuk tautan itu sendiri; bila -s dipakai, kedua opsi itu diabaikan.

FAQ

Apakah ln membuat tautan simbolik secara default?

Tidak. ln membuat tautan keras secara bawaan. Tambahkan -s untuk tautan simbolik.

Apakah menghapus nama asli menghancurkan berkas yang memiliki tautan keras?

Tidak. Data tetap ada selama tautan keras lain merujuk ke inode.

Bagaimana cara mendeteksi tautan simbolik yang rusak?

Gunakan readlink -- NAMA_TAUTAN untuk string tersimpan dan readlink -e -- NAMA_TAUTAN untuk resolusi lengkap. Dalam direktori yang dapat diakses, test -L yang benar bersama test -e yang salah menunjukkan nama masih berupa symlink tetapi target tidak dapat diakses sebagai jalur yang ada; periksa juga izin dan loop.

Apakah tautan simbolik sebaiknya menggunakan target absolut atau relatif?

Tautan relatif cocok untuk pohon direktori yang dapat dipindahkan; tautan absolut cocok untuk jalur sistem yang tetap. Pilih berdasarkan bagaimana tautan dan target akan dipindahkan.

Dokumentasi resmi

Referensi perintah Linux menurut tugas (bahasa Inggris) memberi konteks perintah pengelolaan file lainnya.