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, symlinkpanggilan sistem (plus antarmuka generik unlinkuntuk menghapus file apa pun).
The symlinksystem 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 lnperintah ( ln -sfmemutuskan 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"