如何利用Linux strings提取文本信息

strings 命令在 Linux 中广泛使用,尤其是在二进制文件中查找可读字符串。
说白了,就是从一堆乱码中挖掘出可以理解的单词。

基本操作: 首先,打开终端,任何Linux系统都可以。
您必须拥有查看该文件的权限。
如果没有权限,会报错。

像这样直接使用它: 巴什 strings /path/to/binary/file
例如,检查文件 /usr/bin/ls 中的内容: 巴什 strings /usr/bin/ls
默认是查找最小长度为 4 个字符的字符串。
任何太短的字符串都将被视为垃圾而被忽略。

这取决于长度: 有时我想找一个更长的字符串来避免一堆无用的东西。
使用 -n 参数指定最小字符长度。
巴什 strings -n8 /path/to/binary/file
例如,只查看/usr/bin/ls中超过8 个字符的字符串: 巴什 strings -n8 /usr/bin/ls
这将使过滤更干净。

寻找具体内容: 直接用手柄过滤。
只需将字符串的输出通过管道传输到夹点即可。
巴什 字符串/路径/到/文件 | grep "search_pattern"
例如,在 /usr/bin/ls 中查找版本号的字符串: 巴什 字符串 /usr/bin/ls | grep "version"
这样就可以准确找到它。

保存结果: 您想保存并观看吗?使用 > 或 >>。
>表示直接覆盖,>>表示添加到最后。
巴什 strings /path/to/binary/file > output.txt
或添加: 巴什 strings /path/to/binary/file >> output.txt
例如,将 /usr/bin/ls 中的字符串保存到 ls_strings.txt: 巴什 字符串 /usr/bin/ls > ls_strings.txt
代码这个东西: 有时文件编码非常复杂,需要指定。
例如,UTF-1 6 小端: 巴什 字符串 -el /path/to/binary/file
如何处理大文件: 文件太大而无法读取?使用 head 或 tail 来限制行数。
巴什 字符串/路径/到/文件 | head -n 2 0
例如,只查看前2 0行: 巴什 字符串/路径/到/文件 |头-n 2 0
批处理: 想要检查目录中的所有 .so 文件吗?使用 finn 和 xargs。
巴什 找到。
-名称“.so”-type f -print0 |注意事项: 1 、权限问题:没有读权限,报Permission Denied错误。
2 、文件类型:字符串主要用于二进制文件,纯文本文件不使用。
3 、性能优化:处理大文件时,-n可以减少随机输出,grep可以快速查找关键字。

这样,字符串就可以用来高效地从二进制文件中提取、过滤和存储文本信息。
程序分析、逆向工程、日志调试都可以使用。

Linux cut 命令详解

老实说,当我第一次使用“剪切”命令时,我完全被它的灵活性搞糊涂了。
我记得在服务器上管理日志时,需要过滤某些字段,而我手头没有现成的工具,所以我暂时使用了Cut来完成此操作。
虽然这个命令很老练,但需要更多的思考才能正确使用。

以/etc/passwd等系统文件为例。
字段分隔符是冒号 (:)。
如果直接使用 -f 1 你只会得到用户名。
但是当我处理自定义协议时,分隔符是竖线(|),当我刚刚使用 -f 1 时,一切都搞乱了。
后来我发现我必须使用 -d \|不得不补充。
这个细节特别容易出问题。
我尝试使用“cut”来处理 CSV 文件,但由于分隔符太复杂,我最终改用“awk”——这让我意识到“cut”最适合处理结构化数据。

最有趣的是,当使用-c选项时,字符计数从头开始,甚至空格也算作一个字符。
我的一个朋友正是出于这个原因想截取该字段的前几个字符,但添加了一些空格并被切掉了。
后来他用 -b 选项切换到逐字节处理,然后错误就被修复了。
我记得他在屏幕上打手势了很长时间,终于明白了字符和字节的区别。

当涉及到块存储信息时,使用 Cut 特别酷。
例如,在 free 命令的输出中,您可以直接剪切 -f 2 ,3 ,4 /proc/meminfo 来提取 Total、Used 和 Free 值。
然而,有一个陷阱你应该小心。
如果某个字段恰好是空行,则剪切它会直接删除该行。
我正在处理系统日志,本来想提取进程 ID 和 CPU 使用情况,但空进程占位符漏掉了整行。
后来我添加了一个grep过滤器来解决这个问题。

最烦人的是Cut不支持常规分隔符。
例如,我曾经处理过用特殊符号分隔的传感器数据。
它充满了像 & 和 % 这样的混乱分隔符,我无法用 cut 来处理它。
最后,我们可以先用sed替换制表符,然后用cut处理。
这次经历告诉我,工具是有局限性的,必须结合使用。

在使用块存储时,使用 Cut 特别酷。
例如,在 free 命令的输出中,您可以直接剪切 -f 2 ,3 ,4 /proc/meminfo 来提取 Total、Used 和 Free 值。
然而,有一个陷阱你应该小心。
如果某个字段恰好是空行,则剪切它会直接删除该行。
我正在处理系统日志,本来想提取进程 ID 和 CPU 使用情况,但空进程占位符漏掉了整行。
后来我添加了一个grep过滤器来解决这个问题。

最烦人的是Cut不支持常规分隔符。
例如,我曾经处理过用特殊符号分隔的传感器数据。
它充满了像 & 和 % 这样的混乱分隔符,我无法用 cut 来处理它。
最后,我们可以先用sed替换制表符,然后用cut处理。
这次经历告诉我工具有局限性,必须组合使用。

如何用Linux strings提取特定格式的字符串

哎呀,兄弟,我在 Linux 上使用 string 命令已经很多年了,就像你问的那样。
曾经在进行系统维护时,这个命令是必不可少的。

我记得2 01 8 年我负责内部服务器的日志分析。
日志文件大小为数百兆字节,并且充满了混乱的字符串。
然后我就想,怎样才能快速找到有用的信息呢?然后我尝试了 string 命令并使用 grep 来过滤关键字。

这就是当时发生的事情。
我打开终端并输入:
strings /var/log/syslog | grep "ERROR"
结果一下子就找到了所有包含“ERROR”的字符串,效率很高。

后来发现这个命令可以和正则表达式结合起来。
例如,如果您需要搜索特定的电子邮件地址:
strings /var/log/syslog | grep -oE '[[:alnum:]]+@[[:alnum:]]+.[[:alnum:]]+'
这次只显示电子邮件地址。

有时我需要从日志中提取所有 URL 并对其进行排序。
这个操作有点复杂。
我在 awk 中使用 grep 并按如下方式排序:
strings /var/log/syslog | grep -oE 'https?://[[:alnum:]/?=&.%-]+' |排序 -u | awk '{打印长度,$0}' |Sort -n | cut -d ' ' -f2 -
这个过程有点长,但是非常有效,并且可以使所有 URL 整齐地组织起来。

但说实话,这个命令在处理大文件时可能有点慢,所以我通常使用 -n 选项来限制最小字符串长度。

strings -n8 /var/log/syslog
这减少了处理的数据量并提高了效率。

至于编码问题,我也遇到过。
例如,如果您的文件包含非 ASCII 字符,则必须正确设置终端编码。
否则可能无法显示。
我一般是这样设置的:
export LANG=en_US.UTF-8
这个方法没有问题。

所以这个strings命令结合grep、awk、sed等工具,实际上是Linux上处理文本的神器。