Linux 不同壳体的分布

Linux 不同壳体的分布,linux,shell,command,Linux,Shell,Command,linux中的命令是什么来查找 所有用户使用的不同外壳的分布情况 getent passwd | awk -F: '{print $7}' | sort | uniq -c getent命令转储密码数据库。通常这只是一个文件,/etc/passwd,但它可以来自其他来源;使用getentpasswd而不仅仅是读取/etc/passwd可以实现这一点 如果您的系统没有getent命令,请找出系统的等效项(如果您的系统使用NIS,可能是ypcat passwd),或者如果您确定信息未存储在其他位置

linux中的命令是什么来查找 所有用户使用的不同外壳的分布情况

getent passwd | awk -F: '{print $7}' | sort | uniq -c
getent
命令转储密码数据库。通常这只是一个文件,
/etc/passwd
,但它可以来自其他来源;使用
getentpasswd
而不仅仅是读取
/etc/passwd
可以实现这一点

如果您的系统没有
getent
命令,请找出系统的等效项(如果您的系统使用NIS,可能是
ypcat passwd
),或者如果您确定信息未存储在其他位置,则直接读取
/etc/passwd
文件

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

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


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

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


另外,已授权的登录shell在
/etc/shells
中列出(请参阅);您需要在那里添加一个shell的路径名,以使它可以通过
chsh
进行更改(请参阅)。

以root用户身份运行此命令!这将为您提供用户名及其登录shell

grep -v "nologin" /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'

您可以cat out/etc/passwd、awk out shell字段、grep-v out任何您不想要的内容,然后对其进行排序。像这样:

cat /etc/passwd | awk -F ":" '{print $7}' | grep -v "whatever" | sort | uniq -c
在我的mac电脑上(它没有任何“真正”的用户),这会导致

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


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

你所说的不同shell的分布是什么意思?这是否意味着每个用户都在使用什么shell呢?
getpw
是操作系统的默认内容。我不知怎么的在RHEL-5中没有这个命令。@iamauser:没有,这是我写的自定义脚本(忘了我写过)。我已经相应地更新了我的答案。