Люди, которые не понимают Терминал, часто боятся использовать его, опасаясь, что они могут испортить свою команду и сломать компьютер. Те, кто знает Terminal, лучше знают, что это не так - обычно Terminal просто выдаст ошибку. Но есть ли на самом деле команды, которые сломают ваш компьютер?
48
Ответы:
Один из способов сбить компьютер - запустить так называемую вилочную бомбу .
Вы можете выполнить его в Unix-системе:
Это команда, которая будет рекурсивно запускать процессы до тех пор, пока ОС не станет настолько загруженной, что больше не будет реагировать на какие-либо действия.
источник
;
a,&
и вы получите возможность удалить все файлы и ответную бомбу одновременно, и посмотрите, что первым сломает систему!Не уверен, что вы имеете в виду по поводу «сбоя» компьютера - если вы перефразируете его словами «сделать компьютер непригодным для использования», тогда да. Конечно, все, что нужно, - это единственная случайная команда - просто момент, когда вы не думаете четко о том, что вы делаете, подобно тому, когда вы говорите, не задумываясь, и ущерб может быть огромным и почти мгновенным. Классический пример:
Если вы дадите этой команде выполнить хотя бы одну секунду, это может стереть достаточно с вашей системы, чтобы сделать ее не загружаемой, и, возможно, привести к необратимой потере данных. Не делай этого.
источник
-r
означает рекурсивное удаление файлов в каталоге.-f
означает «принудительно», как «не запрашивать подтверждение», независимо от прав доступа к данному файлу./
является корневым каталогом файловой системы, что означает, что она уничтожит все и вся, кроме, возможно, некоторых специальных файлов, которые не ведут себя как типичные файлы. Кроме того, вам будет довольно сложно найти краткую команду, которая приведет к краху вашей системы без прав root / admin.rm -rf /
некоторое время назад, иrm
сказал, что если вы хотите удалить root, то используйте такой-то флаг. Данные не были потеряны. Похоже, сейчас есть защита от слепого бегаrm -rf /
.rm -rf
действительно похожее на юридическое, которое пошло совсем не так: /Предположим, вы не знаете, что делаете и пытаетесь сделать резервную копию жесткого диска
Хорошо, если вы смешаете их (переключитесь, если и из), он перезапишет свежие данные со старыми данными, без вопросов.
Подобные путаницы могут случиться с утилитой архива. И, честно говоря, с большинством утилит командной строки.
Если вам нужен пример смешивания одного символа, который приведет к краху вашей системы, взгляните на этот сценарий: вы хотите переместить все файлы в текущем каталоге в другой:
Давайте примем тот факт, что вы научились использовать
./
для обозначения текущего каталога. (Да) Хорошо, если вы пропустите точку, она начнет перемещать все ваши файлы. Включая ваши системные файлы. Тебе повезло, что ты этого не сделал. Но если вы где-то читаете, что с помощью 'sudo -i' вам больше никогда не придется вводить sudo, то вы вошли в систему как пользователь root. И теперь ваша система пожирает себя на ваших глазах.Но опять же я думаю, что такие вещи, как перезапись моих драгоценных файлов кода мусором, потому что я испортил один символ или из-за того, что я перепутал порядок параметров, создают больше проблем.
Допустим, я хочу проверить ассемблерный код, который генерирует gcc:
Предположим, у меня уже была программа.s, и я использую завершение TAB. Я спешу и дважды забываю:
Теперь у меня есть код на ассемблере в моем program.c и больше нет кода на c. По крайней мере, для некоторых это реальная неудача, а для других - время начала с нуля.
Я думаю, что это те, которые принесут реальный "вред". Мне действительно все равно, если моя система падает. Я бы позаботился о том, чтобы мои данные были потеряны.
К сожалению, это ошибки, которые нужно будет сделать, пока вы не научитесь пользоваться терминалом с надлежащими мерами предосторожности.
источник
gcc program.c -o program.c
именно благодаря завершению вкладки. После этого я научился религиозно использовать контроль версий.Причинение паники ядра более похоже на сбой, чем другие ответы, которые я видел здесь до сих пор:
(код взят здесь, а также найден в собственной документации Apple )
Вы также можете попробовать:
Я не проверял, что второй там действительно работает (и я не собираюсь этого делать, потому что сейчас у меня действительно есть работа).
источник
No matching processes were found
dtrace: system integrity protection is on, some features will not be available
dtrace: description 'BEGIN' matched 1 probe
dtrace: could not enable tracing: Permission denied
dtrace
было эффективно кастрировано SIP.kernel_task
это не нормальный процесс. Это бессмертно; Его нельзя убить, кроме как из-за собственной ошибки (которая называется KP и приводит к поломке всей машины).kernel_task
PID номинально равен 0, но если выkill(pid, sig)
передадите его системному вызову, на странице руководства будет указано, что еслиpid
равно 0, тоsig
отправляется каждому процессу в группе процессов вызывающего процесса. , Таким образом, вы просто не можете отправитьkernel_task
сигнал.Современные macOS сильно затрудняют сбой вашей машины как непривилегированного пользователя (то есть без использования
sudo
), поскольку системы UNIX предназначены для работы с тысячами пользователей, не позволяя ни одному из них разрушить всю систему. Так что, к счастью, вам, как правило, нужно будет запросить, прежде чем делать что-то, что разрушает вашу машину.К сожалению, эта защита относится только к самой системе. Как показывает xkcd, есть множество вещей, которые вас волнуют, и которые не защищены защитой целостности системы, привилегиями root или запросами пароля:
Итак, вы можете набрать массу вещей, которые просто разрушат вашу учетную запись пользователя и все ваши файлы, если вы не будете осторожны. Несколько примеров:
rm -rf ${TEMPDIR}/*
, Это кажется вполне разумным, пока вы не поймете, что переменная среды записанаTMPDIR
.TEMPDIR
обычно не определено, что делает этоrm -rf /
. Даже безsudo
этого, это удачно удалит все, на что у вас есть разрешения на удаление, которые обычно включают всю вашу домашнюю папку. Если вы позволите этому работать достаточно долго, он также будет уничтожен на любом диске, подключенном к вашей машине, так как у вас обычно есть права на запись для них.find ~ -name "TEMP*" -o -print | xargs rm
,find
обычно находит файлы, соответствующие определенным критериям, и распечатывает их. Без-o
этого он делает то, что вы ожидаете, и удаляет каждый файл, начиная сTEMP*
( если у вас нет пробелов в пути ). Но-o
означает «или» (не «вывод», как это делается для многих других команд!), Заставляя эту команду фактически удалить все ваши файлы. Облом.ln -sf link_name /some/important/file
, Я иногда получаю неправильный синтаксис этой команды, и она довольно успешно перезапишет ваш важный файл бесполезной символической ссылкой.kill -9 -1
убьет все ваши программы, довольно быстро выйдет из системы и, возможно, приведет к потере данных.источник
find
есть-delete
аргумент, который намного безопаснее, чемxargs rm
ln -sf
может нанести ... и как оправиться от него :-)find -print0 | xargs -0
для безопасной обработки странных символов в именах файлов.<whatever> | xargs echo <something>
сначала используйте , чтобы просмотреть, какие команды на самом деле будет запускать xargs. xargs является отличным примером того, почему CLI настолько мощен: вы можете работать со многими, многими элементами одновременно без надоедливого подтверждения и ручного удержания ... просто убедитесь, что вы говорите ему делать то, что вы хотите.Еще одно, что вы можете сделать (что я сделал по ошибке раньше):
Это сделает всю вашу файловую систему (что означает все команды и программы) недоступными ... кроме как пользователю root. Это означает, что вам нужно будет войти в систему напрямую как пользователь root и восстановить файловую систему, НО вы не можете получить доступ к
sudo
команде (или любой другой команде, в этом отношении). Вы можете восстановить доступ к командам и файлам, загрузившись в однопользовательском режиме, смонтировав и восстановив файловую систему с помощьюchmod 755 /
.Если это делается рекурсивно,
chmod -R 0 /
то это сделает систему непригодной для использования. Надлежащим решением на этом этапе является использование Дисковой утилиты из раздела восстановления для восстановления прав доступа к диску . Вам может быть лучше просто восстановить снимок или резервную копию вашей файловой системы, если это было выполнено рекурсивно.источник
chmod 755 /
оставит вашу систему небезопасной и сломанной тонкими способами. Единственное полное восстановлениеchmod 0 /
- через восстановление моментального снимка, восстановление резервной копии и / или переустановку.-R
флаг - поэтому я подумал, что разрешения подкаталогов не будут затронуты?/
влияет только на нее .sudo chmod -R 700 /
приобрел новый компьютер, полагая, что это будет намного безопаснее, если я сделаю это. Удивительно, но он загрузился и закончился пустой строкой меню и пустым рабочим столом. Ничто другое не сработало, но разрешения для восстановления дисковой утилиты раздела восстановления фактически позволили установить почти все правильно!Ответы на этот звонок
sudo
следует считать недействительными. Они уже предполагают административный доступ к системе.Попробуй
perl -e 'exit if fork;for(;;){fork;}'
. OSX может иметь некоторую защиту от этого сейчас. Если есть яблочный пузырь, спрашивающий, хотите ли вы прекратить приложение терминала и подпроцессы, вы (почти) хороши.while true ; do cat /dev/zero > /dev/null & done
тоже очень удобно, особенно если у вас нетperl
.for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
просто сделаю небольшой забавный тест загрузки процессора. Очень хорошо подходит для проверки, соответствуют ли ваш радиатор и вентилятор.источник
Конечно, убедитесь, что у вас есть резервная копия и сохраните все файлы, которые вам нужны, затем введите
halt
Предполагая, что вы затем используете
sudo
root, Mac рухнет.Самый большой риск из командной строки - потеря данных. Интерфейс macOS разработан на протяжении десятилетий, чтобы не удивлять людей и не уничтожать их данные, настройки или приложения. Графический интерфейс macOS также существует для удаления кривой обучения (крутой) к безопасности и освоения сценариев оболочки.
Вы теряете эти средства защиты, поэтому я предупреждаю людей, начинающих с терминального приложения или ssh. Если у вас есть резервная копия, которая, как вы знаете, работает, и у вас есть время, уверенность / умение выполнить восстановление, вам следует погрузиться в нее, изучить и даже сломать вещи.
источник
Я случайно выполнил
kill -9 -1
Perl-скрипт, работающий от имени пользователя root. Это было так же быстро, как тянуть за шнур питания. При перезагрузке сервер произвел проверку файловой системы и продолжил работать должным образом.Я никогда не пробовал эту
sudo kill -9 -1
команду в командной строке. Это может не сработать, потому что идентификатор процесса «-1» означает «убить все процессы, принадлежащие группе процессов вызывающего».Не уверен, что если с sudo, это также означает init и все ядро ... Но если вы являетесь пользователем root,
kill -9 -1
определенно сделаете немедленную остановку - точно так же, как отключение шнура питания. Кстати, в лог-файлах ничего не появится, потому что эта команда - самый быстрый убийца на западе!Собственно, чтобы прийти в себя, я пошел к нашим сисадминам и рассказал им, что я сделал. Они сделали полную перезагрузку, потому что не было возможности войти на этот сервер (RHEL6).
A
kill -9 -1
как root убивает каждый процесс, который запускается как root. То есть то есть sshd. Это сразу же вышло из системы и не позволило никому войти снова. Любой процесс, запущенный init, включая init, был убит, если они не изменили UID или GID. Даже вход через последовательную консоль больше не был возможен.ps -eaf | grep root
показывает некоторые причудливые процессы, которые, если они реагируют на SIGKILL по умолчанию, в значительной степени остановят даже простую запись в HD.Я не буду пробовать это сейчас на своем ноутбуке :-) Я не достаточно любопытен, чтобы узнать, действительно ли
kill -9 165
([ext4-rsv-convert]) перестанет писать на HD.источник
init
нормально убить , но вы можете убить все сессии gettys и SSH и сделать машину непригодной для использования. Магия SysRq должно было позволить для чистой перезагрузки, но это часто бывает проще всего отключить питание и полагаться на журнал FS :)Да, вы можете полностью разрушить вашу систему. Случайное выполнение чего-то с
sudo
привилегиями является одним из примеров, который был опубликован, будь то забывание нескольких символов, которые инструктируют терминал делать что-то совершенно другое, чем вы предполагали.rm
ing/
вместо вместо/tmp/\*
5 символов. Поместив пробел в неправильном месте, можно сделать что-то совершенно другое. В других случаях, казалось бы, в инструкциях с хорошим смыслом может быть скрыт вредоносный код. Некоторые люди в Интернете очень хорошо запутывают код.Есть также команды, которые, используя html, могут сделать шрифт нулевого размера, так что при копировании в буфер обмена что-то совершенно безобидное может фактически установить чье-то git-репо в качестве надежного источника и загрузить вредоносное ПО.
И есть команды, которые вы можете запускать, которые открывают вас для использования, или которые могут быть совершенно правильными, но удаляют важные файлы или программы или повреждают ваш диск. На самом деле, неправильное использование инструментов может сделать что-то столь же простое, как случайная запись в загрузочный сектор или на верхнюю часть диска, или множество других проблем.
Примером чего-то менее разрушительного, что не было опубликовано, является открытие двоичных файлов в
vi
. Если вы когда-либо пробовали это, вы будете знать, что он может испортить ваш терминал до такой степени, что он будет непригоден до тех пор, пока он не будетreset
.В качестве альтернативы, есть команды, которые будут тормозить вашу машину, например:
Вы можете попробовать это, он не будет наносить урон, но затормозит ваш процессор, и вам придется убивать каждый процесс, который вы породили.
При этом в вычислительной технике принято считать, что вы не можете приготовить омлет, не разбив несколько яиц. Вы должны быть осторожны в терминале, но единственный способ стать лучше в использовании ОС - это учиться и практиковаться.
источник
reset
, это должно очистить терминал, на котором был напечатан двоичный вывод. или простоreset
трюк! Для получения дополнительной информации: unix.stackexchange.com/questions/79684Я только новичок в bash, но вы могли бы немного установить True; сделать КОМАНДУ; сделанный; Большинство людей попробуют Ctrl + C, который остановит команду, а не внешний процесс (ctrl + Z, который затем необходимо убить). Я предполагаю, что если команда - это какая-то тяжелая операция, например умножение большого числа на собственную мощность, это может испортить ваши ресурсы. Но на самом деле современные ОС обычно защищены от такого беспорядка.
источник
while true do cat /dev/zero > /dev/null & done
^C
также убьет цикл while, но он просто повторяется слишком быстро, чтобы прерывание было перехвачено. Удерживание^C
может вырваться из петли. Закрытие терминала тоже будет :)Конечно, вы все еще можете вызвать сбой системы с помощью команд, введенных с помощью терминала.
С годами становится все труднее, вероятно, из-за всевозможных ограничений и применяемых защитных мер, но, как утверждает закон Мерфи: «Ничто не может быть надежным для достаточно способного дурака».
«Вилочные бомбы» и все, что
rm -rf
связано с детскими сценариями - это древние вещи, известные для UNIX. С Mac OS X вы можете получить больше удовольствия от использования его частей подсистемы GUI (WindowServer
чтобы упомянуть) или чего-то вроде брандмауэра OpenBSD, известногоPF
как инженеры Apple, которые не смогли обновить с момента своего 2008 года.PF
работает в ядре, поэтому, когда он улавливает причуду, Apple сообщает вам « вы перезагрузили компьютер из-за паники» или что-то в этом роде.Хуже всего то, что вы никогда не сможете понять, почему это панически - почему Apple не предоставляет никаких значимых следов стека; Вы можете иметь только шестнадцатеричные числа адресов возврата стекового фрейма.
источник
Это немного двусмысленно, что вы подразумеваете под "сбой" вашего компьютера ... и нет однозначного правильного ответа на это, хотя в других ответах есть несколько полезных примеров. Поскольку ваш вопрос более двусмысленный и общий, я хотел бы сосредоточиться на природе вопроса и дать более общий ответ.
Я думаю, что командная строка - обоюдоострый меч, и часто очень острый. Его самая сильная сторона - это также самая большая слабость для новых пользователей: программы CLI делают то, что вы говорите, не спрашивая, действительно ли это то, что вы имели в виду. Они часто не просят подтверждения, они не предоставляют ручную или интерактивную помощь, и их варианты являются короткими, часто краткими, иногда сбивающими с толку текстовыми строками. Обратите внимание, что они, как правило, очень хорошо документированы, нужно просто прочитать руководство (которое почти всегда
man <command you are about to run>
) и потратить время, чтобы понять, что будет делать командная строка, которую они собираются запустить.Этот режим работы является мощным - это означает, что опытные пользователи CLI могут создавать длинные командные «конвейеры», которые выполняют сложные задачи с помощью одной команды. Это потому, что задача не спросит "Вы уверены?" на каждом шагу он делает то, что ему говорят. Но для пользователя, незнакомого с этим режимом и привыкшего к графическому интерфейсу, где онлайн-справка находится на расстоянии одного клика , это незнакомо и страшно.
Можете ли вы «разбить» свой компьютер с помощью CLI? Может быть. Безусловно, вы можете вызвать потерю данных, если неправильно используете деструктивную команду. Например, многие ответы здесь упоминают
rm
, команда, которая удаляет файлы. Очевидно, что с помощью этой команды вы можете потерять данные, это то, для чего команда была предназначена.Как указывалось в других ответах, вы можете использовать командную строку, чтобы сделать вашу машину практически неработоспособной в течение определенного периода времени: вы можете завершить работу без подтверждения, заставить процесс использовать 100% доступных ресурсов без подтверждения, убить все ваши программы или уничтожить вашу файловую систему. Если вы действительно хотите, вы можете использовать CLI для создания расширения ядра, которое вызывает панику ядра (что наиболее близко к «краху», о котором я могу думать).
Командная строка (доступ через Терминал) является мощным инструментом. Часто решить проблему с помощью терминала быстрее, чем с графическим интерфейсом. Некоторые решения доступны только с использованием команд терминала. Тем не менее, ключом к CLI является понимание . Не выполняйте случайные команды, которые вы видите онлайн. Прочитайте справочные страницы и поймите, что делают команды. Если вы не уверены, спросите кого-нибудь или узнайте больше о команде перед ее выполнением.
источник