如何使用字符串命令显示文件的可打印字符

你有没有试过在编辑器中打开一个文件才发现它包含不可读的二进制内容?

Linux的 “字符串”命令可以在任何文件中查看人类可读的字符。

使用“strings”命令的主要目的是计算出您正在查看的文件类型,但您也可以使用它来提取文本。 例如,如果您有专用程序中的文件,该文件以奇怪的二进制格式保存文件,则可以使用“字符串”来提取放入文件中的文本。

字符串命令的示例用法

演示字符串命令强大功能的好方法是使用LibreOffice Writer创建文档。

只需打开LibreOffice Writer并输入一些文本,然后将其保存为标准的ODT格式

现在打开终端窗口 (同时按CTRL,ALT和T),然后使用cat命令显示文件,如下所示:

cat yourfilename.odt | 更多

(将yourfilename.odt替换为您创建的文件的名称)

你会看到的是整面难以辨认的文字。

按空格键滚动文件。 在整个文件中偶尔会看到一些你输入的文字。

字符串命令可以用来显示人类可读的部分。

以最简单的形式,您可以运行以下命令:

字符串yourfilename.odt | 更多

和以前一样,文字墙会出现,但只有文字可以作为人阅读。 如果你很幸运,那么你将能够看到你的文字。

然而,你将能够看到的是关键,在第一行:

mimetypeapplication / vnd.oasis.opendocument.text

我们知道文件类型是LibreOffice Writer ODT文件,原因有二:

  1. 我们创建了该文件
  2. 扩展名是.ODT

假设您没有创建该文件,或者您在恢复的磁盘上找到了该文件,并且该文件没有扩展名。

Windows恢复通常会恢复名称为0001,0002,0003等的文件。文件恢复的事实很好,但试图弄清楚这些文件的类型是一场噩梦。

通过使用字符串,您可以制定出文件类型的战斗机会。 知道文件是opendocument.text文件意味着您可以使用ODT扩展名保存并在LibreOffice编写器中打开它。

如果你不知道ODT文件基本上是一个压缩文件。 如果您将yourfilename.odt重命名为yourfilename.zip,则可以使用归档工具打开它,甚至可以解压缩该文件。

替代行为

默认情况下,strings命令会返回文件中的所有字符串,但您可以切换行为,以便从文件中初始化,加载的数据部分返回字符串。

这是什么意思? 似乎没有人知道。

假设您正在使用字符串来尝试找出文件类型或查找文件中的特定文本,这是有道理的。

如果使用默认行为运行strings命令,则不会获得您希望的输出,然后尝试运行以下命令之一来查看它是否有所作为:

字符串-d你的文件名

字符串 - 数据文件名

手册页指出上述命令可能有助于减少从字符串返回的垃圾数量。

“串”命令可以设置为反向工作,以便减号开关是默认行为。 如果您的系统出现这种情况,则可以使用以下命令返回所有数据:

字符串-a你的文件名

格式化输出

您可以在输出中获得文本以显示每行文本旁边的文件名称。

为此,请运行以下命令之一:

字符串-f yourfilename

字符串 - 打印文件名称您的文件名

输出现在看起来像这样:

yourfilename:一段文字

yourfilename:另一段文字

作为输出的一部分,您还可以显示文本在文件中出现位置的偏移量。 为此,请运行以下命令:

字符串-o yourfilename

输出结果如下所示:

你的

17024文本

偏移量实际上是八进制偏移量,尽管取决于系统如何编译字符串,它也很容易成为十六进制或十进制偏移量。

获得所需偏移量的更准确方法是使用以下命令:

字符串-td你的文件名

字符串 - 你的文件名

字符串 - 您的文件名

减号表示返回偏移量,后面的字符确定偏移量类型。 (即d =十进制,o =八进制,h =十六进制)。

默认情况下,strings命令会在新行上打印每个新字符串,但您可以设置您选择的分隔符。 例如,要使用管道符号(“|”)作为分隔符,请运行以下命令:

字符串-s“|” yourfilename

调整字符串限制

字符串命令默认在一行中查找4个可打印字符的字符串。 您可以调整默认值,以便它仅返回一个带有8个可打印字符或12个可打印字符的字符串。

通过调整此限制,您可以调整输出以获得最佳结果。 通过查找太长的字符串,您可能会忽略有用的文本,但如果太短,您可能会返回更多的垃圾。

要调整字符串限制,请运行以下命令:

字符串-n 8 yourfilename

在上面的例子中,我将限制更改为8。

您可以用您选择的号码替换8。

您也可以使用以下命令来执行相同的操作:

字符串 - 字节= 8您的文件名

包括空白

默认情况下,strings命令包含空白字符(如制表符或空格)作为可打印字符。 因此,如果你有一个字符串,读作“猫坐在垫子上”,那么字符串命令将返回整个文本。

新行字符和回车符在默认情况下不被视为可打印字符。

要让字符串将新行字符和回车识别为可打印字符,请按以下方式运行字符串:

字符串-w yourfilename

更改编码

有5种编码选项可用于字符串:

默认值是7位字节。

要更改编码,请运行以下命令:

字符串 - 你的文件名

字符串--encoding = s yourfilename

在上面的命令中,我指定了默认的“s”,这意味着7位字节。 只需用您选择的编码字母替换“s”即可。

更改二进制文件描述名称

您可以更改字符串的行为,以便它使用与系统提供的不同的二进制文件描述符库。

这个开关是专家的一个选择。 如果您有另一个库可用,则可以通过运行以下字符串命令来完成此操作:

字符串-T bfdname

从文件读取选项

如果每次要使用相同的选项,则不必在每次运行命令时都指定所有开关,因为这需要时间。

你可以做的是使用nano创建一个文本文件并指定该文件中的选项。

要在终端中尝试以下命令,请执行以下操作:

纳米弦乐队

在文件中输入以下文本:

-f -o -n 3 -s“|”

按下CTRL和O保存文件,然后按CTRL和X退出。

要使用这些选项运行字符串命令,请运行以下命令:

字符串@stringsopts您的文件名

这些选项将从文件stringsopts中读取,并且您应该在每个字符串之前看到文件名,偏移量和“|” 作为分隔符。

获得帮助

如果您想了解更多关于字符串的信息,可以运行以下命令获取帮助。

字符串 - 帮助

或者,您也可以阅读手册页面:

人弦

找出正在运行的字符串的版本

要查找正在运行的字符串版本,请运行以下命令之一:

字符串-v

字符串-V

字符串 - 版本