मैं आकस्मिक rm -rf / * को कैसे रोकूँ?


164

मैं बस rm -rf /*गलती से भागा , लेकिन मेरा मतलब था rm -rf ./*(स्लैश के बाद स्टार को नोटिस करें)।

alias rm='rm -i'और --preserve-rootडिफ़ॉल्ट रूप से मुझे नहीं बचाया, तो क्या इसके लिए कोई स्वचालित सुरक्षा उपाय हैं?


मैंने रूट को तुरंत रद्द नहीं किया था और कमांड को रद्द कर दिया था, लेकिन कहीं न कहीं कुछ आराम की अनुमति थी क्योंकि मैंने देखा कि मेरा बैश प्रॉम्प्ट पहले ही टूट गया था। मैं अनुमतियों पर भरोसा नहीं करना चाहता हूं और जड़ नहीं है (मैं एक ही गलती कर सकता हूं sudo), और मैं सिस्टम में कहीं गुम एक फाइल की वजह से रहस्यमय कीड़े का शिकार नहीं करना चाहता हूं, इसलिए, बैकअप और sudoअच्छे हैं , लेकिन मैं इस विशिष्ट मामले के लिए कुछ बेहतर करना चाहूंगा।


दो बार सोचने और मस्तिष्क का उपयोग करने के बारे में। मैं वास्तव में इसका उपयोग कर रहा हूं! लेकिन मैं 10 विभिन्न चीजों से जुड़े कुछ जटिल प्रोग्रामिंग कार्य को हल करने के लिए इसका उपयोग कर रहा हूं। मैं इस कार्य में काफी गहराई से डूबा हुआ हूँ, झंडे और रास्तों की जाँच के लिए कोई दिमागी शक्ति नहीं बची है, मैं आदेशों और तर्कों के संदर्भ में सोचता भी नहीं हूँ, मैं 'खाली वर्तमान डायर' जैसे कार्यों के संदर्भ में सोचता हूँ मेरे मस्तिष्क का अलग हिस्सा उन्हें आज्ञाओं में बदल देता है और कभी-कभी यह गलतियाँ करता है। मैं चाहता हूं कि कंप्यूटर उन्हें सही करे, कम से कम खतरनाक वाले।


13
FYI करें, आप rm -rf . /mydirइसके बजाय भी कर सकते हैं rm -rf ./mydirऔर जिस भी निर्देशिका में थे उसे मार सकते हैं । मुझे लगता है कि यह अधिक बार होता है।
user606723

27
बंदूक सादृश्य का उपयोग करने के लिए, यह सवाल कहता है कि कृपया बंदूक को पहचान लें कि मैं अपने पैर पर निशाना लगा रहा हूं और आग नहीं, लेकिन मैं नहीं चाहता कि पहली बार में मेरे पैर में बंदूक को निशाना बनाने की कोई जिम्मेदारी हो। बंदूकें, और कंप्यूटर, बेवकूफ हैं और यदि आप एक बेवकूफ काम करते हैं तो आपको ये परिणाम मिलेंगे। बंदूक सादृश्य के साथ, कुछ भी आपको सतर्कता और अभ्यास के अलावा खुद को चोट पहुंचाने से नहीं रखेगा।
slillibri

73
@slillibri सिवाय इसके कि rmकोई बंदूक नहीं है, यह एक कंप्यूटर प्रोग्राम है, यह निर्धारित करने के लिए पर्याप्त स्मार्ट हो सकता है कि उपयोगकर्ता कुछ महत्वपूर्ण फाइलों को हटाने और चेतावनी जारी करने जा रहा है (जैसे कि यह वास्तव में अगर आप rm -rf /बिना स्टार के करने की कोशिश करते हैं )।
वैलेंटाइन नेमसेव

80
@slillibri गन्स की सफारी हैं। यह पूछना कि rmकमान में बेहतर सुरक्षा कैसे रखी जाए, यह एक पूरी तरह वैध वैध प्रश्न है।
गिल्स

21
सूदो आरएम / बिन / आरएम की सिफारिश नहीं की गई है, लेकिन सबसे अधिक आरएम के :-) को रोक देगा
पॉल

जवाबों:


220

मेरे द्वारा अनुसरण की जाने वाली तरकीबों #में से एक है rmकमांड का उपयोग करते हुए शुरुआत में ।

root@localhost:~# #rm -rf /

यह rmगलत फ़ाइल / निर्देशिका पर आकस्मिक निष्पादन को रोकता है । एक बार सत्यापित होने के बाद, #शुरुआत से हटा दें । यह ट्रिक काम करती है, क्योंकि बैश में एक शब्द जिसकी शुरुआत #उस शब्द से होती है और उस लाइन के सभी शेष अक्षर अनदेखा कर दिए जाते हैं। तो कमांड को केवल अनदेखा किया जाता है।

या

यदि आप किसी महत्वपूर्ण निर्देशिका को रोकना चाहते हैं, तो एक और चाल है।

-iउस डायरेक्टरी में एक फाइल बनाएं । ऐसी विषम फ़ाइल कैसे बनाई जा सकती है? का उपयोग कर touch -- -iयाtouch ./-i

अब प्रयास करें rm -rf *:

sachin@sachin-ThinkPad-T420:~$ touch {1..4}
sachin@sachin-ThinkPad-T420:~$ touch -- -i
sachin@sachin-ThinkPad-T420:~$ ls
1  2  3  4  -i
sachin@sachin-ThinkPad-T420:~$ rm -rf *
rm: remove regular empty file `1'? n
rm: remove regular empty file `2'? 

यहां कमांड लाइन तक *विस्तार होगा -i, इसलिए आपकी कमांड अंततः बन जाती है rm -rf -i। इस प्रकार कमांड हटाने से पहले संकेत देगा। आप अपने में इस फ़ाइल को रख सकते हैं /, /home/, /etc/, आदि

या

के --preserve-rootविकल्प के रूप में उपयोग करें rm। में rmनए में शामिल coreutilsसंकुल, इस विकल्प को डिफ़ॉल्ट है।

--preserve-root
              do not remove `/' (default)

या

सुरक्षित-आरएम का उपयोग करें

वेब साइट से अंश:

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

जो उपयोगकर्ता इन संरक्षित फ़ाइलों या निर्देशिकाओं में से एक को हटाने का प्रयास करते हैं, वे ऐसा करने में सक्षम नहीं होंगे और इसके बजाय चेतावनी संदेश दिखाया जाएगा:

$ rm -rf /usr
Skipping /usr

10
safe-rm बहुत अच्छा लग रहा है, इसे अभी देख रहे हैं ...
Valentin Nemcev

45
सुरक्षित-आरएम साफ-सुथरा है। इसके अलावा -iफ़ाइल के साथ एक निफ्टी ट्रिक है । हा। सिली बैश।
20

5
कमाल है कि यूनिक्स में किस तरह की चालबाजी की जाती है।
वर्नरसीडी

4
नाम -i बनाने वाली फ़ाइल बिल्कुल शुद्ध प्रतिभा है। मैं एक साल पहले इस्तेमाल कर सकता था जब मैंने गलती से वीपीएस पर एक आरएम -आरएफ / आदि / * चला दिया ... (सौभाग्य से, मैं रात का स्नैपशॉट लेता हूं, इसलिए 45 मिनट से कम में बहाल करने में सक्षम था)।
डेविड डब्ल्यू

9
यह जीनियस है। टोना होगाtouch -- -rf
Mircea Vutcovici 19

46

तुम्हारी समस्या:

मैं सिर्फ rm -rf / * दुर्घटनावश भागा, लेकिन मेरा मतलब था rm -rf /।

समाधान: ऐसा मत करो! एक अभ्यास के रूप में, ./एक पथ की शुरुआत में उपयोग न करें । स्लैश कमांड में कोई मूल्य नहीं जोड़ता है और केवल भ्रम पैदा करेगा।

./*इसका मतलब वही है *, जिससे उपरोक्त आदेश बेहतर तरीके से लिखे गए हैं:

rm -rf *

यहाँ एक संबंधित समस्या है। मैं अक्सर निम्नलिखित अभिव्यक्ति देखता हूं, जहां किसी ने मान लिया था कि FOOकुछ इस तरह सेट है /home/puppies। मैंने इसे आज वास्तव में एक प्रमुख सॉफ्टवेयर विक्रेता से प्रलेखन में देखा।

rm -rf $FOO/

लेकिन अगर FOOसेट नहीं किया जाता है, तो यह मूल्यांकन करेगा rm -rf /, जो आपके सिस्टम पर सभी फ़ाइलों को हटाने का प्रयास करेगा। अनुगामी स्लैश अनावश्यक है, इसलिए अभ्यास के मामले में इसका उपयोग न करें।

निम्नलिखित वही काम करेगा, और आपके सिस्टम को भ्रष्ट करने की संभावना कम है:

rm -rf $FOO

मैंने इन युक्तियों को कठिन तरीके से सीखा है। जब 14 साल पहले मेरा पहला सुपरयुजर खाता था, तो मैं गलती rm -rf $FOO/से एक शेल स्क्रिप्ट के भीतर से भाग गया और एक सिस्टम को नष्ट कर दिया। 4 अन्य sysadmins इस पर देखा और कहा, 'हाँ। हर कोई एक बार ऐसा करता है। अब यहाँ आपके इंस्टाल मीडिया (36 फ्लॉपी डिस्क) हैं। जाओ इसे ठीक करो। '

यहाँ अन्य लोग जैसे समाधान सुझाते हैं --preserve-rootऔर safe-rm। हालाँकि, ये समाधान सभी Un * xe-varients के लिए मौजूद नहीं हैं और Solaris, FreeBSD & MacOSX पर काम नहीं कर सकते हैं। इसके अलावा, safe-rmआवश्यक है कि आप अपने द्वारा उपयोग किए जाने वाले हर एक लिनक्स सिस्टम पर अतिरिक्त पैकेज स्थापित करें। यदि आप भरोसा करते हैं safe-rm, तब क्या होता है जब आप एक नया काम शुरू करते हैं और वे safe-rmस्थापित नहीं होते हैं ? ये उपकरण एक बैसाखी हैं, और ज्ञात चूक पर भरोसा करना और अपने काम की आदतों में सुधार करना बहुत बेहतर है।


19
मेरे दोस्त ने मुझे बताया कि वह कभी उपयोग नहीं करता है rm -rf *। वह हमेशा निर्देशिका को पहले बदलता है, और एक विशिष्ट लक्ष्य का उपयोग करता है। कारण यह है कि वह शेल के इतिहास का बहुत उपयोग करता है, और वह चिंतित है कि उसके इतिहास में इस तरह की कमान गलत समय पर आ सकती है।
१५:५५ पर haggai_e

@ छग_ई: अच्छी टिप। जब मैं यूनिक्स के लिए नया था, तो मैं एक बार एक बग में भाग गया, जहां से rm -rf *भी हटा दिया गया था .और ..। मैं जड़ था, और इस तरह कम निर्देशिकाओं में फंस ../../..गया, और काफी विनाशकारी था। मैं rm -rf *हमेशा से बहुत सावधान रहने की कोशिश करता हूं ।
स्टीफन लासवर्स्की

2
rm -rf $FOOजरूरत पड़ने पर मदद नहीं करेंगे rm -rf $FOO/$BARcd $FOO && rm -rf $BARमदद मिलेगी, हालांकि यह अब लंबा है।
विक्टर सर्जियनको

5
@VictorSergienko, बैश के साथ, निर्दिष्ट करने के बारे में कैसे ${FOO:?}के रूप में, rm -rf ${FOO:?}/और rm -rf ${FOO:?}/${BAR:?}। यह इसे कभी भी अनुवाद करने से रोकेगा rm -rf /। मुझे यहाँ मेरे जवाब में इसके बारे में कुछ और जानकारी है
एक्यूमेनस

@haggai_e: मुझे यह इस विषय पर सबसे अच्छी सलाह में से एक लगता है। मैंने अपनी उंगली rm -rf *को एक लूप के लिए उपयोग करके जला दिया जो गलती से गलत निर्देशिका में बदल गया और कुछ और को हटाकर समाप्त हो गया। अगर मैं एक विशिष्ट लक्ष्य का उपयोग करता तो उसे गलत चीज़ को हटाने का बहुत कम मौका मिलता।
रिच

30

चूंकि यह "सर्वरफॉल्ट" पर है, मैं यह कहना चाहूंगा:

आप दर्जनों या अधिक सर्वर, व्यवस्थापक / उपयोगकर्ता, का एक बड़ा सा टीम के साथ है, तो किसी को करने जा रहा है rm -rfया chownगलत निर्देशिका।

आपके पास कम से कम संभव MTTR के साथ प्रभावित सेवा को वापस लेने की योजना होनी चाहिए।


4
और आपको वसूली का अभ्यास करने के लिए एक वीएम या स्पेयर बॉक्स का उपयोग करना चाहिए - पता करें कि क्या काम नहीं किया और कहा कि योजना को परिष्कृत करें। हम एक पखवाड़े में रिबूट हो रहे हैं - क्योंकि हमारे भवन में बिजली की निकासी हुई है, और हर बार यह दर्दनाक रहा है। सभी रैक के कुछ नियोजित शटडाउन करके, हमने इसे लगभग 3 घंटे चलने के कुछ दिनों से काट दिया है - हर बार जब हम सीखते हैं कि कौन सा बिट्स आदि के लिए init.d स्क्रिप्ट को स्वचालित / ठीक करना है
डैनी स्टेपल

और इस कमांड को VM पर आज़माएं। यह दिलचस्प है! लेकिन पहले एक स्नैपशॉट लें।
स्टीफन लासवर्स्की

23

सर्वोत्तम समाधानों में rmसीधे तौर पर उपयोग न करने की अपनी आदतों को बदलना शामिल है ।

एक तरीका यह है कि echo rm -rf /stuff/with/wildcards*पहले दौड़ें । जांचें कि वाइल्डकार्ड से आउटपुट उचित लगता है, फिर शेल कमांड के इतिहास का उपयोग बिना पिछले कमांड को निष्पादित करने के लिए करें echo

एक और तरीका यह है कि echoकमांड को उन मामलों तक सीमित किया जाए जहां यह स्पष्ट रूप से स्पष्ट है कि आप क्या हटा रहे हैं। एक निर्देशिका में सभी फ़ाइलों को हटाने के बजाय, निर्देशिका को हटा दें और एक नया बनाएं। एक अच्छी विधि मौजूदा निर्देशिका का नाम बदलना है DELETE-foo, फिर fooउपयुक्त अनुमतियों के साथ एक नई निर्देशिका बनाएं , और अंत में हटा दें DELETE-foo। इस पद्धति का एक पक्ष लाभ यह है कि आपके इतिहास में जो कमांड दर्ज की गई है rm -rf DELETE-foo

cd ..
mv somedir DELETE-somedir
mkdir somedir                 # or rsync -dgop DELETE-somedir somedir to preserve permissions
ls DELETE-somedir             # just to make sure we're deleting the right thing
rm -rf DELETE-somedir

यदि आप वास्तव में फ़ाइलों के एक समूह को हटाने पर जोर देते हैं क्योंकि आपको निर्देशिका बने रहने की आवश्यकता है (क्योंकि यह हमेशा मौजूद होनी चाहिए, या क्योंकि आपको इसे फिर से बनाने की अनुमति नहीं होगी), फ़ाइलों को एक अलग निर्देशिका में स्थानांतरित करें, और उस निर्देशिका को हटा दें ।

mkdir ../DELETE_ME
mv * ../DELETE_ME
ls ../DELETE_ME
rm -rf ../DELETE_ME

(उस Alt+ .कुंजी को मारो )

एक निर्देशिका को अंदर से हटाना आकर्षक होगा, क्योंकि इससे rm -rf .टाइपो का जोखिम कम होता है। विशिष्ट प्रणाली आपको ऐसा नहीं करने देती, दुर्भाग्य से। आप rm -rf -- "$PWD"इसके बजाय टाइपोस के एक उच्च जोखिम के साथ कर सकते हैं , लेकिन उनमें से अधिकांश कुछ भी नहीं हटाने के लिए नेतृत्व करते हैं। खबरदार कि यह आपके शेल इतिहास में एक खतरनाक आदेश छोड़ देता है।

जब भी आप कर सकते हैं, संस्करण नियंत्रण का उपयोग करें। आप नहीं rm, आप cvs rmया जो भी हो, और यह पूर्ववत है।

Zsh के पास rmएक तर्क के साथ चलने से पहले आपको संकेत देने के विकल्प हैं जो एक निर्देशिका में सभी फाइलों को सूचीबद्ध करता है: rm_star_silent(डिफ़ॉल्ट रूप से) निष्पादित करने से पहले संकेत देता है rm whatever/*, और rm_star_wait(डिफ़ॉल्ट रूप से बंद) एक 10 सेकंड की देरी जोड़ता है जिसके दौरान आप पुष्टि नहीं कर सकते। यह सीमित उपयोग का है यदि आप किसी निर्देशिका में सभी फ़ाइलों को हटाने का इरादा रखते हैं, क्योंकि आप पहले से ही संकेत की उम्मीद करेंगे। ऐसा लगता है कि लिखने की त्रुटियों को रोकने में मदद कर सकते हैं rm foo *के लिए rm foo*

कई और समाधान तैर रहे हैं जिनमें rmकमांड को बदलना शामिल है । इस दृष्टिकोण की एक सीमा यह है कि एक दिन आप असली के साथ एक मशीन पर होंगे rmऔर आप स्वचालित रूप से कॉल करेंगे rm, एक पुष्टिकरण की आपकी उम्मीद में सुरक्षित ... और अगली बात आप बैकअप बहाल करेंगे।


mv -t DELETE_ME -- *थोड़ा अधिक मूर्ख है।
तोबू

@ गिल्स rmसीधे इस्तेमाल नहीं करना अच्छी सलाह है! आदेश का उपयोगfind करने के लिए एक बेहतर विकल्प भी है ।
अकुलिच

और अगर आपको निर्देशिका रहने की आवश्यकता है तो आप ऐसा कर सकते हैं, find somedir -type f -deleteजिसके उपयोग से सभी फाइलें हट जाएंगी, somedirलेकिन निर्देशिका और सभी उपनिर्देशिकाओं को छोड़ देगी।
aculich

19

जैसा कि आपने बताया, आप हमेशा एक उपनाम कर सकते हैं:

what_the_hell_am_i_thinking() {
   echo "Stop." >&2
   echo "Seriously." >&2
   echo "You almost blew up your computer." >&2
   echo 'WHAT WERE YOU THINKING!?!?!' >&2
   echo "Please provide an excuse for yourself below: " 
   read 
   echo "I'm sorry, that's a pathetic excuse. You're fired."
   sleep 2
   telnet nyancat.dakko.us
}

alias rm -fr /*="what_the_hell_am_i_thinking"

आप अपने दोस्तों को इस बारे में सचेत करने के लिए एक कमांडलाइन ट्विटर क्लाइंट के साथ भी इसे एकीकृत कर सकते हैं कि आपने अपनी हार्ड डिस्क rm -fr /*को रूट के रूप में मिटाकर अपने आप को कैसे अपमानित किया ।


3
टेलनेट miku.acm.uiuc.edu के लिए +1
अली

1
उर्फ गूंज = "टेलनेट miku.acm.uiuc.edu"
kubanczyk

मुझे पुराना स्कूल नहीं होना चाहिए ... इसका क्या महत्व है telnet miku.acm.uiuc.edu?
काइल स्ट्रैंड

इसे आज़माएं और जानें। यह गैर-विनाशकारी है। यदि आप उतने ही पागल हैं जितना आपको होना चाहिए, तो एक वीएम में दौड़ें।
Naftuli Kay

3
-1 आप उन स्थानों के साथ उपनाम का आदेश नहीं दे सकते जो अकेले हैं / * जो कि एक अमान्य नाम है
xenithorb

15

हां: मूल के रूप में काम न करें और हमेशा अभिनय से पहले दो बार सोचें।

इसके अलावा, https://launchpad.net/safe-rm जैसी किसी चीज़ पर नज़र डालें ।


एडिट में रूट के रूप में काम करने का उल्लेख किया गया
वैलेंटाइन नेमसेव

@ वालेंटिन: ओ_ओ !!
जोनाथन रिओक्स

15

दुर्घटना को रोकने का सबसे सरल तरीका rm -rf /*यह है कि rmकमांड के सभी उपयोग से बचें ! वास्तव में, मुझे हमेशा rm /bin/rmकमांड से पूरी तरह से छुटकारा पाने के लिए दौड़ने का प्रलोभन दिया गया है ! नहीं, मैं मुखर नहीं हो रहा हूँ।

इसके बजाय कमांड के -deleteविकल्प काfind उपयोग करें , लेकिन पहले फ़ाइलों को हटाने से पहले मैं यह पूर्वावलोकन करने की सलाह देता हूं कि आप किन फ़ाइलों को हटा रहे हैं:

find | less

ध्यान दें, findयदि आप किसी निर्देशिका का नाम छोड़ते हैं, तो इसके आधुनिक संस्करणों में , यह वर्तमान निर्देशिका का उपयोग करेगा, इसलिए उपरोक्त इसके समतुल्य है:

find . | less

एक बार जब आप सुनिश्चित कर लेते हैं कि ये वो फाइलें हैं जिन्हें आप हटाना चाहते हैं तो आप -deleteविकल्प जोड़ सकते हैं :

find path/to/files -delete

तो, न केवल find उपयोग करने के लिए सुरक्षित है, यह अधिक अभिव्यंजक भी है , इसलिए यदि आप एक निर्देशिका पदानुक्रम में केवल कुछ फ़ाइलों को हटाना चाहते हैं जो एक विशेष पैटर्न से मेल खाते हैं जो आप इस तरह की अभिव्यक्ति का पूर्वावलोकन करने के लिए उपयोग कर सकते हैं, तो फ़ाइलों को हटा दें:

find path/to/files -name '*~' | less
find path/to/files -name '*~' -delete

findसिर्फ सुरक्षित रहने के अलावा सीखने और उपयोग करने के बहुत सारे अच्छे कारण हैं rm, इसलिए यदि आप समय निकाल कर उपयोग करना सीखेंगे तो आप खुद को धन्यवाद देंगे find


बहुत रोचक चर्चा। मुझे आपका दृष्टिकोण पसंद है और थोड़ा स्निपेट बनाया है। यह सुपर अक्षम है, क्योंकि यह कॉल सबसे अधिक 3 बार पाता है, लेकिन मेरे लिए यह एक अच्छी शुरुआत है: github.com/der-Daniel/fdel
Daniel Hitzel

14

इस धागे में कुछ बहुत बुरी सलाह है, सौभाग्य से इसमें से अधिकांश को वोट दिया गया है।

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

दूसरा - जब आपके पास जड़ है, तो खुद को स्कूली बच्चों से भरी बस चलाने के बारे में सोचें। कभी-कभी आप रेडियो पर गाने के लिए रॉक कर सकते हैं, लेकिन दूसरी बार आपको दोनों तरह से देखने की ज़रूरत है, चीजों को धीमा करना और अपने सभी दर्पणों की दोहरी जांच करना।

तीसरा - आप शायद ही कभी वास्तव में हैं rm -rf- अधिक संभावना है कि आप चाहते हैं mv something something.bakयाmkdir _trash && mv something _trash/

चौथा - हमेशा lsअपने वाइल्डकार्ड से पहले rm- हमेशा के लिए इसे नष्ट करने से पहले किसी चीज़ को देखने के बारे में पागल कुछ भी नहीं है।


2
के उपयोग के लिए +1 ls
सचिन दिवेकर

@ ईवेंटी मैं सहमत हूं कि इस धागे में कुछ भयानक सलाह और बदसूरत हैक्स हैं। और इसे नष्ट करने से पहले किसी चीज़ को देखना निश्चित रूप से एक अच्छा विचार है, लेकिन कमांड का उपयोग करनेfind का एक और बेहतर तरीका है
aculich

मैं यह देखने में विफल हूं कि कैसे सरल या सुरक्षित है, लेकिन मुझे आपका find . -name '*~'उदाहरण पसंद है । मेरी बात यह है कि lsउसी ग्लोब को सूचीबद्ध rmकरेंगे जो उपयोग करेगा।
ईवेंटी

11

यह विशेष रूप से rm के संदर्भ में regexps के लिए मेरा मानक है, लेकिन इसने आपको इस मामले में बचाया होगा।

मैं हमेशा echo foo*/[0-9]*{bar,baz}*पहले करता हूं , यह देखने के लिए कि regexp क्या मेल खाने वाला है। एक बार जब मेरा आउटपुट होता है, तो मैं कमांड-लाइन एडिटिंग के साथ वापस आता हूं और बदल echoजाता हूं rm -rf। मैं कभी नहीं, कभी rm -rfएक अप्रयुक्त regexp पर उपयोग करें


