Cambio ricorsivo permessi su file

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Cambio ricorsivo permessi su file

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

Avatar utente
cymon
Linux 2.x
Linux 2.x
Messaggi: 430
Iscritto il: ven 5 gen 2007, 1:40
Slackware: 13.1
Kernel: 2.6.33.4-smp
Desktop: Fluxbox
Località: Milano
Contatta:

Re: Cambio ricorsivo permessi su file

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Cambio ricorsivo permessi su file

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Cambio ricorsivo permessi su file

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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Cambio ricorsivo permessi su file

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Cambio ricorsivo permessi su file

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

Avatar utente
sardylan
Linux 3.x
Linux 3.x
Messaggi: 993
Iscritto il: mar 24 apr 2007, 9:21
Nome Cognome: Luca Cireddu
Slackware: current 64bits
Kernel: 3.16
Desktop: KDE 4.14
Distribuzione: Debian - CLFS
Località: Cagliari
Contatta:

Re: Cambio ricorsivo permessi su file

Messaggio 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 {} \;

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Cambio ricorsivo permessi su file

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Cambio ricorsivo permessi su file

Messaggio 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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Cambio ricorsivo permessi su file

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Cambio ricorsivo permessi su file

Messaggio 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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Cambio ricorsivo permessi su file

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

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Cambio ricorsivo permessi su file

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: Cambio ricorsivo permessi su file

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

Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: Cambio ricorsivo permessi su file

Messaggio 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 :-)

Rispondi