Comando Mac OS X 10.6 / usr / bin / stat, qual é a saída padrão me mostrando?

5

Quando executo o comando stat, qual é a saída realmente exibida? Eu sei que você pode especificar o formato, mas estou solucionando problemas de rsync do OS X para o NetApp SMB e tentando descobrir o que é e não está copiando ..

# stat /Volumes/Media/MediaBank/WEB_D/41/zoomify/41999V21.jpg
234881039 281475121196473 -rwxr--r-- 1 mbank wheel 0 378716 "Aug  9 19:17:50 2010" "Jan  3 12:56:26 2010" "Apr 26 09:34:13 2010" "Dec 27 23:35:32 2009" 16384 768 0 /Volumes/Media/MediaBank/WEB_D/41/zoomify/41999V21.jpg

E esta é a cópia rsync'ed para o SAN ..

# stat /Volumes/SAN_Media/MediaBank1/WEB_D/41/zoomify/41999V21.jpg
771751969 10654547399 -rwx------ 1 root wheel 0 378716 "Aug  9 09:39:45 2010" "Jan  3 12:56:26 2010" "Jul 23 17:52:30 2010" "Jan  3 12:56:26 2010" 33028 744 0 /Volumes/SAN_Media/MediaBank1/WEB_D/41/zoomify/41999V21.jpg

Meu palpite sobre o formato de saída é este ...

unknown1 unknown2 permissions unknown3 uid gid linkcount bytes time1 time2 time3 time4 unknown4 unknown5 unknown6 fullpath .. 

Quanto aos tempos, eu acho que três deles tem que ser atime, mtime e ctime, mas por que há um quarto e qual é qual?

    
por user33688 12.08.2010 / 20:36

4 respostas

8

Eu não sou usuário do OS X, mas estou familiarizado com o FreeBSD. A saída de estatísticas com a mesma aparência é a mesma que a sua, mas se você quiser esclarecer as coisas para ser legível, use stat -x your_path .

Ah, quais são esses campos? Talvez o este snippet da documentação do OS X ajude:

struct stat { /* when _DARWIN_FEATURE_64_BIT_INODE is NOT defined */
     dev_t    st_dev;    /* device inode resides on */
     ino_t    st_ino;    /* inode's number */
     mode_t   st_mode;   /* inode protection mode */
     nlink_t  st_nlink;  /* number or hard links to the file */
     uid_t    st_uid;    /* user-id of owner */
     gid_t    st_gid;    /* group-id of owner */
     dev_t    st_rdev;   /* device type, for special file inode */
     struct timespec st_atimespec;  /* time of last access */
     struct timespec st_mtimespec;  /* time of last data modification */
     struct timespec st_ctimespec;  /* time of last file status change */
     off_t    st_size;   /* file size, in bytes */
     quad_t   st_blocks; /* blocks allocated for file */
     u_long   st_blksize;/* optimal file sys I/O ops blocksize */
     u_long   st_flags;  /* user defined flags for file */
     u_long   st_gen;    /* file generation number */
 };
    
por 12.08.2010 / 21:07
6

Combinando as respostas de Janne e Gordon:

Chamando stat sem sinalizadores:

$ stat Report.docx 
234881026 23858800 -rw-r--r-- 1 will staff 0 176083 "Apr 29 11:44:25 2012" "Apr 29 11:14:56 2012" "Apr 29 11:14:56 2012" "Apr 27 19:22:39 2012" 4096 344 0 Report.docx

A chamada de stat -x fornece rótulos legíveis, mas define apenas 3 das 4 datas:

$ stat -x Report.docx 
  File: "Report.docx"
  Size: 176083       FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/    will)  Gid: (   20/   staff)
Device: 14,2   Inode: 23858800    Links: 1
Access: Sun Apr 29 11:44:25 2012
Modify: Sun Apr 29 11:14:56 2012
Change: Sun Apr 29 11:14:56 2012

A chamada de stat -s nos dá uma resposta melhor:

$ stat -s Report.docx 
st_dev=234881026 st_ino=23858800 st_mode=0100644 st_nlink=1 st_uid=501 st_gid=20 st_rdev=0 st_size=176083 st_atime=1335663865 st_mtime=1335662096 st_ctime=1335662096 st_birthtime=1335518559 st_blksize=4096 st_blocks=344 st_flags=0

Aqui, vemos as quatro datas: st_atime , st_mtime , st_ctime , st_birthtime .

st_birthtime está ausente da saída detalhada ( -x ) - e para mim isso corresponde à created date que o Finder mostra.

Olhando para a página do manual , a segunda estrutura documentada ( when _DARWIN_FEATURE_64_BIT_INODE is defined ) mostra as quatro datas e as define abaixo.

 The time-related fields of struct stat are as follows:

 st_atime         Time when file data last accessed.  Changed by the mknod(2), utimes(2) and read(2)
                  system calls.

 st_mtime         Time when file data last modified.  Changed by the mknod(2), utimes(2) and write(2)
                  system calls.

 st_ctime         Time when file status was last changed (inode data modification).  Changed by the
                  chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2) and write(2)
                  system calls.

 st_birthtime     Time of file creation. Only set once when the file is created. This field is only
                  available in the 64 bit inode variants. On filesystems where birthtime is not avail-
                  able, this field holds the ctime instead.

Portanto, dependendo da sua arquitetura, a quarta data é data de criação (quando 64 bits) ou ctime

duplicada     
por 29.04.2012 / 04:06
1

A saída de stat (1) será diferente dependendo de o sistema / sistema de arquivos ser de 64 bits ou 32 bits. (Se você voltar 4 datetimes, é 64 bit).

A página man para stat (2) e lstat (2) (a última das quais stat (1) realmente usa por padrão) mostra todos os campos, mas por alguma razão, stat (1) simplesmente não os retorna em a mesma ordem listada lá.

Aparece a ordem de stat (1) sem opções é:

  • ID do dispositivo
  • Número do inode
  • Permissões (modo)
  • Contagem de links rígidos (geralmente 1)
  • ID do usuário do arquivo (proprietário)
  • Arquivo groupid
  • ID do dispositivo
  • Tamanho em bytes
  • Tempo do último acesso
  • Hora da última modificação (conteúdos)
  • Última alteração do horário das permissões
  • Criar hora
  • Tamanho de bloco ideal para o arquivo
  • Blocos de 512 bytes alocados para o arquivo
  • Sinalizadores definidos no arquivo (consulte chflags (2))
por 19.03.2014 / 17:36
0

Compare a saída de stat -r (imprime a informação no formulário "bruto", por exemplo, em segundos desde a época) com stat -s (com rótulos, adequados para definir variáveis de shell). Se eu analisar isso corretamente (usando OS X 10.6), os campos são: número do dispositivo, número do inode (/ ID do arquivo), modo de permissões, contagem de links, proprietário, grupo, rdev (dispositivo para arquivos especiais de caracteres e blocos ), tamanho em bytes, tempo de acesso, tempo de modificação, tempo de mudança, tempo de nascimento (ou seja, criação de inode), tamanho do bloco, número de blocos, sinalizadores de arquivo e finalmente nome (/ caminho).

Observe que nem todas as vezes serão rastreadas em sistemas de arquivos n X não-OS (ou seja, não HFS + ou HFSX); para arquivos acessados por SMB, eu esperaria que alguns dos tempos relatados fossem compensados.

    
por 13.08.2010 / 02:37

Tags