कमांड लाइन सुरक्षा चालें [बंद]


34

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

जोखिम भरे आदेशों को चलाने से पहले मेरे पास कुछ छोटे अनुष्ठान हैं - जैसे कि मैं जिस सर्वर पर हूं उसका ट्रिपल टेक चेक करना। यहाँ rm सुरक्षा पर एक दिलचस्प लेख है

कमांड लाइन पर कौन से छोटे अनुष्ठान, उपकरण और चालें आपको सुरक्षित रखती हैं? और मेरा मतलब है कि वस्तुनिष्ठ बातें, जैसे "फर्स्ट रन ls foo *, उसी के आउटपुट को देखें और फिर rm -rf के साथ ls को rr -rf foo * या उस जैसे कुछ से बचने के लिए" नहीं, "यह सुनिश्चित करें कि" आप क्या करते हैं कमांड करेंगे ”।


3
+1 के लिए "इन द बिगिनिंग द कमांड लाइन थी" cryptonomicon.com/command.zip
एवरी पायने

क्या यह एक सामुदायिक विकि प्रश्न नहीं है? एक उत्तर नहीं होगा जो आधिकारिक या पूर्ण हो।
बिल वीस

जवाबों:


45

एक जो अच्छी तरह से काम करता है वह आपके शेल पर अलग-अलग पृष्ठभूमि रंगों का उपयोग कर रहा है ठेस / स्टेजिंग / टेस्ट सर्वर के लिए।


6
हां, और जब भी आप रूट प्राइवेट होते हैं, तो चमकदार चिल्ला लाल या नारंगी का उपयोग करें।
एडम डी 'एमिको

1
क्या आपके पास लॉगिन समय पर अपने आप अलग होने के लिए दूरस्थ मशीन टर्मिनलों का रंग स्वचालित रूप से सेट करने का कोई तरीका है? सूक्ति का प्रयोग - शायद यह एक अलग सवाल होना चाहिए।
जोना

2
बस एक स्विच स्टेटमेंट है जो मशीन के होस्टनाम के आधार पर आपके PS1 चर को बदलता है।
नील

2
किसी भी विंडोज लोगों के लिए, Sysinternals का यह रत्न है जो वॉलपेपर पर होस्ट जानकारी को प्रमुखता से प्रदर्शित करेगा। Technet.microsoft.com/en-us/sysinternals/…
स्क्वीलमैन

हाँ हाँ हाँ - मेरा उत्पादन iSeries सत्र अब मुझे रोकने के लिए लाल पर सफेद है: pwrdwnsys विकल्प (* IMMED) पुनरारंभ (* YES)
पीटर टी। LaComb जूनियर

14

शुरुआत करने से पहले बैक आउट प्लान को ध्यान में रखें।

  • इसे तुरंत हटाने के बजाय किसी फ़ाइल / निर्देशिका को ज़िप करें
  • मिनट के 'x' नंबर में रिबूट करने के लिए (सिस्को) राउटर सेट करें और तुरंत 'रे' न करें
  • सुनिश्चित करें कि आप जो इंटरफ़ेस बदल रहे हैं, वह वह नहीं है जिस पर आपने सिस्टम डाला था। यह राउटर इंटरफ़ेस हो सकता है जिसे आप टेलनेट को या ईथरनेट पोर्ट VNC'd को कर सकते हैं।
  • 'रूट' के रूप में लॉगिन न करें
  • एक बैकअप बनाओ। जाँच करें कि यह अच्छा है। एक और बनाओ।
  • किसी से पूछें कि क्या आप पर भरोसा है कि मैं यहाँ कुछ गूंगा हूँ? '

3
+1 सिस्को ios सुनिश्चित नहीं करता है कि यह काम करता है। धिक्कार है कि मुझे अमिगा के दिन याद हैं जब सभी ओएस संवादों में "उपयोग", "सहेजें" और "रद्द करें" - जहां "उपयोग" केवल सेटिंग्स को लागू करेगा, लेकिन अगले रिबूट के लिए उन्हें नहीं बचाएगा। यह बेहद उपयोगी था!
ओस्कर डुवॉर्न

एक बेहतर समाधान आज मुझे लगता है कि इसके बजाय सभी सिस्टम परिवर्तनों के लिए असीमित पूर्ववत चल रहा है - इस तरह आप बहुत अधिक सुरक्षित हैं। बेशक, यदि आपने जो सेटिंग बदली है वह सिस्टम को फीचर को बेकार में बदल देती है, तो आप वैसे भी खराब हो जाएंगे .. हम्म ^ ^
ऑस्कर डुवॉर्न

1
"5 में पुनः लोड" के लिए +1। मेरे बट को कुछ समय से अधिक बचाया जब एक एसीएल परिवर्तन ने मुझे एक दूरस्थ राउटर / स्विच से बाहर कर दिया।
ग्रेग वर्क

अंतिम बिंदु के लिए +1 - विवेक की जांच। करने में आसान, और फिर कम से कम आप दो लोगों को निहित स्वार्थ के साथ किसी भी समस्या को ठीक करने के लिए मिला है;)
एशले

10

मेरे पास इनमें से कुछ का कम-तकनीकी समाधान है।

मैंने निम्नलिखित कार्य करने की एक अपर्याप्त आदत विकसित की है (जब जड़ के रूप में काम करने की योजना बनाई गई है):

  • सबसे पहले, एक सामान्य उपयोगकर्ता के रूप में लॉग इन करें, फिर sudo su - rootरूट पर स्विच करने के लिए उपयोग करें। मैं इसे मानसिक तैयारी के रूप में करता हूं, मेरे लिए एक चेतावनी है कि मैं मानसिक रूप से बहुत खतरनाक क्षेत्र में चला गया हूं और मुझे हर समय सतर्क रहना चाहिए। यह अजीब लगता है, इस छोटे से अनुष्ठान ने मुझे एक टन दुःख से बचाया है, बस यह कहकर कि मैं लापरवाह नहीं हो सकता
  • प्रत्येक कमांड टाइप की जाती है लेकिन [रिटर्न] कुंजी को कभी भी दबाया नहीं जाता है। कभी नहीं
  • किसी भी आदेश को कभी भी ठीक से समझे बिना निष्पादित नहीं किया जाता है। यदि आप यह जानने के बिना कर रहे हैं कि यह क्या करता है, तो आप अपने सिस्टम के साथ रूसी रूले खेल रहे हैं ।
  • [रिटर्न] कुंजी को दबाने से पहले , CLI पर धमाकेदार कमांड को ध्यान से जांचा जाता है। यदि कोई हिचकिचाहट, संभावित मुद्दे का कोई संकेत है, तो इसकी फिर से जांच की जाती है। यदि वह हिचकिचाहट बनी रहती है, तो कमांड को लाइन पर छोड़ दिया जाता है और मैन पेज से परामर्श करने के लिए I और F2 को एक और कंसोल पर भेज दिया जाता है, आदि यदि ग्राफिकल सेशन में, मैं एक ब्राउज़र लॉन्च करता हूं और कुछ खोज करता हूं।
  • कोई भी आम उपयोगकर्ता कभी भी sudoमेरे सिस्टम पर नहीं दिया जाता है , इसलिए नहीं कि मैं एक BOFH हूं , लेकिन क्योंकि बिना तैयारी और प्रशिक्षण के, यह एक बंदर को भरी हुई बंदूक देने जैसा है। यह पहली बार में मनोरंजक और मजेदार है, जब तक कि बंदर बैरल नीचे देखता है और निचोड़ता है ...

Rm का उपयोग करते समय, मैं हमेशा cdपहले निर्देशिका में आता हूं , फिर ./यह सुनिश्चित करने के लिए उपसर्ग का उपयोग करता हूं कि निर्देशिका सही है, अर्थात

cd /usr/some/directory ; rm ./targetfile

या मैं फ़ाइल का संपूर्ण पथ निर्दिष्ट करता हूँ

rm /usr/some/directory/targetfile

जो पीटीए है, लेकिन ... सॉरी से बेहतर सुरक्षित है।


1
मैं केवल कमांड की एक विस्तृत सूची के लिए sudo देता हूं, जैसे Apache2 रीलोड। अन्यथा, उपयोगकर्ताओं को मेरे माध्यम से जाना होगा। यह गधे का दर्द है, लेकिन यह 15 लोगों के लिए डेबॉक्स चलाने के लिए सबसे अच्छा बचाव है।
आर्टेम रसाकोवस्की

