Linux處理以Null字節(jié)分隔內(nèi)容的文件技巧
在 Linux 中,有些特殊文件(如 /proc/*/environ、/proc/*/cmdline、某些二進(jìn)制配置文件)的內(nèi)容不是用換行符 \n 分隔,而是用 null 字節(jié) \0 分隔。這導(dǎo)致直接用 cat 看起來是空的,用 grep、awk 等常規(guī)工具處理時會出錯或顯示不全。本文將介紹一系列處理這類“null-separated”內(nèi)容的實(shí)用小技巧。
1. 最常用的三種查看方式
# 方法1:tr 替換 null 為換行(最直觀) tr '\0' '\n' < /proc/self/environ # 方法2:xargs -0(專為 null 分隔設(shè)計) xargs -0 -n1 < /proc/self/environ # 方法3:strings(自動提取可打印字符串) strings /proc/self/environ
三者效果類似,但細(xì)節(jié)有區(qū)別:
tr '\0' '\n':完整保留所有內(nèi)容,包括空字符串。xargs -0 -n1:每條單獨(dú)輸出一行,自動跳過連續(xù)多個 null。strings:只輸出可打印的 ASCII 字符串,過濾掉二進(jìn)制垃圾。
2. 進(jìn)階組合技巧
排序、去重、統(tǒng)計
# 排序查看環(huán)境變量 tr '\0' '\n' < /proc/self/environ | sort # 去重(如果有重復(fù)變量) tr '\0' '\n' < /proc/self/environ | sort -u # 統(tǒng)計有多少個環(huán)境變量 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
同時查看多個進(jìn)程的環(huán)境
echo "=== PID 1 (systemd) ===" tr '\0' '\n' < /proc/1/environ | sort echo "=== 當(dāng)前 shell ===" tr '\0' '\n' < /proc/self/environ | sort | head -20 echo "=== sshd 進(jìn)程(假設(shè) PID 1234)===" tr '\0' '\n' < /proc/1234/environ | grep SSH
3. 處理 /proc/*/cmdline 的經(jīng)典用法
/proc/*/cmdline 用 null 分隔命令行參數(shù)。
# 查看某個進(jìn)程的完整命令行(參數(shù)間有空格也能正確顯示)
tr '\0' '\n' < /proc/1234/cmdline | paste -sd " "
# 或者更常見:
xargs -0 < /proc/1234/cmdline
# 列出所有進(jìn)程的命令行(簡化版 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 循環(huán)處理
xargs -0 -n1 < /proc/self/environ | while read line; do
echo "變量: $line"
done
一行命令導(dǎo)出當(dāng)前環(huán)境到文件(保留 null 分隔)
# 備份當(dāng)前環(huán)境 cp /proc/self/environ myenv.backup # 恢復(fù)(危險,僅演示) xargs -0 -n1 < myenv.backup | xargs -0 export
到此這篇關(guān)于Linux處理以Null字節(jié)分隔內(nèi)容的文件技巧的文章就介紹到這了,更多相關(guān)Linux處理文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Centos7.2 系統(tǒng)上yum安裝lamp環(huán)境
這篇文章主要介紹了centos7.2 系統(tǒng)上yum安裝lamp環(huán)境的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-11-11
Centos7 firewall和docker沖突問題及解決過程
本文描述了一個在CentOS 7上使用firewalld和Docker容器的問題,當(dāng)firewalld啟動或重啟時,會從iptables中移除Docker的規(guī)則,導(dǎo)致Docker容器中的服務(wù)無法訪問,最終,作者通過先啟動或重啟防火墻,然后重啟Docker服務(wù),并刪除有問題的容器,重新創(chuàng)建容器來解決了問題2025-12-12
Linux安裝Python虛擬環(huán)境virtualenv的方法
下面小編就為大家?guī)硪黄狶inux安裝Python虛擬環(huán)境virtualenv的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01

