Вопрос о рекомендуемом использовании rm и--
Допустим, я создал два файла -i
и xx
. Если я попытаюсь удалить их с помощью
$ rm *
Я получил:
rm: remove regular file `xx'? n
И, как объяснено вКак удалить файл в Linux, имя которого выглядит так, будто состоит ТОЛЬКО из дефиса, например, «-»и другие, способ решения этой проблемы:
$ rm -- *
Очевидно, что проблемы могли бы быть гораздо серьезнее, -rf
если бы использовались похожие имена.
Итак, мой вопрос:
Должны ли мы систематически использовать команды
--
inrm
перед всем, что можно расширить, чтобы избежать неприятных сюрпризов или уязвимостей?
Причина, по которой я это спрашиваю, в том, что некоторое время назад я узнал об этом, rm
а затем забыл об этом, пока недавно товарищ по команде не принес это снова. Однако я никогда не видел никаких рекомендаций в этом смысле, и поскольку это так рискованно, я думаю, стоит ли нам сделать это более актуальным? Должно ли использование --
быть своего рода скриптом и шаблоном консоли при использовании rm
(и, возможно, других команд)?
решение1
В идеальном мире, я думаю, да, мы должны систематически использовать --
. Но мы все научились использовать rm
команду, не набирая систематически --
, а ее набор стоит трех дополнительных нажатий клавиш, так что я не вижу, чтобы это происходило. Плюс, соглашение --
о завершении опций не всегда существовало (вот почему многие люди не узнали об этом тогда, когда научились использовать rm
).
При этом, при использовании rm
(и других команд) в скриптах оболочки, вы определенно всегда должны программировать с защитой. Например:
rm "$1" # Remove the file named in the first command line argument
небезопасно и должно быть rm -- "$1"
. Однако,
rm "/var/spool/foo/$thatfile"
безопасен, поскольку содержание $thatfile
не может привести rm
к неправильному толкованию его аргументов.
В вашем конкретном примере ( rm *
) я бы, вероятно, обычно использовал rm ./*
как безопасный обходной путь.