Rm पर -f विकल्प का वास्तविक बिंदु क्या है?


14

GNU कोरुटिल्स मैन पेज को पढ़ने के लिए rm, विकल्पों में से एक है -f, जो मैनुअल के अनुसार है,

-f, --force
          ignore nonexistent files and arguments, never prompt

अब, मैंने कुछ परीक्षण किए और दिखाया कि वास्तव में अगर मैं किसी चीज़ का उपयोग करता हूं

rm -f /nonexisting/directory/

यह शिकायत नहीं करेगा।

ऐसे विकल्प से वास्तव में कोई क्या हासिल कर सकता है?

साथ ही "निर्देशिकाओं को हटाने" का सबसे आम उदाहरण rmकुछ इस तरह है

 rm -rf /delete/this/dir

-rविकल्प समझ में आता है, लेकिन -f?

जवाबों:


9

मुझे लगता है कि मैन पेज में इस मामले में थोड़ा विस्तार का अभाव है। -fका विकल्प rmवास्तव में काफी कुछ उपयोग के मामलों है:

  • त्रुटि निकास कोड से बचने के लिए
  • से बचने के लिए
  • अनुमति जाँच को बायपास करने के लिए

आप सही हैं कि गैर-मौजूद फ़ाइल को हटाना व्यर्थ है, लेकिन लिपियों में यह कहने में सक्षम होने के लिए वास्तव में सुविधाजनक है "मुझे ये फ़ाइलें नहीं चाहिए, यदि आप उन्हें ढूंढते हैं, तो उन्हें हटा दें, लेकिन मुझे परेशान न करें यदि वे डॉन 'टी मौजूद है'। कुछ लोग set -eअपनी स्क्रिप्ट का उपयोग करते हैं ताकि यह किसी भी त्रुटि पर बंद हो जाए (किसी भी आगे की क्षति से बचने के लिए स्क्रिप्ट का कारण बन सकता है), और rm -rf /home/my/garbageकी तुलना में आसान है if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi

अनुमति चेक के बारे में एक नोट: किसी फ़ाइल को हटाने के लिए, आपको मूल निर्देशिका के लिए लिखने की अनुमति चाहिए , न कि फ़ाइल की। तो चलिए बताते हैं कि rootआपके होम डायरेक्टरी के स्वामित्व वाली कोई फाइल है और आपकी sudoपहुंच नहीं है , आप -fविकल्प का उपयोग करके फाइल को हटा सकते हैं । यदि आप Git का उपयोग करते हैं, तो आप देख सकते हैं कि Git ऑब्जेक्ट फ़ाइलों पर लिखने की अनुमति नहीं छोड़ता है जो इसे बनाता है:

-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c

इसलिए यदि आप उपयोग करते हैं rm, तो बिना उपयोग किए एक गिट रिपॉजिटरी को हटाने का एकमात्र तरीका rootउपयोग करना है rm -rf


4
-fएक त्रुटि निकास कोड से नहीं बचता है। यदि rmकिसी मौजूदा फ़ाइल को निकालने का प्रयास विफल रहता है, तो वह एक त्रुटि कोड लौटाएगा।
गाइल्स का SO- बुराई को रोकना '

मैंने इस उत्तर को अस्वीकार कर दिया है क्योंकि "त्रुटि निकास कोड से बचने के लिए" के रूप में लिखा जाना चाहिए "इस घटना में त्रुटि निकास कोड से बचने के लिए कि कोई फ़ाइल ऑपरेंड नहीं हैं या फ़ाइल ऑपरेटर मौजूद नहीं हैं"। जैसा कि यह उत्तर अभी लिखा गया है, यह गलत है।
हेरोल्ड फिशर

6

-fजब केवल पढ़ने के लिए फ़ाइल को हटाने का विकल्प पुष्टि संकेतों को रोकता है। जब एक या अधिक आपूर्ति की गई फ़ाइल मौजूद नहीं होती है तो यह त्रुटियों को भी दबा देती है।

-fजब आप जानते हैं कि फ़ाइलों में से कुछ आप कर रहे हैं को हटाने केवल पढ़ने के लिए किया जा सकता है कर रहे हैं, और आप इसके बारे में संकेत दिया जा नहीं करना चाहती विकल्प उपयोगी है।

