2013-04-04 7 views
18

Sto provando a modificare in modo ricorsivo il permesso delle directory e sottodirectory per la directory" data "e l'errore successivo. Qualcuno può fornire input sull'errore di seguito?chmod: impossibile leggere la directory `. ': Autorizzazione negata

<username:/local/mnt/workspace/data>chmod -R 0644 . 
chmod: cannot read directory `.': Permission denied 
+0

Prova 'sudo chmod -R 0644 .'. – Blender

+0

'sudo !!' dopo che non è riuscito. – alex

+1

@Blender: 'sudo chmod -R -644 .' rimuoverà il permesso di esecuzione (ricerca) dalla directory corrente e tutte le directory sottostanti - non è una buona idea. –

risposta

40

Le directory richiedono l'autorizzazione di esecuzione impostata per visualizzarne il contenuto.

Da http://content.hccfl.edu/pollock/AUnix1/FilePermissions.htm

Si può pensare di lettura ed esecuzione sulle directory in questo modo: le directory sono file di dati che contengono due pezzi di informazioni per ogni file all'interno, il nome del file e il suo numero di inode. È necessaria l'autorizzazione di lettura per accedere ai nomi dei file in una directory. È necessario il permesso Execute (a.k.a. search) per accedere agli inode dei file in una directory, se si conosce già il nome del file.

Quando si modifica un'autorizzazione di directory su 644, non è possibile leggere i file in tale directory sebbene sia possibile leggere tale directory per vederla esistente.

Hai bisogno di fare questo:

$ chmod -R 0755 . 

Un modo migliore potrebbe essere quella di utilizzare il permesso stringa se si vuole semplicemente disattivare

In caso contrario, si può vedere la directory, ma non accedere alle informazioni in quella directory.

È forse meglio utilizzare le autorizzazioni relative al posto di permessi assoluti:

$ chmod -R go-w . 

rimuoverà il permesso di scrittura dal gruppo e altri, ma non toccare i permessi di esecuzione.

È inoltre possibile utilizzare find solo per impostare le directory o semplicemente per impostare i file:

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

Questo toccherà solo directory, l'impostazione di lettura ed esecuzione autorizzazioni per tutte le directory e l'impostazione il permesso di scrittura per il proprietario. In questo modo, non stai impostando il permesso di esecuzione sui file stessi.

+0

fondamentalmente voglio rimuovere le autorizzazioni di esecuzione sui file nelle directory e sottodirectory ma mantenere le autorizzazioni di esecuzione su directoreis..come posso farlo? – user2125827

+1

È praticamente la stessa cosa. Usa il flag '-type f' nel' find' per restituire solo i file e scipt sulle directory: 'find. -tipo f -exec ugo-x {} \; '. Questo sta usando nomi simbolici (u = utente g = gruppo o = altro. -x significa rimuovi permesso di esecuzione). In questo modo, non stai toccando i file.Dovrai aggiungere di nuovo il permesso di esecuzione alle directory che li hai rimossi dall'inizio, in modo che 'find' possa leggerne il contenuto. –

0

Suppongo che dal momento che si utilizza la ricorsione che si sta cercando di CD in una directory che non ha il permesso di esecuzione per te.