Уловки безопасности командной строки [закрыто]


34

Командная строка и сценарии опасны. Сделайте небольшую опечатку с помощью команды rm -rf, и вы окажетесь в мире боли. Смешивайте prod с stage в имени базы данных во время выполнения сценария импорта, и вы окажетесь в тупике (если они находятся на одном сервере, что не очень хорошо, но бывает). То же самое для того, чтобы заметить слишком поздно, что имя сервера, на котором вы sshed, не соответствует тому, что вы думали, после того, как запомнили некоторые команды. Вы должны уважать Hole Hawg .

У меня есть несколько маленьких ритуалов перед выполнением рискованных команд - например, тройная проверка сервера, на котором я работаю. Вот интересная статья о безопасности полетов .

Какие маленькие ритуалы, инструменты и приемы защищают вас от командной строки? И я имею в виду объективные вещи, такие как «сначала запустите ls foo *, посмотрите на результат этого, а затем замените ls на rm -rf, чтобы избежать запуска rm -rf foo * или что-то в этом роде», а не «убедитесь, что вы знаете, что команда сделает ".


3
+1 за ссылку на «В начале была командная строка» cryptonomicon.com/command.zip
Эйвери Пейн

Разве это не вопрос сообщества вики? Не будет ни одного ответа, который был бы авторитетным или полным.
Билл Вайс

Ответы:


45

Хорошо работает использование различных цветов фона в вашей оболочке для серверов prod / staging / test.


6
Да, а также используйте яркие кричащие красные или оранжевые всякий раз, когда у вас есть права root.
Адам Д'Амико

1
Есть ли способ автоматически установить цвет терминалов удаленной машины, чтобы он отличался от вашего при входе в систему? Использование Gnome - возможно, это должен быть отдельный вопрос.
Джона

2
Просто используйте оператор switch, который меняет переменную PS1 в зависимости от имени хоста машины.
Нил

2
Для любого пользователя Windows есть этот драгоценный камень от Sysinternals, который будет отображать информацию о хосте заметно на обоях. technet.microsoft.com/en-us/sysinternals/…
squillman

Да да да - мой рабочий сеанс iSeries теперь отображается белым на красном, чтобы я не мог: опция pwrdwnsys (* IMMED) перезапустить (* YES)
Питер Т. Лакомб младший

14

Имейте в виду план возврата, прежде чем начать.

  • Заархивируйте файл / каталог вместо того, чтобы удалить его сразу
  • установите (cisco) маршрутизатор для перезагрузки через 'x' минут и не пишите сразу
  • убедитесь, что интерфейс, который вы меняете, не тот, в который вы вошли в систему. Это может быть интерфейс маршрутизатора, к которому вы telnet'd или порт Ethernet VNC'd к.
  • никогда не входите в систему как root
  • сделать резервную копию. проверь что это хорошо. сделать еще один.
  • спросите кого-то, кому вы доверяете: «Я собираюсь сделать что-то глупое здесь?»

3
+1 cisco ios не сохраняйте, пока не убедитесь, что он работает. Черт, я помню времена Amiga, когда во всех диалогах ОС были «Использовать», «Сохранить» и «Отмена» - где «Использовать» применял только настройки, но не сохранял их для следующей перезагрузки. Это было чрезвычайно полезно!
Оскар Дюверборн

Я полагаю, что еще более удачное решение сегодня - это неограниченная отмена всех системных изменений - таким образом, вы намного безопаснее. Конечно, если измененная вами настройка сделала функцию отмены системы непригодной для использования, вы все равно были бы облажаны .. хмм ^^
Оскар Дювеборн

1
+1 за "перезагрузить через 5". Несколько раз я спас мой зад, когда изменение ACL заблокировало меня на удаленном маршрутизаторе / коммутаторе.
Грег Ворк

+1 за последний пункт - проверка работоспособности. Это легко сделать, и тогда, по крайней мере, у вас есть два человека с личным интересом для решения любых возникающих проблем;)
Эшли

10

У меня есть низкотехнологичное решение для некоторых из них.

