Самая большая ошибка командной строки? [закрыто]

35

Какой самый большой ущерб (любого рода) вы когда-либо наносили с помощью одной ошибочной / опечатки / ошибочной командной строки? Например, некоторое время назад я по ошибке удалил базу данных производственной системы, но мне повезло (т.е. я сделал резервную копию), и не было постоянной потери данных, потерянных денег, повреждения имущества и т. Д.

Самое главное (для голосов), что вы делаете, чтобы быть уверенным, что это больше никогда не повторится?

Марк Хендерсон
источник
9
Поскольку это опрос, он должен быть CW
Эдди
Тогда почему опросы не CW по умолчанию?
Люк
4
Как они должны знать, что это опрос программно?
Mikeage
1
Если механизм такой же, как у SO, даже если вы можете редактировать вопрос, вы не можете изменить его на CW. Только ОП или модератор может сделать это.
хаос
9
Хорошая идея - опубликовать свою самую разрушительную ошибку публично в Интернете, чтобы ее увидели все будущие работодатели! :)
Сэм Шютте

Ответы:

46

На сервере SQL в производственной системе:

update customer set password = '' <enter>

Самая последняя резервная копия была похожа на недельную.

Чтобы смягчить это, я теперь обычно пишу selectинструкцию сначала, чтобы убедиться, что я whereправильно понял предложение, затем возвращаюсь и редактирую его, чтобы вставить setпредложение и изменить инструкцию на update.

Грег Хьюгилл
источник
11
Уч. Другим вариантом будет «НАЧАЛО СДЕЛКИ»; приятно знать, что ты можешь откатиться назад. :)
Мурали Суриар
5
Комбинация из двух, выберите count (*), чтобы увидеть, сколько я думаю, я буду обновлять, а затем обновить в транзакции, чтобы сделать обновление. Если количество совпадений соответствует фиксации, если нет отката и выясните, почему. Конечно, я делаю это не для «простых» обновлений, и это всегда те, которые вас бесят. :-)
WaldenL
Виновный, я сделал это сам :(
Джим Охаллоран
8
Будьте осторожны с BEGIN TRANSACTION в действующей системе (или в тестовой системе, используемой другими пользователями) - убедитесь, что вы выполняете COMMIT или ROLLBACK в ближайшее время, иначе вы можете в конечном итоге заблокировать другие процессы, ожидающие блокировки ресурсов, на которых транзакция удерживает блокировки.
Дэвид Спиллетт
В некоторых системах вы можете сделать; быть идентификатором завершения выписки вместо <enter>
Дж. Полфер
37

Самая большая ошибка? Думая, что я установил две переменные, когда я не сделал. Таким образом, rm -rf $ VARIABLE / $ VARIABLE2 стал rm -rf /. FreeBSD недавно обновила свой инструмент rm, так что rm -rf / больше не возможен именно из-за этой ошибки!

X-Istence
источник
4
Я хотел бы отметить, перечитывая мое предложение, звучит так, будто я был причиной изменения способа работы rm, но это не так. Очевидно, что люди использовали rm в скриптах, и произошло то же самое, и они хотели добавить отказоустойчивость.
X-Istence
3
тогда я заберу свой голос :)
Колин Пикард
Однажды я видел, как парень делает rm -rf / usr / local / junk ... Я видел это, но не вовремя, чтобы не дать ему войти.
Satanicpuppy
А как насчет «rm -rf / *» вместо «rm -rf /»? Я понятия не имею, как это выглядит на BSD сейчас, но должно работать;)
Ryszard Stawiarski
26
shutdown -h now 

предназначен для локальной рабочей станции, но набрал его при входе в систему через ssh на производственном сервере. С тех пор у меня всегда есть имя хоста в моем $PS1.

Vartec
источник
По крайней мере, вы, вероятно, не потеряете никаких данных ...
Zifre
Правда, но это было действительно очень давно, ни IPMI, ни KVMoIP там еще не пользовались популярностью. Нам нужно было связаться с техником, чтобы пойти туда и щелкнуть выключателем.
vartec
4
Проверьте Молли-охранник ( packages.debian.org/search?keywords=molly-guard )
Дэвид Холм
Даже на местных рабочих станциях я всегда использую «+1» на всякий случай.
msanford
3
Раньше я указывал имя хоста в приглашении, но теперь я пропатчил команды shutdown (и связанные с ним - halt et al), чтобы предложить мне ввести имя текущего компьютера, прежде чем оно выполнит команду. Это дает мне дополнительный шаг, необходимый для понимания того, что я просто отключил не тот сервер. Проблема в том, что после того, как я применил этот патч, я никогда не делал его снова, но он спас некоторых моих коллег, хотя :)
Moo
26

