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


8

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

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

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

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

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

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


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 хорошая мысль!
Январь
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.