私のチームはCI環境で作業しています。
x.ko
という名前のko
ファイルは、CI環境から常に定期的に生成され、そのタイプはELF 64-bit LSB relocatable
です。
今日、このko
ファイルのタイプがdata
になったことがわかりました。
その理由を理解しようとしています。
このcat
ファイルをko
しようとしましたが、出力は何もありません。次に、cat -et x.ko
を試してみると、たくさんの^@^@^@^@^@^@^@^@^@^@^@^@^@^@
...が得られます。
^@^@^@^@^@^@^@^@^@
の意味を知っていますか?
ファイルが空ではなくnullでいっぱいです。通常のcat
は、nullを標準出力に出力しますが、端末は通常、nullをそれぞれ何も表示せず、cat -v
は、nullを^@
として表します。 "@"(0x40、または64)xor 64(フリップビット7)のバイト値がゼロであるため、^@
はnullバイトを表します。
なぜ突然nullでいっぱいになり、ここからはわかりません。
この関連する質問は、キャレット表現についての情報になるかもしれません: ASCIIエスケープシーケンスと制御文字のペアリングは、標準の一部ですか?
注意してくださいcatは、バイナリの可能性があるデータを表示するための完璧なツールではありません。
簡単なUNIXツールはod(octal dump)です。
od -c -tx1の例
root@server:~# od -c -tx1 /etc/passwd | head
0000000 r o o t : x : 0 : 0 : r o o t :
72 6f 6f 74 3a 78 3a 30 3a 30 3a 72 6f 6f 74 3a
0000020 / r o o t : / b i n / b a s h \n
2f 72 6f 6f 74 3a 2f 62 69 6e 2f 62 61 73 68 0a
0000040 d a e m o n : x : 1 : 1 : d a e
64 61 65 6d 6f 6e 3a 78 3a 31 3a 31 3a 64 61 65
0000060 m o n : / u s r / s b i n : / u
6d 6f 6e 3a 2f 75 73 72 2f 73 62 69 6e 3a 2f 75
0000100 s r / s b i n / n o l o g i n \n
73 72 2f 73 62 69 6e 2f 6e 6f 6c 6f 67 69 6e 0a
キャリッジリターン\ n