Jak zmienić uprawnienia do folderu i wszystkich jego podfolderów i plików w jednym kroku w systemie Linux? [Zamknięte]

1805

Chciałbym zmienić uprawnienia do folderu i wszystkich jego podfolderów i plików w jednym kroku (komendzie) w systemie Linux.

Próbowałem już poniższego polecenia, ale działa tylko dla wspomnianego folderu:

chmod 775 /opt/lampp/htdocs

Czy istnieje sposób, aby ustawić chmod 755dla /opt/lampp/htdocsi cała jej zawartość w tym podfolderów i plików?

Ponadto, jeśli w przyszłości utworzę nowy folder lub plik htdocs, w jaki sposób można automatycznie ustawić uprawnienia w tym folderze 755?

Spojrzałem też na ten link:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal

Adam
źródło
4
Czy miałeś zamiar pisać, chmod 75 /opt/lampp/htdocsczy naprawdę tak powinno być chmod 755 /opt/lampp/htdocs?
HelloGoodbye,
232
Zabawne jest to, że czwarte najczęściej głosowane pytanie o Linuksa jest „zamknięte jako nie na temat”. Kto, oprócz programisty, obchodziłby chmod? Jak to jest poza tematem? Dlaczego „uprawnienia”, „folder” i „cmod” są nawet tagami, jeśli są nie na temat?
Arthur Dent
8
@ArthurDent, ponieważ to pytanie (choć całkowicie poprawne i pomocne) jest bardziej odpowiednie dla witryny zorientowanej na system SE, takiej jak SuperUser lub ServerFault. Nie jest to wyraźnie związane z programowaniem.
timelmer
26
@timelmer Pewnie, ale pytam ponownie, dlaczego znaczniki „permissions”, „folder” i „cmod”? Kiedy cmod miałby być kiedykolwiek „wyraźnie” używany do programowania?
Arthur Dent
9
Jeśli chcesz być naprawdę wybredny, Bash jest w rzeczywistości językiem skryptowym, ale tak samo jest z php, któremu SO nie wydaje się mieć nic przeciwko.
timelmer

Odpowiedzi:

2955

Inne odpowiedzi są poprawne, ponieważ chmod -R 755ustawią te uprawnienia do wszystkich plików i podfolderów w drzewie. Ale dlaczego, u licha, chcesz ? Może to mieć sens dla katalogów, ale po co ustawiać bit wykonania na wszystkich plikach?

Podejrzewam, że tak naprawdę chcesz ustawić katalogi na 755 i albo zostawić pliki w spokoju, albo ustawić je na 644. W tym celu możesz użyć findpolecenia. Na przykład:

