Creé un directorio d
y un archivo f
dentro 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 ls
da 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
ls
no intente más cosas de las que debería:Demostración del
r
permiso 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
r
permiso 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 elx
permiso en el directorio.Esta es la razón
ls -l
,ls -F
,ls
con la salida de un código de colores, etc fallar sinx
permiso, mientras que una merals
tiene éxito.El
x
permiso solo permite el acceso de inodo, es decir, dado un nombre explícito dentro de ese directorio,x
permite buscar su inodo y acceder a los metadatos de esa entrada de directorio:Por lo tanto, para abrir un archivo
/a/b/c/f
o una lista de sus metadatos, los directorios/
,/a
,/a/b
, y/a/b/c
se deben concederx
permiso.Como era de esperar, la creación de entradas de directorio necesita ambos
w
yx
permisos:Wikipedia tiene una breve descripción en un artículo sobre permisos del sistema de archivos .
fuente
/bin/ls d
Muestra los contenidos para mí. ¡Gracias!-G
salida coloreada, que necesita metadatos, por lo tanto,x
permisos). Por eso mis preparativos conunalias ls
yunset CLICOLOR
. Debería haber agregadounset -f ls
para 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
ls
debería poder enumerar los archivos en el directorio, incluso si el directorio no es ejecutable.