1 760
contributi
m (piccole ristrutturazioni pagina) |
m (→Descrizione) |
||
Riga 1: | Riga 1: | ||
= | ==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). | |||
{{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. | |||
{{Box|Esempio| $ cd cartella/da/modificare/ | |||
$ chmodr g-wx g-w | |||
}} | |||
In ultimo, il seguente comando: | |||
$ chmodr -h | |||
mostra una schermata di help. | |||
==Script== | |||
<pre> | |||
#!/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 e' la stessa di chmod quindi sia ottale (es. 640) che | |||
simbolica (es. o-rwx). | |||
E' 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 e' 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' e' 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 | |||
</pre> | </pre> | ||
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() | |||
---- | |||
Autore: [[Utente:TheNoise|~ The_Noise]] | |||
[[Categoria:Sistema]] | |||
[[Categoria:Shell]] | |||
[[Categoria:Script]] | |||
[[Categoria:Tips&Tricks]] |
contributi