Aby zmienić wszystkie katalogi na 755 ( drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Aby zmienić wszystkie pliki na 644 ( -rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;
WombleGoneBad
źródło
231
Czy ktoś chciałby wyjaśnić, co oznacza {} \;na końcu linia?
Nilzor,
307
@Nilzor chmod 644 {} \;określa polecenie, które zostanie wykonane finddla każdego pliku. {}jest zastępowany ścieżką do pliku, a średnik oznacza koniec polecenia (znak ucieczki, w przeciwnym razie byłby interpretowany przez powłokę zamiast find).
tobbez
25
„ale po co ustawiać bit wykonywania na wszystkich plikach” Dlaczego nie? Jestem nowy w Ubuntu / Linux ...
FlavorScape
12
@ FlavorScape Womble ustawia bit wykonania wyłącznie w katalogach zwróconych przez find. Uprawnienie do wykonywania katalogu umożliwia klasie użytkownika wyświetlenie zawartości tego katalogu i przeniesienie do niego dysku CD. Mówiąc ogólnie, chcesz, aby ri xw katalogu były dla ciebie dostępne, nawet jeśli mogą istnieć dziwne przypadki brzegowe, w których ustawiasz tylko jedno lub drugie. Aby uzyskać więcej informacji, zobacz ten przewodnik: nixsrv.com/llthw/ex23
Alexandr
25
Z wyjątkiem sleepynate, każda odpowiedź zaniedbywała aspekt jego pytania dotyczącego ustawiania uprawnień do plików / folderów tworzonych w przyszłości .
JGarrido
780

Zaznacz opcję -R

chmod -R <permissionsettings> <dirname>

W przyszłości możesz zaoszczędzić dużo czasu, najpierw sprawdzając stronę podręcznika:

man <command name>

Więc w tym przypadku:

man chmod
Steve Robillard
źródło
147
co to manjest
Adam
36
oznacza stronę podręcznika i jest poleceniem linux, które pokazuje stronę podręcznika dla polecenia (większość poleceń linuksa ma stronę podręcznika). spróbuj man ls lub man man.
Steve Robillard
8
Nie działało to dla mnie w terminalu w Mac OS X. Tam zrobiłem „chmod -R <permissionsettings> <nazwa_katalogu> *” i zadziałało.
Einar Ólafsson,
127
Myślę, że do tej pory publikowanie tutaj lub korzystanie z Google jest szybsze niż używanie man. Znalezienie przykładów w dokumencie może być bardzo czasochłonne, szczególnie w grepprzypadku, gdy jesteś nowy man, jednak Google lub SO dostarczają przykłady w ciągu kilku sekund.
ely
17
Dla przypomnienia, ci, którzy nie znają Linuksa, mogą nie znać człowieka. Wiem tylko o jego istnieniu, ale próba wymyślenia, jak z niego korzystać, wymagałaby samej przygody google. Być może jest to opłacalne przedsięwzięcie, ale powinieneś zdać sobie sprawę, że znalazłem TEN BARDZO post za pośrednictwem Google i odpowiedział na DODATKOWE pytanie, które zadałem. Zasoby, mój przyjacielu. Zasoby są bezcenne. I możesz myśleć, że to nie miało sensu i że powinien po prostu sprawdzić mężczyznę, ale pomogło mi to i setkom innych (nawet tysiąc). Więc proszę, rozważ to.
Soundfx4
391

Jeśli chcesz ustawić uprawnienia do wszystkich plików a+ri wszystkich katalogów do a+x, i wykonaj to rekurencyjnie przez pełne drzewo podkatalogów, użyj:

chmod -R a+rX *

X(To jest kapitał X, a nie mały x!) Jest ignorowany dla plików (chyba że są one już wykonywalny dla kogoś), ale służy do katalogów.

Pete
źródło
27
Świetna odpowiedź. Pamiętaj, że * nie będzie pasować do ukrytych plików (nazwy zaczynające się od kropki). Korzystanie z niej może być bardziej sensowne. (dla bieżącego katalogu).
Aaron Adams,
21
To jest poprawna odpowiedź. W moim przypadku chciałem ustawić wszystkie katalogi na 775 i wszystkie pliki na 664 . Znakomita odpowiedź @ Pete'a doprowadziła mnie do chmoddokumentów, w których zorientowałem się, że mogę skorzystać chmod -R g+wX .. Brawo!
czadoh
8
To nie usunie xplików, jeśli już je mają.
Benoit Duffez
5
W przypadku, gdy nie jest to całkowicie jasne, wielkie litery X oznaczają „zrób wszystkie katalogi wykonywalne” (ale nie pliki).
Matt Browne
4
@BenoitDuffez, jeśli Twoim celem jest również usunięcie bitu wykonywalnego z plików, możesz łączyć dyrektywy, takie jak „a-x + rX”, aby usunąć „x” ze wszystkiego, a następnie ustawić „r” na wszystko, a „x” tylko na katalogi .
nunks
144

Możesz używać -Rz chmoddo rekurencyjnego przechodzenia wszystkich plików i podfolderów.

Możesz potrzebować sudo, ponieważ zależy to od zainstalowania LAMPY przez bieżącego użytkownika lub innego:

sudo chmod -R 755 /opt/lampp/htdocs
ravi ranjan
źródło
17
Jakoś sudo chmod 755 -R /directorynie działało, ale działało sudo chmod -R 755 /directory. Dziwne. Nawiasem mówiąc, używam Mac OS X.
lomse
8
Jest to zgodne z moim doświadczeniem. Flaga musi pojawić się bezpośrednio po chmod, nie w dowolnym miejscu ciągu.
orionrush,
1
Powyższe polecenie jest niepoprawne. Prawidłowe polecenie rekurencyjne to: sudo chmod -R 755 / opt / lampp / htdocs Uwaga: -R powinno być przed 755
Sandip Patel - SM
To rozwiązanie działa dobrze dla Redhat. Dzięki!
Lavande,
Dobrze sudo chmod 755 -Rdziałało na RHEL i działało
AnBisw
79

Prawidłowe polecenie rekurencyjne to:

sudo chmod -R 755 /opt/lampp/htdocs

-R: zmień każdy podfolder, w tym bieżący folder

Pramendra Gupta
źródło
1
cześć, na pewno o bieżącym folderze jesteś jednym pomimo ścieżki?
shareef
OSX KORZYSTANIE: sudo chmod 777 logs / -R POCZĄTEK: chmod: -R: Nie ma takiego pliku ani katalogu POWINNA BYĆ: sudo chmod -R 777 logs /
elad srebrny 10.10.19
76

Aby ustawić wszystkie podfoldery (rekurencyjnie) użyj -R

chmod 755 /folder -R

I użyj umask, aby ustawić domyślnie nowe foldery / pliki cd / folder umask 755

Topera
źródło
24
NIE ustawiaj umaskna 755! Nie będziesz w stanie wyświetlać, czytać ani używać tworzonych plików lub katalogów!
sleepynate
14
Miałeś na myśli Umask 022?
Xkeeper 30.04. Kwietnia
4
ustawia to wszystko na 755, łącznie z plikami.!
Patrick Mutwiri
@sleepynate O czym ty do diabła mówisz? 755 oznacza, że ​​właściciel może czytać, zapisywać i wykonywać, a wszyscy inni użytkownicy mogą czytać i wykonywać, ale nie zapisywać do obiektu
svin83,
2
@NicHartley @ svin83 umask to bity, które będą maskowane przed uprawnieniami, więc jest to faktycznie odwrotność chmod. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
sleepynate
51

chmod 755 -R /opt/lampp/htdocsrekurencyjnie ustawi uprawnienia. Nie ma możliwości automatycznego ustawienia uprawnień do plików tylko w tym katalogu, który jest tworzony po ustawieniu uprawnień, ale można zmienić domyślne ustawienia uprawnień dla całego systemu za pomocą ustawienia umask 022.

zasypianie
źródło
9
odpowiedź sleepynate jest TYLKO poprawna. Plakat zadał dwa pytania: 1) Jak naprawić uprawnienia do plików i folderów oraz 2) Jak zmienić ustawienia domyślne (czyli „przyszłe” pliki). Jak powiedział Nate, pierwszy to „chmod”, a drugi to „umask”. Dodałbym również, że NIE MA SPOSOBU na zmianę umask tylko w jednym katalogu ... umask to „wszystko albo nic” na użytkownika. Jednak nic nie stoi na przeszkodzie, aby utworzyć nowego użytkownika, który dzieli się z tobą grupami, dzięki czemu możesz po prostu „sudo -u someuser [utworzyć plik]”. To trochę nieszablonowe myślenie, ale to dobre obejście.
Scott Prive
Myślę, że masz rację, ale nie może inheritbyć rozwiązaniem wielu przypadków, czy będzie działać wyłącznie z NTFS-3G?
Sebastian Schlicht
bez zezwolenia na tworzenie folderów może w przyszłości zostać utworzony, nie można skopiować folderu, powiedzmy myforlderz innych miejsc (np. komputera) do tego katalogu docelowego (na serwerze), ponieważ spróbuje on utworzyć nowy folder w katalog docelowy o nazwie, do myfolder której nie masz uprawnień. Jak mam root, po prostu używam chown -R username:usergroup /directory.
Jason Gol
27

