`alias rm =“ rm -i ”` считается вредным?

17

Я прочитал некоторое время назад (не могу найти ссылку), что использование такого псевдонима alias rm="rm -i"было очень плохо.

Есть ли историческое свидетельство или здравый смысл объяснения этому факту?

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

Dunaril
источник
Я думаю, что нашел тему, которую вы упомянули.
Даниэль Бек
1
@Daniel действительно самый одобренный ответ этой темы упоминает эту плохую практику, но на самом деле это не центральная тема вопроса.
Дунарил

Ответы:

36

Ты прав.

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

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

Вместо этого используйте, например, alias rmi='rm -i'и учитесь использовать это. Если это не установлено в другой системе, вы случайно не удалили файлы и всегда можете вернуться к вводу полной команды.

Даниэль Бек
источник
4

Как сказал @Daniel, это не вредно само по себе, кроме обучения, чтобы вы ожидали, что оно будет там. Фактически, это установка по умолчанию на CentOS (и, я полагаю, расширение RHEL - прошло слишком много времени с тех пор, как я ее использовал), и это огромная боль в туху . Для остальной части моего времени на этом выступлении я набрал / bin / rm, чтобы избежать настройки «Linux для людей, у которых не должно быть root-доступа».

Эндрю Билс
источник
3
У RHEL это по умолчанию, вы правы, по крайней мере, системы, которые я использовал.
Даниэль Бек
4

Я думаю, что большая опасность состоит в том, что люди могут полагаться на что-то подобное, чтобы фильтровать шар. Представьте, что вы хотите удалить некоторые изображения из каталога, но не все из них:

rm -i pics/*.jpg

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

Лично я также считаю, что этот псевдоним вреден для моего кровяного давления;). Но это только я.

Фатальная ошибка
источник
Хороший пример. Конечно, если вам нравится опасность или азартные игры ..
Дунарил
2

В дополнение к тому , что сказал Дэниел Бек, я обнаружил , что я использую , -fчтобы обойти -i, что потенциально опасно , так как это приводит с использованием rm -fи rm -rfбез необходимости. Как-то связано: способ предотвратить rm -rfпроблемы заключается в том, чтобы создать файл с именем "-i", как показано в ответе на этот вопрос: как предотвратить случайный rm -rf / *? ,

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

lupincho
источник
3
Похоже, вы нашли способ сделать эту плохую практику еще хуже :)
Dunaril
0

Это гораздо менее вредно, основываясь на моем опыте работы с сотнями пользователей в прошлом:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • Пользователи обучены правильному использованию подстановочных знаков, а не только «*», а затем полагаются на подсказки y / n для выбора файлов
  • Условие использования правильных подстановочных знаков часто спасало от катастрофы, когда они использовались rmв каком-то другом контексте, в котором не было ни этой функции, ни rm -iпсевдонима.
  • Я потратил меньше времени на восстановление файлов, где пользователь вводил «у» слишком много раз
  • Пользователи должны ответить только один раз, предоставив им четкую положительную обратную связь.
  • Control-c прерывает работу и сообщает, что ничего не делает
  • Не сценарий, так что реальный rmостается нетронутым, оставляя другие программы без изменений.

Стиль кода в основном sh-совместим (за исключением использования echo .... | tr -d '\012'для оболочек перед bash), не стесняйтесь сделать свой собственный более специфичным для bash. Я пишу не для того, чтобы делиться кодом, а для того, чтобы поделиться с ним изменениями в пользовательском опыте .

Алекс Норт-Киз
источник
Камиль: Мой ответ включает в себя то, что rm -iисторически (по моему опыту работы с сотнями пользователей) приводит к ошибочному удалению файлов, и что включенная функция научила пользователей использовать правильные подстановочные знаки вместо этого, снижая частоту появления ошибок. Таким образом, я рассмотрел ключевые проблемы и предложил rm -i решение для удобства, и сам факт, что точки маркера находятся под функцией, не мешает им быть неуместными.
Алекс Норт-Киз