Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定登录用户数的Linux BASH脚本?_Linux_Bash_Unix_Ubuntu - Fatal编程技术网

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

确定登录用户数的Linux BASH脚本?,linux,bash,unix,ubuntu,Linux,Bash,Unix,Ubuntu,我需要帮助编写BASH脚本,该脚本通过获取系统密码文件中包含的密码数来确定系统的潜在用户数。 我试过/etc/passwd。它总是说“拒绝许可”。 以及确定当前登录到系统的用户数的脚本。此脚本将以无人值守的批处理方式运行,除被调用外,无需任何键盘输入 谢谢。检查此命令,我认为它将有助于确定当前登录的用户数 $ who|wc -l 用于丢弃重复的用户会话,并仅统计当前在系统中登录的唯一用户 $ users | tr ' ' '\n' | sort -u | wc -l TL;博士 您应该使用w

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


谢谢。

检查此命令,我认为它将有助于确定当前登录的用户数

$ who|wc -l
用于丢弃重复的用户会话,并仅统计当前在系统中登录的唯一用户

$ users | tr ' ' '\n' | sort -u | wc -l
TL;博士 您应该使用who来计算登录用户的数量,并通过在/etc/passwd的适当范围内对UID求和来获得更完整的正常用户计数(与系统帐户相反)

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

你可以任意解析最后一行的总数。一些例子包括:

# 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;它甚至不允许您向cat传递标志或其他参数

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

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

awk -F: '$3>=1000 && $3<65534 {i+=1}; END {print i}' /etc/passwd
以获得合理的近似值


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

在我使用的系统上,
/etc/passwd
始终是世界可读的。要确定您看到的权限问题是否与
/etc/passwd
有关,请运行
ls-l/etc/passwd
并报告结果。所有用户都应该可以读取该文件。“权限被拒绝”可能仅仅意味着您的脚本不可执行。尝试
chmod+x脚本名
这也将计算重复的用户会话。
who | awk'{print$1}'排序-u | wc-l
或者,仅使用awk,
who | awk'{if($1在seen中为1);else count++;seen[$1]=1}结束{print
count Kuddos}为您的答案@CodeGnome!简单的
users | wc-l
与较长的
who | sort(options)| wc
有何不同?它是否用于重复的用户会话?
awk -F: '$3>=1000 && $3<65534 {i+=1}; END {print i}' /etc/passwd
ls /home | wc -l