arquivos binários Linux / var / log / wtmp [closed]

1

por que alguns arquivos no binário do Linux? Por exemplo, o log do / var / log / wtmp? Mais precisamente porque é o log em forma binária.

    
por adam86 17.09.2016 / 21:15

2 respostas

2

Os arquivos wtmp (e utmp ) datam da década de 1970, e os designers não deram muitas razões. O que você pode ver é que utmp e wtmp registram informações contábeis usando um registro de tamanho fixo. Um arquivo de log de texto teria usado mais espaço no disco e levado mais tempo para formatar uma mensagem do que apenas gravar um registro binário. / p>

Outras leituras (as páginas do manual da 6ª edição do Unix):

  • utmp - informações do usuário
  • wtmp - histórico de login do usuário

Também a 1ª edição (sem wtmp ):

por 17.09.2016 / 21:29
0

Existem alguns benefícios para "registros de tamanho fixo". Então, a estrutura histórica para um registro de utmp / wtmp foi

struct utmp {
    char    ut_line[8];             /* tty name */
    char    ut_name[8];             /* user id */
    char    ut_host[16];            /* host name, if remote */
    long    ut_time;                /* time on */
};

(Isso foi de uma máquina SunOS 4; acabei de escolher isso porque é uma entrada fácil de ler).

Isso torna fácil anexar dados a um arquivo e exibi-lo na ordem inversa, simplesmente saltando para trás sizeof(struct utmp) bytes. Isso facilita o relato de programas como last na ordem inversa.

A estrutura de dados exata foi alterada ao longo do tempo, mas o registro ainda é fixo em tamanho.

por exemplo, uma máquina atual do FreeBSD tem:

struct utmpx {
    short           ut_type;        /* Type of entry. */
    struct timeval  ut_tv;          /* Time entry was made. */
    char            ut_id[8];       /* Record identifier. */
    pid_t           ut_pid;         /* Process ID. */
    char            ut_user[32];    /* User login name. */
    char            ut_line[16];    /* Device name. */
#if __BSD_VISIBLE
    char            ut_host[128];   /* Remote hostname. */
#else
    char            __ut_host[128];
#endif
    char            __ut_spare[64];
};

Outra vantagem para utmp e lastlog é a capacidade de ter arquivos esparsos .

Por exemplo, com lastlog (que o comando finger usa para exibir o último horário de login), os dados são armazenados em um deslocamento com base em uid * sizeof(struct lastlog) . Assim, você pode rapidamente e facilmente encontrar o último horário de login para o uid 12345678, procurando a posição calculada.

Com arquivos de texto, esses benefícios não existem; cada registro tem largura variável ou tem que ser preenchido. Os resultados são maiores, mais difíceis de lidar, podem exigir análise ( long ut_time é mais fácil de manipular do que tentar analisar uma string de data ASCII).

ASCII é ótimo para humanos e para dados que humanos podem precisar manipular. O binário é (às vezes) melhor para programas, especialmente para dados brutos que os humanos não precisam necessariamente ver.

    
por 17.09.2016 / 22:39

Tags