Możesz rozważyć tę odpowiedź udzieloną przez nik na superużytkowniku i użyć „one chmod” dla wszystkich plików / folderów takich jak to:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Iam Zesh
źródło
9
Uwaga, łatwo jest przekroczyć granice wiersza poleceń.
Lothar,
1
Mam ten błąd: -bash: / bin / chmod: Zbyt długa lista argumentów
Oleg Abrazhaev
Lepiej byłoby skorzystać z -execopcji find, aby pokonać Argument list too longbłąd.
miravalls
Powiązane: Zmień wszystkie uprawnienia do folderu za pomocą jednego polecenia w U & L.
G-Man mówi „Przywróć Monikę”
20

Posługiwać się:

sudo chmod 755 -R /whatever/your/directory/is

Uważaj jednak na to. To naprawdę może cię zranić, jeśli zmienisz uprawnienia niewłaściwych plików / folderów.

Nate Starner
źródło
20

Oto inny sposób ustawienia katalogów na 775 i plików na 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

To może wyglądać długo, ale jest całkiem fajne z trzech powodów:

  1. Skanuje system plików tylko raz, a nie dwa razy.
  2. Zapewnia lepszą kontrolę nad sposobem obsługi plików w porównaniu z obsługą katalogów . Jest to przydatne podczas pracy z trybami specjalnymi, takimi jak lepki bit , który prawdopodobnie chcesz zastosować do katalogów, ale nie do plików.
  3. Wykorzystuje technikę prosto ze manstron (patrz poniżej).

