Linux'ta 'ln -sf' nin anlamı nedir?


21

2 sorum var. Birincisi -sfseçenekler içindir ve ikincisi seçeneklerin daha spesifik kullanımı içindir -f.

Googling yaparak, command ln, option -sand öğelerinin açıklamasını anladım -f.

(kopya 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

Bu seçenekleri ayrı ayrı anlıyorum. Ancak, bunu -sve -fseçenekleri aynı anda nasıl kullanabilir ? -sbir bağlantı dosyası oluşturmak için kullanılır ve bir bağlantı dosyasını -fkaldırmak için kullanılır. Bu durumu ve neden bu birleştirilmiş seçeneği kullandığımı anlayamıyorum.

lnKomut hakkında daha fazla bilgi edinmek için bazı örnekler verdim.

$ 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 

Bir sonraki komuttan önce her şey iyi çalışıyor

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

-fSeçeneğin açıklamasına göre , bu son komut çalışmamalıdır, ancak çalışır! fookaldırıldı.

Bu neden oluyor?


3
-fkuvvet anlamına gelir ( --force); kaldırmak için değil!
Pandya

3
Terdon'un cevabına bir neden eklemek için ... Kullanımlardan biri kütüphaneleri manuel olarak güncellemektir. İki adımda yaparsanız - eski bağlantıyı kaldırmak için önce rm, sonra yeni bir bağlantı oluşturmak için ln -s - kütüphane işlemler arasında çalışmaz ... ln komutu kütüphaneye ihtiyaç duyarsa büyük bir sorun haline gelir çalışmak. Yani ln -sf ile, eski bağlantı, bağlantı kopmadan yeni bir bağlantıyla değiştirilir.
Baard Kopperud

Yanıtlar:


42

Her şeyden önce, bir komutun seçeneklerinin ne yaptığını bulmak için kullanabilirsiniz man command. Yani, koşarsan man lngöreceksin:

   -f, --force
          remove existing destination files

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

Şimdi, -sdediğin gibi, bağlantıyı zorun aksine sembolik hale getirmektir. -fAncak bağlantıyı kaldırmak değildir. Varsa, hedef dosyanın üzerine yazmaktır. Örneklemek gerekirse:

 $ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.