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

27

Я не мог войти в свою учетную запись «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
источник
Возможно, одно является символической ссылкой на другое? что ls -l /homeговорит?
Steeldriver

Ответы:

35

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

sudo chown -R admin:admin .*

Мы знаем, что .указывает на текущий каталог и ..указывает на родительский каталог. Когда вы запускаете команду с помощью .*, это просто означает, что соответствует любой скрытый файл в текущем каталоге (с указанием .), сам текущий каталог ( .), родительский каталог ( ..). Просто поставьте что-нибудь после .( *означает 0 или более символов). В результате родительский каталог вместе со всеми дочерними каталогами становится chownдоступным 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
источник
Спасибо, теперь я понял ... duh; P До сих пор не знаю, почему владелец сменил место в первую очередь, если это не было связано с тем, что Grub дал мне ошибку и вывел на меня программу установки 14.04. Мой стандартный пользователь был первым, которого я создал, и позже я понизил его и создал нового.
DavidP
@DavidP Мне не понятно, к чему ты
клонишь
3

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

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

Марти Фрид
источник