2
उद्धरण: "लेकिन क्योंकि तैयारी और प्रशिक्षण के बिना, यह एक बंदर को भरी हुई बंदूक देने के समान है। यह पहली बार में मनोरंजक और मज़ेदार है, जब तक कि बंदर बैरल नीचे देखता है और निचोड़ता है ..." वास्तव में, यह उस बिंदु के बाद भी मज़ेदार है। .. बस गड़बड़ है
माइका

आपको sudo su के स्थान पर sudo -i का उपयोग करना चाहिए, और आम तौर पर sudo का उपयोग विशिष्ट कमांड चलाने के लिए किया जाता है।
लैपटॉप 006

यदि आप कभी भी वापसी कुंजी मारते हैं तो आप कमांड को कैसे निष्पादित करते हैं?
जी।

1
&& आपका दोस्त है! सीडी / यूएसआर / कुछ / निर्देशिका करने के बजाय; rm ./targetfile आपको cd / usr / some / directory && rm//targetfile करना चाहिए। इस तरह आप कभी भी cd असफल होने पर अपने मूल डायरेक्टरी में rm'ing targetfile को वाइंड अप नहीं करते हैं। पूर्ण पथ आरएम करना बेहतर है, हालांकि।
माइक जी।

10

यह विंडोज पॉवर्सशेल के लिए विशिष्ट है।

एक नीति के रूप में हम प्रत्येक सर्वर पर मशीन प्रोफाइल .ps1 को जोड़ते हैं। यह सुनिश्चित करता है कि निम्नलिखित सत्य हैं:

  1. व्यवस्थापक शक्तियाँ कंसोल विंडो में एक गहरे लाल रंग की पृष्ठभूमि का रंग होता है
  2. प्रशासक को शीर्षक में जोड़ा जाता है
  3. संदेश "चेतावनी: पॉवर्सशेल एक प्रशासक के रूप में चल रहा है।" स्टार्टअप पर लिखा है
  4. शीर्षक बार "प्रशासक:" के साथ उपसर्ग है
  5. मानक उपयोगिताओं (जैसे कॉर्पोरेट शेल स्क्रिप्ट, विम और इंफ़ज़िप) मार्ग में हैं।
