chown -R user: user. * меняет права назад: это правильное поведение?

8

У меня возникли большие проблемы при изменении разрешения папки, myfolderв которой он находится /. Я выпустил команду

sudo chown -R luca:luca /myfolder/.*

Мое намерение состояло в том, чтобы изменить владельца всех скрытых файлов в /myfolder.

К сожалению, я понял, что также /было изменено право собственности , что, конечно, оставило меня со сломанной системой. Я думаю, что это произошло из-за ..совпадений .*, но все же мне кажется странным.

Правильное ли изменение родительского каталога или я должен отправить отчет об ошибке?

Если это была моя ошибка при использовании chown, какие рекомендации лучше использовать для предотвращения смены владельца системных папок и файлов?

lucacerone
источник
4
Это намеренное поведение как ..спички.*
Уве Плонус
.*означает любой файл, который заканчивается на . *.означает, что любой файл, который начинается с.
NickTux
4
@NikTh Это наоборот!
Уве Плонус
Ну, одним из лучших методов может быть не /непосредственное изменение (создание папок, удаление и т. Д.), Если в этом нет крайней необходимости (откройте вопрос о том, чего вы хотели достичь). Также опасно использовать подстановочные знаки + привилегии root, потому что чаще всего вы не уверены на 100%, на что повлиял подстановочный знак.
Эдвин
1
@LucaCerone Это связанные chmodи chownпохожие команды, обе начинаются с ch, содержат oи имеют две другие похожие буквы ( nи m). </ literal> Серьезно, они оба имеют форму [cmd] -R [mode or user] [one or more files]. Некоторые решения, предлагаемые по этому вопросу, также подходят для вашего случая, например, это решение от Шона Рейфшнайдера (в середине). Этот ответ также применим к скрытым файлам только путем удаления шаблона glob для не скрытых файлов.
Лекенштейн

Ответы:

5

Помните, что командная строка раскрывается (интерпретируется) оболочкой перед выполнением

sudo chown -R luca:luca /myfolder/.*

сначала интерпретируется как:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

обратите внимание /myfolder/..в вашей командной строке

chown -R luca:luca /myfolder/..эквивалентно тому, chown -R luca:luca /
что чоун бежит "задом наперед"

Используйте, echo /myfolder/.*когда вы используете "*" для подтверждения.

Эммануэль
источник
@ Emmanuel: зачем вам использовать xargs и найти, когда достаточно опции -R?
Январь
@ Эммануэль: спасибо! Вы можете немного рассказать о find и xargs?
lucacerone
@ LucaCerone Я не уверен, почему вы приняли это, он рекурсивно изменяет все файлы в /myfolder. Команда findявляется излишней и прерывается именами файлов, содержащими пробелы. (если вы хотите рекурсивно изменять файлы, find /myfolder | xargs chown luca:lucaпохоже на chown -R luca:luca /myfolder).
Лекенштейн
Лекенштейн прав я забыл grep ^.
Эммануэль
@Lekensteyn Я изменил находку, чтобы не соответствовать пространству
Эммануэль
4

Хорошо. Командная строка от имени root очень мощная. Прочитайте некоторые из этих классических. И да, .*соответствие ..именно то, что предназначено. Точка не особенный персонаж. Это соглашение. По соглашению, файлы, которые начинаются с точки, скрываются от представления по умолчанию при перечислении каталога - ни меньше, ни больше. По соглашению, индекс, ведущий к текущему каталогу, получает .имя, а индекс, ведущий к родительскому каталогу, получает ..имя.

То, что вы должны были сделать, было

chown -R luca:luca /myfolder

Я упоминал, что нет ничего особенного в именах файлов, начинающихся с точки? Рекурсивный chownтак не считает.

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

Как общее правило:

  1. Избегайте работы с правами root.
  2. Если вы работаете как root, прочитайте каждую команду дважды, прежде чем нажать Enter.
  3. Если вы не уверены в расширении, попробуйте сначала с помощью «безопасной» команды (например echo .*).
  4. Не работают как root.
  5. Есть много задач, которые можно безопасно выполнить с помощью графического интерфейса (ваша задача - пример такой задачи).
  6. Я упоминал, что вы должны избегать использования учетной записи root?
январь
источник
Я не хотел менять владельца всех файлов в папке ... только скрытых файлов ..
lucacerone
2
ОК, тогда плохо. В таком случае chown -R luca:luca /myfolder/.[^.]*я думаю
января 13
2
echo .*хороший способ попробовать расширение. Он покажет вам именно то, что видит оболочка. ls .*может быть немного более запутанным, так как это пойдет вниз по каталогам ( ls -d .*может быть, лучше, но можно было бы просто использовать echo .*)
Роби Басак
@RobieBasak хорошая мысль!
Январь