Почему команда ":(){ :|: & };:" из-за чего моя система так сильно зависает, что мне пришлось перезагрузиться?

ОПАСНОСТЬ!

Не запускайте эту команду для "тестирования", если вы не готовы к сбою и / или принудительной перезагрузке системы.

Я был в своем Virtualbox под управлением 12.04, пытаясь скомпилировать приложение, и во время ожидания случайно наткнулся на форум, где в комментарии говорилось:

Попробуй :(){ :|: & };:
Тоже весело, и ему не нужен корень.

Недолго думая, я запустил его в своем gnome-терминале. Из-за этого мой 12.04 (в Virtualbox) так сильно запаздывал, что мне пришлось его выключить.

Мой вопрос в том, что делает эта команда?

:(){ :|: & };:

Это называется вилочная бомба.

:() означает, что вы определяете функцию, вызываемую :

{:|: &} означает запуск функции : и отправить его выходные данные в : снова запустите функцию и запустите ее в фоновом режиме.

То ; является разделителем команд.

: запускает функцию в первый раз.

По сути, вы создаете функцию, которая вызывает себя дважды при каждом вызове и не имеет никакого способа завершить себя. Он будет продолжать удваиваться до тех пор, пока у вас не закончатся системные ресурсы.

Запуск в Virtualbox был вполне разумным, в противном случае вам пришлось бы перезагрузить компьютер.

Это так называемый вилочная бомба реализовано в оболочке.

из википедии:

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

Эта команда является хорошо известной версией вилочная бомба

fork bomb pic from wikipedia

Это приводит к тому, что вашему компьютеру не хватает памяти из-за бесконечного разветвления процесса. Существуют некоторые меры предосторожности, которые вы также можете использовать против этого:

Системы типа Unix обычно имеют ограничение процесса, управляемое командой оболочки ulimit или ее преемником setrlimit. Ядра Linux устанавливают и применяют RLIMIT_NPROC rlimit ("ограничение ресурсов") процесса. Если процесс пытается выполнить форк, а пользователь, которому принадлежит этот процесс, уже владеет RLIMIT_NPROC процессы, затем форк завершается неудачей. Кроме того, в Linux или *BSD можно редактировать pam_limits конфигурационный файл /etc/security/limits.conf с тем же успехом. Однако не все дистрибутивы Linux имеют pam_limits модуль установлен по умолчанию.

Согласно с этот :(){ :|: & };: называется

Вилочная бомба является своего рода создателем поэтического вируса

... Хитрая маленькая программа приказывает ему сделать несколько копий самого себя, вызывая цепную реакцию и, таким образом, быстро истощая ресурсы системы...

Поэтому рекомендуется не запускать это, это может привести к повреждению оборудования, поскольку оно вызывает циклическое выполнение, может легко вызвать нагрев ноутбуков.

Другая ссылка объясняет с помощью снимков экрана здесь.

Это называется “вилка-бомба”, как объяснено выше, и другим способом сделать это было бы использовать фоновое выполнение, а не конвейерное:

:(){ :&:;};:

по теме Как защитить Ubuntu от форк-бомбы

“отставание так сильно” звучит довольно оптимистично.

Также смотрите старую ветку: [SOLVED] Curious about a malicious command

По теме: Как работает вилочная бомба? и Где находится fork() на fork bomb :(){ :|: & };:?

По теме: Команда Bash :(){ :|:& };: приведет к появлению процессов, приводящих к гибели ядра. Можете ли вы объяснить синтаксис? при ТАКОМ

:(){ :|:& }&: в моей системе все еще хуже.

возможный межсайтовый дубликат: linux - The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax? - Stack Overflow

Значит, этот скрипт написан на языке оболочки linux?

Проверка explainshell.com +%3A%7C%3A%26+%7D%3B%3A