Найти тему
Легко в’IT

Не выполняй это!

Предлагаю сегодня немного похулиганить, в рамках изучения командной строки, само собой, а за одно разберем первую программку под UNIX. И так, как думаешь, что это такое?

:(){ :|:& };:

Это ни что иное, как так называемая форк-бомба. Согласен, так себе объяснил. Давай разберем ее по кусочкам. По сути мы здесь описываем простейшую функцию, а так как на языке bash (тот, который в линуксовых консолях используется) функция может носить любое имя, то:

- ":" - это имя функции

- "()" - стандартные скобки, в которых мы декларируем параметры функции. Сейчас скобки пустые, так как параметры нам не нужны

- Между символом "{" и "}" заключено тело функции, то есть сам алгоритм

- Как ты уже знаешь, символ "|" отвечает за передачу управления другой команде, но в нашем случае мы можем его использовать и с именами функций. То есть, внутри нашей функции ":", мы запускаем ее же снова и передаем ей же управление. Такая передача нужна чтобы создать именно новый процесс, а не работать в одном

- Символ "&" означает, что программу (или функцию) мы хотим запустить в фоновом режиме, то есть забрать у пользователя возможность легко остановить выполнение программы

- Завершаем символом ";" описание функции

- И запускаем ее ":"

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

Кстати, до сих пор работает. Можно поставить в конфигурации ядра защиту от дурака, но это все равно повлияет на производительность всей системы.

Мораль сей басни такова: проверяй то, что копипастишь. Ну и конечно же я тебе в такой форме рассказал, как пишутся функции в консоли и какая это все-таки классная штука!

Кстати, как ты думаешь, что делает вот эта команда? Помни мой совет: перед выполнением сначала полностью разбери команду, что делает каждая ее часть.

cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'