Cambiare i permessi ricorsivamente: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
m (piccole ristrutturazioni pagina)
Riga 1: Riga 1:
= Introduzione: I Tasti Multimediali =
==Descrizione==
I moderni sistemi multimediali ci forniscono una serie di tasti per scelte rapide che fino a poco tempo fa non erano contemplate.
Possiamo alzare il volume, far partire il player preferito o modificare la luminosit� dello schermo semplicemente con un tasto.
Purtroppo ogni produtore (sia in campo desktop che laptop) produce quasto tipo di controllo a sua descrizione, creando tastiere non-standard che vanno configurate in modo diverso di caso in caso.


Per fare ci� vi sono vari metodi: uno di questi � mostrato in [[Tasti Multimediali: configurazione ed uso|questa guida]].
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.
Noi invece utilizzeremo Hotkeys.


= Preparazione del sistema =
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).


La preparazione del sistema � molto semplice, necessitiamo infatti solo di hotkeys e xev.
{{Box|Esempio|Un utilizzo tipico è quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. }}
Mentre xev � probabilmente gi� installato (incluso nei pacchetti del server X) dovremo andare ad installare il demone hotkeys alla debian-way:


<pre>
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.
# apt-get install hotkeys
 
</pre>
{{Box|Esempio| $ cd cartella/da/modificare/
$ chmodr g-wx g-w
}}


= Come Funziona Hotkeys =
In ultimo, il seguente comando:


Hotkeys legge dei file con estensione .def che si trovano nella directory /usr/share/hotkeys.In questi file sono specificati i tasti (tramite il loro keycode) e l'applicazione che devono lanciare. Vi sono gi� parecchi file .def pre-impostati. Se avrete fortuna sar� sufficiente lanciare uno di questi per far funzionare la vostra tastiera. Per visualizzare la lista dei layout di tastiera disponibili, � possibile lanciare hotkeys con il flag "-l":
$ chmodr -h


<pre>
mostra una schermata di help.
$ hotkeys -l
  mx2500      - Memorex MX2500 Keyboard
  inspiron8100 - Dell Inspiron 8100 Notebook
  kbp8993      - Chicony KBP-8993 keyboard
  ...
  ipanel      - Asus IPanel
$
</pre>


Nel caso in cui la vostra tastiera non sia presente in elenco, potrete modificare un file def o crearne uno nuovo da zero.
==Script==


== Lanciare hotkeys ==
<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.
#


Il comando per lanciare un dato file .def con hotkeys � il seguente:
help () {
    cat << EOF


<pre>
  chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory
$ hotkeys -t nomefile
</pre>
  Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it>
 
  Released under the GNU GENERAL PUBLIC LICENSE.


ad esempio nel caso del file prova.def:


<pre>
  DESCRIZIONE
$ hotkeys -t prova
</pre>


== Configurare hotkeys ==
  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.


Nel caso in cui la vostra tastiera non fosse inclusa nell'elenco delle tastiere supportate non vi rester che editare un file .def o crearne uno voi stessi.
Ecco dove entra in campo xev!
Lanciando xev, infatti


<pre>
  USO
$ xev
</pre>
  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).


la pressione di ogni tasto produrr� un output sul terminale in cui sar� segnato il keycode del tasto premuto.
  E' possibile specificare un terzo parametro opzionale che indica una
  directory iniziale diversa da quella corrente.


[[Immagine:Xev.jpg|thumb|center|Esempio]]
EOF
    exit 1
}


Sar� cos� elementare aprire l'editor di testo preferito ed assegnare il comando al valore determinato con xev nel file .def
valid_mod () {
# Controlla che i permessi siano sintatticamente corretti
   
    echo "$1" |\
    perl -n -e 'if ($_ =~ /^[01234567]{3}$/) {exit 0}; exit 1'
    ok_numerical=$?


<pre>
    echo "$1" |\
/usr/share/hotkeys# nano prova.def
    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 $?
}


<?xml version="1.0"?>
[[ "$1" = -* ]] && help


<definition>
FILE_MOD="$1"
DIR_MOD="$2"
BASE_DIR="$3"
[ -z "$1" ] && FILE_MOD="640"
[ -z "$2" ] && DIR_MOD="750"
[ -z "$3" ] && BASE_DIR="./"


  <config model="prova Internal Keyboard">
cd "$BASE_DIR"


     <VolUp      keycode="158"/>
if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then
     <VolDown    keycode="165"/>
     echo -e "\n ERRORE: Il formato dei permessi e' errato. Per i dettagli"
     <Mute      keycode="166"/>
     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>


== Note ==
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.


Dato che probabilmente la tastiera in uso sar� sempre la stessa pu� essere utile creare uno [[creare uno script d'avvio|script]] per avviare automaticamente hotkeys all'accensione del pc e posizionarlo nella cartella ~/.config/autostart [http://www.freedesktop.org (Standard freedesktop).]
==Changelog==
* Release iniziale
* Aggiunto un check esplicito per evitare di seguire i link simbolici
* Cambiato header e funzione help()


L'opzione -Z aggiunta alla stringa di lancio eviter il fastidioso splash screen del programma.


<pre>
----
$ hotkeys -Z -t prova
Autore: [[Utente:TheNoise|~ The_Noise]]
</pre>


-----
[[Categoria:Sistema]]
Autore: [[Utente:Jango|jango]]
[[Categoria:Shell]]
[[Categoria:Script]]
[[Categoria:Tips&Tricks]]

Versione delle 17:56, 7 set 2006

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).

Info.png 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.

Info.png Esempio
$ cd cartella/da/modificare/
$ chmodr g-wx g-w


In ultimo, il seguente comando:

$ chmodr -h

mostra una schermata di help.

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 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

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: ~ The_Noise