Пропуск -r из команды выключения. На удаленном сервере. На другой стороне страны. Без ИТ-персонала в удаленном офисе.

Мы все сделали это, это почти как обряд на данном этапе.

Максимус Минимус
источник
25

В системе VMS я использовал команду ASSIGN DCL для назначения логических имен, и я хотел ВЫЗВАТЬ предыдущую командную строку ASSIGN. Теперь в VMS вы только набрали столько символов команды, чтобы сделать ее однозначной. Поэтому я намеревался напечатать

REC ASS

но я случайно набрал

REQ ASS

вместо. REQ был достаточно недвусмысленным для команды REQUEST, которая транслирует аргумент всем, у кого есть привилегии оператора (который был у всех в IT). Таким образом, весь отдел получил мое широковещательное сообщение, которое было просто «ASS».

Kevin
источник
Веселый :-) :-)
Людвиг Вайнцерль
1
Все программное обеспечение отстой, как мы все знаем. Почему кто-то в ИТ должен думать, что это означает что-то еще?
Адриано Вароли Пьяцца
24

В системе Solaris: «killall dataLoader».

'dataLoader' был приложением, над которым я работал. В Linux killall работает как pkill. Он отправляет сигнал процессам, которые соответствуют строке, заданной в качестве аргумента. В Solaris killall пытается уничтожить все, что в системе может убить текущий пользователь. Я был root.

оборота кбырд
источник
был там, сделал это ...
Джеймс
2
Я сделал то же самое две недели назад в системе Power 5 AIX 6 ... Хорошо, не совсем, я сделал "killall -9 java" :)
Андор
3
@ Андор: Ну, ты убил javaнаверняка. ;)
Бобби
16

Однажды, много, много месяцев назад, мне нужно было найти конкретный исполняемый файл, но я не мог вспомнить его полное имя (но мог запомнить несколько букв). Поэтому я решил проверить каталог / usr / bin примерно так

rm /usr/bin/i*g*

Странный. Ничего не вернулось Поняв, что я только что неправильно запомнил второе письмо, я попытался снова

rm /usr/bin/i*

Опять ничего. После того, как я проделал то же самое с / usr / local / bin, / usr / sbin и всем остальным, что, как я предполагал, могло быть, я понял, что неправильно набрал команду 'ls'.

Не совсем знаю, откуда взялся этот мозг, но это определенно не та ошибка, которую я когда-либо совершал снова.

goldPseudo
источник
Это то, что нужно знать при повторном использовании путей, таких как, скажем, ls / etc / кое-что, Ctrl + r, Ctrl + a, Del, Del, cat, Enter.
Алекс
8
Даже на моем сервере это ничего не возвращает.
Мирча Вутцовичи
16
setup.exe

Это была Windows Vista.

Даже Миен
источник
16

Попытка изменить владельца всего в каталоге, включая точечные файлы, с помощью:

chown -R user * .*

Угадай, что это делает?

хаос
источник
10
читать почту - действительно быстро ???
Wiren
5
Там это очень хорошо научило меня. [^.] *
Мацей Пастернацкий,
1
@chaos: Команда, кажется, удаляет все в вашем текущем каталоге и даже точечные файлы
Léo Léopold Hertz 준영
2
@chaos: это не удаляет .. и никогда не имеет и никогда не будет. Вы просто ошибаетесь. Пожалуйста, приведите одну реализацию Unix, которая имеет такое поведение (которую я никогда не видел и которая задокументирована, чтобы не быть поведением даже супер-античных юниксов, таких как Unix 7-го издания).
Крис
1
Будет ли ./.* предотвратить это, или он все еще будет распространяться обратно в дерево каталогов через ./../?
tj111
15

Предназначенный для уничтожения / dev / sdb, к счастью, у меня была хорошая современная резервная копия

dd if=/dev/urandom of=/dev/sda
Zoredache
источник
Сделал это один раз (за исключением / dev / zero), уничтожил корневой раздел сервера Linux, восстановив его, скопировав все обратно с идентичного сервера.
Мариус Гедминас
14
select * from <File1> join <file2>

На производственной коробке. Обратите внимание на отсутствие onпункта. :-) Обе таблицы были многомиллионными таблицами строк, и это было на AS / 400 в середине 90-х, когда после запуска SQL вы не могли его убить.

WaldenL
источник
14

