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 ls
que 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.
cd
volte um nível e veja quais são as permissões no diretório de onde você acabou de sair. sudo
nã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 quedirectory
no seu exemplo esteja vazio, causando o errochmod: cannot access ‘directory/*’: No such file or directory
?) - Como sugeriu Northern-Bradley, pode-se usar o
R
sinalizador inchmod
para fazê-lo percorrer a árvore recursivamente, alterando as permissões de tudo sob seu ponto atual. Ou seja, usechmod -R directory
, ou se você não tiver privilégiossudo chmod -R directory
(no entanto, certifique-se de não alterar inadvertidamente as permissões nos arquivos do sistema ao usarsudo
parachmod
; 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 r
permissão de leitura ( ) para diretórios significa ser capaz de visualizar seu conteúdo (como usar ls
), a w
permissão de gravação ( ) permite que um usuário crie/remova arquivos nele e a x
permissão de execução ( ) para cd
dentro. 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 r
sinalizador to xargs
para evitar um erro caso find
não retorne nada, e se precisar root
de privilégios você deve usar sudo
para ambas as metades do pipe (novamente, tenha cuidado ao chmod
ing 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
).