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

Ste*_*ski 2 linux configuration-management

在我们的几个 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
Run Code Online (Sandbox Code Playgroud)

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

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

find / -gid 103
Run Code Online (Sandbox Code Playgroud)

但是,我想查找属于未定义组的所有文件。

Mar*_*ner 5

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

这是一个 perl 单行:

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

  • 尽管有其他公认的答案,但这个答案确实是正确的。将 `-nogroup` 标志与 find 一起使用将返回 GID 未映射到实际组的所有文件。正是海报所寻找的。 (2认同)