Zauważ, że nie potwierdziłem różnicy w wydajności (jeśli w ogóle) między tym rozwiązaniem a tym, że po prostu użyłem dwóch poleceń find (jak w rozwiązaniu Petera Mortensena). Jednak zobaczenie podobnego przykładu w instrukcji jest zachęcające.

Przykład ze man findstrony:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Twoje zdrowie

chrisfargen
źródło
Jak włączyć to w skrypcie powłoki, abyśmy mogli uruchomić folder openmod $?
StR
Ludzie, proszę używać xargs. Oszczędza tysiące wywołań procesów.
seanahern
13

chmod -R 755 directory_namedziała, ale w jaki sposób chcesz zachować nowe pliki do 755? Uprawnienia do pliku stają się uprawnieniem domyślnym.

Sanchit Gupta
źródło
Zrobiłem to, ale stamtąd nie mogę otworzyć terminalu. Nie mogę tego naprawić.
Kavindu Gayantha
9

W systemie Mac OS X 10.7 (Lion) jest to:

chmod -R 755 /directory

I tak, jak wszyscy inni mówią, bądź ostrożny, robiąc to.

wmartin
źródło
9

Chcesz się upewnić, że odpowiednie pliki i katalogi są chmod-ed / uprawnienia dla nich są odpowiednie. Dla wszystkich katalogów, które chcesz

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

I dla wszystkich obrazów, JavaScript, CSS, HTML ... nie powinieneś ich wykonywać. Więc użyj

chmod 644 img/* js/* html/*

Ale dla całego kodu logicznego (na przykład kodu PHP) należy ustawić uprawnienia tak, aby użytkownik nie widział tego kodu:

chmod 600 file
NikolaiDante
źródło
6

Myślę, że Adam pytał, jak zmienić wartość umask dla wszystkich procesów, które wiążą się z operacją na /opt/lampp/htdocskatalogu.

Maska trybu tworzenia pliku użytkownika (umask) służy do określania uprawnień do plików dla nowo tworzonych plików. Można go użyć do kontrolowania domyślnego uprawnienia do plików dla nowych plików.

więc jeśli będziesz używał jakiegoś programu ftp do przesyłania plików /opt/lampp/htdocs, musisz skonfigurować serwer ftp, aby używał umask, który chcesz.

Jeśli pliki / katalogi są tworzone na przykład przez php, musisz zmodyfikować kod php

<?php
umask(0022);
// other code
?>

jeśli utworzysz nowe pliki / foldery z sesji bash, możesz ustawić wartość umask w swoim profilu powłoki ~ / .bashrc Lub możesz ustawić umask w /etc/bashrclub /etc/profileplik dla wszystkich użytkowników. dodaj do pliku: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

Aby zmienić uprawnienia do już utworzonych plików, możesz użyć find. Mam nadzieję że to pomoże.

Viktor
źródło
4

Istnieją dwie odpowiedzi na znalezienie plików i zastosowanie się chmoddo nich. Pierwszy to findplik i stosuje się chmodgo, jak się znajduje (zgodnie z sugestią @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Drugim rozwiązaniem jest wygenerowanie listy wszystkich plików z findpoleceniem i dostarczenie tej listy do chmodpolecenia (zgodnie z sugestią @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Obie wersje działają dobrze, o ile liczba plików zwracanych przez findpolecenie jest niewielka. Drugie rozwiązanie wygląda świetnie dla oka i jest bardziej czytelne niż pierwsze. W przypadku dużej liczby plików drugie rozwiązanie zwraca błąd:Argument list too long.

Więc moja sugestia jest taka

  1. Użyj, chmod -R 755 /opt/lampp/htdocsjeśli chcesz zmienić uprawnienia wszystkich plików i katalogów jednocześnie.
  2. Użyj, find /opt/lampp/htdocs -type d -exec chmod 755 {} \;jeśli liczba używanych plików jest bardzo duża. Do -type xwyszukiwania opcja dla określonego typu pliku tylko, gdzie d jest używany do znalezienia katalogu, F pliku i l dla łącza.
  3. Użyj chmod 755 $(find /path/to/base/dir -type d)inaczej
  4. Lepiej użyć pierwszego w dowolnej sytuacji
Prabhu
źródło
2

To jest bardzo proste.

W terminalu przejdź do menedżera plików. Przykład: sudo nemo. Idź /opt/następnie kliknij Właściwości → Pozwolenie . a następnie Inne . Na koniec zmień na tworzenie i usuwanie oraz dostęp do plików do odczytu i zapisu, a następnie kliknij przycisk Zastosuj ... I działaj.

Debian.
źródło
co to jest sudo nemo?
Vikranth Inti