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.