2012-05-28 16 views
7

चेतावनी: खतरनाक स्क्रिप्ट। अपनी कमांड लाइन से भागो मत! एक कंपनी मजाक ईमेल मेंइस बैश स्क्रिप्ट कितनी खतरनाक है?

देखा यह। किसी ने मुझे बता सकते हैं क्यों इस bash स्क्रिप्ट एक सामान्य से भी ज्यादा खतरनाक है 'rm- आरएफ' कमांड ?:

nohup cd /; rm -rf * > /dev/null 2>&1 & 

विशेष रूप से, क्यों nohup प्रयोग किया जाता है और के लिए अंत में तत्वों क्या हैं?

चेतावनी: खतरनाक लिपि। अपनी कमांड लाइन से भागो मत!

+1

यह केवल बहुत ही मामूली प्रोग्रामिंग प्रश्न – DGM

+1

'--no-preserve-root' (whistling) है –

उत्तर

4

2>&1 लेता stderr (फ़ाइल हैंडल 2) और stdout (फ़ाइल हैंडल 1) पर रीडायरेक्ट। & से ही पृष्ठभूमि में rm कमांड देता है। नोहप उस व्यक्ति के बाद भी काम जारी रखने की इजाजत देता है जिसने इसे लॉग आउट करना शुरू किया था।

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

+1

"फ़ाइल हैंडल" उर्फ ​​"फ़ाइल डिस्क्रिप्टर" –

+1

सौभाग्य से, स्क्रिप्ट का सर्वश्रेष्ठ उतना बुरा नहीं है जितना लेखक चाहता था। वह अपने विचार से इतना डर ​​गया था कि उसने इसका परीक्षण नहीं किया :-) – choroba

2

nohup [..] & यह पृष्ठभूमि के बाद भी उपयोगकर्ता बाहर लॉग इन किया है में चलाने के लिए बनाता है (बनाने यह मुश्किल को रोकने के लिए, मुझे लगता है)

2>&1 stdout से आ रही stdout को

> /dev/null छोड देता है कुछ भी stderr पुनर्निर्देश

आदेश मूल रूप से, कुछ भी नहीं करना प्रकट होता के रूप में अपने फाइल सिस्टम धीरे-धीरे पृष्ठभूमि में नष्ट हो जाता है।

2

nohup मतलब है कि यह hangup संकेत पर ध्यान नहीं देगा, जिसका अर्थ है कि यह चल रहा है उपयोगकर्ता अब प्रवेश किया गया है, भले ही रखेंगे।

सीडी/रूट निर्देशिका

rm- आरएफ के लिए उपयोगकर्ता से चलता है * सभी फ़ाइलों को दोबारा हटा देता है (सभी निर्देशिकाओं को पार करता है) और मजबूती से (फाइलों का उपयोग करने पर कोई परवाह नहीं है)

अंत में टुकड़ा सभी आउटपुट को कहीं भी रीडायरेक्ट नहीं करता है। यह अनिवार्य रूप से अपने ड्राइव को कुछ भी प्रारूपित नहीं करना चाहिए।

nohup cd /; find * >/dev/null 2>&1 & 

मैं इस हो रही है::

+0

यदि आप रीडायरेक्ट पर थोड़ा और विस्तारित करते हैं तो आपको शीर्ष जवाब मिल जाएगा। इसके अलावा आपने अंत में पृष्ठभूमि '&' का उल्लेख नहीं किया है। अच्छा जवाब हालांकि। – derek8

6

तुम कुछ कम "खतरनाक" कोशिश कर सकते हैं

nohup: ignoring input and appending output to `nohup.out' 
nohup: cannot run command `cd': No such file or directory 
[2] 16668 

तो, nohup हिस्सा कुछ नहीं करता है, यह केवल एक त्रुटि से चलाता है। दूसरा भाग (मूल स्क्रिप्ट का) आपकी वर्तमान निर्देशिका में सबकुछ हटाने की कोशिश करता है, और इसे Ctrl-C द्वारा रोका नहीं जा सकता है, क्योंकि यह पृष्ठभूमि में चलता है। इसके सभी आउटपुट को शून्य पर रीडायरेक्ट किया गया है, इसलिए आपको कोई भी 'पहुंच अस्वीकृत' प्रगति संदेश नहीं दिखाई देता है।

+0

क्या यह 'नोहप सीडी /' नहीं होना चाहिए? – derek8

+0

@ derek8: कॉपी और पेस्ट त्रुटि, धन्यवाद, तय। – choroba

+0

लेकिन क्या यह आपको अभी भी त्रुटि देता है? – derek8

3

मजाक तरह का टूटा हुआ है, स्पष्ट रूप से यह परीक्षण नहीं किया गया है, वह

nohup sh -e "cd/; rm -rf *" > /dev/null 2>&1 & 

या

nohup rm -rf/> /dev/null 2>&1 & 

मतलब अन्यथा nohup सीडी /; भाग खोल द्वारा एक अलग लाइन माना जाता है। और दूसरी पंक्ति सिर्फ आरएम-आरएफ * जो आपकी वर्तमान निर्देशिका आरएम को कम करती है (नाम वाली फाइलें कम से कम हैं।)

संबंधित मुद्दे