Newsgroup: it.comp.lang.perl
Titolo: CHMOD

Ho visto che con perl posso cambiare il settaggio del chmod. Mi interessa
questo argomento per quanto riguarda la protezione su dei file esterni: nel
momento in cui cambio il permesso di accesso ad un qualsiasi file (abilito
la possibilità di eseguirlo), questo permesso cambia solo per l'utente che
ha lanciato il mio script, oppure per tutti?
In quest'ultimo caso come posso ovviare a questo problema?
Grazie
Andrea

che so io il chmod ha sempre un codice a 3 rispettivamentea 4 (il zero
davanti) cifre e ognuna significa qualcosa no?
tioi chmod 750 é na roba tipo 700 + 50 + 0 che é da capire tipo 700 = read
write execute per l'owner mentre 50 = read execute per il group (non so che
sia di preciso) e 0 = niente per il pubblico
cosa vuol dire , che l'owner , noi, possiamo farci quello che ci pare , il
group ( non so che sia di preciso) puo' solo leggere e eseguire mentre il
pubblico nulla del tutto.
Altro non so.. sorry


 Altro non so.. sorry
Quelle tre cifre di cui parli non sono altro che la traduzione in numero
decimale di un numero binario.
La sintassi di chmod deriva dall'analogo comando Unix. In effetti in
questo OS ogni file e' caratterizzato da un array di nove elementi (per
la verita' possono essere anche 10 ma tralasciamo).
I primi 3 elementi regolano i permessi per owner, i secondi tre per
group e gli ultimi per others. I permessi possibili sono r(read), w
(write)e x (execute), nell'ordine scritto. 
Cerchiamo di essere chiari.
Per esempio un file puo' avere permessi:
rwxr-x--x
Cioe' il proprietario del file puo' leggerlo, scriverlo ed eseguirlo
(rwx), il gruppo puo' solo leggerlo ed eseguirlo (r-x) e gli altri
possono solo eseguirlo (--x).
Un file
-------w- e' un file scrivibile solo da others.
Prendiamo come esempio il seguente permesso:
r-x-wx--x
Consideriamo il permesso del proprietario cioe' i primi tre elementi
(r-x). Se assegno 1 nel caso in cui ci sia il permesso (cioe' quando
c'e' la lettera di uno dei permessi) e 0 in caso opposto (cioe' quando
il permesso non e' selezionato), otterro'
101
Se ora converto 101 da binario in decimale ottengo:
5, il primo numero del permesso.
Facciamo la stessa cosa per i permessi per il gruppo (cioe' il secondo
terzetto di elementi): in questo caso -wx
Quindi il numero binario corrispondente e' 011 che convertito in
decimale da':
3
Stessa cosa per i permessi di others (ultime tre cifre): --x. Il numero
binario corrispondente e' 1 e il decimale e':
1
Quindi il permesso scritto in precedenza (r-x-wx--x) puo' esser scritto
come
531
So che all'inizio puo' sembrare un po' complesso (a chi e' digiuno di
Unix) ma poi si fa l'occhio ai vari tipi di permessi.
Ciao.
-- 
Pier Angelo Favarolo
-+-+-+-+-+-+-+-+-+-+
Il mio sito sulle tariffe telefoniche:
http://tariffe.surf.to
http://surf.to/tariffe
http://ascu.unian.it/~pangelo/tariffe

 531
Infatti 101011001 binario = 531 ottale 
Giusto come consiglio, occhio al rapporto tra stringhe e numeri ottali:
   chmod 0664, $fname;
ti setta il file correttamente a rw-rw-r--
   chmod '0664', $fname;
ti converte il tuo '0664' nel decimale 664 il cui ottale è 1230 che
corrisponde ad un inaspettato -w--wx--T (et voilà il flag t che sbuca
fuori...)
Giusto per esperienza, ci ho patito un po', tempo fa, a capire dove
stava un bug; avevo qualcosa tipo
   $flags='0755';
   ...
   chmod $flags, $fname;
ed ovviamente (col senno di poi...) non funzionava una bella ceppa;
  chmod oct($flags), $fname;
mi ha risolto (sigh) il problema.
 
Saluti,
   Samuele

fuori...)
e pensare che si é partiti da uno che voleva solo sapere che chmod mettere
ai suoi files :-))

 Infatti 101011001 binario = 531 ottale
Certamente, pero' io ho parlato di conversione in decimale delle singole
terzine (ritengo che cosi' si capisca piu' velocemete il significato),
non dell'intero array.
Comunque non avevo mai fatto caso al problema che tu hai evidenziato.
Grazie per l'informazione.


Metodo Pratico:
r(read)=4
w(write)=2
x(execute)=1
chmod 751   da come risultato:
rwxr-x--x
cioe':
owner r+w+x  7
group  r+x       5
other   x            1
e cosi via....
So che non e' 'tecnicamente' corretto ma e' semplice ed efficace.
Max