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
+rX
significa+r,+X
(nota che laX
è in maiuscolo — questo è importante).+r
significa impostare il permesso di lettura per utente, gruppo e altro.+X
significa impostare il permesso di esecuzione per utenti, gruppi e altri se è attualmente impostato per qualcuno di essi o se l'oggetto è una directory .
u+w
significa impostare il permesso di scrittura per l'utente.go-w
significa disattivare il permesso di scrittura per il gruppo e altri.
Riepilogo di alcuni punti chiave:
- Certo che puoi
chmod
solo 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
find
i comandi non avranno alcun effetto su cose
che non siano directory o file (ad esempio, named pipe). - Il
find
comando 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-w
comando 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
x
po; altrimenti, - impostalo su 644.
- impostalo a 755 se ha già almeno un