Я разработал привычную привычку делать следующее (при планировании работы от имени root):

  • Сначала войдите в систему как обычный пользователь, а затем используйте sudo su - rootдля переключения в root. Я делаю это как умственную подготовку, напоминание мне, что я мысленно вошел в очень опасную область и что я должен быть настороже и всегда настороже. Как ни странно, этот маленький ритуал спас меня от грусти, просто подкрепив, что я не могу быть небрежным .
  • Каждая команда набирается, но клавиша [Return] никогда не нажимается. Никогда .
  • Ни одна команда никогда не выполняется без точного понимания того , что она делает. Если вы делаете это, не зная, что он делает, вы играете в русскую рулетку со своей системой.
  • Перед нажатием клавиши [Return] команда, которая была выведена на CLI, тщательно проверяется на глаз. Если есть какие-либо колебания, любой намек на потенциальную проблему, он снова пересматривается. Если это колебание не устранено, команда остается в строке, и я нажимаю alt-F2 на другой консоли для просмотра справочных страниц и т. Д. Если в графическом сеансе я запускаю браузер и выполняю поиск.
  • Ни один обычный пользователь никогда не передавал sudoмои системы не потому, что я BOFH , а потому, что без подготовки и обучения это все равно, что дать заряженный пистолет обезьяне. Поначалу это забавно и весело, пока обезьяна не смотрит вниз на бочку и не сжимает ...

При использовании rm я всегда cdсначала обращаюсь к каталогу, затем использую префикс, ./чтобы убедиться, что каталог правильный, т.е.

cd /usr/some/directory ; rm ./targetfile

или я указываю полный путь к файлу

rm /usr/some/directory/targetfile

который является PITA, но ... лучше, чем потом сожалеть.


1
Я выдаю sudo только для предварительно выбранного списка команд, таких как apache2 reload. В противном случае пользователи должны пройти через меня. Это боль в заднице, но это лучшая защита для запуска devbox для 15 человек.
Артем Руссаковский

2
Цитата: «но потому что без подготовки и тренировки это все равно, что дать заряженный пистолет обезьяне. Сначала это забавно и весело, пока обезьяна не смотрит вниз на ствол и не сжимает…» На самом деле, после этого все еще смешно. .. просто довольно грязно
Mikeage

Вы должны использовать sudo -i вместо sudo su, и, как правило, использование sudo для запуска определенных команд намного более безопасно.
LapTop006

Как выполнить команду, если вы НИКОГДА не нажимаете клавишу возврата?
г.

1
&& твой друг! Вместо того, чтобы делать каталог cd / usr / some /; rm ./targetfile, вы должны cd / usr / some / directory && rm ./targetfile. Таким образом, вы никогда не будете заводить rm'ing targetfile в исходном каталоге, если cd не удался. Делать полный путь rm лучше, хотя.
Майк Дж.

10

Это специфично для Windows Powershell.

В качестве политики мы добавляем следующий файл profile.ps1 на каждом сервере. Это гарантирует, что следующее верно:

  1. Окна консоли PowerShell имеют темно-красный цвет фона
  2. Администратор добавлен в заголовок
  3. Сообщение «Предупреждение. Powershell работает от имени администратора». написано при запуске
  4. Строка заголовка имеет префикс «Администратор:»
  5. Стандартные утилиты (такие как скрипты корпоративной оболочки, vim и infozip) находятся в пути.