$ currentPrincipal = नया-ऑब्जेक्ट सुरक्षा ।rincipal.WindowsPrincipal ([Security.Principal.WindowsIdentity] :: GetCurrent ())
और {
    अगर ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: प्रशासक))
    {
        (Get-मेजबान) .UI.RawUI.Backgroundcolor = "DarkRed"
        स्पष्ट रूप से होस्ट
        "मेजबान: चेतावनी: PowerShell एक प्रशासक के रूप में चल रहा है।"
    }

    $ उपयोगिताओं = $ शून्य
    अगर ([IntPtr] :: आकार * 8 -eq 64)
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x64)" 
        $ उपयोगिताओं = "$ {env: प्रोग्रामफाइल्स (x86)} \ उपयोगिताएँ"
    }
    अन्य
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x86)"
        $ उपयोगिताओं = "$ {env: प्रोग्रामफाइल्स} \ उपयोगिताएँ"
    }
    अगर ((टेस्ट-पथ $ उपयोगिताओं) -और! ($ env: पथ -match $ utilities.Replace ("\", "\\")))
    {
        $ env: path = "$ यूटिलिटीज; $ {env: path}"
    }
}

फंक्शन प्रॉम्प्ट
{
    अगर ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: प्रशासक))
    {
        अगर ($ host.UI.RawUI.WindowTitle.StartsWith ("प्रशासक:"))
        {$ Host.UI.RawUI.WindowTitle = "प्रशासक:" + $ host.UI.RawUI.WindowTitle}
    }
    'PS' + $ (यदि ($ nestedpromptlevel -ge 1) {'>>' '}) +' '
}

यह अच्छा है - काश आप आसानी से अपने सभी सर्वरों में लिनक्स में ऐसा कुछ कर सकते।
जेसन टैन

1
पावरशेल में यह $ pshome / profile.ps1 (मशीन प्रोफाइल) को संपादित करके किया जाता है। आप /etc/.bash_profile में लिनक्स पर कुछ समान क्यों नहीं कर सकते?
ब्रायन राइटर

2
$ ConfirmPreference को "मध्यम" (उच्च करने के लिए चूक) में बदलने के लिए भी उपयोगी है, और अधिक चीजें पुष्टि के लिए संकेत देंगी।
रिचर्ड

6

मैं उपरोक्त सभी उत्तरों से सहमत हो सकता हूं लेकिन मुझे इस पर बहुत महत्वपूर्ण टिप देना है:

जानिए कब मल्टीटास्किंग से बचना है


5

मैं यह सुनिश्चित करता हूं कि मैं जिस सिस्टम पर हूं उसका होस्टनाम bash (या अन्य शेल) प्रॉम्प्ट में है। यदि मुझे काट दिया जाता है, तो मुझे यकीन है कि यह किसी भी तरह से वहां भी बनाता है।

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

export PS1="(chroot) $PS1"

जब भी मैं चिरोट के भीतर काम कर रहा था।


1
+1 - भी, मुझे वर्तमान वर्किंग डायरेक्टरी (या इसकी अंतिम n लेयर्स, अगर आप डीप नेस्टेड फाइल सिस्टम में काम कर रहे हैं) प्रॉम्प्ट में मददगार लगती हैं।
मुरली सूरि

आधिकारिक जेंटू हैंडबुक बिल्कुल यही सुझाव देता है, जब लाइव सीडी से नए बनाए गए जेंटो को चेरोटिंग करते हैं!
cd1

CD1: हाँ, लेकिन x86 क्विक इनस्टॉल गाइड ( gentoo.org/doc/en/gentoo-x86-quickinstall.xml ) नहीं करता है, और यही मैं उस समय उपयोग कर रहा था। लेकिन अब मैं इसे स्पष्ट रूप से करता हूं :)
टिम

5

सर्वर परिवर्तन करने से पहले कुछ महत्वपूर्ण बातों की जानकारी होनी चाहिए:

  • सुनिश्चित करें कि मैं सही सर्वर पर हूं

  • इस क्रिया से कितने लोग प्रभावित होंगे ** (यदि आप कोई गलती करते हैं या नहीं) तो इसके बारे में जागरूक रहें

  • 'एंटर' कुंजी टाइप करने से पहले, पूर्ववत करने की संभावना से अवगत रहें

  • अपने आप से पूछें कि क्या इस कमांड में आपके सत्र (fw रूल, खराब शटडाउन, आदि ...) को डिस्कनेक्ट करने की क्षमता है । सुनिश्चित करें कि आप वापस आने में विफल हैं (विशेषकर यदि आप ऑफसाइट हैं)


4

यदि आपने ऐसा नहीं किया है तो यह पहले ही उर्फ ​​आरएम टू आरएम -आई है


7
नहीं नहीं नहीं नहीं। यह सबसे खराब चीजों में से एक है जो आप कर सकते हैं। एक दिन आप खुद को एक ऐसे बॉक्स में पाएंगे, जिसमें यह अलियास नहीं है या आपने किसी तरह हमारे एनवी को ट्रैश कर दिया है। इसके बजाय rm -i का उपयोग करना सीखें।
ओलल

नहीं नहीं नहीं नहीं। ऐसा करो। एक दिन आप गलती से गलत काम करेंगे और खुद को बचा लेंगे। जितनी बार आप लाइन पर -i लगाना और गलत काम करना चाहते हैं, उससे अधिक बार भूल जाएंगे।
जेरुब

अगर मैं कभी एक से अधिक मशीन पर काम करता हूं तो मैं ऐसा नहीं करूंगा ... नई मशीन के साथ काम करना जब तक यह सेट-अप नहीं हो जाता, यह एक बड़ी चुनौती है।
slovon

भयानक बात यह है कि @olle और @Jerub दोनों सही हैं। हो सकता है कि पीएस 1 में कुछ, संभवत: रंगीन, झंडा लगा हो, जो 'सेफ्टी ऑफ' / 'सेफ्टी' को इंगित करता हो ...
ikso

4

नियम 1 - बैकअप बनाएं

नियम 2 - कभी भी "मॉली गार्ड" रैपर को मानक कमांडों में जोड़ें, अपना संस्करण बनाएं, सुनिश्चित करें, लेकिन नाम न लें, यह सिर्फ आपको काटेगा जब आप एक सिस्टम पर हैं जिसे आपने सेट नहीं किया था।

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


"मोली गार्ड" क्या है जो मैंने पहले कभी नहीं सुना है?
जेसन टैन


4

यह प्रति-सहज और कम 'ardkore लग सकता है, लेकिन मेरे पास सबसे अच्छी कमांड-लाइन सुरक्षा टिप है: यदि GUI- मोड विकल्प उपलब्ध है और व्यावहारिक है, तो USE IT

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

खूंखार "rm -rf" के क्लासिक मामले में, क्या आपको लगता है कि गलती से इसे GUI या CLI से जारी करना आसान है?

अंत में, GUI का सहारा लेने में कोई शर्म नहीं है। यह आमतौर पर बड़ी आपदाओं को नहीं रोकेगा; यह एक जीयूआई में ट्रिगर-खुश होना जितना संभव हो उतना ही संभव है क्योंकि यह एक सीएलआई में है; लेकिन अगर यह आपको एक बार बचाता है तो यह खुद को साबित करने योग्य है।


3

सामान्य ज्ञान का उपयोग करें, और उन कमांड को न चलाएं जिन्हें आप नहीं समझते हैं। यह सब अच्छी सलाह है। यदि आप ऐसा महसूस करते हैं कि आप जो कुछ भी rm पास करते हैं, या sudo के माध्यम से कुछ भी चला रहे हैं, उसके बारे में पूरी तरह से लिखने के साथ खुद को दर्द महसूस करते हैं। मैं तब su -c पसंद करूंगा। कम से कम यह पासवर्ड कैश नहीं करता है। मैं किसी भी नियमित उपयोगकर्ता को पासवर्ड सत्यापन के बिना रूट विशेषाधिकारों के साथ चीजों को चलाने की अनुमति देने में सहज महसूस नहीं करूंगा।

कुछ चीजें हैं जिन्हें आप अपने ~ / .bashrc में रख सकते हैं ताकि चीजें थोड़ी और सुरक्षित हो सकें, जैसे:

alias srm='rm -i'

आपको rm का सुरक्षित विकल्प देने की अनुमति है, ...

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

नियमित बैकअप रखें।


2
फिर से - कभी भी "आरएएम" पर न जाएं। आप इसके द्वारा खराब हो जाएंगे, आखिरकार, जब आप एक ऐसी प्रणाली पर काम करते हैं जिसमें यह अलियास नहीं होता है।
साइलेंटडब्ल्यू

एक बहुत बुरा विचार। यदि आप कभी भी मैक ओएस एक्स (शायद अन्य प्लेटफॉर्म?) पर खुद को पाते हैं srm, तो सुरक्षित निकालें !
मुर्दाघर

3

Rm से rm -i को aliasing करने के बजाय, इसे हटाने या सुरक्षित करने के लिए उर्फ ​​कहना बेहतर नहीं होगा (और अपने पसंदीदा विलोपन उपकरण के रूप में उपयोग करें)। फिर जब आप एक ऐसे बॉक्स का उपयोग करते हैं जिसमें यह सेट नहीं होता है, तो कोई नुकसान नहीं होता है।


2

सुनिश्चित करें कि जब तक आप पूरी तरह से समझ नहीं लेते हैं कि जब तक वे क्या कर रहे हैं, तब तक आप ऑनलाइन मिलने वाली कमांड को कभी भी न चलाएं।

आपका सिस्टम पोस्टर से अलग हो सकता है, और इससे चोट की दुनिया पैदा हो सकती है।


2

यूनिक्स / लिनक्स के दृष्टिकोण से कमांड-लाइन सुरक्षा के लिए एक स्पष्ट रूट खाते का उचित उपयोग है।
एक rm -rf रूट के रूप में आम तौर पर उपयोगकर्ता की तुलना में अधिक खतरनाक होता है, और अंतर्निहित चीज़ों का उपयोग करने के बजाय sudo जैसे कि लॉग इन करना महत्वपूर्ण है। एक अच्छा सरल whoami आमतौर पर सिज़ोफ्रेनिया या कई व्यक्तित्वों के लिए मदद करेगा।

यह और किसी भी फिल्माई कमांड के लिए गूंज, खासकर यदि आप यह सुनिश्चित करना चाहते हैं कि आपको एक शानदार या रीजेंट मैच मिल गया है।


2

जिस मशीन पर आप काम कर रहे हैं, उसमें द्वितीयक संबंध रखने से आप अपने प्राथमिक सत्र को मार सकते हैं, या कुछ ऐसा मूर्खतापूर्ण तरीके से कर सकते हैं जो इसे बंद कर देता है ... भारी प्रसंस्करण आदि।

इस तरह आप अभी भी मशीन में पहुँच सकते हैं और अपने प्राथमिक सत्र को मार सकते हैं।

उपरोक्त टिप्पणियों में से अधिकांश आरएम का उल्लेख करते हैं, लेकिन मैंने कुछ मूर्खतापूर्ण बातें अन्य आदेशों के साथ भी की हैं ...

ifconfig नेटवर्क - ouch को नीचे ले जाने के लिए, जिसे ठीक करने के लिए भौतिक उपस्थिति की आवश्यकता होती है।

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

व्यक्तिगत रूप से, मुझे rm -i जैसी चीजों के लिए अतिरिक्त संकेत नहीं मिलते हैं। मैं अपनी ज्यादातर गलतियाँ तब करता हूँ जब v। थका हुआ, तनावग्रस्त आदि, जो ऐसे समय होते हैं जब मैं बस y को पीटता रहूँगा और किसी भी तरह शीघ्रता को अनदेखा करूँगा। बुरा अभ्यास शायद।


2

यदि आप बैश का उपयोग करते हैं, तो यह कोशिश करें:

TMOUT=600

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

हाँ, मुझे पता है कि आपको रूट कमांड को निष्पादित करने के लिए sudo का उपयोग करना चाहिए - यह सिर्फ एक अतिरिक्त सुरक्षा जाल है यदि आप इसे एक दिन जोखिम में खेलने का निर्णय लेते हैं।


2
# Allow only UPDATE and DELETE statements that specify key values
alias mysql="mysql --safe-updates"`

यदि आप कभी भी mysql CLI का उपयोग करते हैं, तो आपके पास एक अत्यधिक अनुशंसित उर्फ ​​है।


1

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


1

*जब भी संभव हो मैं अपने तर्क के रूप में ग्लोब से बचता हूं । यहां तक ​​कि अगर मैं वास्तव में "इस निर्देशिका में सब कुछ हटा देता हूं" का अर्थ है, तो मैं और अधिक विशिष्ट होने की कोशिश करता हूं, अर्थात। rm *.php। यदि मैं गलती से किसी अन्य निर्देशिका में इतिहास से बाहर एक ही कमांड चलाता है तो यह प्रीमेप्टिव डैमेज कंट्रोल है।


मैंने कभी भी "cd dir; rm -rf *" नहीं सीखा, बल्कि हमेशा "rm -rf dir", जितना संभव हो उतना विशिष्ट था।
slovon

1

एक बढ़िया तरीका है कि आप यह सोचें कि आप क्या कर रहे हैं, इसे रूट के bashrc (cshrc, जो भी हो) के साथ कुछ इस तरह जोड़ें:

unset PATH

इस तरह, आपको सिर्फ "आरएम" के बजाय / बिन / आरएम करना है। उन अतिरिक्त पात्रों को आप सोच सकते हैं।


ठीक है, यह कमांड मैं कहाँ चलाना चाहता हूँ? which $COMMANDअब काम नहीं करता है।
केविन एम

/ usr / bin / $ COMMAND का पता लगाएं?
बिल वीइस

इससे भी बेहतर, / usr / bin / find -r / $ COMMAND $
बिल वीस

1

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

यह उन एज केस को मैन्युअल रूप से जोड़ने के लिए भी आसान है जो रेगेक्स ने नहीं उठाए।


1

कुछ अन्य पदों के लिए थोड़ा सा मेटा: मैं पहले सुझाए गए सामान्य इको / एलएस चरणों का उपयोग करता हूं, यह सुनिश्चित करने के लिए कि कमांड उन फ़ाइलों के सेट का चयन कर रहा है जो मैं चाहता हूं या अन्यथा शेल द्वारा व्याख्या की जा रही है।

लेकिन फिर मैं पिछली कमांड को पुनः प्राप्त करने के लिए शेल के कमांड हिस्ट्री एडिटिंग फीचर्स का उपयोग करता हूं, और केवल उन हिस्सों को संशोधित करता हूं, जिन्हें अलग-अलग करने की आवश्यकता होती है।

यह इन कमांडों में से प्रत्येक को स्वतंत्र रूप से टाइप करने में मदद नहीं करता है ...

$ ls *.bak
$ echo rm *.bak
$ rm * .bak

... क्योंकि मैंने गलती से अंतिम पंक्ति में एक स्थान टाइप किया, और सभी फ़ाइलों को हटा दिया। मैं हमेशा पिछली पंक्ति को पुनः प्राप्त करूंगा और बस 'प्रतिध्वनि' को हटा दूंगा।


1

रूट उपयोगकर्ता:
जब तक आपको करना न हो, रूट न करें।
यदि विक्रेता कहता है कि इसे रूट के रूप में चलाने की आवश्यकता है, तो उन्हें बताएं कि आप ग्राहक हैं और आप इसे गैर-रूट के रूप में चलाना चाहते हैं।
शेल्फ से कितने सॉफ्टवेयर पैकेज रूट चाहते हैं 'सिर्फ इसलिए कि यह आसान है'?

आदत:
कभी भी तीन बार देखे बिना हटाने के साथ '*' का उपयोग न करें ls -l TargetPattern का उपयोग करने की आदत बनाना सबसे अच्छा है , फिर 'rm! $' का उपयोग करें। सबसे बड़ा खतरा वह नहीं है जहां आप सोचते हैं कि आप हैं। मैं लगभग 'hostname' को अक्सर 'ls' टाइप करता हूं !

बैसाखी:
एक मानक संकेत बहुत मदद करता है, जैसा कि उपनाम "उपनाम rm = 'rm -i'" करते हैं, लेकिन मैं अक्सर उन मशीनों पर पूर्ण नियंत्रण नहीं रखता हूं, इसलिए मैं एक अपेक्षित आवरण स्क्रिप्ट का उपयोग करता हूं ताकि आपका रास्ता तय किया जा सके , ',' के साथ, और उपनाम

मुद्दों का पता लगाएं:
एक पूर्ण पथ का उपयोग करने में मदद करता है, लेकिन उन मामलों में जहां यह संभव नहीं है, सीडी एक अधिक सुरक्षित स्थान पर है और ALSO '&&' का उपयोग यह सुनिश्चित करने के लिए करता है कि 'सीडी' आपके खोज, हटाने, टार, अनटार, से पहले सफल हो जाए आदि:
उदाहरण: cd /filesystema && tar cf - | ( cd /filesystemb && tar vxf -)
'&&' का उपयोग एक टार फ़ाइल को इस मामले में खुद के ऊपर से निकाले जाने से रोक सकता है (हालाँकि इस मामले में 'rsync' बेहतर होगा)

निकालता है:
यदि आप इसे मदद कर सकते हैं, तो कभी भी पुनरावृत्ति न करें, खासकर एक स्क्रिप्ट में। ढूँढें और हटाएं -type f और -name 'पैटर्न के साथ' मैं अभी भी xargs को 'कुछ नहीं' खिलाने के डर में रहता हूं ... सामान को स्थानांतरित करने के लिए टार और अनटार करें (इसके बजाय rsync का उपयोग करें)


1

यदि आप एक ऑपरेटिंग सिस्टम के कई वेरिएंट का उपयोग करते हैं, तो सिंटैक्स में अंतर के बारे में बहुत जागरूक रहें; क्या एक यूनिक्स संस्करण पर यथोचित रूप से सुरक्षित है दूसरे में बेहद खतरनाक है।

उदाहरण: हत्या

लिनक्स / फ्रीबीएसडी / ओएसएक्स - पास किए गए पैरामीटर से मेल खाते सभी प्रक्रियाओं को मारता है। उदाहरण: "किलोल अपाचे" सभी अपाचे को मारता है, अन्य सभी प्रक्रियाओं को अकेला छोड़ देता है।

सोलारिस - सभी प्रक्रियाओं को मारता है। सच में नहीं। से आदमी पेज : killall सभी सक्रिय प्रक्रियाओं सीधे शटडाउन प्रक्रिया से संबंधित नहीं मारने के लिए बंद (1 मी) द्वारा किया जाता है।


मैंने सीखा है कि पिछले नियोक्ता के बैकअप सर्वर पर एक। जबकि यह रात के टेप चला रहा था। ओउ।
बिल वीस

1
आप इसके बजाय pkill का उपयोग कर सकते हैं जो सोलारिस और लाइनक्स पर काम करता है।
जेसन टैन

0

के बजाय

rm foo*

उपयोग

rm -i foo*

यह एक मुट्ठी भर फाइलों के साथ व्यावहारिक है, लेकिन ऐसा नहीं है, कहते हैं, एक पूरे टारबॉल। इसलिए अलियासिंग rmआपके रास्ते में आ जाएगी।


यह वही है जो -f स्विच के लिए है: किसी भी पिछले -i स्विच को ओवरराइड करना। यदि आप इसे अपने .bash_profile या समान शेल-इनिशियलाइज़ेशन स्क्रिप्ट में रखते हैं, तो आपको इसके बारे में चिंता करने की ज़रूरत नहीं होगी। बस सुनिश्चित करें कि आप ऐसा करना चाहते हैं, लेकिन यह पहले कहा गया है, और अधिक स्पष्ट रूप से।
केविन एम

0

पहले इको के साथ कमांड चलाना एक अच्छा विचार है, लेकिन यह अभी भी टाइपोस के लिए प्रवण है।

इस तरह के रूप में एक विस्तार के साथ इसका उपयोग करने का प्रयास करें! $।

echo foo*
rm -rf !$

! $ अंतिम आदेश के अंतिम शब्द तक फैलता है, इसलिए यह इसके बराबर है

echo foo*
rm -rf foo*

वहाँ भी है! *, जो अंतिम आदेश तक सभी तर्कों का विस्तार करता है।

वास्तव में, यदि आप चाहें तो आप इसे इस तरह से कर सकते हैं

echo rm -rf foo*
!*

(यदि आप ksh का उपयोग कर रहे हैं, तो bash नहीं, तो आप अंतिम शब्द डालने के लिए Esc + अवधि लिख सकते हैं।)


Esc +। बाश में भी काम करता है।
ओलल

0

कुछ इस तरह के मामले में:

ls * .php
इको rm * .php
rm * .php

आप प्रतिस्थापन ऑपरेटर का उपयोग कर सकते हैं, जैसे:
$ ls * .php
<dir लिस्टिंग>

INR

$ ^ इको आरएम ^ आरएम (सिर्फ आरएम के साथ इको आरएम को बदलें, इस प्रकार आपको * .php और गलत समय पर एक स्पेस में फेंकना नहीं है)

^ = शिफ्ट -6, उन लोगों के लिए जो इससे परिचित नहीं हैं।


Ick। मैं अपने तीर कुंजियों का उपयोग करूंगा और पिछली पंक्ति को संपादित करूंगा। इस तरह से मैं देख सकता हूं कि जब मैं एंटर दबाता हूं, तो प्रतिस्थापन पैटर्न को सही तरीके से प्राप्त करने के लिए खुद पर भरोसा करने के बजाय, एंटर दबाएं।
मारियस गेदमिनस

उदाहरण के लिए, "इको आरएम * .php" के बाद आप <ऊपर> <होम> <Alt-D> और फिर <Enter> करें।
मारियस गेदमिनस

0

बैश का उपयोग करें और PS1 = '\ u @ \ h: \ w>' सेट करें। यह उपयोगकर्ता नाम @ hostname: / full / working / directory / path> तक विस्तृत है, जैसा कि अन्य उत्तरों में उल्लेख किया गया है, आप जब भी आप लॉग इन कर सकते हैं, तो आप .profile या .bash_profile फ़ाइलों को अपडेट नहीं कर सकते हैं। पृष्ठभूमि रंग बदलना आसानी से सबसे अच्छा जवाब है, हालांकि :-)


-1

आह येस। किसी की फाइल को पुरानी भेजने की पुरानी ट्रिक IRC जिसका नाम "-rf" है, इसलिए यह उनकी ~ डायरेक्टरी में समाप्त हो जाता है। एक छोटी "आरएम-आरएफ़" बाद में ("आरएम - आरएफ" के बजाय) और बहुत हँसी के रूप में वे आईआरसी को जड़ के रूप में नहीं चलाने के बारे में एक कठोर सबक सीखते हैं।


रॉफ फैक्टर के लिए +1
डेविड जेड

तो कैसे "rm -rf" आपको नुकसान पहुँचाने वाला है, एह?
kubanczyk

शायद फ़ाइल को वास्तव में "-rf *" नाम दिया गया था?
मारियस गेदमिनस

-1

इसके बजाय अंत में जैसे rm -rf <dir>पुट का उपयोग -rfकरें rm <dir> -rf:। आपके द्वारा आग लगाने से पहले और आग लगाने के बाद सुरक्षा को हटाने के बारे में सोचें। यदि आप निर्देशिका नाम टाइप करते समय (या टैब पूर्णता का उपयोग करते हुए) दर्ज करते हैं और इसी प्रकार निर्देशिका का नाम रखते हैं तो आप सुरक्षित हैं।

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