Nella directory della mia applicazione Web, come posso modificare tutte le autorizzazioni della mia cartella in rwxr-xr-x (755)? E come posso modificare tutti i permessi dei file in rw-r--r-- (644)? Desidero modificare tutte le cartelle e i file, inclusi i file e le cartelle secondari.
So che il comando seguente cambierà tutti i file e le cartelle, ma voglio discriminare tra un file e una cartella.
chmod -R 755 ./my_web_app_project
Risposta accettata:
Un modo per fare esattamente quello che vuoi con un find il comando è
find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'
-o significa OR.
Questo comando elabora tutti gli oggetti nell'albero del progetto
che sono di tipo "file" o digita "directory",
ed esegue diversi comandi in base al tipo di ciascun oggetto.
Puoi renderlo leggermente più efficiente
sostituendo i punti e virgola (';' ) con il segno più (+ );
questo dice a find per eseguire chmod 644 una volta, con tutti i nomi dei file semplici come argomenti,
e per eseguire chmod 755 una volta, con tutti i nomi delle directory come argomenti.
A proposito, non è necessario dire ./ per qualsiasi cosa diversa dall'esecuzione di un programma nella directory corrente
(anche se occasionalmente torna utile
per manipolare file i cui nomi iniziano con alcuni caratteri speciali).
Mi chiedo che aspetto abbiano i tuoi permessi ora
(prima di eseguire un chmod ricorsivo a livello di albero ).
I file generalmente non ottengono i bit di autorizzazione di esecuzione attivati
a meno che non siano effettivamente programmi eseguibili,
o tu abbia accidentalmente fatto qualcosa come chmod -R 755 .
Le directory generalmente non ottengono i bit di autorizzazione di esecuzione disattivati
a meno che tu non abbia fatto qualcosa di catastrofico come chmod -R 644 .
Se hai incasinato gravemente i permessi
perché hai fatto un sconsiderato chmod -R con una modalità numerica,
ignora questa sezione
e mantieni il comando all'inizio di questa risposta.
Ma, se le tue autorizzazioni sono generalmente sane,
e vuoi semplicemente imporre uno standard di
autorizzazioni di lettura/scrittura per l'utente,
e autorizzazioni di sola lettura per tutti gli altri (gruppo e mondo ),
puoi farlo
chmod -R +rX,u+w,go-w my_web_app_project
in cui
+rXsignifica+r,+X(nota che laXè in maiuscolo — questo è importante).+rsignifica impostare il permesso di lettura per utente, gruppo e altro.+Xsignifica impostare il permesso di esecuzione per utenti, gruppi e altri se è attualmente impostato per qualcuno di essi o se l'oggetto è una directory .
u+wsignifica impostare il permesso di scrittura per l'utente.go-wsignifica disattivare il permesso di scrittura per il gruppo e altri.
Riepilogo di alcuni punti chiave:
- Certo che puoi
chmodsolo cose che possiedi
(a meno che tu non sia privilegiato) e che non sono di sola lettura.
Se ci sono cose nella tua directory che non puoichmod,
uno di questi comandi causerà un errore. - Il
findi comandi non avranno alcun effetto su cose
che non siano directory o file (ad esempio, named pipe). - Il
findcomando con-exec chmod 755 {} +potrebbe non riuscire
se non disponi già dell'autorizzazione di lettura ed esecuzione per tutte le cartelle
nella directory di primo livello. - Il
chmod -R +rX,u+w,go-wcomando will- imposta tutte le directory in modalità 755,
- ignora i link simbolici,
- per tutti gli altri tipi di file (inclusi, ad esempio, named pipe):
- impostalo a 755 se ha già almeno un
xpo; altrimenti, - impostalo su 644.
- impostalo a 755 se ha già almeno un