2
कृपया तुलना करें: linuxmanpages.com/man3/regex.3.php linuxmanpages.com/man3/glob.3.php
bukzor

5
ठीक है, मैं क्या देख रहा हूँ? क्या आप यह बात बना रहे हैं कि फ़ाइल-मिलान के लिए regexp सिंटैक्स अलग है (और कभी-कभी एक अलग नाम से कहा जाता है) जैसे कि perl में इस्तेमाल किया गया है? या कुछ और बिंदु जो मैंने याद किया है? मैं अपने सुस्ती के लिए माफी माँगता हूँ, यह पहली बात है शनिवार सुबह यहाँ!
मध्याह्न

9
ये चीजें जिन्हें आप "regexp" कह रहे हैं, वास्तव में ग्लब्स हैं। यह एक अलग रेगेक्स सिंटैक्स नहीं है; यह रेगेक्स नहीं है।
bukzor

1
यह तर्क निश्चित रूप से बनाया जा सकता है; हालाँकि, नियमित अभिव्यक्तियों पर विकिपीडिया लेख से, मुझे लगता है कि "कई आधुनिक कंप्यूटिंग सिस्टम फ़ाइल सिस्टम से मेल खाने वाले फ़ाइलनाम में वाइल्डकार्ड वर्ण प्रदान करते हैं। यह कई कमांड-लाइन के गोले की एक मुख्य क्षमता है और इसे ग्लोबिंग के रूप में भी जाना जाता है" - नोट "के रूप में भी जाना जाता है" का उपयोग, जो मुझे लगता है कि एक या एक से अधिक फ़ाइल नाम regexps मिलान करने के लिए मेटाचैकर्स युक्त टोकन कॉलिंग गलत नहीं है। मैं मानता हूं कि ग्लोबिंग एक बेहतर शब्द है क्योंकि इसका मतलब फाइलिंग मैचिंग में नियमित भावों के इस्तेमाल के अलावा और कुछ नहीं है।
MadHatter

