Найбільша помилка командного рядка? [зачинено]


35

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

Найголовніше (для голосування), що ви робите, щоб переконатися, що це більше ніколи не повториться?


9
Оскільки це опитування, воно повинно бути CW
Едді

Тоді чому за замовчуванням не проводяться опитування CW?
Лука

4
Як вони повинні знати, що це опитування прогресивно?
Пробіг

1
Якщо механізм такий, як у SO, навіть якщо ви можете редагувати питання, ви не можете змінити його на CW. Тільки ОП або модератор можуть це зробити.
хаос

9
Гарна ідея - опублікуйте свою найбільш руйнівну помилку публічно в Інтернеті, щоб побачити її майбутні роботодавці! :)
Сем Шютте

Відповіді:


46

На сервері SQL, у виробничій системі:

update customer set password = '' <enter>

Останнє резервне копіювання було як тиждень.

Щоб пом'якшити це, я зазвичай selectспочатку пишу заяву, щоб переконатися в whereправильності цього пункту, після чого повертаюсь назад і відредагуйте його, щоб вставити setдодаток і змінити заяву на update.


11
Ой. Іншим варіантом буде "ПОЧАТОК ПЕРЕХОДУВАННЯ"; приємно знати, що можна відкотити. :)
Муралі Суріар

5
Поєднавши обидва, виберіть count (*), щоб побачити, скільки я думаю, я оновлю, а потім оновіть в транзакції, щоб зробити оновлення. Якщо підрахунки збігаються, якщо не відкат, то з'ясуйте, чому. Звичайно, я цього не роблю для "простих" оновлень, і це завжди те, що вас накручує. :-)
WaldenL

Винен, я це зробив сам :(
Джим Охаллоран,

8
Будьте обережні з BEGIN TRANSACTION в живій системі (або тестовій системі, яку також використовують інші) - переконайтеся, що скоро ВІДКЛЮЧИТИСЯ або ROLLBACK, або ви можете закінчити тупикові процеси, що очікують блокування ресурсів, на які транзакція містить блокування.
Девід Спіллетт

На деяких системах можна зробити; бути ідентифікатором завершення заяви, замість <enter>
Дж. Полфер

37

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


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.


Принаймні, ви, мабуть, не втратили жодних даних ...
Зіфре

Щоправда, але це було насправді давно, IPMI ні KVMoIP там, де ще не популярні. Нам довелося влаштуватись техніку, щоб насправді піти туди і переключити вимикач.
vartec

4
Перевірте MOLLY-охоронець ( packages.debian.org/search?keywords=molly-guard )
David Holm

Навіть на місцевих робочих станціях я завжди використовую "+1" про всяк випадок.
msanford

3
Раніше я вводив ім'я хоста в підказку, але тепер я промацував команди вимкнення (і пов'язані з цим - halt et al), щоб запропонувати мені ввести ім'я поточної машини, перш ніж воно виконає команду. Це дає мені додатковий крок, необхідний для розуміння того, що я просто відключив неправильний сервер. Проблема полягає в тому, що коли я реалізував цей патч, я більше ніколи цього не робив - але його врятувало декілька моїх колег Тхо :)
Moo

26

Пропустіть -r з команди вимкнення. На віддаленому сервері. З іншого боку країни. Без віддаленого офісу ІТ.

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


25

У системі VMS я використовував команду ASSIGN DCL для присвоєння логічних імен, і хотів відкликати попередній командний рядок ASSIGN. Тепер у VMS ви ввели лише стільки символів команди, щоб зробити це однозначним. Тому я мав намір набрати

REC ASS

але я випадково набрав

REQ ASS

замість цього. REQ виявився досить однозначним для команди REQUEST, яка передає аргумент усім, хто має приватні дані операторів (які були всі в IT). Так весь відділ отримав моє мовне повідомлення, яке було просто "ASS".


Веселий :-) :-)
Людвіг Вайнцерль,

