Apa arti dari 'ln -sf' di Linux?

21

Saya punya 2 pertanyaan. Yang pertama adalah untuk -sfopsi dan yang kedua adalah untuk penggunaan -fopsi yang lebih spesifik .

Dengan googling, saya menemukan deskripsi perintah ln, opsi -sdan -f.

(salin dari http://linux.about.com/od/commands/l/blcmdl1_ln.htm )

-s, --symbolic : make symbolic links instead of hard links
-f, --force : remove existing destination files

Saya memahami opsi ini secara individual. Tapi, bagaimana bisa menggunakan ini -sdan -fopsi secara bersamaan? -sdigunakan untuk membuat file tautan dan -fdigunakan untuk menghapus file tautan. Saya tidak dapat memahami situasi ini dan mengapa menggunakan opsi ini.

Untuk mengetahui lebih banyak tentang lnperintah, saya membuat beberapa contoh.

$ touch foo     # create sample file
$ ln -s foo bar # make link to file
$ vim bar       # check how link file works: foo file opened
$ ln -f bar     # remove link file 

Semuanya berfungsi dengan baik sebelum perintah berikutnya

$ ln -s foo foobar
$ ln -f foo     # remove original file

Dengan uraian -fopsi, perintah terakhir ini seharusnya tidak berfungsi, tetapi berhasil! foodihapus.

Mengapa ini terjadi?

casamia
sumber
3
-fsingkatan dari force ( --force); bukan untuk dihapus!
Pandya
3
Untuk menambah alasan jawaban terdon ... Salah satu penggunaannya adalah ketika memperbarui perpustakaan secara manual. Jika Anda melakukannya dalam dua langkah - rm pertama untuk menghapus tautan lama, lalu ln -s untuk membuat yang baru - pustaka tidak akan berfungsi di antara operasi ... yang menjadi masalah besar jika perintah ln membutuhkan pustaka bekerja. Jadi dengan ln -sf, tautan lama diganti dengan yang baru, tanpa tautan yang pernah rusak.
Baard Kopperud

Jawaban:

42

Pertama-tama, untuk menemukan apa yang dilakukan opsi-opsi perintah, Anda dapat menggunakannya man command. Jadi, jika Anda berlari man ln, Anda akan melihat:

   -f, --force
          remove existing destination files

   -s, --symbolic
          make symbolic links instead of hard links

Sekarang, -sseperti yang Anda katakan, membuat tautan simbolis sebagai lawan dari hard. The -f, bagaimanapun, tidak untuk menghapus link. Ini untuk menimpa file tujuan jika ada. Menggambarkan:

 $ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 bar
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo

$ ln -s foo bar  ## fails because the target exists
ln: failed to create symbolic link bar’: File exists

$ ln -sf foo bar   ## Works because bar is removed and replaced with the link
$ ls -l
total 0
lrwxrwxrwx 1 terdon terdon 3 Mar 26 13:19 bar -> foo
-rw-r--r-- 1 terdon terdon 0 Mar 26 13:18 foo
terdon
sumber