На одном из наших серверов производства данных один из моих корней набрал:

chmod -R 777 /

Потому что он получал ошибку разрешений с некоторыми сценариями ...

Вскоре после этого его закрытый ключ был удален со всех серверов, и он позаботился о восстановлении данных объемом 1 ТБ на сервере производства данных ...

октябрь
источник
12

Мой любимый был когда я был в университете. Я создавал приложение (я не помню, что) и, поскольку я не был пользователем root, я создал его с

PREFIX=~username/usr/local

Так что я мог установить его в свой домашний каталог. К сожалению, это установлено в

/home/username/src/app/~username/usr/local

вместо. Естественно, чтобы удалить его, как начать снова я выполнил

rm -rf ~username

В исходном каталоге.

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

:-)

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

sys-unconfig

Согласился с предупреждением и вместо перезагрузки машины и возврата к «заводским настройкам» в окне xterm просто сказано

connection closed by foreign host.

Мораль истории Никогда не оставляйте открытую корневую оболочку на другом хосте! КОГДА-ЛИБО!!

оборота Вагнерр
источник
Я иду на имя хоста в PS1, сам. В какой-то момент я использовал разные цвета для локального и удаленного входа (а также разные цвета для пользователя / root).
Мариус Гедминас
12

Много лет назад я был дома, кодировал некоторые вещи в php, работая над проектом с моим приятелем, который был сопровождающим проекта. Мы общались друг с другом в совместной работе. Мы всегда подшучиваем в игре.

Я пытался заставить ssh-agent нормально работать на моей машине, когда у нас была религиозная война Perl против PHP. Затем я упомянул кое-что о ssh-agent, который необходимо оценить (не знаю, почему я так сказал). Затем он послал мне это сообщение, чтобы я решил помочь мне с моей проблемой (имейте в виду, что мне нужно было болеть):

\# eval $(echo ssh-agent | 
perl -pe 's/h-a/m -r/' | 
perl -pe 's/^ss/r/' | 
perl -pe 's/gent/f \//')

ПРЕДУПРЕЖДЕНИЕ! НЕ ПРОПУСТИТЕ ЭТУ КОМАНДУ !!!

Если вы удалите eval и запустите внутреннюю команду, то это:

rm -rf /

Мне потребовалось всего 4 секунды, чтобы заметить, что происходит, но ущерб уже был нанесен. Мне пришлось переустановить мою ОС. К счастью, ничего из моей работы не было уничтожено, за исключением некоторых вещей в / etc iirc. У него был ОГРОМНЫЙ смех, когда я послал ему сообщение ужаса, спрашивающее, почему он это сделал. Мы оба долгосрочные системные инженеры. Он не думал, что я запустил бы его, и будет более осторожным, чтобы проверить это, прежде чем просто зайти, и я просто доверял ему, поэтому даже не думал, что он играет. Излишне говорить, что эта маленькая история все время возникает между нами. Итак, я решил увековечить это.

Как я смягчила это случиться снова? Я никому не доверяю!

Еще одна менее интересная история - пару лет назад я работал над критическим блоком на работе. У меня было несколько терминов, открытых для другой машины. Мне нужно было удалить некоторые лишние вещи в каталоге. Ну, я заблудился в своих терминах и случайно позвонил . в моем местном каталоге, но не на том хосте (неправильный термин) !! Я выполнил команду в / var / lib / mysql вместо / tmp на сервере приложений (другой термин). Излишне говорить, что я уничтожил производственную базу данных. К счастью, у нас был теплый резерв, к которому мы обратились, пока я и коллега восстановили основной из резервных копий и резервного. Это заняло около 18 часов.

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

Cloaked1
источник
На работе мы все настроили .bashrc всех наших серверов для отображения имен пользователей в bash уникальными цветами. Таким образом, вы всегда в одно мгновение видите, на какой машине вы находитесь. (Хорошо, это может стать проблемой, когда вы управляете более чем 20-30 машинами ... Но все еще очень удобно.)
fgysin восстанавливает Monica
+1 за доверие никому.
Уэйн Вернер
11

короткая версия

#/bin/bash
$0&
$0
BCS
источник
для чего это стоит, если вы когда-нибудь сделаете это не как root, запуститеkill -9 -1
BCS
3
что это делает?
Натан Девитт
6
Он называет себя в фоновом режиме, чем потом, не дожидаясь его завершения, снова называет себя: aka Fork Bomb
BCS
2
@ Маси: Нет, если компьютер достаточно быстрый, а сценарий достаточно длинный. Специально, если вы не знаете, что это произойдет.
Вояджер
3
Бросьте #!/bin/bash, и я думаю, что это выиграет кодовый гольф для самой короткой вилки в bash.
Джои Адамс
11

