Cambiare i permessi ricorsivamente: differenze tra le versioni
mNessun oggetto della modifica |
m (aggiunto motivo) |
||
(18 versioni intermedie di 7 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
[ | {{Da_cancellare|Sostituibile con l'esecuzione di un singolo chmod, si veda [[Discussione:Cambiare_i_permessi_ricorsivamente | qui]].}} | ||
{{Versioni compatibili}} | |||
__TOC__ | |||
== Descrizione == | |||
Questo script cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. In tal modo si possono impostare con un solo comando i permessi di esecuzione di un'intera gerarchia di directory (in modo da potervi accedere) e contemporaneamente togliere il permesso di esecuzione a tutti i file ivi contenuti. | Questo script cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. In tal modo si possono impostare con un solo comando i permessi di esecuzione di un'intera gerarchia di directory (in modo da potervi accedere) e contemporaneamente togliere il permesso di esecuzione a tutti i file ivi contenuti. | ||
Riga 6: | Riga 9: | ||
Basta posizionarsi nella cartella interessata e lanciare lo script. Se non viene usato nessun parametro verranno impostati dei sani default (640 per i file e 750 per le cartelle). | Basta posizionarsi nella cartella interessata e lanciare lo script. Se non viene usato nessun parametro verranno impostati dei sani default (640 per i file e 750 per le cartelle). | ||
{{Box|Esempio|Un utilizzo tipico | {{Box|Esempio|Un utilizzo tipico è quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. }} | ||
I due parametri opzionali sono i permessi rispettivamente di file e cartelle nello stesso formato accettato da chmod. Un terzo parametro opzionale indica una directory di partenza diversa da quella corrente.<br/> | |||
Ad esempio: | |||
<pre> | |||
$ cd cartella/da/modificare/ | |||
$ chmodr g-wx g-w | |||
</pre> | |||
In ultimo, il seguente comando: | |||
<pre> | |||
$ chmodr -h | |||
</pre> | |||
mostra una schermata di help. | |||
== Script == | |||
Lo script: | |||
<pre> | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
# | # | ||
# | # chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory | ||
# | # | ||
# | # Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> | ||
# | |||
# Released under the GNU GENERAL PUBLIC LICENSE. | |||
# | |||
# | |||
# | # | ||
help () { | help () { | ||
cat << EOF | |||
chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory | |||
Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> | |||
Released under the GNU GENERAL PUBLIC LICENSE. | |||
DESCRIZIONE | |||
Cambia ricorsivamente i permessi di file e directory, ma impostando | |||
permessi diversi per i file e per le directory. Nella ricorsione non | |||
segue link simbolici a directory. | |||
USO | |||
chmodr | |||
Senza parametri, partendo dalla directory corrente imposta i permessi | |||
640 (- rw- r-- ---) a tutti i file e 750 (- rwx r-x ---) a tutte le | |||
sotto-directory. | |||
chmodr permessi_file permessi_dir | |||
Applica ai file nella directory corrente e sotto-directory i | |||
'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi | |||
per i permessi è la stessa di chmod quindi sia ottale (es. 640) che | |||
simbolica (es. o-rwx). | |||
È possibile specificare un terzo parametro opzionale che indica una | |||
directory iniziale diversa da quella corrente. | |||
EOF | |||
exit 1 | |||
} | } | ||
valid_mod () { | valid_mod () { | ||
# | # Controlla che i permessi siano sintatticamente corretti | ||
echo "$1" |\ | echo "$1" |\ | ||
Riga 87: | Riga 100: | ||
if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then | if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then | ||
echo -e "\n ERRORE: Il formato dei permessi | echo -e "\n ERRORE: Il formato dei permessi è errato. Per i dettagli" | ||
echo -e " vedere la pagina di manuale di chmod.\n" | echo -e " vedere la pagina di manuale di chmod.\n" | ||
exit 2 | exit 2 | ||
Riga 93: | Riga 106: | ||
ls | while read file; do | ls | while read file; do | ||
if [ -d "$file" ]; then | if [ -L "$file" ]; then | ||
echo " ==>> '$file' è un link simbolico, lo ignoro." | |||
continue | |||
elif [ -d "$file" ]; then | |||
echo " Entro nella directory '$file'" | echo " Entro nella directory '$file'" | ||
chmod u+rwx "$file" 2> /dev/null ||\ | chmod u+rwx "$file" 2> /dev/null ||\ | ||
{ echo " Non ho i permessi per entrare in '$file'"; continue; } | { echo " Non ho i permessi per entrare in '$file'"; continue; } | ||
cd "$file"; $0 $@; cd - | cd "$file"; $0 $@; cd - > /dev/null | ||
chmod $DIR_MOD "$file" && echo -e " Directory '$file' impostata.\n" | chmod $DIR_MOD "$file" && echo -e " Directory '$file' impostata.\n" | ||
elif [ -f "$file" ]; then | elif [ -f "$file" ]; then | ||
echo -n " | echo -n " $file ... " | ||
chmod $FILE_MOD "$file" && echo " [ OK ]" | chmod $FILE_MOD "$file" && echo " [ OK ]" | ||
else | else | ||
echo " Ignoro '$file' | echo " Ignoro '$file'." | ||
fi | fi | ||
done | done | ||
</pre> | </pre> | ||
Il core dell script (quello che esegue effettivamente il cambio dei permessi) | Il core dell script (quello che esegue effettivamente il cambio dei permessi) è la parte finale, da <code>ls | while read ...</code> in poi. Tutta la parte precedente serve solo a controllare la correttezza dei parametri passati e a stampare una eventuale schermata di help. | ||
Autore | == Changelog == | ||
* Release iniziale | |||
* Aggiunto un check esplicito per evitare di seguire i link simbolici | |||
* Cambiato header e funzione help() | |||
{{Autori | |||
|Autore = [[Utente:TheNoise|~ The_Noise]] | |||
}} | |||
[[Categoria:Bash Scripting]] |
Versione attuale delle 10:42, 28 mag 2015
Attenzione. Questa guida è stata proposta per la cancellazione in quanto contenente materiale potenzialmente dannoso, inutile o fuorviante. Motivo: Sostituibile con l'esecuzione di un singolo chmod, si veda qui. |
Versioni Compatibili Tutte le versioni supportate di Debian |
Descrizione
Questo script cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. In tal modo si possono impostare con un solo comando i permessi di esecuzione di un'intera gerarchia di directory (in modo da potervi accedere) e contemporaneamente togliere il permesso di esecuzione a tutti i file ivi contenuti.
Basta posizionarsi nella cartella interessata e lanciare lo script. Se non viene usato nessun parametro verranno impostati dei sani default (640 per i file e 750 per le cartelle).
Esempio Un utilizzo tipico è quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. |
I due parametri opzionali sono i permessi rispettivamente di file e cartelle nello stesso formato accettato da chmod. Un terzo parametro opzionale indica una directory di partenza diversa da quella corrente.
Ad esempio:
$ cd cartella/da/modificare/ $ chmodr g-wx g-w
In ultimo, il seguente comando:
$ chmodr -h
mostra una schermata di help.
Script
Lo script:
#!/bin/bash # # chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory # # Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> # # Released under the GNU GENERAL PUBLIC LICENSE. # help () { cat << EOF chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> Released under the GNU GENERAL PUBLIC LICENSE. DESCRIZIONE Cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. Nella ricorsione non segue link simbolici a directory. USO chmodr Senza parametri, partendo dalla directory corrente imposta i permessi 640 (- rw- r-- ---) a tutti i file e 750 (- rwx r-x ---) a tutte le sotto-directory. chmodr permessi_file permessi_dir Applica ai file nella directory corrente e sotto-directory i 'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi per i permessi è la stessa di chmod quindi sia ottale (es. 640) che simbolica (es. o-rwx). È possibile specificare un terzo parametro opzionale che indica una directory iniziale diversa da quella corrente. EOF exit 1 } valid_mod () { # Controlla che i permessi siano sintatticamente corretti echo "$1" |\ perl -n -e 'if ($_ =~ /^[01234567]{3}$/) {exit 0}; exit 1' ok_numerical=$? echo "$1" |\ perl -n -e 'if ($_ =~ /^[ugoa]{0,3}[+-=]{1}[rwx]{1,3}$/) {exit 0}; exit 1' ok_symbolical=$? # echo "num $ok_numerical, sym $ok_symbolical" # DEBUG [ "$ok_numerical" = 0 -o "$ok_symbolical" = 0 ] return $? } [[ "$1" = -* ]] && help FILE_MOD="$1" DIR_MOD="$2" BASE_DIR="$3" [ -z "$1" ] && FILE_MOD="640" [ -z "$2" ] && DIR_MOD="750" [ -z "$3" ] && BASE_DIR="./" cd "$BASE_DIR" if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then echo -e "\n ERRORE: Il formato dei permessi è errato. Per i dettagli" echo -e " vedere la pagina di manuale di chmod.\n" exit 2 fi ls | while read file; do if [ -L "$file" ]; then echo " ==>> '$file' è un link simbolico, lo ignoro." continue elif [ -d "$file" ]; then echo " Entro nella directory '$file'" chmod u+rwx "$file" 2> /dev/null ||\ { echo " Non ho i permessi per entrare in '$file'"; continue; } cd "$file"; $0 $@; cd - > /dev/null chmod $DIR_MOD "$file" && echo -e " Directory '$file' impostata.\n" elif [ -f "$file" ]; then echo -n " $file ... " chmod $FILE_MOD "$file" && echo " [ OK ]" else echo " Ignoro '$file'." fi done
Il core dell script (quello che esegue effettivamente il cambio dei permessi) è la parte finale, da ls | while read ...
in poi. Tutta la parte precedente serve solo a controllare la correttezza dei parametri passati e a stampare una eventuale schermata di help.
Changelog
- Release iniziale
- Aggiunto un check esplicito per evitare di seguire i link simbolici
- Cambiato header e funzione help()
Guida scritta da: ~ The_Noise | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |