【发布时间】:2014-12-02 08:12:16
【问题描述】:
我能够获得两个列表( /etc/passwd 和 /home ),但是如何编写脚本,例如读取 /etc/passwd 的行,解析主目录,然后在 /home 中查找。如果不存在则抛出错误,如果存在则继续。
/etc/passwd 用户主目录列表
cut -d":" -f6 /etc/passwd | grep home | sort
来自 /home 的用户列表
ls -1 /home | (while read line; do echo "/home/"$line; done)
也许直接从第一个命令输出到一个文件,然后将每一行读入一个 find 命令,然后......或者,测试
if [ -d "$DIRECTORY" ]; then
echo "directory found for user that doesn't exist"
fi
现在如何把它们放在一起......
编辑:isedev 正是我所需要的。我的原始信息可能措辞有误……我们一直在清理用户,但没有清理他们的 /home 目录。所以我想知道还有哪些 /home 目录没有 /etc/passwd 条目。
这对 T 有用
for name in /home/*; do
if [ -d "$name" ]; then
cut -d':' -f6 /etc/passwd | egrep -q "^$name$"
if [ $? -ne 0 ]; then
echo "directory $name does not correspond to a valid user"
fi
fi
done
从现在开始,我们将运行
userdel -r login
【问题讨论】:
-
不完全可靠。帐户通常在 /home 中有它们的 homedir,但不是全部。例如考虑 root 帐户,它通常存在于
/root -
@MarcB 除非 OP 想知道 /home 下是否有与 /etc/passwd 中的条目不对应的目录。
-
您是否担心
/home中的目录被/etc/passwd中的多个条目声明?
标签: shell unix directory passwd