我必须计算 / 包含一个或多个主目录的子目录的数量。例如,如果 john、emily 和 rick 的主目录位于 /home/john 、 /home/emily 和 /var/lib 中,则答案为 2。
我认为我必须使用带有 cut 和 grep 的管道,但我不知道具体如何操作。
答案1
(export LC_ALL=C
getent passwd | cut -d: -f6 | sort -t/ -uk2,2 | grep -c ..)
计算用户主目录的唯一第二个组成部分的数量。
LC_ALL=C
uniq
当我们使用或时通常需要sort -u
getent passwd
以 csv(冒号分隔)形式返回帐户数据库(假设可以枚举,但对于联网的数据库并不总是如此)cut -d: -f6
提取每条记录的第 6 个字段(主目录)sort -t/ -uk2,2
对第二个目录组件进行排序,并且-u
为每个唯一排序键仅保留一条记录grep -c ..
计算包含至少两个字符的行数,以排除/
(或者grep -cvx /
:)
+ cut
+可以替换sort
为grep
一次调用awk
:
getent passwd | awk -F: '{split($6, p, "/")}
p[2] != "" && !seen[p[2]]++ {n++}
END {print n}'