क्यों कमांड ": () {: |: &} ?:" मेरे सिस्टम को इतनी बुरी तरह से पीछे कर देती है कि मुझे रिबूट करना पड़ा?


286

खतरा!

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

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

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

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

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

: () {: |: &} ;:



1
एक पुराना धागा भी देखें: ubuntuforums.org/showthread.php?t=1392511
धान लैंडौ


की संभावित क्रॉस साइट डुप्लिकेट: stackoverflow.com/questions/515844/…
Ciro Santilli 中心::: 六四

9
"बहुत बुरी तरह से" बहुत आशावादी है।
pstadler

जवाबों:


372

इसे फोर्क बम कहा जाता है ।

:() इसका मतलब है कि आप एक फ़ंक्शन को परिभाषित कर रहे हैं :

{:|: &}इसका मतलब है कि फंक्शन को रन करें :और अपने आउटपुट को :फिर से फंक्शन में भेजें और बैकग्राउंड में रन करें।

;एक कमांड विभाजक है।

: पहली बार फंक्शन चलाता है।

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

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


27
यह उत्तर बताता है कि रिबूट करना एकमात्र सहारा है। लेकिन वास्तव में इस फोर्क बम को रिबूट किए बिना ही मारा जा सकता है, और मैंने वास्तव में देखा है कि यह कुछ प्रणालियों पर ठीक से काम नहीं करता है (क्योंकि उनकी स्पॉन सीमा समझदारी से सेट है)।
कोनराड रूडोल्फ

27
दरअसल, एक पूर्ण स्पष्टीकरण के लिए यह संभवतः उल्लेख करना चाहिए कि ;एक कमांड विभाजक है। { ... }हिस्सा बस समारोह की सामग्री है।
बजे एक CVn

@ माइकलकॉग्लिंग +1 मैंने तब तक वाक्य-विन्यास को भी नहीं समझा जब तक कि मैंने आपकी टिप्पणियों पर ध्यान नहीं दिया।
जंप

1
@SuperMatt मुझे नहीं पता कि यह सवाल अभी भी सक्रिय है, लेकिन वैसे भी मैं जानना चाहता था कि क्या करता है |और क्या करता &है। मैं समझता हूं कि आपने कार्य करना प्रदान कर दिया है, लेकिन मैं यह जानना चाहता हूं कि ये दोनों क्या करते हैं
Noober

1
@ अगर आपको अभी भी आश्चर्य हो रहा है (जैसा कि मैं इस ट्रिक और क्रिप्टोकरेंसी के इस ब्लैक होल में हूँ, जो कि linux है) तो मुझे पता है! | एक कमांड के बाद आउटपुट को कमांड के इनपुट के रूप में भेजने के लिए इसे एक पाइप के बाद रखा जाता है। & एक फोर्क है जो पूर्ववर्ती कमांड के लिए एक नया धागा बनाता है जो वर्तमान थ्रेड को छोड़कर अधिक कमांड निष्पादित करने के लिए जारी रखता है
flurbius

179

यह शेल में लागू एक तथाकथित फोर्क बम है

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

:(){ :|:& };:
\_/| |||| ||\- ... 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:

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

1
हालाँकि यह केवल एक मामूली बात है, कोष्ठक का मतलब यह नहीं है कि बैश जैसे गोले में कोई पैरामीटर नहीं हैं, वे केवल सी-स्टाइल भाषाओं से बचे हुए सजावट हैं।
चार्ली हार्डिंग

75

यह कमांड फोर्क बम का एक जाना-माना संस्करण है

विकिपीडिया से कांटा बम तस्वीर

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

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


18

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

फॉरबॉम्ब एक प्रकार का काव्य वायरस निर्माता है

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

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

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


59
यदि कांटा बम हार्डवेयर क्षति का कारण बनता है , तो आपके पास एक बहुत बड़ी और गहरी समस्या है।
एक CVn

38
शायद वह कांटे के आकार वाले बम के बारे में बात कर रहा था जो आपके पीसी के पास फट सकता है?
dysoco

2
स्क्रीनशॉट के लिए लिंक टूट गया है।
IMustBeSomeone

0

इसे " कांटा-बम " कहा जाता है , जैसा कि ऊपर बताया गया है, और ऐसा करने का एक और तरीका पाइपलाइन के बजाय पृष्ठभूमि निष्पादन का उपयोग करना होगा:

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