打印所有用户的用户名及其主目录

问题描述 投票:0回答:4

我正在尝试打印所有用户的用户名及其主目录。我在网上找到的只是如何更改密码等。有人可以指导我解决这个问题吗?

echo $HOME
只打印一份,不会在系统上打印全部。

bash shell echo
4个回答
0
投票

该信息存储在

/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/


0
投票

awk方式

# https://unix.stackexchange.com/a/291452/546660
awk -F":" '{print "User: "$1 "Home Dir: "$6}' /etc/passwd

另请参阅 https://unix.stackexchange.com/a/291452/546660


0
投票

我很确定会有很多建议,所以这就是我的建议。

简单,cut

cut -d ":" -f 1,6 /etc/passwd

0
投票

使用 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

说明:

  • awk 选项“-F:”将字段分隔符更改为冒号。
  • $1 指第一个字段(用户名)
  • " " 打印一个字符。
  • $6 指的是第六个字段(主目录)

通过编辑 print 命令,将其更改为 awk 的 printf 等,使其变得漂亮如你所愿。

--克洛德

© www.soinside.com 2019 - 2024. All rights reserved.