整理了工作中常见查看用户信息的几种方式,供有需要的码友参考。
目录
运行环境:
1、查看当前登录用户
1.1、whoami 命令
查看当前登录用户名
whoami
--------------------------------------------------------------------------------
root
1.2、id 命令
打印 当前用户名 的信息,输出结果各字段如下:
-
uid:显示 用户ID 和 用户名
-
gid:显示 用户组ID 和 组名称
-
groups:显示 用户的附加 组ID 和 组名称
id
--------------------------------------------------------------------------------
uid=0(root) gid=0(root) groups=0(root)
2、查看/etc/passwd文件
文件 /etc/passwd 存储着所有用户的基本信息,并且 所有用户 都对此文件拥有读权限。
cat /etc/passwd
--------------------------------------------------------------------------------
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
可以看到每行记录对应着一个用户信息,每条记录 共7段 用 冒号: 拼接,格式如下:
- 第1段:用户名
- 第2段:登录密码,默认用x替代,真实密码详见《/etc/shadow》文件
- 第3段:uid 用户唯一ID
- 第4段:gid 所属的用户组ID,uid 和 gid 对应关系详见《/etc/group》文件
- 第5段:账号的说明性描述
- 第6段:用户的家目录路径
- 第7段:默认shell,如果为 /sbin/nologin/ 则不允许登录
3、查看/etc/shadow文件
文件 /etc/shadow 存储着所有 用户的口令密文信息,同时为确保安全性,仅 root 权限用户 对此文件拥有读权限。
cat /etc/shadow
--------------------------------------------------------------------------------
root:密文:17631:0:99999:7:::
daemon:*:17557:0:99999:7:::
bin:*:17557:0:99999:7:::
sys:*:17557:0:99999:7:::
可以看到每行记录对应着一个用户密码信息,每条记录 共9段 用 冒号: 拼接,格式如下:
- 第1段:用户名
- 第2段:密码密文(SHA512散列加密算法)
- 第3段:最近一次修改密码时间(从1970-01-01开始的天数)
- 第4段:密码最小修改间隔的天数(依赖第3段的时间,如:0 表示 随时可以修改密码)
- 第5段:密码有效期(最晚 N 天之后必须修改,如:99999 表示 密码长期有效)
- 第6段:密码到期前提醒(依赖第5段的时间,如:7 表示密码有效期第7天开始,每次登录时提示)
- 第7段:密码过期后宽限天数(依赖第5段的时间,如:10 表示 密码过期后10天内允许登录,过期禁用)
- 第8段:账号失效日期(从1970-01-01开始的天数,到期无论账号是否有效,都将无法使用)
- 第9段:保留字段,无含义
4、使用lslogins命令
lslogins 命令 列出系统中所有用户的信息。输出结果各字段如下:
- UID:用户ID
- USER:用户名
- PWD-LOCK:密码已设置且已锁定(0:未锁定、1:已锁定)
- PWD-DENY:登录密码是否禁用(0:允许密码登录、1:禁用密码登录)
- LAST-LOGIN:最近一次的登录日期
- GECOS:用户的其它信息(如:用户描述)
lslogins
--------------------------------------------------------------------------------
UID USER PROC PWD-LOCK PWD-DENY LAST-LOGIN GECOS
0 root 94 0 0 08:21:11 root
1 bin 0 0 1 bin
2 daemon 0 0 1 daemon
3 adm 0 0 1 adm
4 lp 0 0 1 lp
5 sync 0 0 1 sync
6 shutdown 0 0 1 Jun01/02:00 shutdown
7 halt 0 0 1 halt
8 mail 0 0 1 mail
11 operator 0 0 1 operator
12 games 0 0 1 games
14 ftp 0 0 1 FTP User
28 nscd 0 0 1 NSCD Daemon
38 ntp 0 0 1
72 tcpdump 0 0 1
74 sshd 0 0 1 Privilege-separated SSH
81 dbus 0 0 1 System message bus
89 postfix 0 0 1
99 nobody 0 0 1 Nobody
192 systemd-network 0 0 1 systemd Network Management
998 chrony 0 0 1
999 polkitd 0 0 1 User for polkitd
5、使用getent命令
getent 命令是从管理数据库中获取条目。
getent --help
--------------------------------------------------------------------------------
Usage: getent [OPTION...] database [key ...]
Get entries from administrative database.
-i, --no-idn disable IDN encoding
-s, --service=CONFIG Service configuration to be used
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Supported databases:
ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
netgroup networks passwd protocols rpc services shadow
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
支持查询的数据库有:
ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
netgroup networks passwd protocols rpc services shadow
5.1、getent passwd
输出格式同 cat /etc/passwd 命令
- 获取 所有 用户信息
# 查找所有用户信息
getent passwd
- 获取 指定 用户信息
# 查找指定用户信息(如:root)
getent passwd root
5.2、getent hosts
输出格式同 cat /etc/hosts 命令
- 获取 所有 主机信息
# 获取 所有 主机信息
getent hosts
- 获取 指定 主机信息
# 根据 IP地址 查找
getent hosts IP地址
# 根据 域名 查找
getent hosts 域名
5.3、getent services
- 获取 所有 服务信息(服务名、端口号、协议)
getent services
- 获取 指定 服务信息(服务名、端口号、协议)
getent services 端口号
6、使用compgen命令
6.1、compgen语法
compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
选项
-a 列出所有别名;相关:alias
-b 列出bash内置命令
-c 列出所有可用命令
-d 列出当前目录下所有目录
-e 列出全局变量;相关:export
-f 列出当前目录所有文件
-g 列出系统所有的组
-j 列出后台执行的作业
-k 列出shell保留字
-s 列出所有的service
-u 列出系统所有的用户
-v 列出shell所有变量
6.2、compgen用户相关选项
# 列出系统所有的用户
compgen -u
# 列出系统所有的组
compgen -g
7、代码拾遗
# 计算两个日期相差的天数
# echo $((($(date -d"结束日期" +%s) - $(date -d"开始日期" +%s)) / 86400))
echo $((($(date -d"2022-10-01" +%s) - $(date -d"2022-09-21" +%s)) / 86400))
# 求未来的日期(如:10天后)
date -d "2022-09-21 10 days"
# 求过去的日期(如:10天前)
date -d "2022-09-21 -10 days"
参考: