chown -R użytkownik: użytkownik. * zmienia uprawnienia wstecz: czy jest to prawidłowe zachowanie?

8

Wpadłem w duże kłopoty, gdy zmieniłem uprawnienia folderu, myfolderw którym się znajduje /. Wydałem polecenie

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

Moim zamiarem była zmiana własności wszystkich ukrytych plików w /myfolder.

Niestety zdałem sobie sprawę, że /zmieniła się także własność , co oczywiście pozostawiło mi zepsuty system. Myślę, że tak się stało, ponieważ ..pasuje .*, ale nadal wydaje mi się dziwne.

Czy zmiana katalogu nadrzędnego jest prawidłowym zachowaniem, czy powinienem zgłosić błąd?

Jeśli to był mój błąd w używaniu Chown, jakie są najlepsze praktyki, aby zapobiec zmianie własności folderów i plików systemowych?

lucacerone
źródło
4
To jest zamierzone zachowanie jako ..mecze.*
Uwe Plonus,
.*oznacza dowolny plik, który kończy się na . *.oznacza dowolny plik, który zaczyna się od.
NickTux
4
@NikTh To na odwrót!
Uwe Plonus
Cóż, jedną z najlepszych praktyk może nie być modyfikowanie /bezpośrednio (tworzenie folderów, usuwanie itp.), Chyba że jest to absolutnie konieczne (otwórz pytanie o to, co chcesz osiągnąć). Jest to również niebezpieczne przy użyciu symboli wieloznacznych + uprawnień roota, ponieważ najczęściej nie masz 100% pewności, na co wpływ ma symbol wieloznaczny.
edwin,
1
@LucaCerone Jest powiązany chmodi chownsą podobnymi poleceniami, oba zaczynają się od ch, zawierają oi mają dwie inne podobne litery ( ni m). </ literal> Poważnie, są one zarówno w postaci: [cmd] -R [mode or user] [one or more files]. Niektóre rozwiązania oferowane w przypadku tego pytania działają również w przypadku Twojej sprawy, na przykład to Sean Reifschneider (w środku). Ta odpowiedź dotyczy także plików ukrytych tylko poprzez usunięcie wzorca globalnego dla plików nie ukrytych.
Lekensteyn

Odpowiedzi:

5

Pamiętaj, że linia poleceń jest rozszerzana (interpretowana) przez powłokę przed wykonaniem

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

interpretowane jest najpierw jako:

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

zwróć uwagę na /myfolder/..w linii poleceń

chown -R luca:luca /myfolder/..jest równoważne z chown -R luca:luca /
tym, że chown działa „do tyłu”

Użyj, echo /myfolder/.*gdy używasz „*” do weryfikacji.

Emmanuel
źródło
@Emmanuel: dlaczego miałbyś używać xargs i sprawdzać, kiedy opcja -R jest wystarczająca?
styczeń
@Emmanuel: dzięki! Czy możesz trochę rozwinąć temat Find i Xargs?
lucacerone
@LucaCerone Nie jestem pewien, dlaczego zaakceptowałeś ten, rekurencyjnie zmienia wszystkie pliki /myfolder. findKomenda jest zbędny i przerwy z nazwy plików zawierające spacje. (jeśli chcesz rekurencyjnie zmieniać pliki, find /myfolder | xargs chown luca:lucajest podobny do chown -R luca:luca /myfolder).
Lekensteyn
Lekensteyn ma rację, zapomniałem grep ^.
Emmanuel
@Lekensteyn Zmieniłem znalezisko, aby nie pasowało do miejsca
Emmanuel,
4

Dobrze. Wiersz poleceń jako root jest bardzo potężny. Przeczytaj niektóre z tych klasyków. I tak, .*dopasowanie do ..jest dokładnie tym, co jest zamierzone. Kropka nie jest znakiem specjalnym. To konwencja. Zgodnie z konwencją, pliki zaczynające się od kropki są ukryte w widoku domyślnym podczas wyświetlania katalogu - nic więcej i nic więcej. Zgodnie z konwencją i-węzeł prowadzący do bieżącego katalogu otrzymuje .nazwę, a i-węzeł prowadzący do katalogu nadrzędnego otrzymuje ..nazwę.

Powinieneś był to zrobić

chown -R luca:luca /myfolder

Czy wspomniałem, że w nazwach plików rozpoczynających się od kropki nie ma nic specjalnego? Recursive chowntak nie uważa.

W tej chwili możesz odzyskać część funkcji, zmieniając własność z powrotem na root. Jednak na dłuższą metę prawdopodobnie będziesz musiał ponownie zainstalować system.

Z reguły:

  1. Unikaj pracy jako root.
  2. Jeśli pracujesz jako root, przeczytaj każde polecenie dwa razy przed naciśnięciem Enter.
  3. Jeśli nie masz pewności co do rozszerzenia, wypróbuj go najpierw za pomocą polecenia „bezpiecznego” (jak echo .*).
  4. Nie pracuj jako root.
  5. Istnieje wiele zadań, które można bezpiecznie wykonać za pomocą interfejsu graficznego (twój problem jest przykładem takiego zadania).
  6. Czy wspomniałem, że powinieneś unikać korzystania z konta root?
styczeń
źródło
Nie chciałem zmieniać własności wszystkich plików w folderze ... tylko ukrytych plików ..
lucacerone
2
OK, więc moje złe. W takim razie chown -R luca:luca /myfolder/.[^.]*myślę, że
stycznia 13
2
echo .*jest dobrym sposobem na wypróbowanie rozszerzenia. Pokaże ci dokładnie to, co widzi muszla. ls .*może być nieco bardziej skomplikowane, jak będzie ona zejść katalogów ( ls -d .*mogłoby być lepsze, ale równie dobrze może po prostu użyć echo .*)
Robie Basak
@RobieBasak dobra uwaga!
stycznia 13