Chmod não está funcionando como esperado

Chmod não está funcionando como esperado

Quando estou prestes a alterar minha permissão de arquivo assim

 $ sudo chmod a+x *.* 

Este erro aparece

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

E quando eu quiser alterar 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 tento o mesmo comando em outro diretório ele funciona, mas neste diretório /var/www/html não funciona, mas mesmo quando altero o arquivo de permissão por arquivo para a+x quando executo

 ls

Um erro de permissão aparece

 ls: cannot open directory .: Permission denied

Responder1

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

Responder2

Parece lsque você não tem privilégios suficientes no diretório. Comohttps://stackoverflow.com/a/15800917/3501748afirma: os diretórios precisam do conjunto de permissões de execução para ver seu conteúdo.

cdvolte um nível e veja quais são as permissões no diretório de onde você acabou de sair. sudonão concede nenhum direito de acesso a uma pasta se o root não tiver nenhum direito sobre essa pasta. Talvez sudo -u <username>possa ajudar.

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

Responder3

Primeiro, gostaria de reconhecer as respostas existentes:

  • Como diz UweBurger, usa-se *um curinga geral no Ubuntu (ou, acredito, no Unix em geral). (É possível que directoryno seu exemplo esteja vazio, causando o erro chmod: cannot access ‘directory/*’: No such file or directory?)
  • Como sugeriu Northern-Bradley, pode-se usar o Rsinalizador in chmodpara fazê-lo percorrer a árvore recursivamente, alterando as permissões de tudo sob 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 usarsudoparachmod; 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 maneira que faz com os arquivos. Como explicado nodocumentação oficial, a rpermissão de leitura ( ) para diretórios significa ser capaz de visualizar seu conteúdo (como usar ls), a wpermissão de gravação ( ) permite que um usuário crie/remova arquivos nele e a xpermissão de execução ( ) para cddentro. Há uma ótima respostaaquisugerindo um método para distinguir entre arquivos e diretórios ao aplicar novas permissões recursivamente. A variante usando xargsésupostamente mais rápido. Você pode querer adicionar o rsinalizador to xargspara evitar um erro caso findnão retorne nada, e se precisar rootde privilégios você deve usar sudopara ambas as metades do pipe (novamente, tenha cuidado ao chmoding as root), então seria:

sudo find [caminho/para/dir] -type d -print0 | sudo xargs -0r chmod [desired-dir-permissions]

sudo find [caminho/para/dir] -type f -print0 | sudo xargs -0r chmod [permissões de arquivo desejadas]

onde [desired-*-permissions]pode ser dadoexplicitamente( 777) ouusando letras(como a+x).

informação relacionada