Рекурсивний чоун, починаючи з каталогу вище поточного каталогу


27

Я не зміг увійти до свого "адміністратора", і Alt+ Ctrl+ F1показав, що всі мої файли належать моєму "стандартному" користувачеві. Незвичайно.

Тому я ретельно змінився /home/adminі зробив

sudo chown -R admin:admin *

.*теж).

Чудово.

Тоді я не зміг увійти як мій "стандартний" користувач, і виявилося, що всі файли у файлі /home/standardтепер належали "адміністратору".

Досить жартівливий. Чому це відбувається?

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

зробив те ж саме, змінився /home/adminтакож /home/standard.

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


Можливо, одне є символічним посиланням на інше? що ls -l /homeговорить?
steeldriver

Відповіді:


35

Ця проблема викликана тим, що ви виконали:

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/*
    

Дякую, я розумію, що це зараз ... да, P Досі не знаю, чому власник змінився в першу чергу, якщо це якимось чином не пов’язане з Grub, який видав мені помилку і перебив на мене програму встановлення 14.04. Мій стандартний користувач був першим, кого я створив, і пізніше я продемонстрував цього і створив нового.
DavidP

@DavidP Мені не зрозуміло, що ти
отримуєш

3

Я думаю, що це параметр ". *" Для файлів; що відповідає всьому, що починається з ".", включаючи "." та файли "..". ".." - це батьківський каталог, який включає все, що знаходиться під ним.

Найкращий спосіб - створити резервну копію однієї папки та вказати фактичну папку, яку потрібно змінити (/ home / admin).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.