Предлагаю сегодня немного похулиганить, в рамках изучения командной строки, само собой, а за одно разберем первую программку под UNIX. И так, как думаешь, что это такое?
:(){ :|:& };:
Это ни что иное, как так называемая форк-бомба. Согласен, так себе объяснил. Давай разберем ее по кусочкам. По сути мы здесь описываем простейшую функцию, а так как на языке bash (тот, который в линуксовых консолях используется) функция может носить любое имя, то:
- ":" - это имя функции
- "()" - стандартные скобки, в которых мы декларируем параметры функции. Сейчас скобки пустые, так как параметры нам не нужны
- Между символом "{" и "}" заключено тело функции, то есть сам алгоритм
- Как ты уже знаешь, символ "|" отвечает за передачу управления другой команде, но в нашем случае мы можем его использовать и с именами функций. То есть, внутри нашей функции ":", мы запускаем ее же снова и передаем ей же управление. Такая передача нужна чтобы создать именно новый процесс, а не работать в одном
- Символ "&" означает, что программу (или функцию) мы хотим запустить в фоновом режиме, то есть забрать у пользователя возможность легко остановить выполнение программы
- Завершаем символом ";" описание функции
- И запускаем ее ":"
Итого, что же делает наша волшебная функция? да по сути просто неконтролируемо создает все новые и новые копии себя, забивая оперативную память компьютера.
Кстати, до сих пор работает. Можно поставить в конфигурации ядра защиту от дурака, но это все равно повлияет на производительность всей системы.
Мораль сей басни такова: проверяй то, что копипастишь. Ну и конечно же я тебе в такой форме рассказал, как пишутся функции в консоли и какая это все-таки классная штука!
Кстати, как ты думаешь, что делает вот эта команда? Помни мой совет: перед выполнением сначала полностью разбери команду, что делает каждая ее часть.
cat "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'