क्या rm -rf प्रतीकात्मक लिंक का अनुसरण करता है?


63

मेरे पास इस तरह की एक निर्देशिका है:

$ ls -l
total 899166
drwxr-xr-x 12 me scicomp       324 Jan 24 13:47 data
-rw-r--r--  1 me scicomp     84188 Jan 24 13:47 lod-thin-1.000000-0.010000-0.030000.rda
drwxr-xr-x  2 me scicomp       808 Jan 24 13:47 log
lrwxrwxrwx  1 me scicomp        17 Jan 25 09:41 msg -> /home/me/msg

और मैं इसका इस्तेमाल करके हटाना चाहता हूं rm -r

हालांकि मैं डरा हुआ हूं rm -r सीलिंक का अनुसरण करेगा और उस निर्देशिका में सब कुछ हटा देगा (जो बहुत खराब है)।

मैं इसके बारे में कुछ भी नहीं पा सकता हूँ आदमी पृष्ठों में। दौड़ने का सटीक व्यवहार क्या होगा rm -rf इस एक के ऊपर एक निर्देशिका से?


15
डमी फ़ाइल को इंगित करने और परिदृश्य को निष्पादित करने के लिए सिम्कलिन के साथ डमी डायर बनाना कितना कठिन है? तब आपको पता चलेगा कि यह कैसे काम करता है!

जवाबों:


51

उदाहरण 1: किसी निर्देशिका को किसी अन्य निर्देशिका की सॉफ्ट लिंक से हटाना।

susam@nifty:~/so$ mkdir foo bar
susam@nifty:~/so$ touch bar/a.txt
susam@nifty:~/so$ ln -s /home/susam/so/bar/ foo/baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── foo
    └── baz -> /home/susam/so/bar/

3 directories, 1 file
susam@nifty:~/so$ rm -r foo
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

इसलिए, हम देखते हैं कि सॉफ्ट-लिंक का लक्ष्य जीवित रहता है।

उदाहरण 2: एक निर्देशिका के लिए एक नरम लिंक हटाना

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz
susam@nifty:~/so$ tree
.
└── bar
    └── a.txt

1 directory, 1 file
susam@nifty:~/so$

केवल, नरम लिंक हटा दिया गया है। सॉफ्ट-लिंक का लक्ष्य जीवित रहता है।

उदाहरण 3: सॉफ्ट-लिंक के लक्ष्य को हटाने का प्रयास करना

susam@nifty:~/so$ ln -s /home/susam/so/bar baz
susam@nifty:~/so$ tree
.
├── bar
│   └── a.txt
└── baz -> /home/susam/so/bar

2 directories, 1 file
susam@nifty:~/so$ rm -r baz/
rm: cannot remove 'baz/': Not a directory
susam@nifty:~/so$ tree
.
├── bar
└── baz -> /home/susam/so/bar

2 directories, 0 files

प्रतीकात्मक लिंक के लक्ष्य में फ़ाइल जीवित नहीं है।

उपरोक्त प्रयोग एक डेबियन जीएनयू / लिनक्स 9.0 (खिंचाव) प्रणाली पर किया गया था।


11
rm -rf baz / * सामग्री को हटा देगा
Wyrmwood

1
हां, यदि आप rm -rf [सिम्पील] करते हैं, तो मूल निर्देशिका की सामग्री को हटा दिया जाएगा! बहुत सावधान रहें।
Buttle Butkus

@frnknstn आप सही हैं। मैं वही व्यवहार देखता हूं जिसका आप मेरे नवीनतम डेबियन सिस्टम पर उल्लेख करते हैं। मुझे याद नहीं है कि डेबियन के किस संस्करण पर मैंने पहले प्रयोग किए थे। डेबियन के एक पुराने संस्करण पर मेरे पहले प्रयोगों में, तीसरे उदाहरण में या तो a.txt बच गया होगा या मुझे अपने प्रयोग में त्रुटि हो गई होगी। मैंने डेबियन 9 पर वर्तमान व्यवहार के साथ उत्तर को अद्यतन किया है और यह व्यवहार आपके उल्लेख के अनुरूप है।
Susam Pal

19

यदि आप उस निर्देशिका से rm -rf करते हैं, जिससे आपने ls चलाया था, तो आपका / home / me / msg निर्देशिका सुरक्षित रहेगा केवल सिम्लिंक को ही हटा दिया जाएगा, न कि वह निर्देशिका जिसे वह इंगित करता है।

केवल एक चीज जिससे मैं सावधान रहूंगा, यदि आप "rm -rf msg /" (अनुगामी स्लैश के साथ) जैसे कुछ कहते हैं, तो ऐसा न करें क्योंकि यह उस निर्देशिका को हटा देगा जो msg सिम्पीलिंक के बजाय msg इंगित करता है अपने आप।


3
"केवल एक चीज जिससे मैं सावधान रहूंगा, यदि आप" rm -rf msg / "(अनुगामी स्लैश के साथ) जैसे कुछ कहते हैं, तो ऐसा न करें क्योंकि यह उस निर्देशिका को हटा देगा जो msg के बजाय इशारा करता है सहानुभूति है। " - मुझे यह सच नहीं लगता। तीसरा उदाहरण नीचे मेरी प्रतिक्रिया में देखें।

1
मुझे @Susam ('rm -r symlink /' सिमलिंक के लक्ष्य को नष्ट नहीं करता) के समान परिणाम मिलता है, जिसे लेकर मुझे प्रसन्नता है क्योंकि इसे बनाना बहुत आसान गलती होगी।
Andrew Crabb

5

rm फ़ाइलों और निर्देशिकाओं को निकालना चाहिए। यदि फ़ाइल प्रतीकात्मक लिंक है, तो लिंक हटा दिया जाता है, लक्ष्य नहीं। यह एक प्रतीकात्मक लिंक की व्याख्या नहीं करेगा। उदाहरण के लिए 'टूटी हुई लिंक्स' को हटाते समय क्या व्यवहार होना चाहिए- आरएम विफलता को इंगित करने के लिए गैर-शून्य के साथ 0 से बाहर निकलता है

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