Tautan simbolik perlu dimodifikasi secara atomik. Jika Anda setengah menulis, mereka tidak akan berhasil. Konten dari tautan simbolik cukup kecil (paling banyak 4.095 karakter di Linux: panjang maksimum jalur ke sebuah file), jadi akan ada sedikit gunanya dalam mengedit bagian dari tautan simbolik di tingkat kernel. Oleh karena itu kernel tidak menawarkan antarmuka apa pun untuk mengedit tautan simbolik, hanya antarmuka untuk membuat yang baru, symlink
panggilan sistem (plus antarmuka generik unlink
untuk menghapus file apa pun).
The symlink
system call hanya menciptakan link simbolik baru, itu tidak menghapus file yang ada. Ini menjengkelkan, tetapi konsisten dengan panggilan sistem lain untuk membuat file seperti open
(yang dapat membuat file baru atau memotong file yang ada, tetapi tidak mengganti file yang ada dengan file yang baru dibuat) dan mkdir
.
Dalam shell, seperti yang Anda temukan , sementara Anda tidak dapat mengganti tautan simbol secara atomik dengan ln
perintah ( ln -sf
memutuskan tautan file sebelumnya lalu membuat tautan simbolik), Anda dapat melakukannya dengan terlebih dahulu membuat tautan simbolik di bawah nama sementara dan kemudian memindahkannya ke tempatnya.
tmp=$(TMPDIR=$(dirname -- "$link") mktemp)
ln -sf -- "$target" "$tmp"
mv -f "$tmp" "$link"