При запуске команды в заголовке из /root она каким-то образом переходит на / и меняет владельца на ALLfiles, я заметил это только потому, что всплыли сообщения об ошибках для / proc.

Может быть, я старею, но должен. и .. не быть проигнорированным любой командой? AFAIK они там из-за файловой системы и не служат никакой другой цели.

работает Debian Wheezy с последними обновлениями.

2 ответа2

4

Может быть, я старею, но должен. и .. не быть проигнорированным любой командой? AFAIK они там из-за файловой системы и не служат никакой другой цели.

Это не имеет смысла, просто потому, что вы специально кормили имена . и .. наколоть своим chown <...> .* В таком случае, почему chown должен думать, что вы не сделали то, что хотели?

Имена были переданы в chown, потому что оболочка расширяла их в соответствии с заданными вами критериями расширения глобуса оболочки, которые соответствовали обоим . и .. вместе со всеми остальными точечными каталогами в текущем каталоге. Так как вы сказали chown работать рекурсивно, он спустился в эти каталоги и все, что под ними. Это означает, что он "спустился" .. и затем продолжал работать оттуда.

Вы можете попробовать это самостоятельно, выполнив команду echo .* Чтобы увидеть имена, введенные в командную строку chown. Сравните это с выводом echo * с shopt dotglob и выключенным shopt dotglob соответственно (shopt -s dotglob для включения, shopt -u dotglob для выключения). Используйте ls а не echo чтобы увидеть первый уровень рекурсии.

Есть совершенно веские причины для запуска даже chown -R . или .. Наиболее очевидным представляется извлечение архива, содержащего неверную информацию о владельцах файлов и всех файлов в одном каталоге; в таком случае chown -R abc:xyz . из несжатого каталога совершенно разумно сделать сброс владельца к чему-то разумному в вашей системе.

Если вы хотите , чтобы ваша оболочка не .* . и .. тогда вам нужно убедиться, что он настроен правильно для вашей конкретной оболочки. Например, цитирование из GNU bash 4.2.37(1) -релизов (актуально для Debian Wheezy на момент написания этой статьи, версия пакета Debian bash 4.2+dfsg-0.1+deb7u3 для архитектуры amd64):

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

Помните, что частью философии Unix является «доверие, что пользователь знает, что он делает».

1
  1. Точка (.) Не может быть проигнорирована, потому что это текущий каталог
  2. Двойная точка (..) (верхняя директория) не будет проигнорирована, поскольку она может использовать подстановочный знак

Но если вы выполните это таким образом, вы не будете иметь такого эффекта

chown -R root:root *

Если вы хотите изменить только скрытые файлы, попробуйте следующие каталоги:

find . -regex '.*/\..*' -exec chown root:root {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .