Pull to refresh

Comments 36

$ mkdir -p wtf/why_so_serios
$ touch wtf/why_so_serios/-i
$ rm -rf wtf
$ ls
$
ЧЯДНТ?
> mkdir -p important-dir/{-i,1,2,3}
> cd important-dir/
> rm -rf *
rm: remove directory `1'?
Вы не видите разницы в водимых командах?\
Команда упомянутая топикастером практически не применяется в реальной жизни… Если уж человек решил удалить всё содержимое каталога, то зачем ему оставлять саму папку (а именно это делает команда rm -rf folder/*)? Все нормальные люди пишут rm -rf folder и тут уже спасет только как заметили ниже chattr, а в BSD еще есть и модные флаги (эх хочу такие в Linux) которые работают на уровне ФС и даже root ни чего не удалит.
Потому что:
rm -rf * .tmp

Всего один лишний пробел)
Ну или
rm -rf folder/ *

Опять же с лишним пробелом)
а в BSD еще есть и модные флаги (эх хочу такие в Linux)

$ uname -a
Linux host 2.6.39-1-amd64 #1 SMP Tue May 24 14:34:19 UTC 2011 x86_64 GNU/Linux
$ touch unremovable
$ su -c 'chattr +i unremovable'
Password:
$ rm unremovable
rm: remove write-protected regular empty file `unremovable'? y
rm: cannot remove `unremovable': Operation not permitted
$ su -c 'rm unremovable'
Password:
rm: cannot remove `unremovable': Operation not permitted
UFO just landed and posted this here
Вообще для таких вещей создан chattr.
Особенно рулит +a, если вы часто путаете ">" и ">>".
Ну и да:
inky@laptop1:~/test$ ls 1/
-i
inky@laptop1:~/test$ ls 2/
-i
inky@laptop1:~/test$ rm -r 1/
inky@laptop1:~/test$ rm -rf 2/
inky@laptop1:~/test$ ls
3 4 -i
>если вы часто путаете ">" и ">>".

… то в zsh есть адская технология, которая ругается при попытке перезаписать файл через > в интерактивном шелле
Как раз месяц назад поставил себе вместо bash zsh…
% echo qq > test
% echo qqq > test
% cat test
qqq
%
тишина…
>Как раз месяц назад поставил себе вместо bash zsh…

осталось его два года настраивать.

можете начать с setopt NOCLOBBER
UFO just landed and posted this here
Полностью согласен. Только это не команда создана, а дополнительные атрибуты файловой системы extX. Т.е. на других файловых системах свои дополнительные атрибуты и эта команда не сработает.
А так — да, chattr +i и даже рут не сможет удалить файл или директорию пока не снимет атрибут, или +a если в файл надо писать.
Для избежания путаницы с >> и > рекомендую вот это:

set -o noclobber

из man bash:
If the redirection operator is >, and the noclobber option to the set builtin has been enabled, the
redirection will fail if the file whose name results from the expansion of word exists and is a reg‐
ular file. If the redirection operator is >|, or the redirection operator is > and the noclobber
option to the set builtin command is not enabled, the redirection is attempted even if the file
named by word exists.
MacPro$ mkdir test
MacPro$ touch test/-i
MacPro$ rm -rf test
MacPro$ ls
MacPro$

Макось тоже не с вами
> Одна простая вещь

Какое содержательное название топика. Ведь по нему так удобно будет потом искать!
Нет, так не лучше, как нам уже десятки лет намекает виндовс. Если система на каждое удаление задаёт один и тот же вопрос, рано или поздно пользователь сначала ответит “да”, а потом задумается что же он натворил.
Бедные скрипты. Точнее тот, кто скриптами будет пользоваться.
alias'ы не работают в скриптах.
ну только если вы в ша-банге не укажете #!/bin/bash -i.
Да, точно. Впрочем, постоянные вопросы на удаление не есть хорошо.
а потому что правильно писать «rm — *» или «rm important-directory/*» — в таких записях «файлы-флаги» не сработают, а будут пониматься как обычные файлы.
Упс, в команде rm имелось в виду два дефиса перед *
rm -- *
а файл защитить можно атрибутом «неизменяемый»
пример как установить
chattr +i /etc/resolv.conf

посмотреть
lsattr /etc/resolv.conf

пример как снять
chattr -i /etc/resolv.conf
В топике не хватает Капитана Очевидности, который расскажет, что -i — это параметр для команды rm, который говорит о том, что нужно запрашивать подтверждение перед удалением, а * — это такой символ, который не передается в команду rm, а разворачивается командной оболочкой (например, bash) в список всех файлов. В результате имя файла -i для rm воспринимает как параметр. Но любое изменение записи команды rm делает эту хитрость нерабочей, например rm -rf ./*
Автор слишком хотел написать самый короткий пост, поэтому его не все поняли.
Вы просто завидуете что у меня короче! :)
> Вы просто завидуете что у меня короче! :)

Вы сделали мой день!

> Вы просто завидуете что у меня короче! :)

Мужики достали и померялись!
UFO just landed and posted this here
Это самый короткий топик-перевод, который я видел.
Надо было сделать еще короче:

Одна простая вещь

man chattr
тогда уж:

Одная простая вещь

man
Sign up to leave a comment.

Articles