Modificare tutte le autorizzazioni di file e cartelle di una directory in 644/755


184

Come cambierei tutti i file in 644 e tutte le cartelle in 755 usando chmoddal linuxprompt dei comandi? (Terminale)


6
Se qualcuno (@animuson) fosse così gentile da spiegarmi, perché questa domanda chmod è fuori tema e tutti gli altri (14.438 risultati) qui non sono ...
hugo der hungrige

Poco in ritardo, ma questo comando farà anche la risposta accettata in un colpo solo: chmod -R a = r, a + X, u + w / your / path
MichaelICE,

Bella domanda, non merita la chiusura. Questi dovrebbero piuttosto essere spostati in un sito secondario stackoverflow piuttosto che chiusi.
Erik Friesen,

1
@hugoderhungrige significa che chiedilo su un sito Server come http://superuser.com:: P ma questa domanda mi ha aiutato qui, grazie.
emotività

Risposte:


345

Un approccio potrebbe essere utilizzando find:

per le directory

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

per i file

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

21
solo per qualcun altro come me, questo non funziona invece prova sudo find /your/location -type f -exec chmod 644 {} \;per i file e sudo find /your/location -type d -exec chmod 755 {} \;per le directory
NineCattoRules

Ho eseguito la soluzione originale e ha incasinato le mie autorizzazioni su file e directory. attento! la soluzione sul commento ha funzionato, grazie!
Mahsa Mortazavi,

3
Perché (?) È meglio Tam chmod -R a=r,u+w,a+X /foo?
Peter Krauss,

fallisce conunable to execute /bin/chmod: Argument list too long
vladkras il

Cosa succede se si desidera che solo la sottocartella sia chmod 755 quando si specifica la posizione desiderata? Perché anche questo renderà la cartella padre 755
MaXi32 il

105

Il modo più semplice è fare:

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

che in pratica significa:

per change file di modes -Recursively dando:

  • user: rpermessi ead, write ed e Xecute,
  • group e oaltri utenti: rpermessi ead ed Xeute, ma non -wpermessi di rito.

Si noti che Xrenderà eseguibile una directory, ma non un file, a meno che non sia già ricercabile / eseguibile.

+X - rendere una directory o un file ricercabile / eseguibile da tutti se è già ricercabile / eseguibile da chiunque.

Si prega di controllare man chmodper maggiori dettagli.

Vedi anche: Come modificare tutte le directory tranne i file (ricorsivamente)? a SU


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

9
Questa risposta, benché ordinata, ha un problema: un file eseguibile prima di eseguire il comando sarà eseguibile in seguito. Vedi la risposta di @JohnAllsup per un comando che non ha questo difetto.
mzuther,

4
@mzuther a meno che questo problema non sia effettivamente presente per te
RiaD

37

Il più breve che ho potuto inventare è:

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

che funziona su GNU / Linux e credo in Posix in generale (dalla mia lettura di: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Quello che fa è:

  1. Imposta file / directory su r__r__r__ (0444)
  2. Aggiungi w per il proprietario, per ottenere rw_r__r__ (0644)
  3. Impostare execute per tutti se una directory (0755 per dir, 0644 per file).

È importante sottolineare che l'autorizzazione del passaggio 1 cancella tutti i bit di esecuzione, quindi il passaggio 3 aggiunge solo i bit di esecuzione indietro per le directory (mai i file). Inoltre, tutti e tre i passaggi avvengono prima di ricorrere in una directory (quindi questo non equivale ad es

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

poiché a = r rimuove x dalle directory, quindi chmod non può ricorrere in esse.)


brillante! mi ha aiutato molto
Jannie Theunissen il

13

Il più facile da ricordare per me sono due operazioni:

chmod -R 644 dirName
chmod -R +X dirName

La + X ha effetto solo sulle directory.


1
Più semplice e più sicuro
Marco Marsala

12

Su https://help.directadmin.com/item.php?id=589 scrivono:

Se hai bisogno di un modo rapido per ripristinare i tuoi dati public_html su 755 per le directory e 644 per i file, puoi usare qualcosa del genere:

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

Ho provato e ... funziona!


Salvavita! Grazie per la soluzione pulita a questo problema! Ha funzionato per me quando ho bisogno di risolvere problemi di autorizzazioni per un'installazione di WordPress!
twknab

Funziona bene per apportare le modifiche all'interno di una directory.
Christian Berendt,

8

Questo ha funzionato per me:

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

3
Attenzione: questi comandi non gestiranno file o directory con spazi nei loro nomi. I comandi nella risposta accettata lo faranno.
Chad Nouis,

1
Questo avvertimento si applica solo se {} non è racchiuso tra virgolette ... quindi, non c'è motivo di giocare con print0 e xargs -0, è sufficiente quanto segue:find /A -type X -exec chmod Y '{}' \;
Michael Stumpfl

6

Esegui entrambi in un unico passaggio con:

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

Come in, trova il tipo f OPPURE digita d, ed esegui il primo ... per i file e il secondo ... per i dir. In particolare:

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

Lascia perdere --changesse vuoi che funzioni in silenzio.


2

Se hai bisogno di un modo rapido per ripristinare i tuoi dati public_html su 755 per le directory e 644 per i file, puoi usare qualcosa del genere:

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

inoltre, se sai che PHP viene eseguito come utente e non come "apache", puoi impostare i file PHP su 600, per un ulteriore livello di sicurezza, ad esempio:

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

Puoi trovare questa risorsa qui: https://help.directadmin.com/item.php?id=589


-9

Anche questo può funzionare:

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

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

1
NON CHIARLO! influenza il server completo!
T.Todua,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.