# `stat` — Interpretando resultados de `stat()`

Código-fonte: Lib/stat.py

O módulo `stat` define constantes e funções para interpretar os resultados de `os.stat()`, `os.fstat()` e `os.lstat()` (se existirem). Para detalhes completos sobre chamadas `stat()`, `fstat()` e `lstat()`, consulte a documentação do seu sistema.

Alterado na versão 3.4: O módulo stat é apoiado por uma implementação C.

O módulo `stat` define as seguintes funções para testar tipos de arquivos específicos:

stat.S_ISDIR(mode)

  Retorna diferente de zero se o modo for de um diretório.

stat.S_ISCHR(mode)

  Retorna diferente de zero se o modo for de um arquivo de dispositivo especial de caractere.

stat.S_ISBLK(mode)

  Retorna diferente de zero se o modo for de um arquivo de dispositivo especial de bloco.

stat.S_ISREG(mode)

  Retorna diferente de zero se o modo for de um arquivo regular.

stat.S_ISFIFO(mode)

  Retorna diferente de zero se o modo for de um FIFO (encadeamento nomeado).

stat.S_ISLNK(mode)

  Retorna diferente de zero se o modo for de um link simbólico.

stat.S_ISSOCK(mode)

  Retorna diferente de zero se o modo for de um soquete.

stat.S_ISDOOR(mode)

  Retorna diferente de zero se o modo for de uma porta.

  Adicionado na versão 3.4.

stat.S_ISPORT(mode)

  Retorna diferente de zero se o modo for de uma porta de eventos.

  Adicionado na versão 3.4.

stat.S_ISWHT(mode)

  Retorna diferente de zero se o modo for de um apagamento.

  Adicionado na versão 3.4.

Duas funções adicionais são definidas para manipulação mais geral do modo do arquivo:

stat.S_IMODE(mode)

  Retorna a parte do modo do arquivo que pode ser definido por `os.chmod()` — ou seja, os bits de permissão do arquivo, mais os bits sticky bit, set-group-id e set-user-id (em sistemas que têm suporte a eles).

stat.S_IFMT(mode)

  Retorna a parte do modo do arquivo que descreve o tipo de arquivo (usado pelas funções `S_IS*()` acima).

Normalmente, você usaria as funções `os.path.is*()` para testar o tipo de um arquivo; as funções aqui são úteis quando você está fazendo vários testes do mesmo arquivo e deseja evitar a sobrecarga da chamada de sistema `stat()` para cada teste. Eles também são úteis ao verificar informações sobre um arquivo que não é manipulado por `os.path`, como os testes para dispositivos de blocos e caracteres.

