我正在尝试打印所有用户的用户名及其主目录。我在网上找到的只是如何更改密码等。有人可以指导我解决这个问题吗?
echo $HOME
只打印一份,不会在系统上打印全部。
该信息存储在
/etc/passwd
中。所以这是使用 bash 和 echo 读取它的一种方法(正如您所标记的):
while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
echo "User $f1 stores files in $f6"
done < /etc/passwd
(来自 https://www.cyberciti.biz/faq/understanding-etcpasswd-file-format/)
awk方式
# https://unix.stackexchange.com/a/291452/546660
awk -F":" '{print "User: "$1 "Home Dir: "$6}' /etc/passwd
我很确定会有很多建议,所以这就是我的建议。
简单,cut:
cut -d ":" -f 1,6 /etc/passwd
使用 getent(1) 来输出所有条目,无论它们是存储在网络数据库中还是仅存储在 /etc/passwd 中。使用 getent() 对于使用集中管理的用户数据库的环境非常重要。另外,一般来说,应该避免依赖特定的路径名来实现系统功能。
以下是 getent 返回的信息示例:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
这是要运行的命令和一些输出(感谢 Constantin 提醒我 awk 的“-F”选项)。
$ getent passwd |awk -F: '{print $1 "\t" $6}'
root /root
bin /bin
说明:
通过编辑 print 命令,将其更改为 awk 的 printf 等,使其变得漂亮如你所愿。
--克洛德