1
@MadHatter इसके अलावा, ग्लोबिंग, हालांकि नेत्रहीन कुछ समान है, नियमित अभिव्यक्तियों से बहुत अलग है। रेगेक्स में क्लीने स्टार* नामक एक बहुत ही सटीक परिभाषा का अर्थ है, जो एक अपर ऑपरेटर है जो सेट के शून्य या अधिक तत्वों से मेल खाता है, जिस पर इसे लागू किया जाता है (नियमित अभिव्यक्तियों के मामले में, वर्ण या पूर्ववर्ती वर्णों का सेट क्लेने स्टार), जबकि मैचों में ग्लोबिंग में कुछ भी होता है जो इस प्रकार है। यदि वे एक समान वाक्यविन्यास लगते हैं तो भी वे शब्दार्थ से बहुत भिन्न होते हैं। *
अकुलिच

9

इस समस्या का हल नियमित बैकअप लेना है। कभी भी आप किसी ऐसी चीज का उत्पादन करते हैं जिसे आप खोने का जोखिम नहीं उठाना चाहते हैं, इसे वापस करें। यदि आपको नियमित रूप से पीठ दर्द हो रहा है, तो यह प्रक्रिया सरल करें, ताकि यह दर्दनाक न हो।

उदाहरण के लिए, यदि आप सोर्स कोड पर काम करते हैं, तो कोड gitको मिरर करने के लिए टूल का उपयोग करें और इतिहास को किसी अन्य मशीन पर रखें। यदि आप दस्तावेज़ों पर काम करते हैं, तो एक स्क्रिप्ट है जो rsyncआपके दस्तावेज़ों को किसी अन्य मशीन में भेजती है।