1
Все програмне забезпечення відстійне, як ми всі знаємо. Чому хтось із ІТ повинен вважати, що це означає щось інше?
Адріано Варолі П'яцца

24

У системі Solaris: "дані killall dataLoader".

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


був там, зробив це ...
Джеймс,

2
Я робив саме те, що два тижні тому в системі Power 5 AIX 6 ... Добре, не точно, я зробив "killall -9 java" :)
Andor

3
@Andor: Ну, ти вбив javaточно. ;)
Боббі

16

Колись, багато багато місяців тому, мені потрібно було знайти певний виконуваний файл, але я не міг запам'ятати його повну назву (але міг запам'ятати кілька букв). Тому я подумав, що я перевірю каталог / usr / bin з чимось подібним

rm /usr/bin/i*g*

Дивно. Нічого не повернулося. Зрозумівши, що я просто записав другу літеру, я спробував ще раз

rm /usr/bin/i*

Знову нічого. Зробивши те ж саме з / usr / local / bin, / usr / sbin, і будь-що інше, на що я зрозумів, що це може бути, я зрозумів, що я помиляю команду 'ls'.

Не зовсім знаю, звідки взявся мозковий майданчик, але це, безумовно, не помилка, яку я коли-небудь робив знову.


Це те, про що слід пам’ятати при повторному використанні шляхів на зразок, скажімо, ls / etc / something, Ctrl + r, Ctrl + a, Del, Del, cat, Enter.
Алекс

8
Навіть на моєму сервері він нічого не повертає.
Мірча Вутковичі


16

Спроба змінити право власності на все в каталозі, включаючи крапкові файли, за допомогою:

chown -R user * .*

Вгадайте, що це робить?


10
читати пошту - дуже швидко ???
Wiren

5
Побував там, це навчило мене. [^.] * Візерунок дуже добре
Мацей Пастернацький,

1
@chaos: Команда, здається, видалить усе, що знаходиться у вашому поточному каталозі, та навіть dot-файли
Léo Léopold Hertz

2
@chaos: не видаляється .. і ніколи не буде і ніколи не буде. Ви просто помиляєтесь. Будь ласка, наведіть єдину реалізацію unix, яка має таку поведінку (якої я ніколи не бачив і яка документально підтверджена, що не є поведінкою навіть супер антикварних unix, як, наприклад, Unix 7 видання).
chris

1
Чи запобіжить би це ./.*, чи воно все ще поширюватиме резервне копіювання дерева каталогів через ./../?
tj111

15

Мав на увазі знищити / dev / sdb, на щастя, у мене було гарне оновлення

dd if=/dev/urandom of=/dev/sda

Це колись (за винятком / dev / zero) знищив кореневий розділ сервера Linux, відновивши його, скопіювавши все назад з ідентичного сервера.
Маріус Гедмінас

14
select * from <File1> join <file2>

На виробничій коробці. Зауважте, відсутність onпункту. :-) Обидві таблиці були багатомільйонними табличними рядками, і це було на AS / 400 в середині 90-х, коли колись працював SQL, ти не міг його вбити.


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-агента працювати належним чином на моїй машині, поки ми вели релігійну війну Perl vs PHP. Тоді я згадав щось про ssh-агента, який потребує оцінки (не впевнений, чому я це сказав). Тоді він надіслав мені це повідомлення зусиллям, і я подумав, щоб допомогти мені у вирішенні моєї проблеми (майте на увазі, що мене вимагають викорінити):

\# 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. Він посміявся величезним сміхом, коли я надіслав йому повідомлення про жах, запитуючи, чому він це зробив. Ми обидві інженери систем довгострокової роботи. Він не думав, що я запускаю його, і було б ретельніше перевірити це, перш ніж просто с & p'ing, і я просто довіряв йому, так що я навіть не вважав, що він грає. Потрібно говорити, що ця маленька історія постійно виникає між нами. Отже, я вирішив його увічнити.

Як я пом’якшив це, щоб це не повторилося? Я нікому не довіряю!

