是否有一个用户友好的命令可以用来在 Ubuntu 系统的控制台中列出用户?
当我cat /etc/passwd
得到一个难以阅读的用户列表时。如果能看到按字母顺序排列的列表,其中的条目按列排列,并且组名称位于组 ID 旁边的括号中,那就太好了。
答案1
/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
答案2
如果您拥有计算机的 root 访问权限,则可以执行以下操作:
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
?)
答案3
我所做的并且对我的目的有用的事情是
ls /home
当然,这并没有真正为您提供用户列表,而是用户主目录和过去用户目录的列表,但是您想要对不存在终端的用户执行的任何命令都会告诉您,并且可能是删除的提示没有用户的主文件或移动它!
答案4
我以为这很容易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