You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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"

使用方法:

  1. 将上述内容保存为check_non_root.sh
  2. 赋予执行权限:chmod +x check_non_root.sh
  3. 运行脚本:./check_non_root.sh

这个脚本会自动检查目录是否存在,把结果保存到带日期的文件里,还会输出找到的对象数量,比直接敲命令更省心。

注意:如果/data01目录非常大,find命令可能会运行一段时间,请耐心等待,不要中途中断。

内容的提问来源于stack exchange,提问作者bosari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:33:09