Como decodificar o modo de arquivo de 6 dígitos no AIX?

1

O modo de arquivo para um arquivo no AIX retornado pelo método Ruby stat tem 6 dígitos:

ruby -e 'puts File::stat("testfile_upload-003").mode.to_s(8)'
100644

FWIW, a versão do Ruby é a ruby 2.1.6p336 (2015-04-13 revisão 50298) [powerpc-aix6.1.0.0], mas Perl retorna o mesmo valor:

perl -e 'use File::stat; printf "%o\n", stat("testfile_upload-003")->mode;'
100644

Aqui está a saída de istat para o mesmo arquivo.

# /bin/istat testfile_upload-003
Inode 33780 on device 10/7      File
Protection: rw-r--r--
Owner: 0(root)          Group: 0(system)
Link count:   2         Length 51200 bytes

Last updated:   Thu Mar  9 01:13:24 CST 2017
Last modified:  Wed Mar  8 11:52:52 CST 2017
Last accessed:  Wed Mar  8 11:52:52 CST 2017

EDIT: a página man chmod e istat não fornece informações para o 5º e o 6º dígitos.

E não há conjuntos de bits complexos definidos para esse arquivo:

# ls -l testfile_upload-003
-rw-r--r--    2 root     system        51200 Mar 08 11:52 testfile_upload-003
    
por philant 09.03.2017 / 08:59

1 resposta

3

Eu os encontrei em <sys/mode.h> :

/*
 *      (stat) st_mode bit values
 */

#define _S_IFMT         0170000         /* type of file */
#define   _S_IFREG      0100000         /*   regular */
#define   _S_IFDIR      0040000         /*   directory */
#define   _S_IFBLK      0060000         /*   block special */
#define   _S_IFCHR      0020000         /*   character special */
#define   _S_IFIFO      0010000         /*   fifo */

O primeiro '1' indica um arquivo regular.

Um diretório tem 240755 , o '4' indica um diretório e o '2' significa "não um arquivo regular".

    
por 09.03.2017 / 09:58

Tags