Por que os caracteres de ponto de interrogação aparecem ao alterar as permissões do diretório?

33

Estou tentando alterar temporariamente as permissões de uma pasta cujas permissões iniciais são

user@ubuntu:/var/log$ ls -l squid*
squid3:
total 4
-rw-r----- 1 proxy proxy    0 Jan 16 14:43 access.log
-rw-r----- 1 proxy proxy 1359 Jan 16 14:43 cache.log
ls: cannot open directory squid-deb-proxy: Permission denied

para alguma coisa a seguir

user@ubuntu:/var/log$ sudo chmod -R 644 squid*
user@ubuntu:/var/log$ ls -l squid*
squid3:
ls: cannot access squid3/cache.log: Permission denied
ls: cannot access squid3/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log

squid-deb-proxy:
ls: cannot access squid-deb-proxy/store.log: Permission denied
ls: cannot access squid-deb-proxy/cache.log: Permission denied
ls: cannot access squid-deb-proxy/access.log: Permission denied
total 0
-????????? ? ? ? ?            ? access.log
-????????? ? ? ? ?            ? cache.log
-????????? ? ? ? ?            ? store.log

Você notará que após a alteração das permissões, há pontos de interrogação em todos os lugares. Por que isso está acontecendo? Basicamente, eu quero ler o log de acesso para ver se o servidor squid-deb-proxy está recebendo solicitações do cliente ou não.

Usuário Registrado
fonte

Respostas:

38

Para visualizar as permissões de um diretório, você precisa passar o -dsinalizador para ls, assim:

ls -ld squid3

Para ler um arquivo, sua permissão de leitura precisa ser definida. No entanto, para ler um diretório e a listagem de seus arquivos, é necessário definir as permissões de leitura e execução . Se não estiverem, você receberá erros estranhos como os que está enfrentando.

Para definir a permissão de leitura nos arquivos e as permissões de leitura e execução nos diretórios recursivamente, use este comando:

chmod -R a+rX directoryname

Aqui está uma explicação desse comando:

  • chmod é o nome do comando, usado para alterar as permissões dos arquivos.
  • -Ré o sinalizador recursivo. Significa aplicar esse comando ao diretório e a todos os seus filhos e filhos de seus filhos, e assim por diante.
  • a significa todos: aplique essas permissões ao proprietário do arquivo, ao proprietário do grupo e a todos os outros usuários.
  • + significa adicionar as seguintes permissões se elas ainda não estiverem definidas.
  • r significa a permissão de leitura.
  • Xsignifica a permissão de execução, mas apenas em diretórios. Minúsculas xsignificaria a permissão de execução em arquivos e diretórios.

Mais informações são encontradas na página de manual do chmodcomandoÍcone da página de manual .

Flimm
fonte
1
há alguma coisa errada com o usochmod -R 644 squid*
Utilizador Registado
4
@RegisteredUser: sim. 644 é rw-r--r--adequado para arquivos, mas não para diretórios. Os diretórios também precisam ter a permissão de execução definida, como esta: rwxr-xr-xou 755. O comando que você mencionou desabilita a permissão de execução em todos os arquivos e diretórios recursivamente, o que causa esses erros.
Flimm
3

Eu tive esse problema também. Eu não poderia fazer chmod ou chown no arquivo. Eu tentei excluí-lo. Acontece que tentar excluí-lo (comando rm) causou o problema. O kicker é que o arquivo é compartilhado entre dois sistemas diferentes . Depois que fechei o arquivo no outro sistema, o arquivo desapareceu. Aqui estão mais detalhes da minha configuração. sistema 1: VM convidada do Ubuntu. Foi aqui que eu fiz o comando rm. sistema 2: host do Windows 7. Foi aqui que abri o arquivo usando o comando less (no cygwin, não que seja necessariamente relevante).

Alan
fonte
2

Como você afirmou que seu objetivo é ler /var/log/squid/access.log, sua melhor solução é digitar sudo less /var/log/squid/access.log, o que poupa o trabalho de repetir repetições.

Guntbert
fonte