如何通过Unix/Shell脚本检查非root拥有的文件或目录
解决/data01目录下非root用户对象的递归检查问题
你之前用ls命令碰到的问题很典型——ls -lrt /data01/只能查看当前目录的内容,ls -lrt /data01/*也仅能遍历一级子目录,完全没法覆盖深层嵌套的子目录和文件。要搞定全层级递归检查的需求,find命令才是正确的工具,下面给你几个实用的方案:
基础递归查找命令
直接用find遍历整个目录树,找出所有不属于root用户的文件/目录:
find /data01 ! -user root
这个命令会输出所有非root拥有的对象路径,但没有详细信息。如果需要查看权限、所有者等详情,加上-ls参数即可:
find /data01 ! -user root -ls
输出格式和ls -l类似,但会递归覆盖所有层级的内容。
针对性过滤查找
如果只想筛选非root用户的文件(排除目录),可以追加-type f参数:
find /data01 ! -user root -type f -ls
如果只想找非root用户的目录,则用-type d:
find /data01 ! -user root -type d -ls
实用Shell脚本(方便保存结果)
如果目录内容很多,想把结果保存到文件方便后续分析,可以用这个简单的脚本:
#!/bin/bash # 目标目录 TARGET_DIR="/data01" # 带日期的结果保存文件 OUTPUT_FILE="non_root_objects_$(date +%Y%m%d).txt" # 先检查目标目录是否存在 if [ ! -d "$TARGET_DIR" ]; then echo "Error: 目录 $TARGET_DIR 不存在,请确认路径!" exit 1 fi # 执行查找并保存结果 echo "正在递归查找 $TARGET_DIR 下的非root用户对象..." find "$TARGET_DIR" ! -user root -ls > "$OUTPUT_FILE" # 输出统计信息 OBJECT_COUNT=$(wc -l < "$OUTPUT_FILE") echo "查找完成!共找到 $OBJECT_COUNT 个非root用户拥有的对象,结果已保存到 $OUTPUT_FILE"
使用方法:
- 将上述内容保存为
check_non_root.sh - 赋予执行权限:
chmod +x check_non_root.sh - 运行脚本:
./check_non_root.sh
这个脚本会自动检查目录是否存在,把结果保存到带日期的文件里,还会输出找到的对象数量,比直接敲命令更省心。
注意:如果
/data01目录非常大,find命令可能会运行一段时间,请耐心等待,不要中途中断。
内容的提问来源于stack exchange,提问作者bosari
相关产品推荐
相关产品推荐

