Pagina 1 di 1

Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:00
da samiel
Ipotizziamo che io ripristini molte dir da un CD, per cui i file risultano
in sola lettura. Io devo ripristinare i permessi 644 sui file, ma 755 sulle dir,
altrimenti non ci entro... Che tipo di comando dovrei dare? Se infatti do
chmod 644 * le dir non sono più percorribili, e fare tutto a mano
dir per dir diventa un lavoro lunghissimo...

Grazie!
M.

Re: Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:10
da cymon
samiel ha scritto:Ipotizziamo che io ripristini molte dir da un CD, per cui i file risultano
in sola lettura. Io devo ripristinare i permessi 644 sui file, ma 755 sulle dir,
altrimenti non ci entro... Che tipo di comando dovrei dare? Se infatti do
chmod 644 * le dir non sono più percorribili, e fare tutto a mano
dir per dir diventa un lavoro lunghissimo...

Grazie!
M.
In questi casi l'onnipotenza del comando find si manifesta in tutto il suo splendore
Da una root comune:

find . -type d -exec chmod 755 {} \;
Cambia i permessi di tutto quello che incontra di tipo directory
Eppoi

find . -type f -exec chmod 644 {} \;
Cambia i permessi di tutto quello che incontra di tipo file

Magari controlla se c'è un modo per raffinare ciò che vuoi in qualche modo, sempre guardando il man di find, ma secondo me la strada più diretta è questa

Re: Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:11
da targzeta
Io farei:

Codice: Seleziona tutto

chmod -R 0644 *
poi

Codice: Seleziona tutto

find . -type d|xargs chmod 0755
Non l'ho testato ma dovrebbe essere corretto.

Spina

Re: Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:13
da samiel
La prima soluzione mi sembra ineccepibile.
La seconda (che non ho ancora testato) probabilmente
da un punto di vista pratico funziona. Però a mio avviso
è un po' ozioso cambiare prima tutto in 664 per poi
cambiare di nuovo le dir in 755. O c'è un vantaggio
di cui no mi rendo conto?

Mille grazie a tutti e due!
M.

Re: Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:26
da targzeta
Pensavo al fatto che forse non erano solo o file regolari o directory. Comunque un vantaggio reale lo ottieni usando la pipe con xargs invece di usare l'opzione -exec di find. Questo perchè l'opzione -exec lancia un processo ogni volta che i "filtri" precedenti non bloccano il controllo. In pratica, se hai 1000 file, il comando:

Codice: Seleziona tutto

find . -type f -exec chmod 0664 '{}' \;
esegue 1001 processi, 1 find e 1000 chmod. Mentre:

Codice: Seleziona tutto

find . -type f|xargs chmod 0664
esegue solo 3 processi, find, xargs e chmod.

Spina

Re: Cambio ricorsivo permessi su file

Inviato: ven 26 set 2008, 23:34
da samiel
Mmmmm... capisco l'economizzazione dei processi
a cui alludi. In ogni caso anche col l'altra procedura
si tratta di pochi secondi...

Grazie
M.

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 1:52
da sardylan
spina ha scritto:Io farei:

Codice: Seleziona tutto

chmod -R 0644 *
poi

Codice: Seleziona tutto

find . -type d|xargs chmod 0755
Non l'ho testato ma dovrebbe essere corretto.

Spina
Non ho provato, ma penso che non funzioni!! Se non sbaglio, il primo chmod dovrebbe toglierti l'eseguibilità alle dirs... Con la seconda chiamata non dovresti più essere in grado di accedere alle dirs, perciò ti potrebbe creare problemi...
Imho, la strada migliore resta questa:

Codice: Seleziona tutto

#!/bin/sh

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 9:02
da targzeta
:lol: hai proprio ragione, non ci avevo pensato!
Comunque forse non riesco a spiegarmi bene quanto guadagni con la pipe. Se hai 90.000 file, e 10.000 direcotry, con i 'find + exec' esegui 100.002 processi, ovvero fari ricominciare il contatore dei processi!!!! Con i i 'find | xargs' invece esegui solo 6 processi. Non lo so, se per voi non cambia niente allora....