Ще одна менш цікава історія - це пару років тому, коли я працював над критичною скринькою місії на роботі. У мене було кілька термінів, відкритих для різних машин. Мені потрібно було видалити зайві речі з каталогу. Що ж, я заблукав у своїх термінах і випадково потрапив додому . в моєму місцевому режисері, але на неправильному господарі (неправильний термін) !!. Я виконав команду в / var / lib / mysql замість / tmp на сервері додатків (різний термін). Потрібно сказати, що я витер базу даних виробництва. На щастя, у нас був теплий режим очікування, до якого ми перекинулися, поки я та колега відновлювали основну частину з резервного копіювання та очікування. На це пішло близько 18 годин.

Пом'якшення: ретельніше ставитися до того, в яких вікнах я виконую команди, перш ніж виконувати їх.


На роботі ми всі налаштували .bashrc всіх наших серверів для відображення імен користувачів в bash в унікальних кольорах. Таким чином, ви завжди вмить бачите, на якій машині ви знаходитесь. (Гаразд, це може стати проблемою, коли ти керуєш більше ніж, можливо, 20-30 машин ... Але все ще дуже зручно.)
fgysin відновила Моніка

+1 за довіру нікому.
Уейн Вернер

11

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

#/bin/bash
$0&
$0

для чого варто, якщо коли-небудь робити це не як корінь, запустітьkill -9 -1
BCS

3
що це робить?
Nathan DeWitt

6
Він називає себе у фоновому режимі, ніж тоді, не чекаючи, коли закінчиться, знову закликає себе: aka Fork Bomb
BCS

2
@Masi: Не, якщо комп'ютер досить швидкий і сценарій досить довгий. Спеціально, якщо ви не знаєте, що це станеться.
voyager

3
Скиньте #!/bin/bash, і я думаю, що це виграє гольф коду за найкоротший forkbomb в баші.
Джої Адамс

11

Я колись хотів видалити купу файлів у каталозі.

del *.*

Комп'ютер потім сказав : «Ви впевнені? [Y / N]» Я подумав : «Звичайно , я впевнений, я б не набрав команду проклятої в іншому випадку! Sheesh тупі комп'ютерів бурчати ...»

Y <enter>

C:\Windows>_

Гм ... WTF? Я щойно видалив свій каталог Windows? ...

undelete *.*

У ті часи на невеликих жорстких дисках я знав, для чого потрібен кожен файл c: \ windows і як його звали, але навіть після того, як відміняти все, система ніколи не була однаковою. Я трохи поважав підказку "ти впевнений". Ще трохи.


1
Я колись робив абсолютно те саме. Я отримав систему для завантаження та запуску знову, але це ніколи не було цілком правильно. Я відновив систему приблизно через тиждень.
Джим Охаллоран

11

Я думаю, що найглупіше, що я коли-небудь робив, - це видалити маршрут за замовчуванням на зовнішній кластер брандмауера - в той час як vpn'ed на мій робочий стіл за сто миль.

На щастя, це було в період, визначений як запланований час простою (про всяк випадок), але це не врятувало мене в 200 милях в обороті, щоб поїхати і налаштувати брандмауер на місці. Це також не допомогло, що це вивело наші виробничі системи, виставлені в Інтернеті, протягом моєї подорожі та подальшої виправлення.

Ми всі знаємо визначення наносекунди. Оносекунда ще менша, і це час між натисканням „входу” та усвідомленням вашої помилки.


11

Перший з двох ...

На коробці Solaris у нас була резервна копія дьогтю машини AIX ..

Один із розробників набрав:

tax xvf AIX_Backup.tar

