Linux处理以Null字节分隔内容的文件技巧

 更新时间:2025年12月23日 09:27:41   作者:vortex5  
在 Linux 中,有些特殊文件的内容不是用换行符 \n 分隔,而是用 null 字节 \0 分隔,本文将介绍一系列处理这类“null-separated”内容的实用小技巧,有需要的可以了解下

在 Linux 中,有些特殊文件(如 /proc/*/environ/proc/*/cmdline、某些二进制配置文件)的内容不是用换行符 \n 分隔,而是用 null 字节 \0 分隔。这导致直接用 cat 看起来是空的,用 grepawk 等常规工具处理时会出错或显示不全。本文将介绍一系列处理这类“null-separated”内容的实用小技巧。

1. 最常用的三种查看方式

# 方法1:tr 替换 null 为换行(最直观)
tr '\0' '\n' < /proc/self/environ

# 方法2:xargs -0(专为 null 分隔设计)
xargs -0 -n1 < /proc/self/environ

# 方法3:strings(自动提取可打印字符串)
strings /proc/self/environ

三者效果类似,但细节有区别:

  • tr '\0' '\n':完整保留所有内容,包括空字符串。
  • xargs -0 -n1:每条单独输出一行,自动跳过连续多个 null。
  • strings:只输出可打印的 ASCII 字符串,过滤掉二进制垃圾。

2. 进阶组合技巧

排序、去重、统计

# 排序查看环境变量
tr '\0' '\n' < /proc/self/environ | sort

# 去重(如果有重复变量)
tr '\0' '\n' < /proc/self/environ | sort -u

# 统计有多少个环境变量
xargs -0 -n1 < /proc/self/environ | wc -l

搜索特定变量

# 查找包含 PATH 的变量
tr '\0' '\n' < /proc/self/environ | grep PATH

# 或用 xargs + grep
xargs -0 -n1 < /proc/self/environ | grep -i display

# 只看变量名(去掉 = 后面的值)
xargs -0 -n1 < /proc/self/environ | cut -d= -f1

同时查看多个进程的环境

echo "=== PID 1 (systemd) ==="
tr '\0' '\n' < /proc/1/environ | sort

echo "=== 当前 shell ==="
tr '\0' '\n' < /proc/self/environ | sort | head -20

echo "=== sshd 进程(假设 PID 1234)==="
tr '\0' '\n' < /proc/1234/environ | grep SSH

3. 处理 /proc/*/cmdline 的经典用法

/proc/*/cmdline 用 null 分隔命令行参数。

# 查看某个进程的完整命令行(参数间有空格也能正确显示)
tr '\0' '\n' < /proc/1234/cmdline | paste -sd " "

# 或者更常见:
xargs -0 < /proc/1234/cmdline

# 列出所有进程的命令行(简化版 ps)
for pid in /proc/[0-9]*; do
    echo -n "$(basename $pid): "
    tr '\0' ' ' < $pid/cmdline 2>/dev/null || echo
done

4. 其他 null-separated 场景的小技巧

find + -print0 配合 xargs -0(避免文件名含空格/换行问题)

# 安全处理文件名含空格、换行的场景
find /path -name "*.txt" -print0 | xargs -0 rm -v
find /path -type f -print0 | xargs -0 ls -l

while read + xargs -0 循环处理

xargs -0 -n1 < /proc/self/environ | while read line; do
    echo "变量: $line"
done

一行命令导出当前环境到文件(保留 null 分隔)

# 备份当前环境
cp /proc/self/environ myenv.backup

# 恢复(危险,仅演示)
xargs -0 -n1 < myenv.backup | xargs -0 export

到此这篇关于Linux处理以Null字节分隔内容的文件技巧的文章就介绍到这了,更多相关Linux处理文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈linux kernel对于浮点运算的支持

    浅谈linux kernel对于浮点运算的支持

    今天小编就为大家分享一篇浅谈linux kernel对于浮点运算的支持,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Linux系统下 centos7下搭建ElasticSearch中间件及常用接口演示

    Linux系统下 centos7下搭建ElasticSearch中间件及常用接口演示

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。这篇文章主要介绍了Linux系统下 centos7下搭建ElasticSearch中间件及常用接口演示 ,需要的朋友可以参考下
    2019-07-07
  • Linux下误删messages文件的找回方法

    Linux下误删messages文件的找回方法

    今天小编就为大家分享一篇关于Linux下误删messages文件的找回方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Apache 安装和使用文档

    Apache 安装和使用文档

    Apache安装和使用文档
    2009-11-11
  • Ubuntu20.04安装搜狗输入法的详细步骤

    Ubuntu20.04安装搜狗输入法的详细步骤

    这篇文章主要介绍了Ubuntu20.04安装搜狗输入法的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Ubuntu系统下Docker启动失败(iptables/nf_tables)的问题排查与修复方法

    Ubuntu系统下Docker启动失败(iptables/nf_tables)的问题排查与修复方法

    在 Ubuntu 系统中安装 Docker 后,有部分用户在启动 Docker 服务时遇到如下报错: Failed to start Docker Application Container Engine,本文将详细解释该问题的原因,并提供完整的修复方案,需要的朋友可以参考下
    2025-09-09
  • linux中设置nexus开机自启动的方法

    linux中设置nexus开机自启动的方法

    这篇文章主要介绍了linux中设置nexus开机自启动的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Linux系统非正常关机导致磁盘异常的问题及解决

    Linux系统非正常关机导致磁盘异常的问题及解决

    文章介绍了在VMware ESXi虚拟化环境中,由于断电导致的Linux系统非正常关机和磁盘异常问题及其解决方案,主要问题包括文件系统损坏和报错信息,解决方案涉及检查和修复`/etc/fstab`文件中的语法错误,并使用`dmsetup`命令恢复设备映射
    2025-11-11
  • Linux入侵常用命令之防黑客示例代码

    Linux入侵常用命令之防黑客示例代码

    这篇文章主要给大家介绍了关于Linux入侵常用命令之防黑客的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • Linux的文件存取权限和0644权限问题

    Linux的文件存取权限和0644权限问题

    这篇文章主要介绍了Linux的文件存取权限和0644权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论