在linux中找到的命令是什么? 所有用户使用的不同 shell的分发?
答案 0 :(得分: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,第3个字段,从1000开始),但没有一种方法可以100%可靠。
答案 1 :(得分:0)
通常位于/etc/passwd
内(但正如above answer所述,由getent passwd
)给出;在某些系统上它可以通过NIS / YP,LDAP,......等...数据库(但也可以参见pam)。详细信息可在/etc/nsswitch.conf
中配置(请参阅nsswitch.conf(5)手册页)。
此外,授权登录shell列在/etc/shells
中(参见shells(5));你需要在那里添加一个shell的路径名,以便chsh
更改它(参见chsh(1))。
答案 2 :(得分:0)
以root身份运行!这将为您提供用户名和登录shell。
grep -v "nologin" /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
答案 3 :(得分:0)
你可以输出/ etc / passwd,awk out 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数量。