लिनक्स में 'ln -sf' का क्या अर्थ है?


21

मेरे 2 सवाल हैं। पहला -sfविकल्प के लिए है और दूसरा विकल्प के अधिक विशिष्ट उपयोग के लिए है -f

गुग्लिंग करके, मैंने कमांड ln, विकल्प -sऔर के विवरण का पता लगाया -f

( 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

मैं इन विकल्पों को व्यक्तिगत रूप से समझता हूं। लेकिन, यह -sऔर -fविकल्प एक साथ कैसे उपयोग कर सकते हैं ? -sएक लिंक फ़ाइल बनाने के लिए उपयोग किया जाता है और -fएक लिंक फ़ाइल को हटाने के लिए उपयोग किया जाता है। मैं इस स्थिति को समझ नहीं पा रहा हूं और इस विलय के विकल्प का उपयोग क्यों कर रहा हूं।

lnकमांड के बारे में अधिक जानने के लिए , मैंने कुछ उदाहरण दिए।

$ 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 

अगले आदेश से पहले सब कुछ ठीक है

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

-fविकल्प के विवरण से , यह अंतिम आदेश काम नहीं करना चाहिए, लेकिन यह करता है! fooहटा दी है।

ये क्यों हो रहा है?


3
-fबल के लिए खड़ा है ( --force); हटाने के लिए नहीं!
पंड्या

3
टेर्डन के उत्तर में एक कारण जोड़ने के लिए ... उपयोग में से एक है जब मैन्युअल रूप से पुस्तकालयों को अपडेट करना। यदि आप इसे दो चरणों में करते हैं - पहला लिंक पुराने लिंक को हटाने के लिए, तो ln -s को एक नया बनाने के लिए - पुस्तकालय संचालन के बीच काम नहीं करेगा ... जो कि एक बड़ी समस्या बन जाती है यदि ln कमांड को पुस्तकालय की आवश्यकता होती है काम करने के लिए। तो ln -sf के साथ, पुराने लिंक को एक नए के साथ बदल दिया जाता है, बिना लिंक को कभी भी तोड़ा जा रहा है।
बार्ड कोपरपुड

जवाबों:


42

सबसे पहले, यह जानने के लिए कि कमांड के विकल्प क्या करते हैं, आप उपयोग कर सकते हैं man command। इसलिए, यदि आप दौड़ते हैं man ln, तो आप देखेंगे:

   -f, --force
          remove existing destination files

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

अब, -sजैसा कि आपने कहा, कड़ी के विपरीत लिंक को प्रतीकात्मक बनाना है। -f, तथापि, लिंक दूर करने के लिए नहीं है। यदि कोई मौजूद है तो गंतव्य फ़ाइल को अधिलेखित करना है। उदाहरण देकर स्पष्ट करने के लिए:

 $ 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.