Я когда-то хотел удалить кучу файлов в каталоге.

del *.*

Затем компьютер сказал: «Вы уверены? [Y / N]» Я подумал: «Конечно, я уверен, я бы не набрал команду darn! В противном случае тупые компьютеры ворчат …»

Y <enter>

C:\Windows>_

Хм ... WTF? Я только что стер мой каталог Windows? ....

undelete *.*

В те времена маленьких жестких дисков я знал, для чего нужен каждый файл в c: \ windows и как его называли, но даже после удаления всего, система никогда не была прежней. Я получил немного уважения к подсказке «ты уверен». Немного.

Мистер Блестящий и Новый 安 宇
источник
1
Однажды я сделал то же самое. Я получил систему для загрузки и запуска снова, но она никогда не была совершенно права снова. Я перестроил систему примерно через неделю.
Джим Охаллоран
11

Я думаю, что самой глупой вещью, которую я когда-либо делал, было удаление маршрута по умолчанию для внешнего кластера брандмауэра, обращенного к внешнему устройству, при этом он был подключен к моему рабочему столу на расстоянии более ста миль.

К счастью, это было в период, обозначенный как запланированное время простоя (на всякий случай), но это не спасло меня от 200-мильной поездки туда и обратно и изменения конфигурации межсетевого экрана на месте. Также не помогло то, что это уничтожило наши производственные системы, работающие в Интернете, на время моего путешествия и последующего исправления.

Мы все знаем определение нано-секунды. Оно-секунда еще меньше, и это время между нажатием «enter» и пониманием вашей ошибки.

Iain
источник
11

Первый из двух ...

На коробке Solaris у нас была резервная копия tar на машине AIX.

Один из разработчиков набрал:

tax xvf AIX_Backup.tar

Конечно, пути в налоге были абсолютными, и в итоге мы создали новый дистрибутив unix ... Solarix ... Единственная проблема с дистрибутивом в том, что он не загружался :(

Брайан Дж.
источник
10

История сказала мне:

Вызван другой филиал, потому что у их местной АТС были некоторые проблемы После некоторого расследования мы узнали, что они обновили свой сервер, но не свою конфигурацию Asterisk. Итак, администратор решил поручить парню из филиала переделать конфигурацию.

Администратор: «Хорошо, теперь введите rm -rf / etc / asterisk»

Парень: Хорошо.

Администратор: «Теперь введите cp / var / ...»

Парень: «Подождите, он все еще работает ...»

Админ: ??? ... !!!

Жулиано
источник
1
Если что-то может пойти не так, это пойдет не так.
Джои Адамс
9
rm -rf / some/path 

вместо того

rm -rf /some/path 

К счастью, со мной этого не случилось ;-)

vartec
источник
случилось с моим одноклассником недавно. К счастью, это было только с / etc / some / other / path
Ikke
Это должно быть отключено! Я думаю, что теперь он отключен во многих ОС. Слишком боюсь попробовать, на Ubuntu rm -rf /
Лакшман Прасад
На самом деле, это было бы опасно для системы только с sudo rm -rf /
voyager
Был там, сделал это ...
fgysin восстановить Монику
9
source ~/.bash_history

Моим намерением был исходный код .bashrc, но я слишком торопился с завершением табуляции ...

Дейв Pretty
источник
+1: это потрясающе.
Satanicpuppy
8

Что-то вроде этого:

sudo dd if=/dev/zero of=/dev/sda

