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