एक कॉपी-ऑन-राइट फाइलसिस्टम जैसे कि btrfs भी मदद कर सकता है। आप आसानी से एक साधारण स्वचालित स्नैपशॉट रोटेशन सेट कर सकते हैं जो स्थानीय रूप से (बाहरी बैकअप के अलावा) चलता है।
malthe

6

ऐसा लगता है कि इस जोखिम को कम करने का सबसे अच्छा तरीका अधिकांश जीयूआई की तरह दो चरण हटाना है। अर्थात्, rm को किसी ऐसी चीज़ से प्रतिस्थापित करें जो चीजों को ट्रैश डायरेक्टरी (उसी वॉल्यूम पर) ले जाती है। फिर किसी भी गलती को नोटिस करने के लिए पर्याप्त समय के बाद उस कचरे को साफ करें।

ऐसी ही एक उपयोगिता, कचरा-पेटी, यहां यूनिक्स StackExchange पर चर्चा की गई है


यह पहली चीज है जो मैं हर मशीन पर स्थापित करता हूं। यह डिफॉल्ट रिमूवल टूल होना चाहिए, आरएम केवल तब उपयोग किया जाता है जब आपको किसी चीज़ को अभी हटाने की आवश्यकता होती है। मुझे दुख है कि यह अभी तक नहीं हुआ है, लेकिन एक दिन यह होगा। शायद rm के एक बहुत ही सार्वजनिक उदाहरण के बाद एक बड़ी समस्या पैदा हो गई जिसे बैकअप द्वारा संबोधित नहीं किया जा सकता था। संभवत: कुछ ऐसा है जहाँ ठीक होने में लगने वाला समय बहुत बड़ा कारक है।
गेरी

