在我们的几个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
有没有办法让我在这个系统上find所有属于未定义组的文件?
我知道我可以做这样的事情来findGID 103拥有的所有文件:
find / -gid 103
但是,我想查找所有由未定义的组拥有的文件。
你的版本查找没有-nogroup选项?
这是一个perl单线程:
perl -MFile::Find -e 'find({ wanted => sub { getgrgid((stat(_))[5]) or \ print ((stat(_))[5], " $File::Find::name\n") }, follow => 1 }, "/")'
你可以尝试一个快速和肮脏的解决scheme,
find . -ls | gawk '$6 ~ /^[0-9]+$/ {print}'
这绝对不是一个美丽,但应该工作。
如果你有-gid但不是-nogroup你可以使用这个或者类似的东西:
gids=($(cut -d: -f3 /etc/group | sed 's/.*/! -gid & /')) find /dir/to/start ${gids[@]} -ls