Questão Como leio permissões numéricas maiores que 777?


Eu notei isso agora, quando usando find e stat para obter as permissões de todos os itens em /usr/local/share/locale antes de mim recursivamente mudá-los. stat mostra as permissões em um formato numérico que eu não estou familiarizado - todos os diretórios são 40755 e os arquivos são 100644. Eu estou supondo que os últimos três são apenas permissões octal normais (que eu já sei), mas o que o 40areia 100s significa?


0


origem


stat usa simbólico (drwx) no meu sistema. Como você está chamando? which stat? - Daniel Beck♦
O comando completo que usei é find /usr/local/share/locale -exec stat -f '%p %N' {} \;. stat é /usr/bin/stat. Isso está no OS X Mountain Lion; você está no Linux? - Blacklight Shining


Respostas:


stat(1) é principalmente um invólucro para stat(2), e a página do homem de stat(2) revela isso:

 The status information word st_mode has the following bits:

 #define S_IFMT   0170000  /* type of file */
 #define S_IFIFO  0010000  /* named pipe (fifo) */
 #define S_IFCHR  0020000  /* character special */
 #define S_IFDIR  0040000  /* directory */
 #define S_IFBLK  0060000  /* block special */
 #define S_IFREG  0100000  /* regular */
 #define S_IFLNK  0120000  /* symbolic link */
 #define S_IFSOCK 0140000  /* socket */
 #define S_IFWHT  0160000  /* whiteout */
 #define S_ISUID  0004000  /* set user id on execution */
 #define S_ISGID  0002000  /* set group id on execution */
 #define S_ISVTX  0001000  /* save swapped text even after use */
 #define S_IRUSR  0000400  /* read permission, owner */
 #define S_IWUSR  0000200  /* write permission, owner */
 #define S_IXUSR  0000100  /* execute/search permission, owner */

Então, o líder 100 significa que é um arquivo regular, e o líder 40 significa que é um diretório.


3



Eles estão todos em octal porque octal é conveniente para os 9 bits baixos (rwxrwxrwx) e misturar octal com decimal seria um desastre. (S_IFREG seria 32768, que é uma espécie de número reconhecível, mas a combinação disso com bits de permissão 0644 seria 33188, que é muito mais difícil de ler que 0100644) - Alan Curry