+1 20 साल तक लिनक्स का उपयोग करने के बाद, मुझे अभी भी लगता है कि किसी प्रकार का कचरा-व्यवहार हो सकता है rm
शोवास

3

इस तरह की गलतियों से बचने के लिए एक महत्वपूर्ण महत्वपूर्ण कारक रूट खाते का उपयोग करके लॉगिन नहीं करना है। जब आप सामान्य गैर-विशेषाधिकार प्राप्त उपयोगकर्ता का उपयोग करके लॉगिन करते हैं, तो आपको sudoप्रत्येक कमांड के लिए उपयोग करने की आवश्यकता होती है । तो, आपको अधिक सावधान रहना चाहिए।


4
मुझे यकीन नहीं है कि सूडो इस तरह से कुछ रोकेंगे। आप ओपी के समान टाइपो बना सकते हैं, भले ही आप "आरएम" से पहले "सुडो" टाइप करें।
cjc

1
एडिट में रूट के रूप में काम करने का उल्लेख किया गया
वैलेंटाइन नेमसेव

यदि आप अभी भी उपयोग करने sudoऔर बैकअप के बारे में आश्वस्त नहीं हैं। इस पृष्ठ पर एक नज़र डालें: forum.synology.com/wiki/index.php/… । यह एक रीसायकल बिन बनाने की बात करता है। उम्मीद है की यह मदद करेगा!
खालिद

1
@ परेशान मैं सूदो और बैकअप का उपयोग कर रहा हूं, मैं इस विशिष्ट समस्या के लिए बस कुछ बेहतर करना चाहता हूं
वैलेंटाइन नेमसेव

3

जब मैं किसी निर्देशिका को पुनरावर्ती रूप से हटाता हूं, तो मैं डाल देता हूं -r, और -fयदि यह लागू होता है, तो कमांड के अंत में, उदाहरण के लिए rm /foo/bar -rf। इस तरह, अगर मैं गलती से बहुत जल्दी प्रेस करता हूं, तो अभी तक पूरे रास्ते को टाइप किए बिना, कमांड पुनरावर्ती नहीं है, इसलिए यह हानिरहित होने की संभावना है। अगर मैं स्लैश टाइप करने की कोशिश के दौरान एंटर को टक्कर देता हूं /foo, तो मैंने इसके rm /fooबजाय लिखा है rm -rf /foo

