|
|
Riga 1: |
Riga 1: |
| [Categoria:Sistema] | | [[Categoria:Shell]] |
| [Categoria:Shell] | | [[Categoria:Tips&Tricks]] |
|
| |
|
| 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.
| | Vi sarete chiesti come abilitare quella interessante feature presente in knoppix: quando date un comando tipo |
| | <pre> |
| | # apt-get install kde |
| | </pre> |
|
| |
|
| 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).
| | e premete il tasto tab 2 volte, viene mostrata una lista di tutti i pacchetti inizianti con kde!<br/> |
| | | bene...<br/> |
| {{Box|Esempio|Un utilizzo tipico � quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. }}
| | � sufficiente decommentare le righe |
| | |
| | |
| I due parametri opzionali sono i permessi rispettivamente di file e cartelle nello stesso formato accettato da chmod.
| |
| | |
| {{Box|Esempio| $ cd cartella/da/modificare/
| |
| $ chmodr g-wx g-w
| |
| }}
| |
| | |
| | |
| Ecco lo script:
| |
| <pre> | | <pre> |
| #!/bin/bash
| | if [ -f /etc/bash_completion ]; then |
| #
| | . /etc/bash_completion |
| # Antonio Ingargiola - 2004
| | fi |
| #
| | </pre> |
| # chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory
| |
| #
| |
| # Cambia ricorsivamente i permessi di file e directory, ma impostando
| |
| # permessi diversi per i file e per le directory
| |
| #
| |
| # USO
| |
| # ^^^
| |
| #
| |
| # chmodr
| |
| # Senza parametri imposta ad un sano default tutti i file (640) e alle
| |
| # directory (750) contenute nella directory corrente.
| |
| #
| |
| # 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 che simbolica.
| |
| #
| |
| | |
| help () {
| |
| echo -e "\n Antonio Ingargiola - 2004\n"
| |
| echo -e " chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory\n"
| |
| echo -e " Cambia ricorsivamente i permessi di file e directory, ma impostando"
| |
| echo -e " permessi diversi per i file e per le directory.\n"
| |
|
| |
| echo -e " USO"
| |
| echo -e " ^^^\n"
| |
| echo -e " chmodr"
| |
| echo -e " Senza parametri imposta ad un sano default tutti i file (640) e alle "
| |
| echo -e " directory (750) contenute nella directory corrente.\n"
| |
|
| |
| echo -e " chmodr permessi_file permessi_dir"
| |
| echo -e " Applica ai file nella directory corrente e sotto-directory i "
| |
| echo -e " 'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi"
| |
| echo -e " per i permessi e' la stessa di chmod quindi sia ottale che simbolica.\n"
| |
| exit 1
| |
| }
| |
| | |
| valid_mod () {
| |
| # Check if the mods are syntactically correct
| |
|
| |
| 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"
| | nel file '''/etc/bash.bashrc''' |
|
| |
|
| if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then
| | oltre al completamento riportato come esempio ne aggiunge degli altri...ad esempio, con il comando tar, verranno mostrati i file con estensioni tipiche di file tar (.tar.bz2, .tar.gz, .tgz), verranno completate le opzioni di apt-get (apt-get ins[tab] produrr� apt-get install) e molte altre cose ancora... |
| echo -e "\n ERRORE: Il formato dei permessi e' sbagliato. Per i dettagli"
| |
| echo -e " vedere la pagina di manuale di chmod.\n"
| |
| exit 2
| |
| fi
| |
|
| |
|
| ls | while read file; do
| | se volete scoprirle tutte, analizzate il file '''/etc/bash_completion'''! |
| if [ -d "$file" ]; then
| | Non � nemmeno difficile crearne delle proprie personalizzate, magari per i programmi utilizzati frequentemente! |
| 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 -
| |
|
| |
| 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', probabilmente un link."
| |
| fi
| |
| done
| |
| </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.
| | ---- [[User:MaXeR|MaXeR]] |
| ---- | |
| Autore: [[Utente:TheNoise|~ The_Noise]]
| |