এই ক্রিপ্টিক বাশ কমান্ডটির অর্থ কী?


23

আমি দূষিত আদেশগুলি সম্পর্কে উবুন্টু ফোরামের সতর্কতাটি পড়ছিলাম এবং এই আকর্ষণীয় রত্নটি পেয়েছিলাম:

:(){ :|:& };:

সতর্কতা: উপরের কোডটি আপনার মেশিনকে ক্র্যাশ করবে যদি না আপনার জায়গায় কঠোর প্রকট সীমা থাকে (যা আপনি সম্ভবত না) একটি হার্ড পুনরায় আরম্ভের অনুরোধ না করে।

এই কোড চলমান অনুরূপ বিবেচনা করুন sudo rm -rf /

তবে তার মানে কী? এমনকি আমার প্রোগ্রামিংয়ের অভিজ্ঞতার সাথে আমি কখনও কোনও কমান্ড দেখিনি যা ক্রিপ্টিক যা সমাবেশ ভাষা নয় assembly


16
একটি অতিরিক্ত পয়েন্ট: এটি আসলে কোনওভাবেই এর মতো নয় sudo rm -rf /। এই আদেশটি আপনার সমস্ত ফাইল মুছে ফেলে; এটি কেবলমাত্র আপনার মেশিনের সংস্থানকে অব্যবহারযোগ্য না হয়ে যাওয়া এবং আপনি পুনরায় আরম্ভ করতে না পারছেন।
jtbandes

@ জটবান: তারপরে এটি সম্পাদনা করুন। কোডের দুটি অংশই আমি চালানো "বিপজ্জনক" বিবেচনা করব। হ্যাঁ sudo rm -rf /হয় আরো বিপজ্জনক কিন্তু আমি দেখা করেছি মানুষ দূরবর্তী সার্ভার এ এই চালানো "শুধু এটা কি দেখতে চেয়েছিলেন" আপনি একটি কঠিন সময় একটি নিয়ন্ত্রণ প্যানেলে অ্যাক্সেস ছাড়া পুনরায় চালু আছে যেখানে।
জোশ কে

7
এটি একটি ইমোটিবম্ব: পি
আরসিআইএক্স

এটা হতে পারে নোট arbitrary_name(){ arbitrary_name|arbitrary_name& };arbitrary_name। নামটি কেবল :এই আদেশটি সংক্ষিপ্ত এবং রহস্যময় করে তোলে না, এমন একটি :বিল্টিনকে পরিণত করে যা কিছুই করে না এমন কাজ করে যা অনেক কিছু করে । যদি আপনি এর সংজ্ঞাটি :(){ :|:& }অন্য কারও পরিবেশে ঝুঁকেন এবং এটিকে সেখানে থাকতে দেন, শিকার যখন কমপক্ষে এটি প্রত্যাশা করে তখন তা আঘাত করবে ।
কামিল ম্যাকিয়েরোভস্কি

উত্তর:


40

এটি যেমন আপনি বলেছেন, কাঁটাচামচ এটি যা করে তা কোনও ফাংশন সংজ্ঞায়িত করা হয়, তারপরে এটি কল করুন। ফাংশন বলা হয় :

আসুন এর নাম দিন forkbombযাতে আমরা আরও ভালভাবে দেখতে পাচ্ছি যে কী চলছে:

forkbomb(){ forkbomb|forkbomb& };forkbomb

আপনি দেখতে পাচ্ছেন, এবং সম্ভবত আপনার প্রোগ্রামিংয়ের অভিজ্ঞতা থেকে অনুমান করতে পারেন, প্রথম অংশটি হ'ল ফাংশন সংজ্ঞা ( forkbomb(){ ... }), এবং একেবারে শেষ :যেখানে ফাংশনটি ডাকা হয় ( ;কেবল বাশের বিবৃতিতে পৃথক পৃথক)।