Exemplo:

    import os, sys
    from stat import *

    def walktree(top, callback):
        '''desce recursivamente a árvore de diretórios com raiz no topo,
         chamando a função de retorno de chamada para cada arquivo regular'''

        for f in os.listdir(top):
            pathname = os.path.join(top, f)
            mode = os.lstat(pathname).st_mode
            if S_ISDIR(mode):
                # É um diretório, percorre recursivamente nele
                walktree(pathname, callback)
            elif S_ISREG(mode):
                # É um arquivo, chama a função de retorno
                callback(pathname)
            else:
                # Tipo de arquivo desconhecido, imprime uma mensagem
                print('Pulando %s' % pathname)

    def visitfile(file):
        print('visitando, file)

    if __name__ == '__main__':
        walktree(sys.argv[1], visitfile)

Uma função utilitária adicional é fornecida para converter o modo de um arquivo em uma string legível por humanos:

stat.filemode(mode)

  Converte o modo de um arquivo em uma string no formato ‘-rwxrwxrwx’.

  Adicionado na versão 3.3.

  Alterado na versão 3.4: A função tem suporte a `S_IFDOOR`, `S_IFPORT` e `S_IFWHT`.

Todas as variáveis abaixo são simplesmente índices simbólicos nas 10 tuplas retornadas por `os.stat()`, `os.fstat()` ou `os.lstat()`.

stat.ST_MODE

  Modo de proteção de nó-i.

stat.ST_INO

  Número de nó-i.

stat.ST_DEV

  Nó-i em que o dispositivo reside.

stat.ST_NLINK

  Número de links para o nó-i.

stat.ST_UID

  O ID de usuário para o proprietário.

stat.ST_GID

  O ID de grupo para o proprietário.

stat.ST_SIZE

  Tamanho em bytes de um arquivo simples; quantidade de dados aguardando em alguns arquivos especiais.

stat.ST_ATIME

  Hora do último acesso.

stat.ST_MTIME

  Hora da última modificação.

stat.ST_CTIME

  O “ctime” conforme relatado pelo sistema operacional. Em alguns sistemas (como Unix) é o horário da última alteração de metadados e, em outros (como Windows), é o horário de criação (consulte a documentação da plataforma para obter detalhes).

A interpretação do “tamanho do arquivo” muda de acordo com o tipo de arquivo. Para arquivos simples, este é o tamanho do arquivo em bytes. Para FIFOs e soquetes na maioria dos tipos de Unix (incluindo Linux em particular), o “tamanho” é o número de bytes aguardando para serem lidos no momento da chamada para `os.stat()`, `os.fstat()` ou `os.lstat()`; isso às vezes pode ser útil, especialmente para pesquisar um desses arquivos especiais após uma abertura sem bloqueio. O significado do campo de tamanho para outros dispositivos de caracteres e blocos varia mais, dependendo da implementação da chamada de sistema subjacente.

As variáveis abaixo definem os sinalizadores utilizadas no campo `ST_MODE`.

O uso das funções acima é mais portátil do que o uso do primeiro conjunto de sinalizadores:

stat.S_IFSOCK

  Soquete.

stat.S_IFLNK

  Link simbólico.

stat.S_IFREG

  Arquivo regular.

stat.S_IFBLK

  Dispositivo de bloco.

stat.S_IFDIR

  Diretório.

stat.S_IFCHR

  Dispositivo de caracteres.

stat.S_IFIFO

  FIFO.

stat.S_IFDOOR

  Porta.

  Adicionado na versão 3.4.

stat.S_IFPORT

  Porta de eventos.

  Adicionado na versão 3.4.

stat.S_IFWHT

  Apagamento.

  Adicionado na versão 3.4.

Nota

`S_IFDOOR`, `S_IFPORT` ou `S_IFWHT` são definidos como 0 quando a plataforma não possui suporte para os tipos de arquivo.

Os seguintes sinalizadores também podem ser usados no argumento mode de `os.chmod()`:

stat.S_ISUID

  Define o bit de UID.

stat.S_ISGID

  Bit de set-group-ID. Este bit tem vários usos especiais. Para um diretório, indica que a semântica BSD deve ser usada para esse diretório: os arquivos criados lá herdam seu ID de grupo do diretório, não do ID de grupo efetivo do processo de criação, e os diretórios criados lá também receberão o conjunto de bits `S_ISGID`. Para um arquivo que não possui o bit de execução de grupo (`S_IXGRP`) definido, o bit de set-group-ID indica trava obrigatória de arquivo/registro (veja também `S_ENFMT`).

stat.S_ISVTX

  Sticky bit. Quando este bit é definido em um diretório, significa que um arquivo nesse diretório pode ser renomeado ou excluído apenas pelo proprietário do arquivo, pelo proprietário do diretório ou por um processo privilegiado.

stat.S_IRWXU

  Máscara para permissões de proprietário de arquivo.

stat.S_IRUSR

  Proprietário tem permissão de leitura.

stat.S_IWUSR

  Proprietário tem permissão de escrita.

stat.S_IXUSR

  Proprietário tem permissão de execução.

stat.S_IRWXG

  Máscara para permissões de grupo.

stat.S_IRGRP

  Grupo tem permissão de leitura.

stat.S_IWGRP

  Grupo tem permissão de escrita.

stat.S_IXGRP

  Grupo tem permissão de execução.

stat.S_IRWXO

  Máscara para permissões para outros (não no grupo).

stat.S_IROTH

  Outros têm permissão de leitura.

stat.S_IWOTH

  Outros têm permissão de escrita.

stat.S_IXOTH

  Outros têm permissão de execução.

stat.S_ENFMT

  Aplicação de trava de arquivo do System V. Este sinalizador é compartilhada com `S_ISGID`: a trava de arquivo/registro é aplicada em arquivos que não possuem o bit de execução de grupo (`S_IXGRP`) definido.

stat.S_IREAD

  Sinônimo Unix V7 para `S_IRUSR`.

stat.S_IWRITE

  Sinônimo Unix V7 para `S_IWUSR`.

stat.S_IEXEC

  Sinônimo Unix V7 para `S_IXUSR`.

Os seguintes sinalizadores podem ser usados no argumento flags de `os.chflags()`:

stat.UF_NODUMP

  Não despeja o arquivo.

stat.UF_IMMUTABLE

  O arquivo não pode ser alterado.

stat.UF_APPEND

  O arquivo só pode sofrer acréscimos.

stat.UF_OPAQUE

  O diretório é opaco quando visualizado por meio de uma pilha de união.

stat.UF_NOUNLINK

  O arquivo não pode ser renomeado ou excluído.

stat.UF_COMPRESSED

  O arquivo é armazenado compactado (macOS 10.6+).

stat.UF_HIDDEN

  O arquivo não deve ser exibido em uma GUI (macOS 10.5+).

stat.SF_ARCHIVED

  O arquivo não pode ser arquivado.

stat.SF_IMMUTABLE

  O arquivo não pode ser alterado.

stat.SF_APPEND

  O arquivo só pode sofrer acréscimos.

stat.SF_NOUNLINK

  O arquivo não pode ser renomeado ou excluído.

stat.SF_SNAPSHOT

  O arquivo é um arquivo de captura (snapshot).

Consulte a página man dos sistemas *BSD ou macOS chflags(2) para obter mais informações.

No Windows, as seguintes constantes de atributos de arquivo estão disponíveis para uso ao testar bits no membro `st_file_attributes` retornado por `os.stat()`. Consulte a documentação da API do Windows para obter mais detalhes sobre o significado dessas constantes.

stat.FILE_ATTRIBUTE_ARCHIVE
stat.FILE_ATTRIBUTE_COMPRESSED
stat.FILE_ATTRIBUTE_DEVICE
stat.FILE_ATTRIBUTE_DIRECTORY
stat.FILE_ATTRIBUTE_ENCRYPTED
stat.FILE_ATTRIBUTE_HIDDEN
stat.FILE_ATTRIBUTE_INTEGRITY_STREAM
stat.FILE_ATTRIBUTE_NORMAL
stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
stat.FILE_ATTRIBUTE_NO_SCRUB_DATA
stat.FILE_ATTRIBUTE_OFFLINE
stat.FILE_ATTRIBUTE_READONLY
stat.FILE_ATTRIBUTE_REPARSE_POINT
stat.FILE_ATTRIBUTE_SPARSE_FILE
stat.FILE_ATTRIBUTE_SYSTEM
stat.FILE_ATTRIBUTE_TEMPORARY
stat.FILE_ATTRIBUTE_VIRTUAL

  Adicionado na versão 3.5.

No Windows, as seguintes constantes estão disponíveis para comparação com o membro `st_reparse_tag` retornado por `os.lstat()`. Estas são constantes bem conhecidas, mas não são uma lista exaustiva.

stat.IO_REPARSE_TAG_SYMLINK
stat.IO_REPARSE_TAG_MOUNT_POINT
stat.IO_REPARSE_TAG_APPEXECLINK

  Adicionado na versão 3.8.