2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11

Come cambiare i permessi dei file per una directory con un solo comando

Come posso cambiare tutti i permessi dei file di una directory con un solo comando in Unix?

Risposte (3)

21
21
21
2010-11-08 17:40:58 +0000

Per cambiare i permessi su un file o una directory in modo non ricorsivo, usate il comando chmod (vedete man chmod per saperne di più sulle sue opzioni specifiche):

chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable

Per cambiare il proprietario di un file/directory in modo ricorsivo (influenzando tutti i discendenti):

chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Per cambiare i bit dei permessi di tutti i file in una directory, ricorsivamente:

find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-

Per cambiare i bit dei permessi di tutte le directory:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Sarebbe bello se si potesse fare così:

chmod -R 755 dir

Tuttavia, questo ha dei problemi. Tratta file e directory allo stesso modo. Il comando precedente rende le directory elencabili e leggibili da tutti gli utenti, ma rende anche tutti i file eseguibili, che di solito è ciò che non si vuole fare.

Se lo cambiamo in 644, otteniamo un altro problema:

$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...

Il problema è che 644 toglie il bit della lista delle directory, e questo effetto collaterale impedisce un ulteriore attraversamento dell'albero dei file. Si potrebbe aggirare questo problema usando sudo, ma si finisce comunque per avere delle directory che sono completamente inutili per gli utenti non root.

Il punto è che chmod -R funziona bene in alcuni casi (ad esempio chmod -R g-r), ma non nei casi in cui si vuole pasticciare con il bit -x, poiché opera su file e directory indiscriminatamente.

6
6
6
2010-11-08 17:34:48 +0000

chmod ha un flag -R che significa cambiare i permessi su file e directory in modo ricorsivo.

Si può usare la ‘X’ maiuscola per fare la cosa giusta per le cartelle: ‘X’ = “esegui/ricerca solo se il file è una directory o ha già il permesso di esecuzione per qualche utente”

Quindi, ad esempio: chmod -R ug=rwX,o-rwx .

renderebbe un intero albero accessibile al proprietario e al gruppo di ogni file, e non accessibile a nessun altro. Qualsiasi file già eseguibile sarebbe ancora eseguibile dopo, e tutte le directory avrebbero la ‘x’ per l'utente e il gruppo e non per gli altri.

3
3
3
2012-08-01 07:10:21 +0000
chmod -R <file permission> *

Dalla pagina man di chmod:

-R, --recursive
              change files and directories recursively

Usa chmod con l'interruttore -R per direzioni multiple che hanno un albero di sottodirectory con milioni di file all'interno e vuoi cambiare i permessi dei file insieme in un colpo solo.

Il permesso dei file può essere per esempio 777, 755, 644 ecc.