问题描述
我试图让所有用户的主目录在/ etc / passwd中提到但不在/ home中。
下面的代码为我提供了/ home中没有的所有主目录,但/ etc / passwd中却存在这些主目录。
cut -d":" -f6 /etc/passwd | grep home | sort |
while read dir; do [ -e "$dir" ] || echo Missing $dir; done
如何从第一列中获取相应用户的列表,并使用mkhomedir_helper(user)
从列表中逐个创建对应的/ home目录?
解决方法
Barmar解决方案的其他实施方式:
getBondedDevices
使用getent passwd | sort -t: -k6 | while IFS=: read -r u _ _ _ _ d _
do
if [[ "$d" =~ ^/home/ ]] && ! [[ -d "$d" ]]
then printf 'Directory %q missing for user: %q\n' "$d" "$u"
fi
done
允许在文件或NIS(网络信息服务)中提取相同的数据。
getent
通过将其与扩展正则表达式匹配来确保主目录以[[ "$d" =~ ^/home/ ]]
开头。 /home
您必须将用户名保留在读取的数据中。您不需要使用cut
,read
可以将输入拆分为字段并将它们分配给变量。
grep /home/ /etc/passwd | sort -t: -k6 | while IFS=: read -r username _ _ _ _ dir _
do
if ! [ -d "$dir" ]
then
echo "Username $username missing $dir"
mkhomedir_helper "$username"
fi
done