O que é “raw mode in hex” da saída stat?

5

Ao usar o GNU stat para investigar o sistema de arquivos, há várias seqüências de formatos disponíveis para os argumentos --format / --printf ; este em particular

%f    Raw mode in hex

não faz muito sentido. Comparando com% a, modo de acesso, algo pode ter (você pode ver isso com stat --format '%f %a' ) um modo bruto de 41ed mas um modo de acesso de 755, ou um modo bruto de 81a4 e um modo de acesso de 644.

Então, o que significa "modo bruto"?

    
por Andrew 31.05.2012 / 08:04

1 resposta

7

Existem duas partes para decifrar o que significa "modo bruto em hexadecimal"; o primeiro é que está em hex , mas os modos de acesso são geralmente descritos em octal :

41ed16 = 407758
81a416 = 1006448

Se você olhar para /tmp , que normalmente tem o sinalizador de exclusão restrita ('sticky bit') definido:

$ ls -ld /tmp
drwxrwxrwt 17 root root 4096 2012-05-31 13:45 /tmp
$ stat --format '%f %a' /tmp
43ff 1777

e convertendo:

43ff16 = 417778

O "modo bruto em hexadecimal" é descrito no manual do programador para a função stat ( man 2 stat ), observando que são valores octal:

The following flags are defined for the st_mode field:

S_IFMT     0170000   bit mask for the file type bit fields
S_IFSOCK   0140000   socket
S_IFLNK    0120000   symbolic link
S_IFREG    0100000   regular file
S_IFBLK    0060000   block device
S_IFDIR    0040000   directory
S_IFCHR    0020000   character device
S_IFIFO    0010000   FIFO
S_ISUID    0004000   set UID bit
S_ISGID    0002000   set-group-ID bit (see below)
S_ISVTX    0001000   sticky bit (see below)
S_IRWXU    00700     mask for file owner permissions
S_IRUSR    00400     owner has read permission
S_IWUSR    00200     owner has write permission
S_IXUSR    00100     owner has execute permission
S_IRWXG    00070     mask for group permissions
S_IRGRP    00040     group has read permission
S_IWGRP    00020     group has write permission
S_IXGRP    00010     group has execute permission
S_IRWXO    00007     mask for permissions for others (not in group)
S_IROTH    00004     others have read permission
S_IWOTH    00002     others have write permission
S_IXOTH    00001     others have execute permission

(Estranhamente, a página de manual on-line está faltando nesta seção.)

Este é um campo de bits , e podemos ver que os últimos quatro dígitos correspondem ao modo de acesso; o dígito principal (em hexadecimal) corresponde ao tipo de arquivo, portanto, um modo hexadecimal de 81a4 corresponde a "diretório, modo 0644" e um modo hexadecimal de 41ed corresponde a "arquivo normal, modo 0775".

    
por 31.05.2012 / 08:04