您是否曾尝试在编辑器中打开文件,但发现它包含不可读的二进制内容?
Linux“strings”命令可以查看任何文件中的人类可读字符。
使用“strings”命令的主要目的是确定您正在查看的文件类型,但您也可以使用它来提取文本。例如,如果您有一个专有程序的文件,该文件以奇怪的二进制格式保存文件,您可以使用“字符串”来提取放入文件的文本。
字符串命令的示例用法
演示strings命令功能的一个好方法是使用LibreOffice Writer创建一个文档。
只需打开LibreOffice Writer并输入一些文本,然后将其保存为标准ODT格式。
现在打开一个终端窗口(同时按下CTRL,ALT和T),然后使用cat命令显示该文件,如下所示:
cat yourfilename.odt |更多
(将yourfilename.odt替换为您创建的文件的名称)
你将看到的是一堵难以辨认的文字。
按空格键滚动文件。在整个文件中偶尔会看到您输入的一些文本。
strings命令可用于仅显示人类可读的部分。
在最简单的形式中,您可以运行以下命令:
字符串yourfilename.odt |更多
和以前一样,会出现一面文字墙,但只有你可以作为人类阅读的文字。如果你幸运,那么你将能够看到你的文字。
然而,您将能够看到的关键是第一行:
mimetypeapplication / vnd.oasis.opendocument.text
我们知道文件类型是LibreOffice Writer ODT文件,原因有两个:
- 我们创建了该文件
- 扩展名为.ODT
想象一下,您没有创建该文件,或者您在恢复的磁盘上找到该文件,并且该文件没有扩展名。
Windows恢复通常会恢复名称为0001,0002,0003等的文件。文件被恢复的事实很好但是试图弄清楚这些文件的类型是一场噩梦。
通过使用字符串,您有可能计算出文件类型。知道文件是opendocument.text文件意味着您可以使用ODT扩展名保存它并在LibreOffice writer中打开它。
如果你不知道ODT文件基本上是一个压缩文件。如果将filesname.odt重命名为yourfilename.zip,则可以在归档工具中将其打开,甚至可以解压缩该文件。
替代行为
默认情况下,strings命令返回文件中的所有字符串,但您可以切换行为,以便从文件中的初始化,加载的数据部分返回字符串。
这究竟是什么意思?似乎没有人知道。
假设您使用字符串尝试并找出文件类型或查找文件中的特定文本是有意义的。
如果在使用默认行为运行strings命令时,您没有获得您希望的输出,那么请尝试运行以下命令之一以查看它是否有所不同:
手册页说明上述命令可能有助于减少从字符串返回的垃圾量。 可以将“strings”命令设置为反向工作,以便减去d开关是默认行为。如果您的系统是这种情况,那么您可以使用以下命令返回所有数据: 您可以在输出中获取文本,以在每行文本旁边显示文件的名称。 要执行此操作,请运行以下命令之一: 输出现在看起来像这样: 作为输出的一部分,您还可以显示文本在文件中出现的位置的偏移量。为此,请运行以下命令: 输出看起来像这样: 偏移量实际上是八进制偏移量,但取决于如何为系统编译字符串,它也可以很容易地为十六进制或十进制偏移量。 获得所需偏移量的更准确方法是使用以下命令: 减号表示返回偏移量,后面的字符表示偏移量类型。 (即d =十进制,o =八进制,h =十六进制)。 默认情况下,strings命令会在新行上打印每个新字符串,但您可以设置所选的分隔符。例如,要使用管道符号(“|”)作为分隔符,请运行以下命令: 默认情况下,strings命令会查找一行中包含4个可打印字符的字符串。您可以调整默认值,使其仅返回包含8个可打印字符或12个可打印字符的字符串。 通过调整此限制,您可以定制输出以获得最佳结果。通过查找一个太长的字符串,你可能会忽略有用的文本,但是由于它太短,你最终可能会返回更多的垃圾。 要调整字符串限制,请运行以下命令: 在上面的例子中,我将限制更改为8。您可以使用您选择的号码替换8。 您还可以使用以下命令执行相同的操作: 默认情况下,strings命令包括空格,例如制表符或空格作为可打印字符。因此,如果您的字符串读作“猫坐在垫子上”,那么strings命令将返回整个文本。 默认情况下,新行字符和回车符不被视为可打印字符。 要获取字符串以识别新行字符和回车符作为可打印字符,请按以下方式运行字符串: 有5种编码选项可用于字符串: 默认值为7位字节。 要更改编码,请运行以下命令: 在上面的命令中,我指定了默认的“s”,这意味着7位字节。只需将“s”替换为您选择的编码字母即可。 您可以更改字符串的行为,以便它使用不同于系统提供的二进制文件描述符库。 这个开关是专家之一。如果您要使用另一个库,则可以通过运行以下字符串命令来执行此操作: 如果您每次都要使用相同的选项,那么每次运行命令时都不必指定所有开关,因为这需要时间。 您可以做的是使用nano创建文本文件并指定该文件中的选项。 要在终端中尝试此操作,请运行以下命令: 在文件中输入以下文本: 按CTRL和O保存文件,然后按CTRL和X退出。 要使用这些选项运行字符串命令,请运行以下命令: 将从文件stringsopts中读取选项,您应该在每个字符串之前看到文件名,偏移量和“|”作为分隔符。 如果要阅读有关字符串的更多信息,可以运行以下命令来获取帮助。 或者您也可以阅读手册页: 要查找正在运行的字符串版本,请运行以下命令之一:strings -d yourfilename
strings --data yourfilenamestrings -a yourfilename
格式化输出
strings -f yourfilename
strings --print-file-name yourfilenameyourfilename:一段文字
yourfilename:另一段文字字符串-o yourfilename
你的
17024文字
strings -t d yourfilename
strings -t o yourfilenamestrings -t h yourfilename字符串-s“|” yourfilename
调整字符串限制
strings -n 8 yourfilename
strings --bytes = 8 yourfilename
包括空白
strings -w yourfilename
更改编码
strings -e是你的文件名
字符串--encoding = s yourfilename 更改二进制文件描述名称
strings -T bfdname
从文件中读取选项
纳米琴弦
-f -o -n 3 -s“|”
字符串@stringsopts yourfilename
获得帮助
字符串--help
男人的弦
找出您正在运行的字符串版本
字符串-v
字符串-V字符串--version