यह GNU कोरुटिल्स का उपयोग करते हुए सिस्टम पर अच्छी तरह से काम करता है, लेकिन कुछ अन्य यूनिक्स पर उपयोगिताओं जैसे विकल्पों को अंत में रखने की अनुमति नहीं देता है। सौभाग्य से, मैं ऐसे सिस्टम का उपयोग बहुत बार नहीं करता।


2

यह जटिल हो सकता है, लेकिन आप SELinux के भीतर भूमिकाएँ सेट कर सकते हैं ताकि उपयोगकर्ता भले ही sudo su - (या प्लेन su) के माध्यम से रूट हो जाए, फ़ाइलों को हटाने की क्षमता सीमित हो सकती है (आपको निकालने के लिए सीधे रूट के रूप में लॉगिन करना होगा फ़ाइलें)। यदि आप AppArmor का उपयोग कर रहे हैं, तो आप कुछ ऐसा ही कर सकते हैं ।

बेशक, दूसरा उपाय यह सुनिश्चित करना होगा कि आपके पास बैकअप है। :)


2

ग्लोबिंग के उपयोग से बचें । बैश में, आप सेट कर सकते हैं noglob। लेकिन फिर, जब आप एक ऐसी प्रणाली में जाते हैं जहाँ noglobसेट नहीं किया जाता है, तो आप इसे भूल सकते हैं और आगे बढ़ सकते हैं जैसे कि यह था।

सेट noclobberको रोकने के लिए mvऔर cpफ़ाइलों को नष्ट करने से भी।

डिलीट के लिए फाइल ब्राउजर का इस्तेमाल करें। कुछ फ़ाइल ब्राउज़र एक ट्रैशकेन (उदाहरण के लिए, कोनकेर ) प्रदान करते हैं।

ग्लोबिंग से बचने का दूसरा तरीका निम्न है। कमांड लाइन पर, मैं echo filenamepattern >> xxx। फिर मैं फ़ाइल को विम या vi के साथ संपादित करता हूं ताकि यह जांच की जा सके कि कौन सी फाइलें डिलीट की जानी हैं, (फ़ाइल नाम पैटर्न वर्णों को फ़ाइलनाम में देखें।) और फिर %s/^/rm -f/प्रत्येक लाइन को डिलीट कमांड में बदलने के लिए उपयोग करें। सोर्स xxx इस तरह से आप प्रत्येक फ़ाइल को देखते हैं जिसे करने से पहले उसे हटा दिया जाएगा।

फ़ाइलों को एक 'अटारी' निर्देशिका या टारबॉल में ले जाएँ। या संस्करण नियंत्रण का उपयोग करें (जैसा कि मेरे सामने कहा गया है)।


अपनी फ़ाइलों को पूर्वावलोकन करने से पहले उन्हें हटाने के कुछ तरीके का उपयोग करने के लिए +1, हालाँकि कमांड का उपयोग करने के सरल और सुरक्षित तरीके हैंfind
aculich

2

एक प्रदर्शन करने से पहले ZSH मुझसे (डिफ़ॉल्ट रूप में) पूछता है rm -rf *


1

इसके बाहर chattr, रूट को इस तरह के कमांड को चलाने से सुरक्षा के पूरे उपाय नहीं हैं। इसीलिए विशेषाधिकार प्राप्त करते समय उचित समूह और सावधान कमांड महत्वपूर्ण हैं।

अगली बार; जिन फ़ाइलों को हटाने की आप योजना बना रहे हैं, उन्हें दायरे से बाहर निकाल दें rm -rfया 'f' का उपयोग करें या findइसे पास करेंxargs rm


यह अच्छा है कि आप उपयोग करने का सुझाव दें find, लेकिन मैं अपने उत्तर में इसका उपयोग करने का एक सुरक्षित तरीका सुझाता हूं । उपयोग करने के लिए कोई जरूरत नहीं है xargs rmके सभी आधुनिक संस्करण के बाद से findहै -deleteविकल्प । इसके अलावा, सुरक्षित रूप से उपयोग xargs rmकरने के लिए भी आपको उपयोग करने की आवश्यकता होती है find -print0और xargs -0 rmअन्यथा जब आपको रिक्त स्थान के साथ फ़ाइलनाम जैसी चीजों का सामना करना पड़ता है, तो आपको परेशानी होगी।
aculich

मेरी बात xargs के बारे में बारीकियों के बारे में नहीं थी, बल्कि फाइलों को हटाए बिना और फिर जारी रखने के लिए पहले का उपयोग करते हुए ..
thinice

हां, मुझे लगता है कि फ़ाइलों का उपयोग करने से बचना findएक अच्छा सुझाव है, हालांकि xargsयदि आप इसका उपयोग करने का सुझाव देते हैं तो यह महत्वपूर्ण हैं, अन्यथा यह रिक्त स्थान के साथ फ़ाइलों का सामना करते समय भ्रम और निराशा की ओर जाता है (जो -deleteविकल्प का उपयोग करके बचा जाता है )।
अकुलिच

1

अन्य सुरक्षा के लिए कुछ सुरक्षा उपनाम, समान आपदाओं को रोकने के लिए, यहां पाया गया :

# safety features
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -I'                    # 'rm -i' prompts for every file
alias ln='ln -i'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

अपरकेस पर ध्यान दें -I, यह अलग है -i:

तीन से अधिक फ़ाइलों को हटाने से पहले एक बार संकेत दें, या पुनरावर्ती हटाते समय। -ई से कम घुसपैठ, जबकि अभी भी अधिकांश गलतियों के खिलाफ सुरक्षा दे रहा है


हालांकि मैं विकल्प वापस नहीं सुनाऊँगा कि आप क्या हटाने जा रहे हैं।
कैलेमरियस

1

मैं आमतौर पर -vध्वज का उपयोग करता हूं यह देखने के लिए कि क्या हटाया जा रहा है और ^Cअगर मुझे थोड़ी सी भी संदेह है, तो जल्दी से मौका दें । वास्तव में बुरे को रोकने का तरीका नहीं है rm, लेकिन कुछ गलत होने पर नुकसान को सीमित करने के लिए यह उपयोगी हो सकता है।


1

यूनिक्स आधारित मशीनों पर मेरी विलोपन प्रक्रिया इस प्रकार है।

  • ls /path/to/intented/file_or_directoryटर्मिनल विंडो में टाइप करें और फिर हिट return(या Tab, वांछित), फ़ाइलों की सूची देखने के लिए।

