![用于打印没有 /sbin/nologin 作为 shell 的用户的命令](https://linux22.com/image/63929/%E7%94%A8%E4%BA%8E%E6%89%93%E5%8D%B0%E6%B2%A1%E6%9C%89%20%2Fsbin%2Fnologin%20%E4%BD%9C%E4%B8%BA%20shell%20%E7%9A%84%E7%94%A8%E6%88%B7%E7%9A%84%E5%91%BD%E4%BB%A4.png)
给定 /etc/passwd 文件,什么命令可以仅打印没有 /sbin/nologin 作为 shell 的用户的登录名?
另外,在我的 /etc 目录中,我可以使用什么命令来计算以字母 's' 开头的文件数量?对这个有点新,谢谢!
答案1
要仅打印没有登录 shell 的用户,您只能在最简单的情况下使用 awk:
awk -F/ '$NF != "nologin"' /etc/passwd
这里我们使用-F/
作为分隔符,然后'$NF =! "nologin"' where
$NF is the last field of the line/row. The default action in
awk` 被打印,所以它会打印整行。
s
使用 可以轻松查找所有以 an 开头的文件find
。在本例中为 GnuFind
find /etc/ -maxdepth 1 -type f -name 's*' -printf '%P\n'
这里我们使用 GNUfind
来搜索/etc/
路径,然后检查一级(没有子目录)。
-type f
告诉 find 仅检查文件。
-name 's*
不言自明
-printf '%P\n'
这'%P'
是一种 printf 格式。查看man find
更多。
答案2
1. grep -v '/sbin/nologin' /etc/passwd|awk -F: '{print $1}'
2. ls s*|wc -w
或更好:
2. ls -l s*|wc -l
以避免文件名带有空格时出现错误
答案3
第一的:
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
第二:
ls -ld /etc/s* | wc -l