Explicação do significado do conteúdo do arquivo / var / run / utmp

4

Eu gostaria de entender o conteúdo do seguinte sistema de arquivos /var/run/utmp . Quando eu uso o comando od para abri-lo, vejo o seguinte:

[john@iceman ~]$ od -c /var/run/utmp 
0000000 002  
[john@iceman ~]$ od -c /var/run/utmp 
0000000 002  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%   ~  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
0000020  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
0000040  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%   ~   ~  %pre%  %pre%   r   e   b   o
0000060   o   t  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
0000100  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%   3   .   1   0
0000120   .   0   -   6   9   3   .   1   1   .   1   .   e   l   7   .
0000140   x   8   6   _   6   4  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
0000160  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%  %pre%
%pre% %pre% %pre% %pre% %pre% %pre% ~ %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000020 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000040 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% ~ ~ %pre% %pre% r e b o 0000060 o t %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000100 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 3 . 1 0 0000120 . 0 - 6 9 3 . 1 1 . 1 . e l 7 . 0000140 x 8 6 _ 6 4 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000160 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre%

O que esses números / caracteres significam? Em qual sistema de codificação foi escrito? e como pode ser traduzido em um texto significativo?

    
por Jeff Schaller 01.09.2018 / 16:48

3 respostas

7

Os arquivos de texto contêm apenas caracteres, enquanto os arquivos binários contêm todos os valores de caracteres possíveis, incluindo o control characters O comando od com o sinalizador -c (od significa octal dump ) exibe arquivos contendo caracteres de controle.

Ao exibir um arquivo binário na tela, os caracteres de controle dentro do arquivo podem definir modos indesejáveis para a estação de trabalho e podem fazer com que a saída não fique nítida (ou seja, sem sentido) e até mesmo fazer com que a estação pare de responder. Para encontrar pistas no arquivo binário (ou seja, exibi-lo de maneira segura), podemos usar os comandos cat , od ou hexdump .

O comando cat -v que tornará os caracteres de controle visíveis de maneira segura e não colocará a tela em nenhum modo estranho. Este comando representa cada caractere de controle por um Careta (^) e o caractere imprimível correspondente.

O comando od significa octal dump e exibe cada palavra de um arquivo ou pipeline em octal usando the base eight numbering system . Por exemplo, o comando od mostraria o arquivo do sistema /var/run/utmp da seguinte forma:

$ od /var/run/utmp
0000000 000002 000000 000000 000000 000176 000000 000000 000000
0000020 000000 000000 000000 000000 000000 000000 000000 000000
0000040 000000 000000 000000 000000 077176 000000 062562 067542
0000060 072157 000000 000000 000000 000000 000000 000000 000000
0000100 000000 000000 000000 000000 000000 000000 027063 030061
0000120 030056 033055 031471 030456 027061 027061 066145 027067
0000140 034170 057466 032066 000000 000000 000000 000000 000000
0000160 000000 000000 000000 000000 000000 000000 000000 000000
. . . . 
. . . . 
. . . . 
. . . . 

Agora, adicionar o sinalizador -b (-b significa selecionar bytes octal) ao comando od dividirá cada palavra em dois bytes ou caracteres. Por exemplo, o texto anterior mostrará o seguinte:

$ od -b /var/run/utmp
0000000 002 000 000 000 000 000 000 000 176 000 000 000 000 000 000 000
0000020 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
0000040 000 000 000 000 000 000 000 000 176 176 000 000 162 145 142 157
0000060 157 164 000 000 000 000 000 000 000 000 000 000 000 000 000 000
0000100 000 000 000 000 000 000 000 000 000 000 000 000 063 056 061 060
0000120 056 060 055 066 071 063 056 061 061 056 061 056 145 154 067 056
0000140 170 070 066 137 066 064 000 000 000 000 000 000 000 000 000 000
0000160 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
. . . . 
. . . . 
. . . . 
. . . . 

De acordo com ASCII(7) man, vamos combinar os números da tabela anterior com o ASCII:

  • 000 significa null .
  • 002 significa start of text
  • na primeira linha, o número 176 representa o caractere ~

e assim por diante, cada número é codificado em ASCII(7) table.

