Come posso modificare tutte le autorizzazioni di file di una directory in un comando in Unix?
Come posso modificare tutte le autorizzazioni di file di una directory in un comando in Unix?
Risposte:
Per modificare i permessi su una voce di file o directory in modo non ricorsivo, usa il chmodcomando (vedi 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 modificare in modo ricorsivo il proprietario di un file / directory (che interessa tutti i discendenti):
chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group
Per modificare i bit di autorizzazione di tutti i file in una directory, ricorsivamente:
find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-
Per modificare i bit di autorizzazione di tutte le directory:
find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x
Sarebbe bello se potessi semplicemente fare questo:
chmod -R 755 dir
Tuttavia, questo ha problemi. Tratta i file e le 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 desidera 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 644elimina il bit dell'elenco delle directory e questo effetto collaterale impedisce ulteriori attraversamenti dell'albero dei file. È possibile aggirare questo problema utilizzando sudo, ma si finisce con directory completamente inutili per gli utenti non root.
Il punto è che chmod -Rfunziona bene in alcuni casi (ad esempio chmod -R g-r), ma non nei casi in cui si desidera pasticciare con il -xbit, poiché opera su file e directory indiscriminatamente.
644o che stia inserendo -xle directory? La domanda stabilisce solo che vuole cambiare i permessi, non a cosa in particolare.
chmod -R go=u,go-w /dir
chmodha un -Rflag che significa cambiare le autorizzazioni su file e directory in modo ricorsivo.
Puoi usare la 'X' maiuscola per fare la cosa giusta per le cartelle: 'X' = "esegui / cerca solo se il file è una directory o ha già i permessi di esecuzione per alcuni utenti"
Quindi, ad esempio: chmod -R ug = rwX, o-rwx.
Renderebbe un intero albero accessibile al proprietario e al gruppo di ciascun file e non accessibile a nessun altro. Qualsiasi file già eseguibile sarebbe comunque eseguibile in seguito, e tutte le directory avrebbero la 'x' per l'utente e il gruppo e non per gli altri.
chmod -R 444 somediruna directory con i file al suo interno. Si ottiene Permission deniedperché il flag -x viene rimosso dalle directory ed è necessario per continuare a leggere la directory.
chmod -R <file permission> *
Dalla pagina man di chmod:
-R, --recursive
change files and directories recursively
Utilizzare chmodcon -Rswitch per più direzioni che ha l'albero delle sottodirectory con milioni di file all'interno e si desidera modificare le autorizzazioni dei file di questi file in una volta sola.
L'autorizzazione del file può essere ad es. 777, 755, 644 ecc.