Я имел в виду sda4. Я вытер весь диск, а не только раздел :-(

Zifre
источник
был там .
Мистер Блестящий и Новый
8

XCOPYэто мощный зверь, беспощадный в своем исполнении и замедленный тем, что его аргументы командной строки идут в обратном направлении от окон COPYи UNIX cp.

Пару дней назад я случайно написал:

xcopy src \path\to\a\new\nonexistent\directory

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

Ох, и получается, что на XCOPYсамом деле перезаписывают одни и те же сектора на диске вместо выделения новых. Я пробовал 3 программы восстановления дисков, и лучшая из них могла восстановить только 3 из 10 потерянных файлов. Конечно эти 3 файла были только vshost.exeи его приятели. Зыбь!

Фрэнк Крюгер
источник
8

были проблемы с сетью (на удаленной машине) и просто хотел перезагрузить интерфейс

ifconfig eth0 down && ifconfig eth0 upp

В настоящее время я проверяю, что кто-то находится рядом с машиной, прежде чем пытаться делать подобные вещи (iptables также является хорошим кандидатом). И когда там никого не было, я однажды набрал

sleep 600; reboot

в другой (экранный) терминал, чтобы он перезагрузился, если бы я не смог Ctrl + C команда в течение 10 минут.

Я также учился на этой ошибке (Ctrl + C сон будет запускать перезагрузку), и теперь я использую

sleep 600 && reboot

что позволит мне Ctrl + C это.

Михи
источник
1
shutdown -r +5перезагрузит систему через 5 минут, если вы, например , не завершите shutdownпроцесс killall shutdown.
Gelraen
1
Я могу просто увидеть администратора, который совершает ошибку Михи при Солярисе, а затем (учась на этой ошибке) пробует альтернативу Гельрена.
outis
8
ifconfig eth0 down

Ой, я на внешней стороне eth0. Веб-сервер находится на другой стороне мира, в закрытой комнате. Без доступа к сети для входа или перезагрузки. Дерьмо.

косяк
источник
6

Бесплатный cookie для любого, кто может сказать мне, почему я был идиотом за попытку удалить все скрытые файлы и каталоги таким образом:

rm -rf. *

Мэтт Симмонс
источник
1
Удаляет ли ваша команда подкаталоги ниже вашей текущей директории?
Лео Леопольд Герц 준영
Интересно , если ваш шаблон , соответствующий ..жесткую
Мирча Vutcovici
Кстати, вы оба выигрываете куки :-)
Мэтт Симмонс
6

При очистке домашней папки на рабочем веб-сервере я забыл, что я поместил символическую ссылку веб-корня сервера в место в моей домашней папке. Не думая, я запустил rm -rf в этой папке, и следующее, что я знаю, люди звонят, что веб-сайт не работает!

OOPS!

nabrond
источник
5

Однажды я сравнивал данные в двух папках и запустил rsync с опцией -d (удалить файлы в месте назначения, которых нет в источнике). Затем я переключился между источником и местом назначения, когда запустил rsync. Это удалило все новые файлы, которые я хотел сделать резервную копию. Теперь я научился запускать rsync с -n (всухую).

rsync -trvd --stats --progress /destination /source

У меня не было резервной копии.

dpzeh
источник
4

Когда-то давно (возможно, System III, но это было очень давно), было возможно создать файл с именем *, используя правильное цитирование оболочки. Когда я нашла один в своем домашнем каталоге, я набрала rm *и положила палец на клавишу возврата, когда что-то заставило меня задуматься и подумать об этом ...

Создание такого файла для других пользователей было обычной шуткой.

Если файл находится там, в каталоге, это трудно исправить. Рефлекс, чтобы просто ввести его имя в точности так, как он lsтолько что отображался, довольно сильный.

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

RBerteig
источник
2
Вот для чего нужны графические интерфейсы :)
Zifre
1
Завершение оболочки - это экономия времени для этих файлов в конце пространства :)
Mr. Shiny and New 安 安
1
Это было бы ок. 1985, и доступ через коммутируемый доступ или через кабель RS-232 от клона терминала VT-100. Не эмулятор терминала, а реальный терминал. Я не помню, чтобы у csh было завершение имени в то время ... ;-) Сегодня, конечно, GUI и завершение имени делают оба этих способа менее рискованными, а многие ОС усложняют создание таких файлов, не прибегая к редактирование сектора диска ....
RBerteig
коснитесь ./-- помогите, тогда ни rm --help, ни rm * не будут работать ...
mihi
Вы по-прежнему можете создать файл с именем , по крайней мере, в Linux: «touch » ». И "rm '*'" также работает ...
sleske 15.09.09
4

Из-за некоторого плохого опыта с общей ошибкой JBoss после перезапуска мне нравится очищать рабочие файлы JBoss перед перезапуском. Я бы обычно делал:

# cd /var/cache/jboss
# rm -rf tmp/* work/*

Чтобы защитить себя от ввода любой из множества возможных катастрофических ошибок, таких как:

  • / TMP / *
  • tmp / *
  • вы поняли идею

Я делаю последнюю команду:

# sudo -u jboss rm -rf tmp/* work/*

Поскольку пользователю JBoss будет трудно удалить любые важные файлы, которые ему не принадлежат.

Я на самом деле никогда не совершал эту ошибку, но я в безопасности, если я это сделаю.

Франсиско Канедо
источник