Перейти к содержимому

Почему $ find -delete иногда не работает?

4

Я думаю, что я говорю об этой части справочной страницы, которая для меня едва различима:

 -удалять ... Он не будет пытаться удалить имя файла с символом `` / '' в его путь к ``. '' по соображениям безопасности ...

В частности, я пытаюсь это сделать $ find . -name '.svn' -type d -delete. Я понимаю, что могу использовать -execэто вместо этого, но, findпохоже, работает без проблем для других имен, в том числе глубоко в каталогах (которые, очевидно, содержат много /символов в своих путевых именах).

Возможно, он игнорирует точечные файлы, а документация неверна?

976 просмотров
NReilingh спросил 14 лет назад
N 5 044

1 ответ

2

«Причина безопасности» заключается в том, что в промежутке между findперечислением файлов и их удалением злоумышленник может изменить один компонент пути к файлу так, что он станет символической ссылкой на неожиданный каталог, что приведет к удалению файл с таким же именем из неожиданного каталога. Например, вы можете в конечном итоге удалить, /etc/passwdа не /tmp/foo/passwdесли злоумышленник может измениться fooна символическую ссылку, указывающую на /etc.

В разделе 9.1.5 («Более безопасная версия -exec») документации по поиску GNU обсуждается эта проблема более подробно.

Это часть «по отношению к.», Которая запутала меня. Я не понимаю, почему я могу удалить файл вроде asdf / somefile.txt, используя -delete относительно моего рабочего каталога, но не asdf / .svn

NReilingh · 14 лет назад · 0

. не говорит о точечных файлах, как .svn; речь идет о нотации Unix для «текущего каталога» или «рабочего каталога», то есть .. В этом контексте я не вижу причины безопасности, чтобы различать точечные файлы и другие файлы. Итак, вы говорите, что ваша команда find не работает на .svn, но работает на других файлах? Единственная причина, по которой я могу придумать, это то, что -delete не работает на непустых каталогах, AFAIK.

jjlin · 14 лет назад · 0

Действительно - вот что смущает насчет этого. Я понимаю, что . - это рабочий каталог, но я не понимаю, как man-страница утверждает, что она предназначена для сбоя во ВСЕХ подкаталогах соответствующего рабочего каталога, когда это явно не так.

NReilingh · 14 лет назад · 0

Ах. Тогда вполне может быть так, что man-страница просто устарела, и с тех пор они внедрили более безопасный -delete и сняли это ограничение. У меня нет доступа ни к каким машинам OS X, поэтому я не могу сказать наверняка там.

jjlin · 14 лет назад · 0
jjlin ответил 14 лет назад
J 11 565