¿Por qué aparecen los caracteres de signo de interrogación al cambiar los permisos del directorio?

33

Estoy tratando de cambiar los permisos de una carpeta temporalmente cuyos permisos iniciales son

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

a algo que sigue

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

Notarás que después del cambio de permisos hay signos de interrogación en todas partes. ¿Por qué está pasando esto? Básicamente quiero leer el registro de acceso para ver si el servidor squid-deb-proxy está recibiendo solicitudes del cliente o no.

usuario registrado
fuente

Respuestas:

38

Para ver los permisos de un directorio, debe pasar el -dindicador a ls:

ls -ld squid3

Para leer un archivo, se debe establecer su permiso de lectura. Sin embargo, para leer un directorio y la lista de sus archivos, se deben establecer los permisos de lectura y ejecución . Si no lo son, obtienes errores extraños como los que estás experimentando.

Para establecer el permiso de lectura en archivos y los permisos de lectura y ejecución en directorios de forma recursiva, use este comando:

chmod -R a+rX directoryname

Aquí hay una explicación de ese comando:

  • chmod es el nombre del comando, se usa para cambiar los permisos de los archivos.
  • -Res la bandera recursiva Significa aplicar este comando al directorio, a todos sus elementos secundarios y a los elementos secundarios de sus hijos, y así sucesivamente.
  • a significa todos: aplique estos permisos al propietario del archivo, el propietario del grupo del archivo y todos los demás usuarios.
  • + significa agregar los siguientes permisos si aún no están configurados.
  • r significa el permiso de lectura.
  • Xsignifica el permiso de ejecución, pero solo en directorios. Minúsculas xsignificaría el permiso de ejecución tanto en archivos como en directorios.

Se encuentra más información en la página de manual del chmodcomandoIcono de página de manual .

Flimm
fuente
1
¿habrá algo malo con el usochmod -R 644 squid*
Usuario Registrado
44
@RegisteredUser: sí. 644 es rw-r--r--, que es adecuado para archivos, pero no para directorios. Los directorios también deben tener configurado el permiso de ejecución, como este: rwxr-xr-xo 755. El comando que mencionó desarma el permiso de ejecución en todos los archivos y directorios de forma recursiva, lo que provoca estos errores.
Flimm
3

Yo tuve este problema también. No pude hacer chmod o chown en el archivo. Intenté eliminarlo. Resulta que intentar eliminarlo (comando rm) causó el problema. La patada es que el archivo se comparte entre dos sistemas diferentes . Una vez que cerré el archivo en el otro sistema, el archivo desapareció. Aquí hay más detalles de mi configuración. sistema 1: Ubuntu VM invitada. Aquí es donde hice el comando rm. sistema 2: host de Windows 7. Aquí es donde había abierto el archivo usando el comando less (en cygwin, no es que sea necesariamente relevante).

Alan
fuente
2

Como dijiste que tu objetivo es leer /var/log/squid/access.log, tu mejor solución es escribir sudo less /var/log/squid/access.log, lo que ahorra la molestia de cambiar repetidamente.

Guntbert
fuente