J'ai créé un répertoire d
et un fichier à l' f
intérieur. Je ne me suis alors accordé que des autorisations de lecture sur ce répertoire. Je comprends que cela devrait signifier que je peux lister les fichiers (par exemple ici ), mais je ne peux pas.
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 je modifie les autorisations pour écrire et exécuter, je peux voir le fichier.
will@wrmpb /p/t/permissions> chmod 500 d
will@wrmpb /p/t/permissions> ls d
f
will@wrmpb /p/t/permissions>
Pourquoi est-ce? J'utilise MacOS.
Edit: en référence à la réponse de @ ccorn, il est pertinent que j'utilise du poisson et type ls
donne ce qui suit:
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
la source
la source
alias ls='ls -G'
, ce que je pense que beaucoup de gens font.Réponses:
Quelques préparatifs, juste pour s'assurer que
ls
cela n'essaye pas plus de choses qu'il ne devrait:Démonstration de l'
r
autorisation de répertoire:Dans les systèmes de fichiers Unix traditionnels, un répertoire était simplement une liste de paires (nom, numéro d'inode). Un numéro d'inode est un entier utilisé comme index dans la table d'inode du système de fichiers où le reste des métadonnées du fichier est stocké.
L'
r
autorisation sur un répertoire permet de répertorier les noms qu'il contient, mais pas d'accéder aux informations stockées dans la table inode, c'est-à-dire d'obtenir le type de fichier, la longueur du fichier, les autorisations de fichier, etc., ou d'ouvrir le fichier. Pour cela, vous avez besoin de l'x
autorisation sur le répertoire.Voilà pourquoi
ls -l
,ls -F
,ls
avec sortie code couleur etc échouer sansx
autorisation, alors qu'un simplels
réussit.L'
x
autorisation seule permet l'accès à l'inode, c'est-à-dire, étant donné un nom explicite dans ce répertoire,x
permet de rechercher son inode et d'accéder aux métadonnées de cette entrée de répertoire:Par conséquent, d'ouvrir un fichier
/a/b/c/f
ou la liste de ses métadonnées, les répertoires/
,/a
,/a/b
et/a/b/c
doit être accordé lax
permission.Sans surprise, la création d'entrées d'annuaire nécessite à la fois
w
et desx
autorisations:Wikipedia a un bref aperçu dans un article sur les autorisations du système de fichiers .
la source
/bin/ls d
montre le contenu pour moi. Merci!-G
pour la sortie colorisée, qui a besoin de métadonnées, donc dex
perms). Par conséquent mes préparatifs avecunalias ls
etunset CLICOLOR
. J'aurais dû ajouterunset -f ls
pour supprimer également une telle définition de fonction. Édité.Pour lire un répertoire, vous devez également pouvoir le parcourir (le bit x). Donc, au minimum, vous avez besoin de rx pour qu'un répertoire puisse y accéder de quelque manière que ce soit.
la source
ls
devrait toujours être en mesure de répertorier les fichiers dans le répertoire, même si le répertoire n'est pas exécutable.