Creé un directorio dy un archivo fdentro de él. Luego me di solo permisos de lectura en ese directorio. Entiendo que esto debería significar que puedo enumerar los archivos (por ejemplo, aquí ), pero no puedo.
will@wrmpb /p/t/permissions> ls -al
total 0
drwxr-xr-x 3 will wheel 102 4 Oct 08:30 .
drwxrwxrwt 16 root wheel 544 4 Oct 08:30 ..
dr-------- 3 will wheel 102 4 Oct 08:42 d
will@wrmpb /p/t/permissions> ls d
will@wrmpb /p/t/permissions>
Si cambio los permisos para escribir y ejecutar, puedo ver el archivo.
will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions>
¿Por qué es esto? Estoy usando MacOS.
Editar: con referencia a la respuesta de @ ccorn, es relevante que esté usando fish y type lsda lo siguiente:
will@wrmpb /p/t/permissions> type ls
ls is a function with definition
function ls --description 'List contents of directory'
command ls -G $argv
end
permissions
osx
fish
wrgrs
fuente
fuente

alias ls='ls -G', lo que creo que mucha gente hace.Respuestas:
Algunos preparativos, solo para asegurarse de que
lsno intente más cosas de las que debería:Demostración del
rpermiso de directorio:En los sistemas de archivos Unix tradicionales, un directorio era simplemente una lista de pares (nombre, número de inodo). Un número de inodo es un número entero utilizado como índice en la tabla de inodo del sistema de archivos donde se almacena el resto de los metadatos del archivo.
El
rpermiso en un directorio permite enumerar los nombres en él, pero no acceder a la información almacenada en la tabla de inodo, es decir, obtener el tipo de archivo, la longitud del archivo, los permisos del archivo, etc., o abrir el archivo. Para eso necesitas elxpermiso en el directorio.Esta es la razón
ls -l,ls -F,lscon la salida de un código de colores, etc fallar sinxpermiso, mientras que una meralstiene éxito.El
xpermiso solo permite el acceso de inodo, es decir, dado un nombre explícito dentro de ese directorio,xpermite buscar su inodo y acceder a los metadatos de esa entrada de directorio:Por lo tanto, para abrir un archivo
/a/b/c/fo una lista de sus metadatos, los directorios/,/a,/a/b, y/a/b/cse deben concederxpermiso.Como era de esperar, la creación de entradas de directorio necesita ambos
wyxpermisos:Wikipedia tiene una breve descripción en un artículo sobre permisos del sistema de archivos .
fuente
/bin/ls dMuestra los contenidos para mí. ¡Gracias!-Gsalida coloreada, que necesita metadatos, por lo tanto,xpermisos). Por eso mis preparativos conunalias lsyunset CLICOLOR. Debería haber agregadounset -f lspara eliminar cualquier definición de función también. EditadoPara leer un directorio también necesita poder atravesarlo (el bit x). Entonces, como mínimo, necesita rx para que un directorio pueda acceder a él de cualquier manera.
fuente
lsdebería poder enumerar los archivos en el directorio, incluso si el directorio no es ejecutable.