Самая большая ошибка командной строки?
Какой самый большой ущерб (любого рода) вы когда-либо наносили с помощью одной ошибочной / опечатки / ошибочной командной строки? Например, некоторое время назад я по ошибке удалил базу данных производственной системы, но мне повезло (т.е. я сделал резервную копию), и не было постоянной потери данных, потерянных денег, повреждения имущества и т. Д.
Самое главное (для голосов), что вы делаете, чтобы быть уверенным, что это больше никогда не повторится?
81 ответ
На сервере SQL в производственной системе:
update customer set password = '' <enter>
Самая последняя резервная копия была похожа на недельную.
Чтобы смягчить это, я сейчас обычно пишу select
сначала заявление, чтобы убедиться, что у меня есть where
пункт правильный, затем вернитесь и отредактируйте его, чтобы вставить set
пункт и изменить утверждение на update
,
Самая большая ошибка? Думая, что я установил две переменные, когда я не сделал. Таким образом, rm -rf $VARIABLE/$VARIABLE2 стал rm -rf /. FreeBSD недавно обновила свой инструмент rm, так что rm -rf / больше не возможен именно из-за этой ошибки!
shutdown -h now
предназначен для локальной рабочей станции, но набрал его при входе в систему через ssh на производственном сервере. С тех пор у меня всегда есть имя хоста в моем $PS1
,
Пропуск -r из команды выключения. На удаленном сервере. На другой стороне страны. Без ИТ-персонала в удаленном офисе.
Мы все сделали это, это почти как обряд на данном этапе.
В системе VMS я использовал команду ASSIGN DCL для назначения логических имен, и я хотел ВЫЗВАТЬ предыдущую командную строку ASSIGN. Теперь в VMS вы только набрали столько символов команды, чтобы сделать ее однозначной. Поэтому я намеревался напечатать
REC ASS
но я случайно набрал
REQ ASS
вместо. REQ был достаточно недвусмысленным для команды REQUEST, которая транслирует аргумент всем, у кого есть привилегии оператора (который был у всех в IT). Таким образом, весь отдел получил мое широковещательное сообщение, которое было просто "ASS".
В системе Solaris: "killall dataLoader".
'dataLoader' был приложением, над которым я работал. В Linux killall работает как pkill. Он отправляет сигнал процессам, которые соответствуют строке, заданной в качестве аргумента. В Solaris killall пытается уничтожить все, что в системе может убить текущий пользователь. Я был root.
Попытка изменить владельца всего в каталоге, включая точечные файлы, с помощью:
chown -R user * .*
Угадай, что это делает?
Однажды, много, много месяцев назад, мне нужно было найти конкретный исполняемый файл, но я не мог вспомнить его полное имя (но мог запомнить несколько букв). Поэтому я решил проверить каталог / usr / bin примерно так
rm /usr/bin/i*g*
Странный. Ничего не вернулось. Поняв, что я только что неправильно запомнил второе письмо, я попытался снова
rm /usr/bin/i*
Опять ничего. После того, как я проделал то же самое с / usr / local / bin, / usr / sbin и всем остальным, что, как я предполагал, могло быть, я понял, что неправильно набрал команду 'ls'.
Не совсем знаю, откуда взялся этот мозг, но это определенно не та ошибка, которую я когда-либо совершал снова.
Предназначенный для уничтожения /dev/sdb, к счастью, у меня была хорошая современная резервная копия
dd if=/dev/urandom of=/dev/sda
На одном из наших серверов производства данных один из моих корней набрал:
chmod -R 777 /
Потому что он получал ошибку разрешений с некоторыми сценариями...
Вскоре после этого его закрытый ключ был удален со всех серверов, и он позаботился о восстановлении данных объемом 1 ТБ на сервере производства данных...
select * from <File1> join <file2>
На производственной коробке. Обратите внимание на отсутствие on
пункт.:-) Обе таблицы были многомиллионными таблицами строк, и это было на AS/400 в середине 90-х, когда после запуска SQL вы не могли его убить.
Мой любимый был когда я был в университете. Я создавал приложение (я не помню, что) и, поскольку я не был пользователем root, я создал его с
PREFIX=~username/usr/local
Так что я мог установить его в свой домашний каталог. К сожалению, это установлено в
/home/username/src/app/~username/usr/local
вместо. Естественно, чтобы удалить его как начать снова я выполнил
rm -rf ~username
В исходном каталоге.
Я задавался вопросом, почему это заняло так много времени....
:-)
Однако мой худший случай был, когда я работал с рабочей станцией Solaris, и после того, как все было настроено, мы хотели стереть конфигурацию, готовую для живой конфигурации. Итак, я выполнил
sys-unconfig
Согласился с предупреждением и вместо перезагрузки машины и возврата к "заводским настройкам" в окне xterm просто сказано
connection closed by foreign host.
Мораль истории Никогда не оставляйте открытую корневую оболочку на другом хосте! КОГДА-ЛИБО!!
Много лет назад я был дома, кодировал некоторые вещи в 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 часов.
Смягчение: более внимательно относитесь к тому, в каких окнах я выполняю команды, прежде чем их выполнять.
Я думаю, что самой глупой вещью, которую я когда-либо делал, было удаление маршрута по умолчанию на внешнем кластере брандмауэров, обращенных к внешнему устройству - в то время как он был подключен к моему рабочему столу за сотню миль.
К счастью, это было в период, обозначенный как запланированное время простоя (на всякий случай), но это не спасло меня от 200-мильной поездки туда и обратно и изменения конфигурации межсетевого экрана на месте. Также не помогло то, что это уничтожило наши производственные системы, работающие в Интернете, на время моего путешествия и последующего исправления.
Мы все знаем определение нано-секунды. Оно-секунда еще меньше, и это время между нажатием "enter" и пониманием вашей ошибки.
Первый из двух...
На коробке Solaris у нас была резервная копия tar на машине AIX.
Один из разработчиков набрал:
tax xvf AIX_Backup.tar
Конечно, пути в налоге были абсолютными, и в итоге мы создали новый дистрибутив unix... Solarix... Единственная проблема с дистрибутивом в том, что он не загружался:(
Я когда-то хотел удалить кучу файлов в каталоге.
del *.*
Затем компьютер сказал: "Вы уверены? [Y /N]" Я подумал: "Конечно, я уверен, я бы не набрал команду darn! В противном случае тупые компьютеры ворчат…"
Y <enter>
C:\Windows>_
Хм... WTF? Я только что стер мой каталог Windows?....
undelete *.*
В те времена маленьких жестких дисков я знал, для чего нужен каждый файл в c:\windows и как его называли, но даже после удаления всего, система никогда не была прежней. Я получил немного уважения к подсказке "ты уверен". Немного.
История сказала мне:
Вызван другой филиал, потому что у их местной АТС были некоторые проблемы После некоторого расследования мы узнали, что они обновили свой сервер, но не свою конфигурацию Asterisk. Итак, администратор решил поручить парню из филиала переделать конфигурацию.
Администратор: "Хорошо, теперь введите rm -rf /etc/asterisk"
Парень: Хорошо.
Администратор: "Теперь введите cp /var/..."
Парень: "Подождите, он все еще работает..."
Админ: ???...!!!
source ~/.bash_history
Моим намерением был исходный код.bashrc, но я слишком торопился с завершением табуляции...
rm -rf / some/path
вместо
rm -rf /some/path
К счастью, со мной этого не случилось;-)
Что-то вроде этого:
sudo dd if=/dev/zero of=/dev/sda
Я имел в виду sda4. Я вытер весь диск, а не только раздел:-(
ifconfig eth0 down
Ой, я на внешней стороне eth0. Веб-сервер находится на другой стороне мира, в закрытой комнате. Без доступа к сети для входа или перезагрузки. Дерьмо.
Были проблемы с сетью (на удаленной машине) и просто хотел перезагрузить интерфейс
ifconfig eth0 down && ifconfig eth0 upp
В настоящее время я проверяю, что кто-то находится рядом с машиной, прежде чем пытаться делать подобные вещи (iptables также является хорошим кандидатом). И когда там никого не было, я однажды набрал
sleep 600; reboot
в другой (экранный) терминал, чтобы он перезагрузился, если бы я не смог Ctrl+ C команда в течение 10 минут.
Я также учился на этой ошибке (Ctrl+ C сон будет запускать перезагрузку), и теперь я использую
sleep 600 && reboot
что позволит мне Ctrl+ C это.
XCOPY
это мощный зверь - беспощадный в своем исполнении и задержанный тем фактом, что его аргументы командной строки идут в обратном направлении от окна COPY
и UNIX cp
,
Пару дней назад я случайно написал:
xcopy src \path\to\a\new\nonexistent\directory
XCOPY
был достаточно любезен, чтобы переписать мой src
каталог с... ничего! И не мешало положить старые файлы в корзину.
Ох, и получается, что XCOPY
фактически перезаписывает одни и те же сектора на диске, а не выделяет новые. Я пробовал 3 программы восстановления дисков, и лучшая из них могла восстановить только 3 из 10 потерянных файлов. Конечно, эти 3 файла были только vshost.exe
и его приятели. Набухать!
Бесплатный cookie для любого, кто может сказать мне, почему я был идиотом за попытку удалить все скрытые файлы и каталоги таким образом:
рм -рф.*
При очистке моей домашней папки на рабочем веб-сервере я забыл, что я поместил символическую ссылку веб-корня сервера в место в моей домашней папке. Не думая, я запустил rm -rf в этой папке, и следующее, что я знаю, люди звонят, что веб-сайт не работает!
OOPS!
Однажды я сравнивал данные в двух папках и запустил rsync с опцией -d (удалить файлы в месте назначения, которых нет в источнике). Затем я переключился между источником и местом назначения, когда запустил rsync. Это удалило все новые файлы, которые я хотел сделать резервную копию. Теперь я научился запускать rsync с -n (всухую).
rsync -trvd --stats --progress /destination /source
У меня не было резервной копии.
Из-за некоторого плохого опыта с общей ошибкой JBoss после перезапуска мне нравится очищать рабочие файлы JBoss перед перезапуском. Я бы обычно делал:
# cd /var/cache/jboss
# rm -rf tmp/* work/*
Чтобы защитить себя от ввода любой из множества возможных катастрофических ошибок, таких как:
- / TMP / *
- tmp / *
- вы поняли идею
Я делаю последнюю команду:
# sudo -u jboss rm -rf tmp/* work/*
Поскольку пользователю JBoss будет трудно удалить любые важные файлы, которые ему не принадлежат.
Я на самом деле никогда не совершал эту ошибку, но я в безопасности, если я это сделаю.
Когда-то давно (возможно, System III, но это было давно), было возможно создать файл с именем *
используя правильное цитирование оболочки. Когда я нашел один в моем домашнем каталоге, я набрал rm *
и держал палец на клавише возврата, когда что-то заставило меня задуматься и подумать об этом...
Создание такого файла для других пользователей было обычной шуткой.
Если файл находится там, в каталоге, это трудно исправить. Рефлекс просто набрать его имя точно так же, как ls
только что показанный это довольно сильный.
Другая (менее вредная) шутка заключалась в том, чтобы называть файлы с конечным пробелом (или только пробелом), которые было намного сложнее удалить...