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


22

是否可以使用用户友好的命令在Ubuntu系统上的控制台中列出用户?

当我cat /etc/passwd得到一个难以理解的用户列表时。最好看到一个按字母顺序排列的列表,其中的条目排列成列,并且组名在组ID旁边的括号中。


2
好了,/ etc / passwd文件安排成列...如果你想看到只有少数colums,也许使用cut。对于字母,则有sort。如果需要组名,请使用join(实际上可能只显示列的子集,btw)。
njsg

Answers:


27

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

$ column -nts: /etc/passwd

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

$ column -nts: /etc/passwd | sort

在最后一列中带有组名(无括号):

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

谢谢,这些命令可以满足我的要求。对于新手来说,这非常令人生畏……我想我必须学习如何为他们创建别名。
M. Dudley

在Centos上,该n选项不受欢迎。 column -ts: /etc/passwd工作正常。
user1014251

9

如果您具有计算机的超级用户访问权限,则可以执行以下操作:

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

怎么运行的

成为root用户以读取影子文件。仅当您要检查用户是否设置了密码(人工用户)时才需要root特权,否则,您可以执行cat /etc/passwd以下操作sudo grep ...

sudo 

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

grep -vE '^[^*!]+:[*!]:' /etc/shadow

按用户名排序:

sort 

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

cut -d: -f1

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

while read user; do id $user; done

将输入格式设置为列:

column -ts' ,'

使用vi查看结果:

vi '+set nowrap' - 

如果您没有root权限,

尝试这样的事情:

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

它的输出有些不同,但我将其作为练习,让读者将答案中的两个部分组合成完全适合工作的内容。(你不只是爱sed吗?)


“我把它留给读者练习……” :)
伊曼纽尔·伯格

1

在Ubuntu中,可以如下所示:

/ etc / passwd中的七个字段存储在$ f1,f2 ...,$ f7中

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd

1

我所做的并且对我有用的事情是

ls /home

当然,这实际上并没有给您用户列表,而是用户的主目录列表和过去的用户目录列表,但是您想对不存在终端的用户执行的任何命令都会告诉您,并且可能会提示删除没有用户或移动它的主文件!


我喜欢这个。它使工作基本完成。
aalaap '17

0

我以为这很容易join,但是join需要在连接字段上对文件进行排序。因此,它需要(?)解决临时文件的方法。输出按用户排序,并显示用户,组和组ID。

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

tr; sort根据一个关键字段,用-k输出到文件-o; 结合第一个(-1)和第二个(-2)文件中的字段,输出第一个文件(-o 1.1)和第二个()中的某些字段,2.1,2.3


请注意,/tmp这样做会更好,因为FHS指出/var/tmp在重启时不会擦除,而这并不是我们真正需要的。
strugee
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.