$ currentPrincipal = New-Object Security.Principal.WindowsPrincipal ([Security.Principal.WindowsIdentity] :: GetCurrent ())
& {
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: Administrator))
    {
        (Get-хост) .UI.RawUI.Backgroundcolor = "Darkred"
        ясно-хост
        write-host "Предупреждение. PowerShell работает от имени администратора. n"
    }

    $ utilities = $ null
    if ([IntPtr] :: size * 8 -eq 64)
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x64)" 
        $ utilities = "$ {env: programfiles (x86)} \ Utilities"
    }
    еще
    {
        $ host.UI.RawUI.WindowTitle = "Windows PowerShell (x86)"
        $ utilities = "$ {env: programfiles} \ Utilities"
    }
    if ((Test-Path $ utilities) -and! ($ env: path -match $ utilities.Replace ("\", "\\")))
    {
        $ env: path = "$ utilities; $ {env: path}"
    }
}

функция подсказка
{
    if ($ currentPrincipal.IsInRole ([Security.Principal.WindowsBuiltInRole] :: Administrator))
    {
        if (! $ host.UI.RawUI.WindowTitle.StartsWith ("Администратор:"))
        {$ Host.UI.RawUI.WindowTitle = "Администратор:" + $ host.UI.RawUI.WindowTitle}
    }
    'PS' + $ (if ($ nestedpromptlevel -ge 1) {'>>'}) + '>'
}

Это круто - я хотел бы, чтобы вы могли легко сделать что-то подобное в Linux на всех своих серверах.
Джейсон Тан

1
В powershell это делается путем редактирования $ pshome / profile.ps1 (профиль машины). Почему вы не можете сделать что-то эквивалентное для Linux в /etc/.bash_profile?
Брайан Райтер

2
Также полезно изменить $ ConfirmPreference на «средний» (по умолчанию высокий), и другие вещи будут запрашивать подтверждение.
Ричард

6

Я могу согласиться со всеми приведенными выше ответами, но я должен подчеркнуть этот очень, очень важный совет:

Знайте, когда следует избегать многозадачности.


5

Я уверен, что имя хоста системы, в которой я работаю, находится в приглашении bash (или другой оболочки). Если у меня есть chroot, я тоже уверен, что это так и есть.

Однажды я устанавливал систему Gentoo из другого живого дистрибутива Linux и случайно выполнил довольно разрушительную команду (не могу вспомнить, что это был ATM - какой-то вариант rm) в неправильной оболочке, в результате чего куча вещей в работающей системе была удалены, а не вещи изнутри chroot. С тех пор я всегда делал

export PS1="(chroot) $PS1"

всякий раз, когда я работал в chroot.


1
+1 - также я считаю полезным иметь в приглашении текущий рабочий каталог (или последние n его уровней, если вы работаете в глубоко вложенных файловых системах).
Мурали Суриар

Официальный справочник Gentoo предполагает, что при загрузке с живого CD на только что созданный Gentoo!
cd1

CD1: да, но руководство по быстрой установке x86 ( gentoo.org/doc/en/gentoo-x86-quickinstall.xml ) этого не делает, и именно это я использовал в то время. Но теперь я делаю это рефлексивно :)
Тим

5

Есть несколько важных вещей, о которых нужно знать, прежде чем вносить изменения в сервер:

  • Убедитесь, что я на правильном сервере

  • Знайте, ** сколько людей будет затронуто этим действием * (если вы допустили ошибку или нет)

  • Прежде чем вводить клавишу ввода, учтите возможность отмены

  • Спросите себя, может ли эта команда отключить ваш сеанс (правило fw, плохое завершение работы и т. Д ...). Убедитесь, что у вас есть сбой, чтобы вернуться (особенно, если вы находитесь за пределами площадки)


4

Если вы еще этого не сделали, псевдоним rm-rm -i


7
Нет нет Нет Нет. Это одна из худших вещей, которые вы можете сделать. Однажды вы окажетесь на коробке, на которой нет псевдонима, или вы каким-то образом уничтожили нашу среду. Научитесь использовать rm -i вместо этого.
olle

Нет нет Нет Нет. Сделай это. Однажды вы случайно сделаете не то и спасете себя. Чаще, чем вы забудете поставить -i в строку, испортить и удалить не ту вещь.
Иеруб

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

Ужасно то, что и @olle, и @Jerub правы. Возможно, было бы разумно поместить в PS1 какой-нибудь, возможно, цветной флаг, который бы обозначал «безопасность выключена» / «безопасность
включена

4

Правило 1 - делайте резервные копии

Правило 2 - НИКОГДА не добавляйте обертки «molly guard» к стандартным командам, конечно, создавайте свою собственную версию, но не берите имя, оно просто укусит вас, когда вы находитесь в системе, которую вы не настроили.

Уловки подсказок, такие как разные цвета для корневого и (частичного) дерева каталогов, являются отличными помощниками, но, опять же, убедитесь, что вы можете работать без них.


Что за «Молли Страж», которого я никогда раньше не слышал?
Джейсон Тан


4

Это может показаться нелогичным и менее «ardkore», но лучший совет по безопасности командной строки, который у меня есть: если альтернатива в режиме GUI доступна и практична, то используйте ее .

Зачем? Довольно просто. GUI-режим обычно имеет встроенную систему безопасности в форме «предупреждение - вы собираетесь заморозить freeblefrop, вы уверены, что хотите это сделать?» Даже если это не так, это замедляет вас и дает больше времени для размышлений. Это позволяет вам проверять параметры перед их фиксацией, снимать скриншоты до и после состояний, защищает вас от опечаток; все хорошие, полезные и полезные вещи.

В классическом случае страшного "rm -rf", как вы думаете, проще ли случайно выпустить его из GUI или CLI?

В конце концов, нет ничего постыдного в использовании графического интерфейса. Это не будет безошибочно предотвратить крупные бедствия; в графическом интерфейсе настолько же возможно быть довольным триггером, как и в CLI; но если это спасет вас однажды, это доказало свою ценность.


3

Используйте здравый смысл и не запускайте команды, которые вы не понимаете. Это все хороший совет. Если вы чувствуете, что вам больно записывать абсолютный путь всего, что вы передаете в rm, или запускать что-либо через sudo, не стесняйтесь. Я бы предпочел Су-С тогда. По крайней мере, это не кэширует пароль. Мне было бы неудобно, если бы любому обычному пользователю разрешали запускать вещи с правами root без проверки пароля.

Есть несколько вещей, которые вы можете вставить в ~ / .bashrc, чтобы сделать их немного более безопасными, например:

alias srm='rm -i'

Позволяя вам иметь безопасную альтернативу рм, ...

Но, в конце концов, вы можете и всегда облажаться. На днях у меня был несуществующий скрипт настройки, прервавший всю мою папку / usr / bin, сломав несколько вещей. Да, простая «установка» любого программного обеспечения с ошибкой может привести к поломке вашей системы. Вы НИКОГДА не в безопасности, что бы вы ни делали. То, к чему я стремлюсь, это САМАЯ важная вещь:

Регулярно сохраняйте резервные копии.


2
Опять же - НИКОГДА НЕ ПИШИТЕ "РМ". В конце концов, это БУДЕТ ввернуто, когда вы работаете в системе, в которой нет псевдонима.
SilentW

Очень плохая идея. Если вы когда-нибудь окажетесь на Mac OS X (может быть, на других платформах?), srmЭто безопасно удалить !
Моргант

3

Вместо псевдонима от rm к rm -i, было бы лучше псевдонимом сказать удалить или безопасное удаление (и использовать их в качестве предпочитаемого инструмента удаления). Затем, когда вы используете ящик, который не был настроен, не наносится никакого урона.


2

Убедитесь, что вы никогда не запускаете команду, найденную в Интернете, если вы не полностью понимаете, что они делают.

Ваша система может отличаться от системы плаката, и это может причинить боль.


2

Очевидным для безопасности командной строки с точки зрения Unix / Linux является правильное использование учетной записи root.
Rm -rf в качестве пользователя root обычно более опасен, чем пользователь, и использование встроенных средств, таких как sudo, а не вход в систему от имени пользователя root является жизненно важным. Хороший простой whoami обычно поможет от шизофрении или нескольких личностей.

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


2

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

Таким образом, вы по-прежнему имеете доступ к компьютеру и можете прервать ваш основной сеанс.

Большинство вышеприведенных комментариев относятся к rm, но я сделал несколько глупостей и с другими командами ...

ifconfig, чтобы отключить сеть - ой, это требует физического присутствия, чтобы исправить.

Что касается сценариев, я обычно работаю в двух окнах. Первое, которое я использую для написания сценария, второе - для проверки каждой строки при ее написании. Идя медленно и осторожно, я могу убедиться, что каждая строка работает так, как я ожидаю, когда я пишу код, заботясь о сохранении тех же переменных и т. Д.

Лично я не нахожу лишних подсказок для таких вещей, как rm -i, которые действительно помогают. Я делаю большую часть своих ошибок, когда я устаю, испытываю стресс и т. Д., В те времена, когда я просто буду стучать и игнорировать подсказку в любом случае. Плохая практика, возможно.


2

Если вы используете bash, попробуйте это:

TMOUT=600

в вашем /root/.bashrcили похожем. Через 10 минут он автоматически выходит из системы, уменьшая вероятность того, что вы перейдете в корневой терминал, который вы случайно оставили открытым, и наберете что-нибудь глупое.

Да, я знаю, что вы должны использовать sudo для выполнения корневых команд - это просто дополнительная сеть безопасности на тот случай, если вы решите рисковать в один прекрасный день.


2
# Allow only UPDATE and DELETE statements that specify key values
alias mysql="mysql --safe-updates"`

Настоятельно рекомендуется иметь псевдоним, если вы используете mysql CLI.


1

Вместо ls я использую echo, чтобы увидеть полную команду после того, как оболочка все расширила. Кроме того, всегда используйте двойные кавычки, представляющие файлы, чтобы ваши вещи работали с именами файлов, которые могут содержать символы табуляции или пробелы.


1

Я избегаю *шар как его собственный аргумент, когда это возможно. Даже если я действительно имею в виду «удалить все в этом каталоге», я пытаюсь быть более конкретным, т.е. rm *.php, Это упреждающий контроль повреждения в случае, если я случайно запустил ту же команду из истории в другом каталоге.


Я научился никогда не "cd dir; rm -rf *", а вместо этого всегда "rm -rf dir", настолько конкретно, насколько это возможно.
Слов

1

Отличный способ заставить вас задуматься о том, что вы делаете, - добавить что-то подобное в bashrc root (cshrc, что угодно):

unset PATH

Таким образом, вы должны сделать / bin / rm вместо просто «rm». Эти дополнительные символы могут заставить вас думать.


Хорошо, где эта команда, которую я хотел бы выполнить? which $COMMANDбольше не работает.
Кевин М

/ usr / bin / locate $ COMMAND?
Билл Вайс

Еще лучше, / usr / bin / locate -r / $ COMMAND $
Билл Вайс

1

Для сложных регулярных выражений, особенно команды 'find', помещают echo впереди и записывают их в файл. Затем вы можете проверить, действительно ли вы удаляете / перемещаете / и т. Д. Именно то, что вы думаете, прежде чем выполнять файл с «источником».

Это также удобно для ручного добавления тех крайних случаев, которые регулярное выражение не подобрало.


1

Немного мета к некоторым другим постам: сначала я использую предложенные обычные шаги echo / ls, чтобы убедиться, что команда выбирает набор файлов, которые я хочу, или интерпретируется оболочкой иным образом, как и предполагалось.

Но затем я использую функции редактирования истории команд оболочки, чтобы извлечь предыдущую команду и изменить только те части, которые необходимо изменить.

Совсем не помогает набирать каждую из этих команд независимо ...

$ ls *.bak
$ echo rm *.bak
$ rm * .bak

... потому что я случайно набрал пробел в последней строке и удалил все файлы. Я всегда получал предыдущую строку и просто удалял «эхо».


1

Пользователь root: не
будьте пользователем root, если вам не нужно.
Если поставщик заявляет, что ему нужно запускать с правами root, скажите им, что вы являетесь клиентом и хотите запустить его без полномочий root.
Сколько программных пакетов с полки хотят получить root «просто потому, что это проще»?

привычка:
никогда не используйте '*' с удалением, не глядя на него три раза. Лучше всего выработать привычку использовать ls -l TargetPattern , а затем использовать 'rm! $'. Самая большая угроза не в том, где ты думаешь. Я почти набираю 'имя хоста' так часто, как 'ls'!

костыли:
стандартная подсказка очень помогает, как и псевдонимы, такие как "alias rm = 'rm -i'", но я часто не имею полного контроля над машинами, на которых я работаю, поэтому я использую сценарий ожидаемой обертки, просто чтобы указать путь , подсказка и псевдонимы с '-i'

проблемы
с поиском: использование полного пути помогает, но в тех случаях, когда это невозможно, перейдите в более безопасное место и ТАКЖЕ используйте «&&», чтобы убедиться, что «cd» завершится успешно, прежде чем выполнять поиск, удаление, tar, untar, etc:
пример: cd /filesystema && tar cf - | ( cd /filesystemb && tar vxf -)
использование '&&' может предотвратить извлечение файла tar поверх самого себя в этом случае (хотя в этом случае 'rsync' будет лучше)

удаляет:
никогда не удаляйте рекурсивно, если вы можете помочь, особенно в сценарии. найти и удалить с -type f и -name 'pattern' Я до сих пор живу в страхе перед тем, как кормить xargs 'ничто' ... tar и untar для перемещения вещей (используйте вместо этого rsync)


1

Если вы используете несколько вариантов операционной системы, не очень осведомлены о различиях в синтаксисе; то, что является достаточно безопасным в одном варианте unix, чрезвычайно опасно в другом.

Пример: killall

Linux / FreeBSD / OSX - убивает все процессы, соответствующие переданному параметру. Например: «killall apache» убивает всех apache, оставляя все остальные процессы в покое.

Солярис - убивает все процессы. Нет, правда. Со страницы man : killall используется shutdown (1M) для уничтожения всех активных процессов, не связанных напрямую с процедурой shutdown.


Я узнал об этом на сервере резервного копирования предыдущего работодателя. Пока бежали ночные записи. Вл.
Билл Вайс

1
Вместо этого вы можете использовать pkill, который работает на солярисе и linux.
Джейсон Тан

0

Вместо того

rm foo*

использование

rm -i foo*

Это практично с несколькими файлами, но не с, скажем, целым архивом. Вот почему псевдонимы rmбудут мешать вам.


это то, для чего предназначен ключ -f: переопределение любых предыдущих ключей -i. Если вы поместите это в свой .bash_profile или подобный скрипт инициализации оболочки, вам не придется об этом беспокоиться. Просто убедитесь, что вы хотите сделать это, но это было сказано ранее, и более красноречиво.
Кевин М

0

Выполнение команды сначала с помощью echo - хорошая идея, но она по-прежнему подвержена опечаткам.

Попробуйте использовать его с расширением, таким как! $.

echo foo*
rm -rf !$

! $ Расширяется до последнего слова последней команды, поэтому эквивалентно

echo foo*
rm -rf foo*

Также есть! *, Который распространяется на все аргументы последней команды.

Действительно, вы могли бы сделать это таким образом, если вы предпочитаете

echo rm -rf foo*
!*

(Если вы используете ksh, а не bash, вы можете ввести Esc + period, чтобы вставить последнее слово.)


Esc +. работает в Bash тоже.
olle

0

В случае чего-то вроде:

ls * .php
echo rm * .php
rm * .php

Вы можете использовать оператор подстановки, например:
$ ls * .php
<dir list>

$ ^ ls ^ echo rm (заменяет ls в предыдущей команде на echo rm, оставляя остальную часть командной строки такой же)

$ ^ echo rm ^ rm (замените echo rm на просто rm, поэтому вам не нужно повторно вводить * .php и выбрасывать пробел в неподходящее время)

^ = shift-6, для тех, кто не знаком с этим.


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

Например, после «echo rm * .php» вы делаете <Up> <Home> <Alt-D> и затем <Enter>.
Мариус Гедминас

0

Используйте bash и установите PS1 = '\ u @ \ h: \ w>'. Это расширяется до имени пользователя @ имя_хоста: / full / working / directory / path> Как упоминалось в других ответах, вы можете использовать функцию wait для настройки среды при каждом входе в систему, если вы не можете обновить файлы .profile или .bash_profile. Изменение цвета фона - лучший ответ :-)


-1

О да. Эта старая уловка - отправка кому-то файла через IRC с именем "-rf", чтобы он оказался в каталоге ~. Один маленький «rm -rf» позже (вместо «rm - -rf») и большой смех последовали, когда они выучили суровый урок о том, что IRC не запускается от имени root.


+1 за коэффициент rofl
Дэвид З

Так как же "rm -rf" должен тебе навредить, а?
Кубанчик

Может быть, файл на самом деле был назван "-rf *"?
Мариус Гедминас

-1

Вместо того чтобы использовать rm -rf <dir>поставить -rfв конце примерно так: rm <dir> -rf. Думайте об этом как о снятии безопасности после того, как вы прицелились и перед тем, как выстрелить. Таким образом, вы защищены, если вы нажали клавишу ввода при вводе имени каталога (или с помощью дополнения табуляции) и у вас есть каталоги с одинаковыми именами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.