Linux列出系统中的所有用户

时间:2020-01-09 10:41:45  来源:igfitidea点击:

Linux服务器上所有用户的命令是什么。
在Linux操作系统下列出用户的命令是什么?
如何列出Linux中的用户?
/etc/passwd文件为每个Linux用户帐户包含一行,并用冒号分隔七个字段。
这是一个文本文件。
您可以使用cat命令或者其他命令(例如grep命令/egrep命令等)在Linux下轻松列出用户。
本教程描述了各种Linux命令,以列出Linux操作系统上的所有用户,包括Ubuntu,Debian,RHEL,Arch,Fedora,CentOS和其他发行版。

Linux使用/etc/passwd文件列出所有用户帐户

执行以下任一命令:

$ cat /etc/passwd

输出示例:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
....
..
...
vnstat:x:131:137:vnstat daemon,,,:/var/lib/vnstat:/usr/sbin/nologin

文件中的每一行都有七个字段,如下所示。
例如,考虑以下行:

vnstat:x:131:137:vnstat daemon,,,:/var/lib/vnstat:/usr/sbin/nologin

其中:

  • vnstat用户名或者登录名。
  • x加密密码存储在/etc/shadow文件中。
  • 131 UID(用户ID号)
  • 137主要GID(组ID号)
  • vnstat守护程序GECOS。它可能包括用户的全名(或者应用程序名称,如果该帐户是用于程序的话),建筑物和房间号或者联系人,办公室电话号码,家庭电话号码以及任何其他联系信息。
  • 用户的/var/lib/vnstat`主目录。
  • /usr/sbin/nologin用户的登录shell。有效登录Shell的路径名来自/etc/shells文件。

如何使用寻呼机在Linux中列出用户

当然,我们可以使用如下的分页器(例如more/less命令)来查看/etc/passwd文件:

$ more /etc/passwd
$ less /etc/passwd

使用/etc/passwd列出用户

所有字段都用冒号(:)分隔。
共有七个字段。
第一个字段是用户名。
用户登录时使用。
长度应在1到32个字符之间。
当然,我们可以使用head命令和tail命令限制输出,如下所示:

tail -5 /etc/passwd
head -5 /etc/passwd

仅Linux列出用户名

要仅列出用户名,请输入以下awk命令:

$ awk -F':' '{ print }' /etc/passwd

输出示例:

root
daemon
bin
sys
sync
games
man
lp
mail
news
....
..
..hplip
Hyman
bind
haldaemon
sshd
mysql
radvd

另一种选择是使用cut命令:

$ cut -d: -f1 /etc/passwd

使用getent命令获取所有用户的列表

要获取所有Linux用户的列表,可以输入以下getent命令:

$ getent passwd
$ getent passwd | grep tom
## get a list all users ##
$ getent passwd | cut -d: -f1
## count all user accounts using the wc ##
$ getent passwd | wc -l

也可以在Linux上使用compgen命令列出用户和其他资源:

$ compgen -u

找出Linux服务器中是否存在用户帐户

我们可以使用grep命令,使用上述命令查看Linux计算机中是否存在用户:

compgen -u | grep Hyman
getent passwd | grep -q sai && echo "User sai found" || echo "User sai not found"
compgen -u | grep -q ram && echo "User ram found" || echo "User ram not found"

一个简化的命令是:

getent passwd {username}
getent passwd Hyman

如何在Linux服务器中计算用户帐户

是否想让您的系统上的用户帐户计数?
尝试如下wc命令:

$ compgen -u | wc -l
$ getent passwd | wc -l

关于系统和一般用户的注意事项

每个用户都有一个数字用户ID,称为UID。
它在/etc/passwd文件中定义。
使用useradd命令时,将使用/etc/login.defs文件自动选择每个用户的UID。
要查看当前值,请执行:

$ grep "^UID_MIN" /etc/login.defs
$ grep UID_MIN /etc/login.defs

输出示例:

UID_MIN			 1000
#SYS_UID_MIN		  100

useradd命令中自动uid选择的最小值为1000。
换句话说,如果shell是bash/csh/tcsh/ksh等(如定义的/etc/shells文件),则所有普通系统用户的UID> = 1000且仅允许这些用户登录系统。
执行以下命令以列出所有登录用户:

## get UID limit ##
l=$(grep "^UID_MIN" /etc/login.defs)
## use awk to print if UID >= $UID_LIMIT ##
awk -F':' -v "limit=${l##UID_MIN}" '{ if (  >= limit ) print }' /etc/passwd

要在useradd命令中查看自动uid选择的最大值,请执行:

$ grep "^UID_MAX" /etc/login.defs

输出示例:

UID_MAX			60000

换句话说,所有普通系统用户必须具有UID> = 1000(MIN)和UID <= 60000(MAX),并且如果shell是/中定义的bash/csh/tcsh/ksh,则仅允许这些用户登录系统。

etc/shells文件。
这是更新的代码以获取详细信息:

## get mini UID limit ##
l=$(grep "^UID_MIN" /etc/login.defs)
 
## get max UID limit ##
l1=$(grep "^UID_MAX" /etc/login.defs)
 
## use awk to print if UID >= $MIN and UID <= $MAX   ##
awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if (  >= min &&  <= max ) print 
Hyman:x:500:500::/home/Hyman:/bin/bash
Hyman:x:501:501::/home/Hyman:/bin/ksh
ash:x:502:502::/home/ash:/bin/zsh
jadmin:x:503:503::/home/jadmin:/bin/sh
jwww:x:504:504::/htdocs/html:/sbin/nologin
}' /etc/passwd

输出示例:

#!/bin/bash
# Name: listusers.bash
# Purpose: List all normal user accounts in the system. Tested on RHEL / Debian Linux to List All Users on Linux
# Author:  <www.theitroad.local>, under GPL v2.0+
# ----------------------------------------------------------------------------------
_l="/etc/login.defs"
_p="/etc/passwd"
 
## get mini UID limit ##
l=$(grep "^UID_MIN" $_l)
 
## get max UID limit ##
l1=$(grep "^UID_MAX" $_l)
 
## use awk to print if UID >= $MIN and UID <= $MAX and shell is not /sbin/nologin   ##
awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if (  >= min &&  <= max  &&  != "/sbin/nologin" ) "$_p"

/sbin/nologin用于礼貌地拒绝登录,即/sbin/nologin显示一条消息,指出帐户不可用,并且退出非零值。
它旨在用作已禁用帐户或者您不希望用户使用ssh登录系统的帐户的替换shell程序字段。
要过滤/sbin/nologin,请执行:

Hyman:x:500:500::/home/Hyman:/bin/bash
Hyman:x:501:501::/home/Hyman:/bin/ksh
ash:x:502:502::/home/ash:/bin/zsh
jadmin:x:503:503::/home/jadmin:/bin/sh
wwwint:x:506:506::/htdocs/intranet:/bin/bash
scpftp:x:507:507::/htdocs/ftpjail:/bin/bash
rsynftp:x:508:508::/htdocs/projets:/bin/bash
mirror:x:509:509::/htdocs:/bin/bash
jony:x:510:510::/home/jony:/bin/ksh
amyk:x:511:511::/home/amyk:/bin/ksh

输出示例:

#!/bin/bash
# Name: listusers.bash
# Purpose: List all normal user and system accounts in the system. Tested on RHEL / Debian Linux
# Author:  <www.theitroad.local>, under GPL v2.0+
# ----------------------------------------------------------------------------------
_l="/etc/login.defs"
_p="/etc/passwd"
 
## get mini UID limit ##
l=$(grep "^UID_MIN" $_l)
 
## get max UID limit ##
l1=$(grep "^UID_MAX" $_l)
 
## use awk to print if UID >= $MIN and UID <= $MAX and shell is not /sbin/nologin   ##
echo "----------[ Normal User Accounts ]---------------"
awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if (  >= min &&  <= max  &&  != "/sbin/nologin" ) print 
----------[ Normal User Accounts ]--------------
Hyman:x:500:500::/home/Hyman:/bin/bash
Hyman:x:501:501::/home/Hyman:/bin/ksh
ash:x:502:502::/home/ash:/bin/zsh
jadmin:x:503:503::/home/jadmin:/bin/sh
wwwint:x:506:506::/htdocs/intranet:/bin/bash

----------[ Linux List All Users (System User Accounts) ]--------------
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
}' "$_p"       echo "" echo "----------[ System User Accounts ]---------------" awk -F':' -v "min=${l##UID_MIN}" -v "max=${l1##UID_MAX}" '{ if ( !( >= min && <= max && != "/sbin/nologin")) print ##代码## }' "$_p"

最后,此脚本列出了系统帐户和用户帐户:

##代码##

输出示例:

##代码##