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)

Hugo der Hungrige
źródło
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
Hugo der Hungrige
źródło
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

kenorb
źródło
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źć.)

John Allsup
źródło
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.

Mark D.
źródło
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!

Christian Michael
źródło
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 {} \;
Jair Reina
źródło
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.

mza
źródło
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

Hemant Kumar
źródło
-9

To też może działać:

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

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
źródło
1
NIE NALEŻY TEGO ROBIĆ! wpływa na cały serwer!
T.Todua