Zmień uprawnienia do wszystkich plików i folderów w katalogu na 644/755


184

Jak zmienić wszystkie pliki na 644 i wszystkie foldery na 755 przy użyciu chmodz linuxwiersza polecenia? (Terminal)


6
Jeśli ktoś (@animuson) byłby tak miły, aby mi wyjaśnić, dlaczego to pytanie chmod jest nie na temat, a wszystkie inne (14 438 wyników) tutaj nie są ...
— hugo der hungrige 30.01.2014

Trochę późno, ale to jedno polecenie wykona również przyjętą odpowiedź w jednym ujęciu: chmod -R a = r, a + X, u + w / your / path
— MichaelICE

Dobre pytanie, nie zasługuje na zamknięcie. Powinny one raczej zostać przeniesione do podstrony stosu przepływu niż zamknięte.
— Erik Friesen,

1
@hugoderhungrige to oznacza, że ​​zapytaj na stronie serwera http://superuser.com:: P, ale to pytanie pomogło mi tutaj, dzięki.
— emocje

3
Krótka odpowiedź:chmod -R u+rwX,go+rX,go-w /foo
— kenorb

Odpowiedzi:


345

Jednym podejściem może być użycie find:

dla katalogów

find /desired_location -type d -print0 | xargs -0 chmod 0755

dla plików

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
tylko dla kogoś takiego jak ja, to nie działa zamiast tego spróbuj sudo find /your/location -type f -exec chmod 644 {} \;plików i sudo find /your/location -type d -exec chmod 755 {} \;katalogów
— NineCattoRules

Uruchomiłem oryginalne rozwiązanie, które pomieszało moje uprawnienia do plików i katalogów. Uważaj! rozwiązanie komentarza zadziałało, dziękuję!
— Mahsa Mortazavi

3
Dlaczego (?) To lepiej tham chmod -R a=r,u+w,a+X /foo?
— Peter Krauss,

kończy się niepowodzeniemunable to execute /bin/chmod: Argument list too long
— vladkras

Co jeśli chcę, aby tylko podfolder był chmod 755 podczas określania żądanej lokalizacji? Ponieważ spowoduje to również, że folder nadrzędny 755
— MaXi32

105

Najłatwiej jest to zrobić:

chmod -R u+rwX,go+rX,go-w /path/to/dir

co w zasadzie oznacza:

do change pliku modes -Recursively podając:

  • user: uprawnienia ead r, wobrządkowe i e Xecute,
  • grupa i onne użytkownicy: rEAD i e Xecute uprawnienia, ale nie -wryt zgody.

Pamiętaj, że Xspowoduje to, że katalog będzie wykonywalny, ale nie plik, chyba że jest już możliwy do przeszukiwania / wykonywania.

+X - uczynić katalog lub plik możliwym do przeszukiwania / wykonywania przez wszystkich, jeśli jest już możliwy do przeszukiwania / wykonywania przez kogokolwiek.

Sprawdź man chmodwięcej szczegółów.

Zobacz także: Jak przeskoczyć wszystkie katalogi oprócz plików (rekurencyjnie)? w SU


7
chmod -R a = r, u + w, a + X / foo
— John Allsup

9
Ta odpowiedź, chociaż schludna, ma problem: plik, który można wykonać przed uruchomieniem polecenia, będzie później wykonywalny. Zobacz odpowiedź @JohnAllsup dla polecenia, które nie ma tej wady.
— mzuther

4
@mzuther, chyba że ten problem jest w rzeczywistości dla Ciebie dostępny
— RiaD

37

Najkrótszy, jaki mogłem wymyślić, to:

chmod -R a=r,u+w,a+X /foo

który działa na GNU / Linux, i ogólnie wierzę w Posix (z mojego czytania: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

To robi:

  1. Ustaw plik / katalog na r__r__r__ (0444)
  2. Dodaj w dla właściciela, aby uzyskać rw_r__r__ (0644)
  3. Ustaw wykonanie dla wszystkich, jeśli katalog (0755 dla katalogu, 0644 dla pliku).

Co ważne, uprawnienie kroku 1 usuwa wszystkie bity wykonania, więc krok 3 dodaje tylko bity wykonania z powrotem dla katalogów (nigdy plików). Ponadto wszystkie trzy kroki mają miejsce przed ponownym przekierowaniem katalogu do katalogu (więc nie jest to równoważne np

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

ponieważ a = r usuwa x z katalogów, więc chmod nie może się w nich ponownie znaleźć.)


znakomity! bardzo mi pomogło
— Jannie Theunissen,

13

Najłatwiejsze do zapamiętania są dwie operacje:

chmod -R 644 dirName
chmod -R +X dirName

+ X wpływa tylko na katalogi.


1
Najprostsze i bezpieczniejsze
— Marco Marsala

12

Na https://help.directadmin.com/item.php?id=589 piszą:

Jeśli potrzebujesz szybkiego sposobu zresetowania danych public_html do 755 dla katalogów i 644 dla plików, możesz użyć czegoś takiego:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Testowałem i ... działa!


Oszczędzanie życia! Dziękujemy za czyste rozwiązanie tego problemu! Pracował dla mnie, gdy muszę naprawić problemy z uprawnieniami do instalacji WordPress!
— twknab

Działa dobrze, aby wprowadzić zmiany w katalogu.
— Christian Berendt,

8

To działało dla mnie:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Uwaga: te polecenia nie obsługują plików ani katalogów ze spacjami w nazwach. Polecenia w zaakceptowanej odpowiedzi będą.
— Chad Nouis,

1
To zastrzeżenie ma zastosowanie tylko wtedy, gdy {} nie jest otoczony cytatami… dlatego nie ma powodu, aby bawić się print9 i xargs -0, wystarczy:find /A -type X -exec chmod Y '{}' \;
— Michael Stumpfl

6

Wykonaj obie czynności za jednym razem z:

find -type f ... -o -type d ...

Jak w, znajdź typ f LUB wpisz d, i wykonaj pierwszy ... dla plików, a drugi ... dla katalogów. Konkretnie:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Pozostaw to, --changesjeśli chcesz, aby działało po cichu.


2

Jeśli potrzebujesz szybkiego sposobu zresetowania danych public_html do 755 dla katalogów i 644 dla plików, możesz użyć czegoś takiego:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

dodatkowo, jeśli wiesz, że PHP działa jako użytkownik, a nie jako „apache”, możesz ustawić pliki PHP na 600, dla dodatkowego poziomu bezpieczeństwa, np .:

find . -type f -name '*.php' -exec chmod 600 {} \;

Możesz znaleźć ten zasób tutaj: https://help.directadmin.com/item.php?id=589


-9

To też może działać:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
NIE NALEŻY TEGO ROBIĆ! wpływa na cały serwer!
— T.Todua
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.