如何检查Linux中的/etc/passwd文件是否包含无效条目?

如何检查Linux中的/etc/passwd文件是否包含无效条目?,linux,passwd,Linux,Passwd,我试图用pwck命令确定Linux中/etc/passwd位置中的passwd文件是否包含任何无效数据项 例如: 1) 如果我的文件包含此条目,但由于结尾处有额外的冒号而无效-user1:x:1000:1000:user1,,,,:/home/user1:/bin/bash: sudo pwck -r /etc/passwd This takes a no by default if invalid entries exist and shows other output as well 2

我试图用pwck命令确定Linux中/etc/passwd位置中的passwd文件是否包含任何无效数据项

例如:
1) 如果我的文件包含此条目,但由于结尾处有额外的冒号而无效-user1:x:1000:1000:user1,,,,:/home/user1:/bin/bash:

sudo pwck -r /etc/passwd

This takes a no by default if invalid entries exist and shows other output as well
2) 如果我的passwd文件语法正确,但用户没有相应的目录

sudo pwck -r /etc/passwd

user 'user1': directory '/var/xyz' does not exist
这两个命令的退出值都是2,因此我无法区分用户条目是否无效,或者是否存在不存在的用户目录

我只想识别passwd文件中的一个无效条目,即如果文件中有一些额外字符或语法错误添加的条目

如果您只想要“syntactic”正确性,只需编写一个正则表达式来匹配它。阅读并匹配用户名权限,我为GNU sed写了以下内容:

sed -r '/^[a-z_][a-z0-9_-]*[$]?:[^:]*:[0-9]+:[0-9]+:[^:]*:[^:]*:[^:]*$/!q1'
但是有一些检查是由
pwck
执行的

因此,我认为最好的方法是获取
pwck
来源,手工挑选您感兴趣的检查,然后删除您不感兴趣的检查

所以我无法分辨

当程序输出文件时,您当然可以分辨出文件的错误

if ! out=$(sudo pwck -r /etc/passwd 2>&1); then
   if <<<"$out" grep -q 'invalid user name\|invalid user ID\|invalid password file entry'; then
       echo "File is syntactically wrong"
   else
        echo "Something else is wrong with the file"
   fi
fi
if!out=$(sudo pwck-r/etc/passwd 2>&1);然后
如果