chmod: removendo a permissão “x” de forma recursiva, obstruindo totalmente as permissões

1

Eu tenho uma pasta com algum conteúdo (três arquivos e uma pasta) que se parece com isso:

-rwxr-xr-x 1 max max 14504 2011-05-31 16:55 main.css
-rwxr-xr-x 1 max max  2504 2011-05-31 16:55 reset.css
-rwxr-xr-x 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Eu quero adicionar o grupo de gravação a todos eles e remover o status do executável para todos os usuários. Eu faço os arquivos primeiro:

$ chmod g+w main.css reset.css scaffold.css 
$ chmod a-x main.css reset.css scaffold.css 
$ ls -l
total 28
-rw-rw-r-- 1 max max 14504 2011-05-31 16:55 main.css
-rw-rw-r-- 1 max max  2504 2011-05-31 16:55 reset.css
-rw-rw-r-- 1 max max   916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max  4096 2011-05-31 16:55 ui-lightness

Até aí tudo bem. Agora, a pasta ui-lightness já tem escrita em grupo, então eu só quero remover o status exe dela e de todos os arquivos e subpastas dentro dela.

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

$ chmod -R a-x ui-lightness/
chmod: cannot access 'ui-lightness/jquery-ui-1.8.11.custom.css': Permission denied
chmod: cannot access 'ui-lightness/images': Permission denied

$ ls -l ui-lightness/
ls: cannot access ui-lightness/jquery-ui-1.8.11.custom.css: Permission denied
ls: cannot access ui-lightness/images: Permission denied
total 0
d????????? ? ? ? ?                ? images
-????????? ? ? ? ?                ? jquery-ui-1.8.11.custom.css
$ 

Meu primeiro instinto é entrar em pânico um pouco. Mas, adicionando o status x de volta em conserta isso!

$ chmod -R a+x ui-lightness/

$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max  4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css

Alguém pode explicar o que está acontecendo aqui? E como eu removo o status do executável sem borking tudo? Isso está no ubuntu 9.10 caso isso seja relevante.

felicidades, max

    
por Max Williams 07.06.2011 / 18:17

2 respostas

8

O primeiro parâmetro para o seu chmod recursivo é o próprio diretório. Você removeu x bit no diretório, tornando-o não mais pesquisável (é o que o bit x faz para um diretório). Então o programa chmod não pode mais procurar dentro desse diretório e você recebe os erros de permissão. tente o seguinte em vez disso.

chmod -R a-x ui-lightness/*
    
por 07.06.2011 / 18:27
8

Para remover o status do executável apenas para arquivos, use:

$ chmod -R a-x+X ui-lightness/

A opção +X está definida (veja man chmod ) para:

  • set execute permission only if the file is a directory or already has execute permission for some user

Portanto, a opção -x em minúsculas primeiro remove o status do executável de todos os arquivos (e diretórios, é claro), então a opção +X em maiúsculas o define apenas para diretórios.

Tem uma pequena desvantagem: define o status do executável para subdiretórios all , mesmo para aqueles que não o definiram antes da invocação chmod . Se não é isso que você quer, use a solução find de Keith.

    
por 06.01.2012 / 13:33

Tags