Звичайно, шляхи до податку були абсолютними, і ми в кінцевому підсумку створили новий дистрибутив unix ... Solarix ... Єдина проблема дистрибутива в тому, що він не завантажувався :(


10

Історія мені сказала:

Ще одне відділення зателефонувало, оскільки у місцевої АТС були деякі проблеми. Після деякого розслідування ми дізналися, що вони оновили свій сервер, але не конфігурацію зірочки. Отже, адміністратор вирішив доручити хлопцеві відділення відновити конфігурацію.

Адміністратор: "Добре, зараз введіть rm -rf / etc / asterisk"

Хлопець: "Гаразд".

Адміністратор: "Тепер введіть cp / var / ..."

Хлопець: "Зачекайте, він все ще працює ..."

Адміністратор: ??? ... !!!


1
Якщо щось може піти не так, воно піде не так.
Joey Adams

9
rm -rf / some/path 

замість

rm -rf /some/path 

На щастя, у мене цього не сталося ;-)


сталося з моїм однокласником недавно. На щастя, це було просто з / etc / some / other / path
Ikke

Його треба відключити! Я думаю, це зараз відключено у багатьох ОС. Надто боїться спробувати, на Ubuntu rm -rf /
Лакшман Прасад

Насправді, це було б небезпечно для системи лише з sudo rm -rf /
voyager

Був там, зробив це ...
fgysin відновила Моніку



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

в інший (екранний) термінал, щоб він перезавантажився, якщо протягом 10 хвилин я не зміг команду ctrl + c.

Я також довідався з цієї помилки (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
Чи видаляє ваша команда також підкаталоги нижче поточного каталогу?
Лео Леопольд Герц 준영

Цікаво, чи відповідає ваша картина ..
жорсткою

До речі, ви обидва виграєте печиво :-)
Метт Сіммонс

6

Прибираючи домашню папку на виробничому веб-сервері, я забув, що я пов’язав веб-корінь сервера з місцем у своїй домашній папці. Не думаючи, я запустив rm -rf у цій папці, і наступне, що я знаю, люди дзвонять, що веб-сайт не працює!

OOPS!


5

Я колись порівнював дані у двох папках і запускав rsync з параметром -d (видаляйте файли за призначенням, які відсутні у джерелі). А потім я перемкнувся навколо джерела та місця призначення, коли запустив rsync. Це видалило всі нові файли, які я хотів створити резервну копію. Тепер я навчився виконувати rsync з -n (сухий запуск).

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

У мене не було резервного копіювання.


4

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

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

Якщо файл знаходиться там у каталозі, це важко пом'якшити. Рефлекс просто вводити його ім’я так само, як lsтільки що відображений, він досить сильний.

Іншим (менш шкідливим) приводом було називати файли із заднім пробілом (або лише пробілом), які було набагато важче видалити ...


2
Ось для чого призначений графічний інтерфейс :)
Zifre

1
завершення роботи оболонки - це реальна економія часу для тих файлів, що знаходяться в просторі :)
Містер Блискучі та Нові 安 宇

1
Це було б приблизно. 1985 р. Та доступ до нього через комутований комутатор або через кабель RS-232 з клону терміналу VT-100. Не термінальний емулятор, а власне термінал. Я не пригадую, щоб учасник csh мав назву завершення імені ... ;-) Сьогодні, звичайно, графічні інтерфейси та доповнення імен роблять обидва з них менш ризикованими, а багато ОС набагато складніше створювати такі файли, не вдаючись до редагування дискового сектора ....
RBerteig

торкніться ./--help, тоді ні rm --help, ні rm * не працюватимуть ...
mihi

Ви все ще можете створити файл з ім'ям , принаймні на Linux: "touch " ". І "rm '*" "також працює ...
sleske

4

Через деякий поганий досвід із загальною в'ялістю JBoss після перезавантаження, я люблю очищати робочі файли JBoss перед перезавантаженням. Я б зазвичай робив:

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

Щоб захистити себе від введення будь-якої з багатьох можливих згубних помилок, наприклад:

  • / tmp / *
  • tmp / *
  • ви отримуєте ідею

Я роблю останню команду:

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

Оскільки користувачеві JBoss буде важко видалити всі критичні файли, які не належать до нього.

Я ніколи насправді не робив цієї помилки, але в безпеці у випадку, що я роблю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.