查找所有未定义 GID 的文件(/etc/group 中没有条目的组)

查找所有未定义 GID 的文件(/etc/group 中没有条目的组)

在我们的几个 CentOS 5 系统上,/etc/group 文件被自动脚本弄乱了。

因此,系统上有些文件的 GID 未定义——GID 未在 中定义/etc/group。例如,以下文件归 GID 103 所有,但它应该归组“mysql”所有。

# ls -ld /var/lib/mysql/mysql/user.frm 
-rw-rw---- 1 mysql 103 10330 Apr  1 02:47 /var/lib/mysql/mysql/user.frm

有没有什么办法可以让我找到这个系统上所有属于未定义组的文件?

我知道我可以做这样的事情来查找 GID 103 拥有的所有文件:

find / -gid 103

但是,我想找到未定义组拥有的所有文件。

答案1

您的 find 版本没有该-nogroup选项吗?

以下是 perl 的一行代码:

perl -MFile::Find -e 'find({ wanted => sub { getgrgid((stat(_))[5]) or \
  print ((stat(_))[5], " $File::Find::name\n") }, follow => 1 }, "/")'

答案2

您可以尝试一种快速而肮脏的解决方案,例如:

find .  -ls | gawk '$6 ~ /^[0-9]+$/ {print}'

它绝对不美丽,但应该能用。

答案3

如果你没有-gid-nogroup你可能可以使用这个或类似的东西:

gids=($(cut -d: -f3 /etc/group | sed 's/.*/! -gid & /'))
find /dir/to/start ${gids[@]} -ls

相关内容