用户友好的命令来列出 Ubuntu 系统上的所有用户?

M. *_*ley 22 command-line users

是否有一个用户友好的命令可以用来在 Ubuntu 系统的控制台中列出用户?

当我cat /etc/passwd得到一个难以阅读的用户列表时。很高兴看到按字母顺序排列的列表,条目按列排列,组名在组 ID 旁边的括号中。

Nyk*_*kin 27

很好地输出 /etc/passwd 文件的好方法:

$ column -nts: /etc/passwd
Run Code Online (Sandbox Code Playgroud)

现在您可以对其进行排序:

$ column -nts: /etc/passwd | sort
Run Code Online (Sandbox Code Playgroud)

在最后一列中使用组名称(无括号):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort
Run Code Online (Sandbox Code Playgroud)


jip*_*pie 9

如果您在机器上具有 root 访问权限,则可以执行以下操作:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

成为 root 以读取影子文件。如果您想检查用户是否设置了密码(人类用户),您只需要 root 权限,否则您可以cat /etc/passwd代替sudo grep ...

sudo 
Run Code Online (Sandbox Code Playgroud)

只显示设置了密码的用户:

grep -vE '^[^*!]+:[*!]:' /etc/shadow
Run Code Online (Sandbox Code Playgroud)

按用户名排序:

sort 
Run Code Online (Sandbox Code Playgroud)

丢弃除用户名以外的所有信息:

cut -d: -f1
Run Code Online (Sandbox Code Playgroud)

遍历用户名并使用组信息丰富它:

while read user; do id $user; done
Run Code Online (Sandbox Code Playgroud)

将输入格式化为列:

column -ts' ,'
Run Code Online (Sandbox Code Playgroud)

使用vi查看结果:

vi '+set nowrap' - 
Run Code Online (Sandbox Code Playgroud)

如果您没有root权限,

尝试这样的事情:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t
Run Code Online (Sandbox Code Playgroud)

它的输出有点不同,但我把它作为练习留给读者,将这个答案中的两个部分组合成完全适合工作的东西。(你不就是爱sed吗?)