आपको समझना चाहिए कि bashसिर्फ एक निष्पादन का माहौल है। यह उन कमांड को निष्पादित करता है जिन्हें आप कॉल करते हैं - यह शेल का व्यवसाय नहीं है यहां तक कि यह भी पता है कि कमांड क्या करता है, आप किसी भी निष्पादन योग्य को कॉल कर सकते हैं। ज्यादातर मामलों में, यह भी स्पष्ट नहीं है कि एक पूर्ववत क्या करेगा - उदाहरण के लिए, क्या आप एक फिल्म "अनप्ले" कर सकते हैं? क्या आप एक ई-मेल "अनसेंड" कर सकते हैं? उदाहरण के लिए, "फ़ायरफ़ॉक्स चलाने वाले पूर्ववत" का क्या अर्थ होगा? आप इसे बंद कर सकते हैं, लेकिन बुकमार्क, डाउनलोड और इतिहास समान नहीं होंगे।
यदि आप एक कमांड चलाते हैं, तो इसे निष्पादित किया जाता है, जो कुछ भी करता है। यह आप पर निर्भर है कि आप क्या कर रहे हैं। ध्यान दें कि इसका मतलब यह नहीं है कि व्यक्तिगत आदेशों में "पूर्ववत" नहीं है ... वे कर सकते हैं - आप एक आवरण फ़ंक्शन भी लिख सकते हैं जो आपको मूर्खतापूर्ण गलतियों से बचाने के लिए कुछ करता है।
उदाहरण के लिए, mvआसानी से प्रतिवर्ती है बस फ़ाइल को वापस उसी स्थान पर ले जाना जहां वह आया था, जब तक कि आपने कुछ अधिलेखित नहीं किया है। इसीलिए -iओवर राइटिंग से पहले आपसे पूछने के लिए स्विच मौजूद है। तकनीकी रूप से, इसका उलटा cpहै rm, जब तक कि कुछ ओवरराइट नहीं किया गया (फिर से, -iइसके बारे में आपसे पूछता है)। rmअधिक स्थायी है, फाइलों को वापस पाने की कोशिश करने के लिए, आपको वास्तव में कुछ निचले स्तर की हैकिंग करनी होगी (इसके लिए उपकरण हैं)। यदि आपने फाइल-सिस्टम को ब्लैक-बॉक्स माना है, तो यह तकनीकी रूप से बिल्कुल भी संभव नहीं होगा (केवल डेटा के तार्किक और भौतिक लेआउट का विवरण आपको कुछ नुकसान नियंत्रण करने की अनुमति देता है)। rmमतलब है rm, अगर आप "कचरा" कार्यक्षमता चाहते हैं, तो यह वास्तव में बस हैmvकुछ पूर्व-व्यवस्थित निर्देशिका में (और संभवतः इसे बनाए रखने या खाली करने के लिए एक अनुसूचित सेवा) - इसके बारे में कुछ खास नहीं। लेकिन आप -iहटाने से पहले आपको संकेत देने के लिए उपयोग कर सकते हैं । आप -iइन आदेशों में हमेशा शामिल करने के लिए एक फ़ंक्शन या अन्य उपनाम का उपयोग कर सकते हैं ।
ध्यान दें कि अधिकांश एप्लिकेशन आपको विभिन्न तरीकों से डेटा हानि से बचा रहे हैं। अधिकांश (~ सभी) पाठ संपादक ~पुराने संस्करण को वापस लाने के मामले में अंत में बैकअप फ़ाइलों को बनाते हैं । कुछ डिस्ट्रोस पर, lsडिफ़ॉल्ट रूप से अलियास किया जाता है ताकि यह उन्हें ( -B) छिपा दे , लेकिन वे वहां हैं। अनुमतियों को ठीक से प्रबंधित करके बहुत अधिक सुरक्षा दी जाती है: जब तक आपको होने की आवश्यकता नहीं है, तब तक रूट न करें, फ़ाइलों को केवल तभी बनाएं जब आप उन्हें बदलना नहीं चाहते। कभी-कभी "सैंडबॉक्स" वातावरण के लिए उपयोगी होता है - आप चीजों को कॉपी पर चलाते हैं, देखें कि क्या यह ठीक है, और फिर परिवर्तनों को मर्ज करें (या परिवर्तनों को छोड़ दें)। chrootया lxcअपनी स्क्रिप्ट को एक निर्देशिका से बचने और नुकसान करने से रोक सकता है।
जब आप बल्क में चीजों को निष्पादित करने की कोशिश करते हैं - उदाहरण के लिए, यदि आपके पास एक जटिल कमांड है, जबकि लूप, एक लंबी पाइपलाइन, या ऐसा कुछ भी, तो यह केवल एक अच्छा विचार है कि पहले केवल echoउन कमांड्स को निष्पादित किया जाएगा। फिर, यदि आदेश उचित दिखते हैं, तो उसे echoवास्तविक के लिए निकालें और चलाएं। और हां, अगर आप वास्तव में इस बारे में निश्चित नहीं हैं कि आप क्या कर रहे हैं, तो पहले एक कॉपी बनाएं। मैं कभी-कभी केवल वर्तमान निर्देशिका का एक टारबॉल बनाता हूं।
टारबॉल के बोल - तारबॉम्ब्स और ज़िपबॉम्ब्स दुर्भाग्य से काफी आम हैं (जब लोग एक उचित उपनिर्देशिका के बिना एक संग्रह बनाते हैं, और फाइलों को इधर-उधर खिसकाते हैं, एक बड़ी गड़बड़ बनाते हैं)। मुझे सिर्फ अनपैक करने से पहले एक उपनिर्देशिका बनाने की आदत है (मैं सामग्री को सूचीबद्ध कर सकता हूं , लेकिन मैं आलसी हूं)। मैं एक ऐसी स्क्रिप्ट बनाने के बारे में सोच रहा हूं, जो केवल एक उपनिर्देशिका बनाएगी यदि सामग्री को एक उपनिर्देशिका के बिना संग्रहीत किया गया था। लेकिन जब ऐसा होता है, ls -lrtतो सबसे हाल की फ़ाइलों को खोजने में मदद करता है जहां वे हैं। मैंने इसे केवल एक उदाहरण के रूप में दिया - एक कार्यक्रम के कई दुष्प्रभाव हो सकते हैं जिनके बारे में जानने का कोई तरीका नहीं है (यह कैसे हो सकता है? यह एक अलग कार्यक्रम कहा जा रहा है!) गलतियों से बचने का एकमात्र निश्चित तरीका सावधान रहना है (सोचना दो बार, एक बार दौड़ो)।
संभवतः सबसे खतरनाक कमांड्स हैं जो फाइलसिस्टम से निपटते हैं: mkfs, fdisk / gdisk वगैरह। वे फ़ाइल सिस्टम को पूरी तरह से नष्ट कर सकते हैं (हालांकि उचित फोरेंसिक सॉफ़्टवेयर के साथ, कम से कम आंशिक रिवर्स-इंजीनियरिंग संभव है)। कमांड चलाने से पहले हमेशा उस डिवाइस को डबल-चेक करें जिसे आप स्वरूपण और विभाजन कर रहे हैं, सही है।