如何检查 Linux 中的 /etc/passwd 文件是否包含无效条目?
How to check if the /etc/passwd file in Linux contains invalid entry?
我正在尝试使用 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 文件中的无效条目,即文件中是否有一些额外的字符或语法错误添加的条目
如果你只想要 "syntatic" 正确性,只需编写一个正则表达式来匹配它。从 wikipedia and shadow sources 读取以正确匹配用户名,我为 GNU sed 写了这个:
sed -r '/^[a-z_][a-z0-9_-]*[$]?:[^:]*:[0-9]+:[0-9]+:[^:]*:[^:]*:[^:]*$/!q1'
所以我认为最好的方法是获取 pwck
来源并手动选择您感兴趣的支票并删除 the checks 您不感兴趣的支票。
so I cannot distinguish
当然你可以区分 - 因为程序输出文件有什么问题。
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
我正在尝试使用 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 文件中的无效条目,即文件中是否有一些额外的字符或语法错误添加的条目
如果你只想要 "syntatic" 正确性,只需编写一个正则表达式来匹配它。从 wikipedia and shadow sources 读取以正确匹配用户名,我为 GNU sed 写了这个:
sed -r '/^[a-z_][a-z0-9_-]*[$]?:[^:]*:[0-9]+:[0-9]+:[^:]*:[^:]*:[^:]*$/!q1'
所以我认为最好的方法是获取 pwck
来源并手动选择您感兴趣的支票并删除 the checks 您不感兴趣的支票。
so I cannot distinguish
当然你可以区分 - 因为程序输出文件有什么问题。
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