Acabei de notar que depois de correr
chmod 777 *
em um diretório que contém subdiretórios, faz o que você esperaria. Ele define as permissões de tudo, incluindo os subdiretórios para 777. No entanto, se você decidir que não quer fazer isso, e execute
chmod 644 *
Agora o conteúdo dos subdiretórios recebe permissões desconhecidas e você não pode alterá-las novamente.
Por que isso acontece? Este é o comportamento esperado ou um bug? Existe uma maneira de restaurar as permissões do arquivo?
Como os arquivos que eu tinha estavam em um arquivo zip em outro local, simplesmente apaguei o diretório inteiro e descompactei o arquivo zip novamente, mas gostaria de saber as causas desse "problema" e suas soluções.
Algumas informações adicionais, estou executando esses comandos em uma máquina remota por SSH.
Responder1
Provavelmente é melhor usar find para esse tipo de coisa.
Os diretórios precisam ter acesso x, os arquivos não, portanto, conjuntos diferentes de permissões.
# Files
find . -type f -exec chmod 644 '{}' \;
# Directories
find . -type d -exec chmod 755 '{}' \;
Responder2
A forma como os bits de permissão são interpretados difere para arquivos e diretórios. Leia info coreutils 'File permissions'
e man 2 chmod
para obter detalhes. Por que alguém iria querer tornar tudo legível, gravável e executável para proprietário, grupo e mundo?
Como a evidência desapareceu, só posso supor que, após o seu chmod
, você perdeu o acesso de gravação ao .
diretório atual. Isso pode ser corrigido por:
chmod u+w $PWD
Então, você pode alterar o modo (permissões) dos arquivos em$PWD
Ao fazer o chmod 644 *
, você também removeu oexecutarpermissão de qualquer um dos arquivos que o continham, portanto, eles não serão mais executáveis por nenhum proprietário, grupo, mundo.
Responder3
Quando você deseja definir permissões para diretórios e subdiretórios, você deve usar:
chmod -R
-R, --recursive altera arquivos e diretórios recursivamente
Responder4
Encontrei a solução para o problema que tive.
Em primeiro lugar, obrigado a todos que postaram, suas respostas foram realmente úteis.
O problema é atribuir a permissão 664 a todos os arquivos no diretório atual:
chmod 644 *
remove as permissões de execução em diretórios, que precisam de permissões de execução para funcionar corretamente. A solução é bastante simples. Precisamos apenas alterar as permissões dos diretórios assim:
chmod 744 dir_name
Onde dir_name é, obviamente, o nome do nosso diretório. Depois que fizermos isso, tudo voltará ao normal.