本文目录导读:

在脚本中使用 lsof 查看文件打开情况时,掌握以下技巧可以显著提升效率和准确性:
核心参数组合
# 查看特定进程打开的文件 lsof -p <PID> # 查看特定用户打开的文件 lsof -u <username> # 查看特定文件系统挂载点的打开文件 lsof /path/to/mount # 查看网络连接(关键) lsof -i lsof -i :80 # 特定端口 lsof -i tcp # TCP连接
脚本中常用过滤技巧
按文件描述符过滤
# 只显示普通文件(排除socket、pipe等) lsof -p <PID> | awk '$5 ~ /^REG|^DIR/' # 显示已删除但仍被占用文件 lsof -p <PID> | grep '(deleted)'
格式化输出(适合脚本处理)
lsof -F n -p <PID> # -F 输出机器可读格式
# 自定义格式(更可控)
lsof -p <PID> -o | awk 'NR>1 {print $1, $3, $7, $8, $9}'
高级过滤场景
查找占用特定端口的进程
# 方法1:直接
lsof -i :443 -P -n | awk 'NR>1{print $1, $3}'
# 方法2:排除已关闭的TIME_WAIT
lsof -i :443 -P -n | grep -v TIME_WAIT
# 方法3:完全脚本友好
lsof -t -i :443 # 只输出PID
监控文件操作
# 配合 watch 实时监控
watch -n 1 "lsof -p <PID> | wc -l"
# 监控特定文件被打开
while true; do
lsof /var/log/syslog
sleep 2
done
性能优化技巧
避免递归扫描
# 只查当前进程,不递归子进程 lsof -p <PID> -w # -w 禁用警告 # 限制结果数量 lsof -p <PID> | head -50 | tail -10 # 中间部分
批量处理多个进程
# 查找所有nginx进程的文件
lsof -c nginx # 按命令名匹配
# 或使用进程组
for pid in $(pgrep nginx); do
lsof -p $pid -F n >> /tmp/nginx_files.txt
done
常见脚本模式
检查文件是否被占用
# 脚本中安全使用
if lsof /path/to/file > /dev/null 2>&1; then
echo "文件被占用"
else
echo "文件可操作"
fi
# 精确检查某个PID
if lsof -p $PID 2>/dev/null | grep -q "/path/to/target"; then
echo "进程占用目标文件"
fi
检测端口冲突
PORT=8080
if lsof -i :$PORT -s TCP:LISTEN > /dev/null 2>&1; then
echo "端口 $PORT 已被占用"
PID=$(lsof -t -i :$PORT)
echo "占用进程PID: $PID"
fi
安全注意事项
# 避免输出过多信息
lsof +D / # 扫描整个根目录很危险,不推荐
# 限制目录深度
lsof /var/log -ad lib # 只查特定子目录
# 权限检查
if [ "$(id -u)" -ne 0 ]; then
echo "部分文件需root权限查看"
fi
封装成函数复用
# 获取进程打开文件数量
get_fd_count() {
lsof -p $1 2>/dev/null | wc -l || echo "0"
}
# 检查端口是否可用
check_port() {
local port=$1
if lsof -i :$port -s TCP:LISTEN -t > /dev/null 2>&1; then
return 1 # 端口被占用
fi
return 0 # 端口可用
}
调试与日志
# 记录到日志,便于分析 lsof -p $PID -F n >> /var/log/lsof_debug.log 2>&1 # 输出到CSV(方便Excel处理) lsof -p $PID -F n | tr '\n' ',' | sed 's/,$/\n/' >> output.csv
最佳实践总结:
- 优先使用
-t:只输出PID,适合脚本判断 - 结合
lsof +D小心使用:避免全盘扫描 - 使用
-F格式:处理大量输出时效率更高 - 注意权限:部分进程需要root才能查看
- 善用
grep和awk:过滤特定类型文件
掌握这些技巧后,你可以高效地在脚本中处理文件打开状态监控、端口冲突检测、进程资源审计等常见运维场景。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播