Назад | Перейти на главную страницу

Найти все файлы с неопределенным 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

Однако я хочу найти ВСЕ файлы, принадлежащие неопределенной группе.

Разве ваша версия find не имеет -nogroup вариант?

Вот однострочник perl:

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

вы можете попробовать быстрое и грязное решение, например:

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

это точно не красота, но работать должно.

Если у вас есть -gid но нет -nogroup вы можете использовать это или что-то в этом роде:

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