web-dev-qa-db-ja.com

/ var / run / utmpファイルの内容の意味の説明

次のファイルシステムの内容を理解したい/var/run/utmp。コマンドodを使用してそれを開くと、次のように表示されます。

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

これらの数字/文字はどういう意味ですか?それはどのコーディングシステムで書かれましたか?そして、それをどのように意味のあるテキストに翻訳できますか?

4
user308606

テキストファイルには文字のみが含まれますが、 バイナリファイル には 制御文字 を含むすべての可能な文字値が含まれます。コマンド_odとフラグ_-c_ (odは_octal dump_を表します)、制御文字を含むファイルを表示します。

バイナリファイルを画面に表示するとき、ファイル内の制御文字がワークステーションに望ましくないモードを設定し、出力が不明瞭(つまり意味不明)に見える可能性があり、ワークステーションが応答を停止する場合さえあります。バイナリファイルへの手がかりを見つける(つまり、安全な方法で表示する)ために、コマンドcatodまたはhexdumpを使用できます。

コマンド_cat -v_は、制御文字を安全な方法で表示し、画面を奇妙なモードにしません。このコマンドは、各制御文字をキャレット(^)と対応する印刷可能な文字で表します。

コマンドodは8進ダンプを表し、_the base eight numbering system_を使用してファイルまたはパイプラインのすべてのワードを8進で表示します。たとえば、コマンドodは、システムファイル_/var/run/utmp_を次のように表示します。

_$ 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
. . . . 
. . . . 
. . . . 
. . . . 
_

次に、フラグ_-b_(-bは8進バイトを選択することを意味します)をコマンドodに追加すると、各Wordが2バイトまたは2文字に分割されます。たとえば、前のテキストは次のように表示されます。

_$ 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
. . . . 
. . . . 
. . . . 
. . . . 
_

ASCII(7) manに従って、前の表の数値をASCIIと一致させます。

  • _000_はnullを意味します。
  • _002_は_start of text_を意味します
  • 最初の行では、数値_176_は文字_~_を表します

など、すべての数値はASCII(7)テーブルにコーディングされます。

反対に、フラグ_-c_(コマンドodに選択可能な印刷可能な文字またはバックスラッシュエスケープを表す)を追加すると、出力内に印刷可能な文字が表示されます。上記の同じ例は次のようになります。

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

前の表を意味のあるテキストに変換するには、コマンドstringsを使用して、長さが約4文字以上の印刷可能な文字列を検索できます。たとえば、前の表では:

  • 行<0000040>には、文字_r e b o_が含まれています。
  • 行<0000060>には、文字_o t_が含まれています。その結果、コマンドstringsはこれらの文字をWordに変換します_"reboot"._

同様に、

  • 行<0000100>には_3 . 1 0_が含まれます。
  • 行<0000120>には_. 0 - 6 9 3 . 1 1 . 1 . e l 7 ._が含まれています。
  • 行<0000140>には_x 8 6 _ 6 4_が含まれます。

コマンドstringは、これらの3つの行を_"3.10.0-693.11.1.el7.x86_64"_に変換します

_$ strings  /var/run/utmp 
reboot
3.10.0-693.11.1.el7.x86_64
. . . . 
. . . . 
. . . . 
. . . . 
_
8
user90704

od -c /var/run/utmpは、意味のあるテキストを出力できるように最善を尽くし、ファイルを1文字ずつ、可能な場合はクリアテキストで、出力できない場合は2進/ 8進表記で出力します。いくつかのオプションを設定することにより、odの動作に影響を与えることができます。 utmpは固定レコードのバイナリファイルであるため、翻訳/解釈/フォーマットを行わずに実際にその内容を読み取る可能性は低いです。

1
RudiC

このファイルに何が書き込まれているかを確認するには、utmpdump /var/run/utmp

そこには、すべてのutmpエントリが人間が読める形式で表示されます。

0
Marie Sene