Por outro lado, adicionar o sinalizador -c (significa selecionar caracteres imprimíveis ou escapes de contrabarra ao comando od mostrará qualquer caractere imprimível na saída. O mesmo exemplo anterior terá a seguinte aparência:

$ od -c /var/run/utmp
0000000 002  
$ strings  /var/run/utmp 
reboot
3.10.0-693.11.1.el7.x86_64
. . . . 
. . . . 
. . . . 
. . . . 
$ od /var/run/utmp
0000000 000002 000000 000000 000000 000176 000000 000000 000000
0000020 000000 000000 000000 000000 000000 000000 000000 000000
0000040 000000 000000 000000 000000 077176 000000 062562 067542
0000060 072157 000000 000000 000000 000000 000000 000000 000000
0000100 000000 000000 000000 000000 000000 000000 027063 030061
0000120 030056 033055 031471 030456 027061 027061 066145 027067
0000140 034170 057466 032066 000000 000000 000000 000000 000000
0000160 000000 000000 000000 000000 000000 000000 000000 000000
. . . . 
. . . . 
. . . . 
. . . . 
$ od -b /var/run/utmp
0000000 002 000 000 000 000 000 000 000 176 000 000 000 000 000 000 000
0000020 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
0000040 000 000 000 000 000 000 000 000 176 176 000 000 162 145 142 157
0000060 157 164 000 000 000 000 000 000 000 000 000 000 000 000 000 000
0000100 000 000 000 000 000 000 000 000 000 000 000 000 063 056 061 060
0000120 056 060 055 066 071 063 056 061 061 056 061 056 145 154 067 056
0000140 170 070 066 137 066 064 000 000 000 000 000 000 000 000 000 000
0000160 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
. . . . 
. . . . 
. . . . 
. . . . 
$ od -c /var/run/utmp
0000000 002  
$ strings  /var/run/utmp 
reboot
3.10.0-693.11.1.el7.x86_64
. . . . 
. . . . 
. . . . 
. . . . 
%pre% %pre% %pre% %pre% %pre% %pre% ~ %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000020 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000040 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% ~ ~ %pre% %pre% r e b o 0000060 o t %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000100 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 3 . 1 0 0000120 . 0 - 6 9 3 . 1 1 . 1 . e l 7 . 0000140 x 8 6 _ 6 4 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000160 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% . . . . . . . . . . . . . . . .
%pre% %pre% %pre% ~ %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000020 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000040 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% ~ ~ %pre% %pre% r e b o 0000060 o t %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000100 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 3 . 1 0 0000120 . 0 - 6 9 3 . 1 1 . 1 . e l 7 . 0000140 x 8 6 _ 6 4 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% 0000160 %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% %pre% . . . . . . . . . . . . . . . .

Para traduzir a tabela anterior para um texto significativo, podemos usar o comando strings que encontrará todas as seqüências de caracteres imprimíveis com um comprimento de cerca de quatro caracteres ou mais. Por exemplo, na tabela anterior:

  • A linha < 0000040 > contém as letras r e b o .
  • A linha < 0000060 > contém as letras o t . Como resultado, o comando strings traduziria essas letras para a palavra "reboot".

Da mesma forma,

  • Linha <0000> > contém 3 . 1 0 .
  • Linha < 0000120 > contém . 0 - 6 9 3 . 1 1 . 1 . e l 7 . .
  • Linha < 0000140 > contém x 8 6 _ 6 4 .

O comando string traduziria essas três linhas para "3.10.0-693.11.1.el7.x86_64"

%pre%     
por 01.09.2018 / 16:57
1

od -c /var/run/utmp faz o melhor para produzir um texto significativo, imprimindo o arquivo char por caractere, em texto claro, e em uma espécie de representação binária / octal quando não pode. Você pode influenciar o comportamento de od definindo várias opções. utmp é um arquivo binário com registros fixos e, portanto, há poucas chances de realmente ler seu conteúdo sem tradução / interpretação / formatação.

    
por 01.09.2018 / 17:05
0

Para ver o que está escrito neste arquivo, você pode verificar utmpdump /var/run/utmp .

Lá você pode ver todas as entradas do utmp em formato legível.

    
por 17.05.2019 / 22:35

Tags