Рекурсивный chown, начиная с каталога выше текущего каталога

7

Я не смог войти в свою учетную запись «admin» и Alt + Ctrl + F1 показал, что все мои файлы принадлежат моей «стандартный» пользователь. Одд.

Итак, я тщательно изменился на /home/admin и сделал

sudo chown -R admin:admin *

.* тоже).

Великий.

Тогда я не смог войти в систему как мой «стандартный» пользователь, и оказалось, что все файлы в /home/standard теперь принадлежат «admin».

Довольно юмористический. Почему это происходит?

sudo chown -R standard:standard /home/standard/*

сделал то же самое, изменил /home/admin , а также /home/standard .

Я более смущен, чем обычно, потому что я пытался обновиться до 15.04, и это сильно разрушило мой компьютер, поэтому я возвращаю вещи с 14.04, пожалуйста, будьте терпеливы со мной.

    
задан DavidP 02.06.2015 в 22:12
источник

2 ответа

10

Эта проблема вызвана тем, что вы запустили:

sudo chown -R admin:admin .*

Мы знаем, что . указывает текущий каталог, а .. указывает родительский каталог. Когда вы запускаете команду с .* , это просто означает, что соответствует любому скрытому файлу в текущем каталоге (с указанием . ), самой текущей директории ( . ), родительского каталога ( .. ). Просто добавьте что-нибудь после . ( * означает 0 или более символов). В результате родительский каталог вместе со всеми дочерними каталогами получает chown -ed до admin:admin .

Посмотрите на этот тест:

test$ ls -al
drwxrwxr-x 4 foo foo 4096 Jun  3 07:15 .
drwxrwxr-x 4 foo foo 4096 Jun  2 18:06 ..
drwxrwxr-x 2 foo foo 4096 Jun  3 07:15 egg
drwxrwxr-x 2 foo foo 4096 Jun  3 07:12 spam

$ sudo chown -R bar:bar spam/.*

test$ ls -al
drwxrwxr-x 4 bar  bar  4096 Jun  3 07:15 .
drwxrwxr-x 4 foo  foo  4096 Jun  2 18:06 ..
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:15 egg
drwxrwxr-x 2 bar  bar  4096 Jun  3 07:12 spam

Чтобы вернуться назад, вам нужно снова chown затронутых каталогов.

Я не совсем уверен, каков ваш план, но вот несколько идей:

  • В chown любой каталог рекурсивно (включая скрытые файлы):

    sudo chown -R foo:foo /spam/egg/
    
  • В chown только файлы (включая скрытые файлы) внутри этого каталога (а не самого каталога):

    (shopt -s dotglob && sudo chown -R foo:foo egg/*)
    
  • В chown только не скрытые файлы (без самой директории):

    sudo chown -R foo:foo egg/*
    
ответ дан heemayl 03.06.2015 в 01:46
источник
3

Я думаю, что это параметр «. *» для файлов; который соответствует всем, начиная с «.», включая «.». и файлы «..». «..» - это родительский каталог, который включает все под ним.

Лучший способ - создать резервную копию одной папки и указать фактическую папку, которую вы хотите изменить (/ home / admin).

    
ответ дан Marty Fried 03.06.2015 в 00:45
источник

Ознакомьтесь с другими вопросами по меткам