এখন, এই ফাংশনটি কী করে? আপনি যদি বাশের সাথে পরিচিত হন তবে আপনি জানবেন যে |অক্ষরটি একটি কমান্ড / প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটটিকে অন্যটির স্ট্যান্ডার্ড ইনপুটটিতে পাইপ দেয়। সুতরাং মূলত, ফাংশনটির দুটি উদাহরণ :|:শুরু হয় (এটি এখানে "কাঁটাচামচ")।

এবং তারপরে যাদু: &সেই কমান্ডগুলিকে পটভূমিতে রাখে, মূল ফাংশনটি ফিরে আসার সুযোগ দেয়, যখন প্রতিটি উদাহরণ গরুকে পটভূমিতে ঘরে ফেরাতে বাধ্য করে, এইভাবে আপনার সমস্ত সংস্থান ব্যবহার করে এবং সিস্টেমটিকে নিচে নিয়ে যায় (যতক্ষণ না এর সীমা না থাকে) এটি আরোপিত)।


1
দুর্দান্ত উত্তর! আমি বুঝতে পারিনি যে আপনি ব্যবহার করতে পারবেন: একটি ফাংশন নাম হিসাবে। নামকরণে সহায়তা করে। 3 মিনিটের মধ্যে গ্রহণ করবে।
TheLQ

1
+1 দুর্দান্ত ... দুর্দান্ত ব্যাখ্যা। এটি কোনও ওএস টাস্কউইচারের জন্য স্ট্যাক ওভারফ্লোর মতো। এটি কি আসলে কার্নেলটি ক্র্যাশ করেছে বা এটি ব্যবহারের পক্ষে কেবল অসহনীয় না হওয়া পর্যন্ত এটি সংস্থানগুলি খায়?
ইভান প্লেস 6

আমি মনে করি না এটি আসলে কার্নেলটি ক্র্যাশ করেছে, কমপক্ষে সরাসরি নয়। এটি কেবলমাত্র বিস্তৃতভাবে আরও প্রক্রিয়া তৈরি করে রাখে, যার প্রতিটি সিপিইউ এবং মেমরি গ্রহণ করে এবং প্রসেসরের সাথে সমস্ত পরিচালনা করার চেষ্টা করে এটি ব্যবহার করা সত্যিই অসম্ভব হয়ে যায়। এটি হতে পারে যে কার্নেল অবশেষে বোঝার নীচে ক্রাশ হয়ে গেছে (আমি নিশ্চিত নই) তবে এটির আগে এটি ব্যবহারের অযোগ্য হবে।
jtbandes

3
ফাইনালটি ব্যাখ্যা করতে ভুলবেন না :, যা কার্যত কার্য সম্পাদন করে!
ফোশি

@ ফোশি: ভেবেছিলাম আমি করেছি, তবে আমি স্পষ্ট করতে সম্পাদনা করব!
jtbandes

9

উইকিপিডিয়া নিবন্ধটি ফোর্কবম্ব থেকে নেওয়া :

:()      # define ':' -- whenever we say ':', do this:
{        # beginning of what to do when we say ':'
    :    # load another copy of the ':' function into memory...
    |    # ...and pipe its output to...
    :    # ...another copy of ':' function, which has to be loaded into memory
         # (therefore, ':|:' simply gets two copies of ':' loaded whenever ':' is called)
    &    # disown the functions -- if the first ':' is killed,
         #     all of the functions that it has started should NOT be auto-killed
}        # end of what to do when we say ':'
;        # Having defined ':', we should now...
:        # ...call ':', initiating a chain-reaction: each ':' will start two more.

7

ভেঙ্গে পড়া:

: () // Define ':' as a function. When you type ':' do the following
{
    : // Call ':' 
    | // Redirect output
    : // Into ':'
    & // Push process to the background
}; // End of ':' def
: // Now do ':'

এতে পরিবর্তন :করুন bombএবং আপনার রয়েছে:

bomb(){ bomb|bomb& };bomb

এটি সত্যিই বেশ মার্জিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.