सवाल आदेश क्यों दिया गया: "() {: |: &} ;:" मेरे सिस्टम को इतनी बुरी तरह खराब कर दें कि मुझे रीबूट करना पड़ा?


खतरा!

इस आदेश को 'परीक्षण' करने के लिए तब तक न चलाएं जब तक आप किसी क्रैश और / या आपके सिस्टम को बल-रिबूट करने के लिए तैयार न हों।

मैं अपने वर्चुअलबॉक्स में 12.04 चला रहा था जो एक ऐप संकलित करने की कोशिश कर रहा था, और प्रतीक्षा करते समय मुझे एक मंच पर मौका मिला जहां एक टिप्पणी ने कहा:

प्रयत्न :(){ :|: & };:
  मज़ा भी, और जड़ की जरूरत नहीं है।

सोचने के बिना, मैंने इसे अपने gnome-terminal में चलाया। इसने मेरे 12.04 (वर्चुअलबॉक्स में) इतनी बुरी तरह से बना दिया, मुझे इसे बंद करना पड़ा।

मेरा सवाल यह है कि यह आदेश क्या करता है?

:(){ :|: & };:

273
2017-07-04 11:29


मूल


सम्बंधित फोर्क बम से उबंटू की रक्षा कैसे करें - Sathya
एक पुराना धागा भी देखें: ubuntuforums.org/showthread.php?t=1392511 - Paddy Landau
सम्बंधित: एक कांटा बम कैसे काम करता है? तथा कांटा बम पर कांटा () कहां है: () {: |: &};:? - terdon♦
संभावित क्रॉस साइट का डुप्लिकेट: stackoverflow.com/questions/515844/... - Ciro Santilli 新疆改造中心 六四事件 法轮功
"बहुत बुरा लग रहा है" बहुत आशावादी है। - pstadler


जवाब:


इसे एक कहा जाता है कांटा बम

:() मतलब है कि आप एक समारोह को परिभाषित कर रहे हैं :

{:|: &} मतलब समारोह चलाओ : और इसके आउटपुट को भेजें : फिर से कार्य करें और पृष्ठभूमि में चलाएं।

; एक कमांड विभाजक है, जैसे &&

: पहली बार समारोह चलाता है।

अनिवार्य रूप से आप एक ऐसा फ़ंक्शन बना रहे हैं जो प्रत्येक कॉल को दो बार कॉल करता है और उसके पास स्वयं को समाप्त करने का कोई तरीका नहीं है। जब तक आप सिस्टम संसाधनों से बाहर नहीं हो जाते, तब तक यह दोगुना रहेगा।

वर्चुअलबॉक्स में चलना वास्तव में काफी समझदार था अन्यथा आपको अपने पीसी को पुनरारंभ करना होगा।


346
2017-07-04 11:34



यह जवाब सुझाव देता है कि रिबूटिंग है केवल सहारा। लेकिन वास्तव में इस फोर्क बम को रिबूट किए बिना मार दिया जा सकता है, और मैंने वास्तव में देखा है कि यह किसी भी सिस्टम पर ठीक से काम नहीं करता है (क्योंकि उनकी स्पॉन सीमा समझदारी से सेट की जाती है)। - Konrad Rudolph
असल में, एक पूर्ण स्पष्टीकरण के लिए शायद इसका उल्लेख करना चाहिए ; एक कमांड विभाजक है। { ... } भाग बस समारोह की सामग्री है। - Michael Kjörling
@ माइकल Kjörling +1 जब तक मैंने आपकी टिप्पणियों पर विचार नहीं किया तब तक मैंने वाक्यविन्यास को भी समझ नहीं लिया। - jumpnett
@SuperMatt मुझे नहीं पता कि यह सवाल अभी भी सक्रिय है, लेकिन फिर भी मैं जानना चाहता था कि क्या करता है | तथा & कर। मैं समझता हूं कि आपने समारोह के काम को प्रदान किया है लेकिन मैं जानना चाहता था कि ये दोनों क्या करते हैं - Noober
@Nober अगर आप अभी भी सोच रहे हैं (जैसा कि मैं tere के इस काले छेद में हूँ और लिनक्स है कि गुप्त दस्तावेज) मुझे पता है! | एक पाइप है जिसे कमांड के आउटपुट के रूप में कमांड आउटपुट भेजने के लिए कमांड के बाद रखा जाता है। और एक कांटा है जो मौजूदा थ्रेड को छोड़कर पिछले कमांड के लिए एक नया धागा बनाता है ताकि अधिक कमांड निष्पादित करना जारी रखा जा सके - flurbius


यह एक तथाकथित है कांटा बम खोल में लागू

विकिपीडिया से:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:

162
2017-07-04 11:35



यद्यपि यह एक स्पर्श बिंदु है और शब्द 'अस्वीकार' को अधिभारित किया जा सकता है, तकनीकी रूप से, पृष्ठभूमि में डाली गई प्रक्रिया को अस्वीकार नहीं किया जाता है और हमेशा 'एफजी' कमांड के साथ अग्रभूमि में लाया जा सकता है, और प्रक्रिया (एस) समाप्त हो जाएगी उपयोगकर्ता लॉग आउट करता है (यदि लॉगआउट पूरा करने के लिए अभी भी संसाधन उपलब्ध हैं) .... जब तक और जब तक कोई प्रक्रिया या जॉबड पर 'अस्वीकार' नहीं चला जाता है। उसके बाद यह वास्तव में अस्वीकार कर दिया गया है: लॉग आउट आउट समाप्त नहीं होगा और एफजी का कोई प्रभाव नहीं पड़ेगा। - Rondo
यद्यपि यह केवल एक मामूली बिंदु है, ब्रांड्स का मतलब यह नहीं है कि बैश-जैसे गोले में कोई पैरामीटर नहीं हैं, वे केवल सी-स्टाइल भाषाओं से सजावट छोड़ चुके हैं। - Charlie Harding


वह आदेश का एक प्रसिद्ध संस्करण है कांटा बम

fork bomb pic from wikipedia

यह आपके कंप्यूटर को असीमित प्रक्रिया को फोर्क करके स्मृति से बाहर निकलने का कारण बनता है। वहां कुछ सुरक्षा उपाय मौजूद हैं जिनका आप इसके खिलाफ भी उपयोग कर सकते हैं:

यूनिक्स-टाइप सिस्टम में आमतौर पर एक प्रक्रिया-सीमा होती है, जिसे अल्लिमिट शेल कमांड या इसके उत्तराधिकारी, सेट्रलिमिट द्वारा नियंत्रित किया जाता है। लिनक्स कर्नेल एक प्रक्रिया के RLIMIT_NPROC Rlimit ("संसाधन सीमा") को सेट और लागू करते हैं। यदि कोई प्रक्रिया एक कांटा करने की कोशिश करती है और उस उपयोगकर्ता के पास है जो उस प्रक्रिया का मालिक है RLIMIT_NPROC प्रक्रियाओं, तो कांटा विफल रहता है। इसके अतिरिक्त, लिनक्स या * बीएसडी पर, कोई भी संपादित कर सकता है pam_limits विन्यास फाइल /etc/security/limits.conf एक ही प्रभाव के लिए। हालांकि, लिनक्स के सभी वितरणों में नहीं है pam_limits डिफ़ॉल्ट रूप से स्थापित मॉड्यूल।


71
2017-07-04 11:37





इसके अनुसार इस  :(){ :|: & };: कहा जाता है

को forkbomb एक तरह का काव्य वायरस निर्माता है

... भयानक छोटा कार्यक्रम इसे कई प्रतियों को बनाने के लिए आदेश देता है   खुद, एक श्रृंखला प्रतिक्रिया को बंद करना और इस प्रकार जल्दी से थकाऊ   सिस्टम के संसाधन ...

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

एक और लिंक स्क्रीन शॉट्स के माध्यम से बताता है यहाँ


18
2017-07-04 11:35



अगर एक कांटा बम का कारण बनता है हार्डवेयर क्षति, तो आपके पास बहुत बड़ी और गहरी समस्या है। - Michael Kjörling
हो सकता है कि वह कांटे के आकार के साथ एक बम के बारे में बात कर रहा था जो आपके पीसी के पास विस्फोट कर सकता है? - dysoco
स्क्रीनशॉट के लिए लिंक टूटा हुआ है। - IMustBeSomeone