अगर सब कुछ अच्छा लगता है,

  • टर्मिनल इतिहास से फिर से up arrowलाने के लिए कुंजी पर क्लिक ls /path/to/intented/file_or_directoryकरें।

  • की जगह lsके साथ rmया rm -rया rm -rfके रूप में आवश्यक,। मुझे व्यक्तिगत रूप से -fध्वज का उपयोग करना पसंद नहीं है ।

सत्यापन की यह प्रक्रिया rmकमांड के समय से पहले निष्पादन को भी रोकती है , जो कुछ मेरे साथ हुआ है, इससे पहले कि मैं इस प्रक्रिया का पालन करना शुरू कर दूं।


फ़ाइलों को हटाने से पहले पहले उनका पूर्वावलोकन करना एक अच्छा विचार है, और find जैसा कि मैं अपने उत्तर में समझाता हूं , इसका उपयोग करना एक अधिक सुरक्षित और अधिक अभिव्यंजक तरीका है ।
अकुलिच

1

यदि आप अभी नई आदतें हासिल करने के मूड में नहीं हैं, तो .bashrc/.profileयह जांचने के लिए कुछ परीक्षण जोड़ने के लिए एक अच्छी जगह है कि क्या आप कुछ बेवकूफी करने वाले हैं। मुझे एक बैश फंक्शन में लगा, मैं एक ऐसे पैटर्न के लिए तैयार हो सकता हूं, जो मेरा दिन बर्बाद कर सकता है और इसके साथ आया:

alias rm='set -f; myrm' #set -f turns off wildcard expansion need to do it outside of           
                        #the function so that we get the "raw" string.
myrm() {
    ARGV="$*"
    set +f #opposite of set -f
    if echo "$ARGV" | grep -e '-rf /*' \
                           -e 'another scary pattern'
    then
        echo "Do Not Operate Heavy Machinery while under the influence of this medication"
        return 1
    else
        /bin/rm $@
    fi
}

इसके बारे में अच्छी बात यह है कि यह केवल बैश है।

यह स्पष्ट रूप से उस रूप में पर्याप्त सामान्य नहीं है, लेकिन मुझे लगता है कि इसमें क्षमता है, इसलिए कृपया कुछ विचार या टिप्पणियां पोस्ट करें।


यह अच्छा है कि आप अपनी फ़ाइलों को हटाने से पहले पूर्वावलोकन करने की कोशिश कर रहे हैं, हालांकि यह समाधान अत्यधिक जटिल है। इसके बजाय आप कमांड का उपयोग करकेfind इसे बहुत ही सामान्य तरीके से पूरा कर सकते हैं । इसके अलावा, मुझे समझ नहीं आता कि आप क्यों कहते हैं "इसके बारे में अच्छी बात यह है कि यह केवल बैश है"? लिपियों में बैश-आइसम से बचने की सिफारिश की जाती है ।
aculich

हमें "rm -rf / *" या "rm -rf dir / *" से रोकने के लिए जब हमारा मतलब "rm -rf ./*" और "rm -rf dir / *" है तो हमें पैटर्न / * का पता लगाना होगा। और "*" (सरल रूप से)। लेकिन हम कुछ हानिकारक पैटर्न की तलाश में grep के माध्यम से सभी कमांड लाइन तर्कों को पारित नहीं कर सकते हैं, क्योंकि उन्हें पास करने से पहले वाइल्डकार्ड तर्कों का विस्तार किया जाता है (स्टार एक फ़ोल्डर की सभी सामग्रियों तक विस्तारित किया जाएगा)। हम "myrm" फ़ंक्शन को लागू करने से पहले "कच्चे" तर्क स्ट्रिंग की आवश्यकता रखते हैं। सेट -f के साथ किया जाता है जो तब कच्चे तर्क स्ट्रिंग और grep पूर्वनिर्धारित पैटर्न के लिए दिखता है। *
kln

मैं समझता हूं कि आप बाश में set -fजो करने की कोशिश कर रहे हैं वह बराबर set -o noglobहै, लेकिन फिर भी यह आपके कथन की व्याख्या नहीं करता है कि "इसके बारे में अच्छी बात यह है कि यह केवल बैश है"। इसके बजाय आप समस्या का पूरी तरह से और सामान्य तरीके से किसी भी शेल के लिए उपयोग नहीं कर rmसकते हैं, बल्कि कमांड का उपयोग करकेfind । क्या आपने वास्तव में उस सुझाव को देखने की कोशिश की है कि आप यहां जो सुझाव देते हैं, उसकी तुलना कैसे करते हैं?
aculich

@aculich केवल बैश द्वारा मेरा मतलब है कोई अजगर या पर्ल निर्भरता, सब कुछ बैश में किया जा सकता है। एक बार जब मैं अपने .bashrc में संशोधन करता हूं तो मैं पुरानी आदतों को तोड़ने के बिना काम करना जारी रख सकता हूं। हर बार जब मैं आरएम बैश का आह्वान करता हूं तो मुझे यकीन होता है कि मैं कुछ बेवकूफी नहीं करूंगा। मुझे बस कुछ पैटर्नों को परिभाषित करना है जिन्हें मैं सचेत करना चाहता हूं। जैसे "*" जो वर्तमान फ़ोल्डर में सब कुछ हटा देगा। अब और फिर से वही होगा जो मैं चाहता हूं, लेकिन थोड़ा और काम के साथ अंतःक्रियात्मकता को "myrm" में जोड़ा जा सकता है।
kln

@aculich OK gotcha.No मैंने इसकी कोशिश नहीं की है। मुझे लगता है कि इसे वर्कफ़्लो में महत्वपूर्ण बदलाव की आवश्यकता है। बस यहाँ मैक ओएस एक्स पर जाँच की। मेरी .bash_history 500 है और उन आदेशों में से 27 आरएम हैं। और इन दिनों मैं बहुत बार टर्मिनल का उपयोग नहीं करता।
kln

1

अफसोस की बात है कि मैं अपर्याप्त कर्म के कारण उपरोक्त टिप्पणी नहीं छोड़ सकता, लेकिन दूसरों को चेतावनी देना चाहता था कि सुरक्षित-आरएम आकस्मिक जन-उन्मूलन बुरे सपने के लिए रामबाण नहीं है।

निम्नलिखित लिनक्स मिंट 17.1 वर्चुअल मशीन में परीक्षण किया गया था (इन आदेशों से अपरिचित लोगों के लिए चेतावनी: यह मत करो! वास्तव में, यहां तक ​​कि इन आदेशों से परिचित लोगों को / शायद विनाशकारी डेटा हानि से बचने के लिए ऐसा नहीं करना चाहिए):

पाठ संस्करण (संघनित):

$ cd /
$ sudo safe-rm -rf *
$ ls
bash: /bin/ls: No such file or directory

छवि संस्करण (पूर्ण):

