Zrobiłem kopię zapasową na dysku NTFS i ta kopia naprawdę okazała się konieczna. Jednak dysk NTFS pomylił uprawnienia. Chciałbym przywrócić je do normalnego trybu bez ręcznego naprawiania każdego pliku.
Jednym z problemów jest to, że nagle wszystkie moje uzyskane pliki tekstowe wykonują uprawnienia, co jest błędem ofc. Więc próbowałem:
sudo chmod -R a-x folder\ with\ restored\ backup/
Ale jest to błędne, ponieważ usuwa również x
zezwolenie z katalogów, co czyni je nieczytelnymi.
Jakie jest prawidłowe polecenie w tym przypadku?
permissions
executable
recursive
gaazkam
źródło
źródło
Odpowiedzi:
W
-x
usuwa wykonać uprawnienia dla wszystkichThe
+X
doda wykonać uprawnienia dla wszystkich, ale tylko dla katalogów.źródło
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
Ok, ponownie przeczytałem strony podręcznika "chmod" dla Mac OS X, BSD i Linux i przeprowadziłem kilka eksperymentów. Oto, czego dowiedziałem się o trybach symbolicznych. Może się skomplikować, ale warto to zrozumieć:
Na przykład
a+x
sprawiłby , że plik byłby wykonywalny przez wszystkich.a+X
sprawiłby, że plik byłby wykonywalny przez wszystkich, JEŚLI byłby on wykonywalny przez kogokolwiek.a+x
sprawiłoby, że każdy mógł przeszukiwać katalog.a+X
sprawiłoby, że każdy mógłby przeszukiwać katalog.Kluczowa różnica między BSD a Linuksem polega na tym, że w przypadku BSD określanie odbywa się na podstawie uprawnień do pliku przed wykonaniem chmod. W Linuksie ustalenie jest dokonywane bezpośrednio przed wykonaniem klauzuli + X.
Tak więc w przypadku BSD kombinacja
a-x,a+X
usunęłaby uprawnienia do wykonywania / wyszukiwania, a następnie spowodowałaby, że każdy mógł przeszukiwać katalog, a plik mógł być wykonywany przez wszystkich, jeśli pierwotnie byłby wykonywalny przez kogokolwiek.W systemie Linux
a-x,a+X
usuwałby uprawnienia do wykonywania / wyszukiwania, a następnie umożliwiałoby przeszukiwanie katalogu przez wszystkich, pozostawiając plik wykonywalny przez nikogo.Oto konkretny przykład: na komputerze BSD: katalog, plik wykonywalny i plik niewykonywalny:
Zauważ, że zarówno katalog, jak i „plik” są wykonywane przez użytkownika, ale nie przez innych.
Teraz wykonujemy
chmod a-x,a+X *
. Pierwsza klauzula usunie bit wykonywania / wyszukiwania od wszystkich użytkowników dla wszystkich plików, ale druga klauzula doda go z powrotem zarówno dla „opłaty”, jak i „fie”. „opłata”, ponieważ jest to katalog, i „fie”, ponieważ miał przynajmniej jeden bit wykonywalny na początek.Wykonałem ten sam wynik
chmod -x+X
.Wniosek: Rozwiązanie Jak Gibb będzie działało na Linuksie, ale w przypadku BSD należy wykonać dwa przejścia.
Nie testowałem tego na SVr4 ani innych wariantach Uniksa.
źródło
Jednym ze sposobów na to:
źródło
chmod a-x {}
chmod a-x {}
może również spowodować usunięcie uprawnień, których nie chcesz zmieniać, i może pozostawić pliki do zapisu na całym świecie. Chodzi o to, że 0644 jest „ogólnie rozsądnym” kompromisem. OP powinien oczywiście również zaangażować mózg przed zastosowaniem rozwiązań z Internetu na swoim komputerze.chmod
są wcześniej uprawnienia . Jeśli pliki kopii zapasowej zawierają skrypty i pliki binarne, ich usunięciex
jest nieprawidłowe. Jeśli wcześniejsze uprawnieniachmod
to 0777, tochmod a-x
nadal pozostawi im 0666, co prawdopodobnie nie jest tym, czego chcesz. Mówię tylko, że jestchmod 0644
to lepsza heurystyka, a niechmod a-x
to, że jest zła.Usunąłbym uprawnienia do wykonywania plików, które nie są w katalogu typu (zgodnie z twoją prośbą) ani dowiązaniem symbolicznym (dowiązania symboliczne są zwykle zawsze rwxrwxrwx i
chmod
wpłynęłyby na cel dowiązania symbolicznego na nich).Uwaga:
zmieniłoby tylko uprawnienia do zwykłych plików. Wykluczałoby to katalogi i dowiązania symboliczne , ale także urządzenia , nazwane potoki , gniazda i ewentualnie inne w zależności od systemu (chociaż w przypadku OP w przypadku kopii zapasowej systemu plików NTFS, raczej nie byłoby ich).
źródło
W zsh użyj kwalifikatora globu,
.
aby dopasować tylko zwykłe pliki (nie zawierające dowiązań symbolicznych) iD
dopasować pliki kropek:Jeśli linia poleceń jest zbyt długa, możesz użyć
zargs
:źródło