Spina

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 10:51
da conraid
Come dice Spina, anche le sacre scritture (ma ahimé è tra gli appunti per i tipis per slackers.it, ma non ho segnato la fonte) consigliano

Codice: Seleziona tutto

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755
Quel print0 cosa cambia?
Così faccio il post del tips e mi tolgo il pensiero.
Offtopic: ho tutta una serie di tips e faq ma non trovo mai il tempo e soprattuttto la voglia di tradurli e/o scriverli

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:01
da targzeta
conraid ha scritto:....
Quel print0 cosa cambia?
...
La risposta la si trova in xargs(1):

Codice: Seleziona tutto

--null, -0
              Input items are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken lit-
              erally).  Disables the end of file string, which is treated like any other argument.  Useful when input  items  might  contain  white  space,  quote
              marks, or backslashes.  The GNU find -print0 option produces input suitable for this mode
In effetti non avevo considerato nomi file che contenessero spazi.

Spina

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:04
da Mario Vanoni
conraid ha scritto:Come dice Spina, anche le sacre scritture (ma ahimé è tra gli appunti per i tipis per slackers.it, ma non ho segnato la fonte) consigliano

Codice: Seleziona tutto

find . -type f -print0 | xargs -0 chmod 644
find . -type d -print0 | xargs -0 chmod 755
Quel print0 cosa cambia?
-print0 ed xargs -0 permettono che i nomi dei files
contengano white spaces inclusi newlines

chmod: meglio 0644 e 0755, piu` leggibile e chiaro

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:11
da conraid
Mario Vanoni ha scritto: -print0 ed xargs -0 permettono che i nomi dei files
contengano white spaces inclusi newlines
Non so voi, ma odio i nomi di files con gli spazi, molto MS-Style... purtroppo si iniziano a vedere anche su alcuni server unix ultimamente.
Mario Vanoni ha scritto: chmod: meglio 0644 e 0755, piu` leggibile e chiaro
ok, quindi la versione "migliore" sarebbe

Codice: Seleziona tutto

find . -type f -print0 | xargs -0 chmod 0644
find . -type d -print0 | xargs -0 chmod 0755
o la cambiereste?

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:17
da targzeta
conraid ha scritto:...ok, quindi la versione "migliore" sarebbe

Codice: Seleziona tutto

find . -type f -print0 | xargs -0 chmod 0644
find . -type d -print0 | xargs -0 chmod 0755
o la cambiereste?
No, dovrebbe essere questa.
Spina

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:48
da Mario Vanoni
conraid ha scritto: Non so voi, ma odio i nomi di files con gli spazi, molto MS-Style... purtroppo si iniziano a vedere anche su alcuni server unix ultimamente.
Non hai grande scelta, p.e.
le foto di vacanza che mio figlio mi passa
sono spesso nomi con spazi,
solo copiare "paese luogo data jpg" ...

Altro esempio, Seamonkey contiene
una dir "Local Folders"
dirs/files "{...}", non so se digeribili da sh ecc.

Re: Cambio ricorsivo permessi su file

Inviato: sab 27 set 2008, 11:59
da conraid
Mario Vanoni ha scritto: Non hai grande scelta, p.e.
le foto di vacanza che mio figlio mi passa
sono spesso nomi con spazi,
solo copiare "paese luogo data jpg" ...

Altro esempio, Seamonkey contiene
una dir "Local Folders"
dirs/files "{...}", non so se digeribili da sh ecc.
Sì, lo so, anche "Crash Reports", sempre per parlare di Mozilla, però secondo me è una cosa deprecabile, e chi usa un sistema linux, ma soprattutto chi ha in gestione server unix-like dovrebbe evitare. Poi che sia una mia "fisima" va beh... ne ho tante, una in più non ha valore :-)