^@^@^@ 在文本文件中意味着什么?

Mik*_*kov 5 editors files

有时我在使用图形文本编辑器打开文件时遇到问题 - 我正在使用geany. vim该文件可以毫无问题地读取。我检查了文件,除了一些行之外,没有任何问题。这是示例.bash_history文件:

 776 reboot
 777 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^     @^@^@^@^@^@^@geany /etc/fstab
....
....
 823 reboot 
 824 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@exit
Run Code Online (Sandbox Code Playgroud)

我不知道是什么^@,但是删除包含它的每一行后,可以在geany. 也许重启操作必须与之相关?但我的reboot文件中有其他条目,并且这些^@字符仅出现在两三个位置。

这只是一个示例文件,我看到了其他一些文件中的字符,有一件事似乎是相同的——它只涉及大文件,那些有很多行的文件。

有谁知道这是什么^@意思,它来自哪里以及为什么vim读取文件没有问题而geany根本无法读取它?

slm*_*slm 4

当文件中存在杂散字符时,您可以寻求工具odhexdump.

例子

首先,我们将展示当我们告诉八进制转储 ( )以十六进制格式 ( )od转储文件内容时,它会显示什么。a.txt-x

OD

$ od -x a.txt 
0000000 3737 2036 6572 6f62 746f 370a 3737 0020
0000020 0000 0000 0000 0000 0000 0000 0000 0000
*
0000140 0000 0000 0000 0000 0000 0000 0000 6567
0000160 6e61 2079 652f 6374 662f 7473 6261 380a
0000200 3332 7220 6265 6f6f 2074 380a 3432 0020
0000220 0000 0000 0000 0000 0000 0000 0000 0000
*
0000320 7865 7469 000a
0000325
Run Code Online (Sandbox Code Playgroud)

我们可以用来hexdump做类似的事情,以十六进制格式显示数据,但如果可能的话,它也会将值显示为 ASCII 字符。

十六进制转储

$ hexdump -C a.txt 
00000000  37 37 36 20 72 65 62 6f  6f 74 0a 37 37 37 20 00  |776 reboot.777 .|
00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 67 65  |..............ge|
00000070  61 6e 79 20 2f 65 74 63  2f 66 73 74 61 62 0a 38  |any /etc/fstab.8|
00000080  32 33 20 72 65 62 6f 6f  74 20 0a 38 32 34 20 00  |23 reboot .824 .|
00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000d0  65 78 69 74 0a                                    |exit.|
000000d5
Run Code Online (Sandbox Code Playgroud)

查看上面的输出,您会注意到几个00 00 00. 这些是^@您最初询问的角色。

顺便说一句,该字符00是空字符。

  • 文本文件中出现 NUL 的其他常见原因有: 1. 一个进程在另一个进程写入文件时截断了该文件,因此第二个进程的写入突然超过了当前的 EOF,因此间隙变成稀疏分配的全零空间。2. 文件在系统崩溃前不久被修改,文件系统恢复了文件的大小,但没有恢复所有数据。 (4认同)
  • 但他们在文件中做什么呢?他们是怎么到达那里的? (3认同)