Starałem się chown
wewnątrz /opt
iz jakiegoś powodu chown
wskoczył do rodzica i chown-owane wszystkiego.
Czy ktoś może zasugerować, dlaczego / jak to może się zdarzyć i jak tego uniknąć w przyszłości? To trochę dotyczy tego, że uruchomienie polecenia w danym katalogu może skutecznie podskoczyć i uruchomić go w katalogu głównym.
ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
permissions
chown
Książę Dougal
źródło
źródło
sudo chown -R root:wwwdata /opt
jak w oknie dialogowym --help ... być może użycie tej rury spowodowało jakiś problem?.*
pasuje..
(katalog macierzysty, który jest/
) - zobacz Czy „chmod 777. * -R” chmod katalogi nadrzędne (..)?cd
przejść do katalogu głównego i pominąć leaing /, albo uruchomić polecenie za pomocą(
, co oznacza, że polecenie nie zostanie wykonane, dopóki nie zostanie)
wpisane dopasowanie , co daje możliwość naciśnięcia Ctrl-C i ratowania złego błędu (np.rm -rf /tmp/foo-install
wciśnięcie Enter zamiast T).Odpowiedzi:
Stało się tak, ponieważ użyłeś:
kiedy zamiast tego powinieneś użyć tego:
Po pierwsze,
-R
rekurencyjne dla wszystkich katalogów w katalogu docelowym.Dodatkowo
*
dopasuje wszystkie pliki i katalogi w bieżącym katalogu. Następnie.*
dopasuje wszystkie pliki i katalogi jeden poziom powyżej bieżącego katalogu.Aby tego uniknąć w przyszłości, możesz użyć
ls
polecenia do zweryfikowania ścieżki przed wykonaniemchown
polecenia, tak jak w poniższych przykładach:Innym sposobem uniknięcia tego jest zawsze użycie pełnej ścieżki do katalogu, w którym chcesz uruchomić polecenie.
Oto przykład:
Edytować:
Możesz użyć następującego polecenia do
chmod
wszystkich ukrytych plików lub katalogów bezpośrednio pod/opt
(zakładając, że pierwszy znak po znaku,.
który je ukrywa, to litera, liczba, myślnik lub znak podkreślenia, które powinny być prawdziwe dla większości plików).Możesz sprawdzić, jakie to będzie pliki,
chmod
uruchamiając następujące polecenie:Pierwsza część polecenia :
for i in /opt/.[A-Za-z0-9-_]*
mówi, że dla wszystkich wyników globu/opt/.[A-Za-z0-9-_]*
przypisz każdy wynik do zmiennej „i”.Glob mówi tutaj, że pierwszy znak musi być,
.
a następny znak[A-Za-z0-9-_]
musi być dowolnym znakiem, który jest AZ lub az lub dowolną liczbą 0-9 lub a-
lub a_
.Pozwoli to wykluczyć wyniki
.
i..
który reprezentuje bieżący katalog i katalog powyżej katalogu bieżącego i będzie obejmować tylko ukryte pliki i katalogi.Druga część polecenia :
do sudo chmod root:www-data "/opt/$i"
mówi, aby uruchomić polecenie dla wszystkich zmiennych, które pasują do bieżącej wartości$i
.Trzecia część polecenia :
done
mówi, że jestem skończona.Dodatkowo użyłeś
-R
opcji z,chmod
a-R
opcja jest rekurencyjna i będzie miała zastosowanie do wszystkich katalogów i plików.Jeśli użyjesz tylko
chmod
polecenia bez opcji, polecenie będzie miało zastosowanie tylko do określonego pliku lub katalogu, który mu podałeś i nie będzie miało zastosowania rekursywnego do katalogów.źródło
ls
danych wyjściowych i jest bardzo powolny, gdy używana jest odpowiedźfind
.**
, i nawet to musi być wyraźnie włączone. IMHO, powinieneś jaśniej określić rolę-R
. (2) Ludzie powinni unikać używania zwykłego,*
ponieważ może on pasować do nazw plików rozpoczynających się od-
, co zostanie następnie zinterpretowane jako opcje. powinienem się przed tym uchronić, ale nie jestem pewien, czy wszystkie polecenia przestrzegają tej konwencji. … (Ciąg dalszy)command
-- *
*
,./*
a nawet/opt/*
nie można znaleźć „plików kropkowych” (.*
), chyba żedotglob
ustawiono opcję. Jak mówią Joshua Besneatte i ilkkachu ,chown -R /opt
ichown -R .
są lepsze. … (Ciąg dalszy)Skorupa glob
.*
mecze..
(katalogu nadrzędnego) w tym przypadku niestety to/
:Dodatkowa dyskusja patrz:
źródło
Twoje kłopoty nadeszły, ponieważ
.*
pasują do wszystkiego , co zaczyna się od kropki. Kontekstem jest bieżący katalog, ponieważ to wyrażenie nie zawiera ścieżki. Jeśli więc są jakieś ukryte pliki lub foldery, takie jak.git
w bieżącym katalogu, dopasujesz je. Ale (jak zobaczysz, uruchamiającls -a
w tym folderze), również dopasujesz.
i..
I
..
, oczywiście, jest katalogiem nadrzędnym, więcchmod -R
rekursywnie celował w wszystko w katalogu nadrzędnym.źródło
/opt/.*
która nie pomogłaby,/opt/..
jest taka sama jak w..
przypadku CWD =/opt
..
jako kontekst, ale nie zadziałało w ten sposób z powodu brakującego slash ...