繁体   English   中英

Linux BASH脚本确定登录的用户数?

[英]Linux BASH script to determine number of users logged in?

我需要编写BASH脚本来获取帮助,该脚本通过获取系统密码文件中包含的密码数量来确定系统的潜在用户数量。 我试过/ etc / passwd。 总是说“权限被拒绝”。 以及确定当前登录到系统的用户数的脚本。此脚本将以无人参与的批处理方式运行,除调用外,无需键盘的任何输入。

谢谢。

TL; DR

您应该使用谁来计数已登录的用户,并通过对/ etc / passwd的适当范围内的UID求和来获得更完整的普通用户(相对于系统帐户)计数。

计数登录

在Linux上,您可以使用who命令对活动登录(包括同一用户的多次登录)进行计数:

$ who --count
foo bar baz quux
# users=4

您可以按自己喜欢的方式从最后一行中解析出总数。 一些示例包括:

# Using a Perl-compatible grep.
$ who --count | pcregrep -o 'users=\K.*'
4

# Counting unique logins when *who* doesn't have a --count flag.
$ who | sort --key=1,1 --unique | wc --lines
4

但是有太多方法可以完成一个真正的规范列表。 要注意的主要事情是,如果不进行排序,则一次登录一个以上TTY或PTY的用户可能会多次计数同一用户。

计算非系统帐户

修复文件系统权限

首先,您需要修复/ etc / passwd上的权限。 在支持影子密码的发行版(如Ubuntu)上,通常将此文件设置为644模式。 例如:

sudo chmod 644 /etc/passwd

如果您没有sudo访问权限,则必须与系统管理员讨论有关更改文件权限的问题。 如果贵公司的安全策略不允许这样做,则可以授予sudo权限以读取文件,例如:

# Allow user "nadh" to print the contents of /etc/passwd as root.
nadh ALL=(root) NOPASSWD: /bin/cat /etc/passwd

这种级别的sudo访问是有严格限制的,因为它只允许您管理一个文件。 它甚至不允许您将标志或其他参数传递给cat。

另一种选择是使用文件系统上的扩展属性来授予对特定用户或组的访问权限,但这通常是一种更复杂的方法,并且不那么可移植。

计数UID

在Ubuntu上,用户帐户的UID在1000-65533的范围内(65534通常属于无人帐户)。 一旦能够读取/ etc / passwd,就可以计算允许范围内的所有用户。 例如:

awk -F: '$3>=1000 && $3<65534 {i+=1}; END {print i}' /etc/passwd

计数家庭目录

如果您还具有通过NIS,LDAP或其他一些非本地查找定义的用户,则对UID进行计数显然是不准确的。 或者,您可以使用以下方法计算本地主目录:

ls /home | wc -l

一个合理的近似值。

如果您将服务帐户数据存储在/ home中而不是/ var或/ srv中,或者正在使用具有自动挂载功能的NFS,这可能不可靠。 您的里程会有所不同。

检查此命令,我认为确定当前登录的用户数量会有所帮助,

$ who|wc -l

用于丢弃重复的用户会话并仅计算当前在系统中登录的唯一用户。

$ users | tr ' ' '\n' | sort -u | wc -l

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM