Linux列出系统中的所有用户
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 ) printHyman: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"
最后,此脚本列出了系统帐户和用户帐户:
##代码##输出示例:
##代码##