Chmod não está funcionando como esperado

0

Quando eu estou prestes a mudar minha permissão de arquivo como este

 $ sudo chmod a+x *.* 

Este erro aparece

 chmod: cannot access ‘*.*’: No such file or directory

E quando eu quiser mudar a permissão de cada arquivo em um diretório com

 $ sudo chmod a+x directory/* 

O mesmo erro aparece

 chmod: cannot access ‘directory/*’: No such file or directory

Quando eu tento o mesmo comando em outro diretório ele funciona, mas sob este diretório / var / www / html não funciona, mas mesmo quando eu mudar o arquivo de permissão por arquivo para um + x quando eu corro

 ls

Um erro de permissão aparece

 ls: cannot open directory .: Permission denied
    
por user297904 14.12.2014 / 21:44

3 respostas

3

A extensão do arquivo no Linux não é nada especial, é apenas uma parte do nome do arquivo. O agrupamento de arquivos do shell usa * para todos os caracteres, para que você possa usar apenas chmod a+x * em vez de .

    
por Uwe Burger 14.12.2014 / 22:28
1

O problema ls parece que você não tem privilégios suficientes no diretório. Como o link afirma: os diretórios precisam do conjunto de permissões de execução para poder ver seu conteúdo.

cd de volta a um nível e veja quais são as permissões no diretório do qual você acabou de sair. sudo não lhe dá nenhum direito de acessar uma pasta se o usuário root não tiver direitos para essa pasta. Talvez sudo -u <username> possa ajudar.

Se você precisar recorrer pela árvore de diretórios abaixo do seu ponto de partida, use chmod -R .

    
por northern-bradley 14.12.2014 / 22:50
1

Primeiro, gostaria de reconhecer as respostas existentes:

  • Como UweBurger diz, um usa * para um caractere geral no Ubuntu (ou, eu acredito, Unix em geral). (É possível que directory no seu exemplo esteja vazio, causando o erro chmod: cannot access ‘directory/*’: No such file or directory ?)
  • Como sugerido pelo northern-bradley, é possível usar o R flag em chmod para fazê-lo percorrer a árvore de forma recursiva, alterando as permissões de tudo em seu ponto atual. Ou seja, use chmod -R directory , ou se você não tiver privilégios sudo chmod -R directory (no entanto, certifique-se de não alterar inadvertidamente as permissões nos arquivos do sistema ao usar sudo to chmod ; seu próprio usuário simplesmente não tem privilégios para fazer isso, tornando a primeira variante mais segura).

No entanto, gostaria de acrescentar que talvez você não queira alterar as permissões dos diretórios da mesma forma que os arquivos '. Conforme explicado na documentação oficial , a permissão de leitura ( r ) para diretórios significa ser capaz de visualizar seu conteúdo (como como usando ls ), a permissão write ( w ) permite que um usuário crie / remova arquivos nele e a permissão de execução ( x ) para cd dentro. Há uma ótima resposta aqui sugerindo um método para distinguir entre arquivos e diretórios ao aplicar novas permissões recursivamente. A variante que usa xargs é supostamente mais rápida . Você pode querer adicionar o r flag a xargs para evitar um erro no caso de find não retornar nada, e se você precisar de root privileges você deve usar sudo para as duas metades do pipe (novamente cuidado quando chmod ing como root ), de modo que seria:

% bl0ck_qu0te%

onde [desired-*-permissions] pode receber explicitamente ( 777 ) ou usando cartas (como a+x ).

    
por Jonathan Y. 15.12.2014 / 15:46