fविकल्प जब आप मामले में कुछ फाइलें वे मौजूद निकालना चाहते हैं, और देखभाल करने के लिए है कि क्या वे मौजूद हैं या नहीं नहीं करना चाहती भी उपयोगी है। यह आमतौर पर मेकफाइल्स में उपयोग किया जाता है , एक ऐसी कमांड बनाने के लिए जो स्रोत फ़ाइलों से पुनर्जीवित होने वाली फ़ाइलों को हटा देती है। उदाहरण के लिए, यदि foo.oसे पुनर्निर्माण किया जा सकता foo.c, bar.oसे फिर से बनाया जा सकता है bar.c, और myappसे पुनर्निर्माण किया जा सकता foo.oहै और bar.o, फिर makefile लक्ष्य

clean:
        rm -f *.o myapp

निकालता है myapp, foo.oऔर bar.oयदि वे मौजूद हैं और यदि उनमें से कोई मौजूद नहीं है तो शिकायत नहीं करता है।

-fज्यादातर मामलों में डायरेक्टरी ट्री हटाने के निर्देशों में शामिल करना आवश्यक नहीं है। इसे उचित ठहराया जा सकता है क्योंकि यदि आप सुनिश्चित हैं कि आप उस निर्देशिका के पेड़ को हटाना चाहते हैं, भले ही इसमें क्या हो, तो आप निर्दिष्ट कर सकते हैं -fकि कुछ फाइलें केवल पढ़ने के मामले में संकेत देने से बचें। हालांकि, लोग हैं, जो चलाने के लिए कहते हैं कि rm -rfअक्सर बस एक रहस्यमय जादू दोहरा रहे हैं कुछ की है कि क्या विकल्प की परवाह किए बिना छुटकारा पाने के लिए, -rऔर -fवास्तव में आवश्यक हैं। यदि विकल्प आवश्यक नहीं हैं, तो वे उचित नहीं हैं, क्योंकि वे जोखिम को बढ़ाते हैं कि तर्क में एक टाइपो कुछ महत्वपूर्ण को नष्ट कर देगा।


3

-iस्विच करने के लिएrm

मैं आम तौर पर देखने के -fसाथ इस्तेमाल किया जा रहा rmहै जब rmआदेश इतना है कि यह भी शामिल है एलियास किया गया -iइंटरैक्टिव के लिए स्विच। -fस्विच counteracts -i

उदाहरण

एलियासेस rmहोने के साथ समस्या का अनुकरण करें rm -i

$ alias rm='rm -i'

कुछ नकली डेटा बनाओ

$ touch afile

अब के उपनाम संस्करण का उपयोग करके इसे हटाने का प्रयास करें rm

$ rm afile 
rm: remove regular empty file `afile'?

अब प्रयोग करके देखें -f

$ rm -f afile 
$

अनुमतियां

इसके अलावा, मुझे लगता है कि ऐसे उदाहरण हैं जहां आपके पास केवल एक निर्देशिका तक ही पहुंच है और जब आप उक्त निर्देशिका में फ़ाइलों और उप-निर्देशिकाओं को हटाने का प्रयास करते हैं तो आपको "क्या आप निश्चित हैं?" के समान संकेत के साथ चुनौती मिलेगी। -fहाँ कहने के लिए छुटकारा पाने का उपयोग करता है ।


उपनाम का उपयोग करके यह वास्तव में कुछ समझ में आता है। और आपका जवाब मेल खाता है जो मैं सिर्फ ओपनबस मैन पेजों में दिखाता हूं। हालांकि ओपनबेश GNU / Linux नहीं है लेकिन ऐसा लगता है कि यह वही बताता है जो आपने अभी कहा था। यहाँ लिंक है अगर कोई जाँच करना चाहेगा: [लिंक] openbsd.org/cgi-bin/…
saliarosaurus

बैश के साथ आप हमेशा \rmबिना अलियासिंग के दौड़ने के लिए कर सकते हैं (\ commandइसे बनाया गया शॉर्टकट )। मुझे लगता है कि -fशेल स्क्रिप्टिंग में सबसे अच्छा उपयोग होता है, जहां आपके पास लॉकफाइल जैसी कोई चीज होती है जो मौजूद हो सकती है या नहीं, चेतावनी -fबंद कर rm: cannot remove 'file': No such file or directoryदेती है।
द्रव्य स्लोन

@DravSloan हाँ, यह भी समझ में आता है।
Drav

मैं उपयोग rm -fपर अक्सर cleanमें लक्ष्य Makefileरों
एलेक्स

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