0

linux中查找所有用户使用的不同shell的分布的命令是什么?

4

4 回答 4

2
getent passwd | awk -F: '{print $7}' | sort | uniq -c

getent命令转储密码数据库。通常这只是一个文件,/etc/passwd但它可以来自其他来源;使用getent passwd而不仅仅是阅读/etc/passwd允许这样做。

如果您的系统没有该getent命令,请找出您的系统对应的命令(也许如果您的系统使用 NIS),或者如果您确定信息没有存储在其他位置,则直接ypcat passwd读取文件。/etc/passwd

awk命令从每一行中获取第 7 个以冒号分隔的字段,这是该帐户的登录 shell。

sort | uniq -c打印每个 shell 的出现次数。| sort -rn如果您希望列表按受欢迎程度降序排列,请添加。

请注意,这列出了系统上所有帐户的登录 shell,其中许多实际上并不对应于用户。有多种过滤列表的方法(通常是数字用户 id,第三个字段,从 1000 开始),但没有一种方法是 100% 可靠的。

于 2013-09-13T19:03:55.717 回答
0

它通常就在里面/etc/passwd(但正如上面的答案所说,由 给出getent passwd);在某些系统上,它可以通过 NIS/YP、LDAP、...等...数据库(但另请参阅pam)。详细信息可在/etc/nsswitch.conf(参见nsswitch.conf(5)手册页)中进行配置。

此外,授权的登录 shell 列在/etc/shells(参见shells(5))中;您需要在此处添加一个 shell 的路径名以使其可更改chsh(参见chsh(1))。

于 2013-09-13T19:04:06.067 回答
0

以 root 身份运行它!这将为您提供用户名和他们的登录 shell。

grep -v "nologin" /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
于 2013-09-13T19:04:58.053 回答
0

你可以找出 /etc/passwd,awk 出 shell 字段,grep -v 出任何你不想要的东西,然后对它进行排序。像这样:

cat /etc/passwd | awk -F ":" '{print $7}' | grep -v "whatever" | sort | uniq -c

在我的 Mac(没有任何“真实”用户)上,这会导致

10 个不带 shell,1 个带 /bin/sh,70 个带 /usr/bin/false,1 个带 /usr/sbin/uucico

大概在有实际用户的系统上会有 /bin/sh、/bin/ksh、/bin/csh 和 /bin/bash 数量。

于 2013-09-13T19:30:54.753 回答