यहां छवि विवरण दर्ज करें


1

मुझे रीसायकल बिन की खिड़कियां दृष्टिकोण पसंद है।

मैं आमतौर पर एक निर्देशिका बनाता हूं जिसका नाम "/ tmp / recyclebin" है, जिसे मैं हमेशा के लिए हटा सकता हूं:

mkdir /tmp/recyclebin

और कभी rm -rf का उपयोग न करें, मैं हमेशा उपयोग करता हूं:

mv target_folder /tmp/recyclebin

फिर बाद में, मैं ए स्क्रिप्ट या मैन्युअल रूप से उपयोग करके रीसायकलिन को खाली करता हूं।


0

Hehe (अप्रकाशित और कुछ हद तक!):

$ cat /usr/local/bin/saferm

#! /bin/bash

/bin/ls -- "$@"

echo "Those be the files you're about to delete."
echo "Do you want to proceed (y/N)?"

read userresponse

if [ "$userresponse" -eq "y" ]; then

  echo "Executing...."
  /bin/rm -- "$@"

fi

और तब:

alias rm="/usr/local/bin/saferm"

वास्तविक रूप से, आपके पास एक ग्लोब के साथ उस तरह के ऑपरेशन को अंजाम देने से पहले एक मानसिक विराम होना चाहिए, चाहे आप रूट के रूप में चल रहे हों, इसके लिए "sudo", जैसे कि आप उसी ग्लोब पर "ls" चला सकते हैं, आदि। लेकिन, मानसिक रूप से, आपको एक सेकंड के लिए रुकना चाहिए, सुनिश्चित करें कि आपने जो लिखा था, उसे टाइप करें, सुनिश्चित करें कि आप जो चाहते हैं वह वास्तव में आप क्या चाहते हैं, आदि। मुझे लगता है कि यह कुछ ऐसा है जो मुख्य रूप से पहले वर्ष में कुछ नष्ट करके सीखा है। एक यूनिक्स एसए, उसी तरह से कि गर्म बर्नर आपको यह बताने में एक अच्छा शिक्षक है कि स्टोव पर कुछ गर्म हो सकता है।

और सुनिश्चित करें कि आपके पास अच्छे बैकअप हैं!


मैं खतरनाक चीजें करने से पहले दो बार सोचने की कोशिश करता हूं, लेकिन किसी भी तरह यह हमेशा काम नहीं करता है, मैंने अतीत में इस तरह की असावधानी के कारण चीज़ को नष्ट कर दिया है।
वैलेंटाइन नेमसेव

0

इसके अलावा, एक सुरक्षाकर्मी के रूप में नहीं, बल्कि यह पता लगाने के लिए कि आपके द्वारा ^ ^ C हिट करने से पहले कौन-सी फाइलें हटा दी गईं थीं, आप locateडेटाबेस का उपयोग कर सकते हैं (बेशक अगर यह स्थापित और बच गया है rm)

मैंने इसके बारे में इस ब्लॉग पोस्ट से सीखा है


0

बस उन फ़ाइलों को संग्रहीत करने के लिए ZFS का उपयोग करें जिन्हें आपको आकस्मिक हटाने का विरोध करने की आवश्यकता है और एक डेमन है:

  • नियमित रूप से इस फाइल सिस्टम का स्नैपशॉट बनाता है
  • पुराने / अनावश्यक स्नैपशॉट को निकालता है।

क्या फ़ाइलों को हटा दिया जाए, ओवरराइट कर दिया जाए, भ्रष्ट कर दिया जाए, जो भी हो, बस अपनी फाइल सिस्टम को अंतिम अच्छे स्नैपशॉट के क्लोन में रोलबैक करें और आप कर रहे हैं।


0

इतना जवाब नहीं है लेकिन एक टिप, मैं हमेशा rm (dir) -rfनहीं है rm -rf (dir)यानी: अंतिम संभव क्षण तक परमाणु मत जाओ।

यह उन स्थितियों को कम करने में मदद करता है जिनमें आप डीआईआर नाम को इस तरह से उंगली करते हैं कि यह अभी भी एक वैध विलोपन है, जैसे कि स्लिप और एंटर कुंजी को मारना।


स्मार्ट, लेकिन बीएसडी पर काम नहीं करेगा rm, जहां फ़ाइल नाम से पहले विकल्प आने चाहिए।
स्वेपर

हाँ। मैंने पाया कि हाल ही में सेब का उपयोग करके। तय है कि गन्नू उपकरण स्थापित करें और सब कुछ के लिए उपनाम सेट करें :) और / या अधिमानतः सेब को ट्रैशकेन में फेंक दें। :)
सेरेक्स


1
अगर मुझे एक नैनोसेकंड में, मैं करने की अनुमति थी। यह linux की तुलना में कचरा है।
सेरेक्स

0

मुझे लगता है कि यह एक शक्तिशाली रोकथाम टिप है, जिसमें शेल में * विस्तार शॉर्टकट है:

सबसे पहले, टाइप करें rm -rf *या rm -rf your/path/*, Enterकुंजी टाइप न करें । (निश्चित रूप से, आपको देखभाल करने की आदत होनी चाहिए कि प्रवेश करते समय तेज / गलती से प्रेस न करें rm -rf)

फिर, प्रेस Alt-Shift-8(यानी Alt-Shift-*) "" वाइल्डकार्ड को स्पष्ट रूप से बैश में फैलाने के लिए। इतिहास को नेविगेट करते समय यह "rm -rf *" कमांड में फिर से प्रवेश करने से भी बचता है।

अंत में, जांच के बाद विस्तार में सही फाइलें / निर्देशिकाएं हैं, Enter दबाएं।

किया हुआ।


0

मामले में यह किसी को अपने मामले के लिए मदद करता है:

1. उपयोग rmsafe:

यह फ़ाइलों को "कचरा" फ़ोल्डर में ले जाता है और आपके पास हमेशा उन्हें एक साधारण के साथ वापस लाने का मौका होता है mv:

$ rmsafe /path/to/important/files

स्रोत: https://github.com/pendashteh/rmsafe

2. safe:

आप rmसुरक्षित उपयोग करने के लिए एक उपनाम सेट कर सकते हैं :

$ alias rm="safe rm"

अब यदि आप चलाते rm /*हैं तो आपको प्रतिक्रिया में यह मिलेगा:

$ rm /*
Are you sure you want to 'rm /bin /boot /data /dev /etc /home /initrd.img /lib /lib64 /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var'? [y/n]

और मुझे विश्वास है कि आप टाइप नहीं करेंगे y!

स्रोत: https://github.com/pendashteh/safe

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