整理了工作中常见查看用户信息的几种方式,供有需要的码友参考。
目录
1、查看当前登录用户
1.1、whoami 命令
1.2、id 命令
2、查看/etc/passwd文件
3、查看/etc/shadow文件
4、使用lslogins命令
5、使用getent命令
5.1、getent passwd
5.2、getent hosts
5.3、getent services
6、使用compgen命令
6.1、compgen语法
6.2、compgen用户相关选项
7、代码拾遗
运行环境:
查看当前登录用户名
whoami
--------------------------------------------------------------------------------
root
打印 当前用户名 的信息,输出结果各字段如下:
uid:显示 用户ID 和 用户名
gid:显示 用户组ID 和 组名称
groups:显示 用户的附加 组ID 和 组名称
id
--------------------------------------------------------------------------------
uid=0(root) gid=0(root) groups=0(root)
文件 /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段 用 冒号: 拼接,格式如下:
文件 /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段 用 冒号: 拼接,格式如下:
lslogins 命令 列出系统中所有用户的信息。输出结果各字段如下:
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
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:
.
支持查询的数据库有:
ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts initgroups
netgroup networks passwd protocols rpc services shadow
输出格式同 cat /etc/passwd 命令
# 查找所有用户信息
getent passwd
# 查找指定用户信息(如:root)
getent passwd root
输出格式同 cat /etc/hosts 命令
# 获取 所有 主机信息
getent hosts
# 根据 IP地址 查找
getent hosts IP地址
# 根据 域名 查找
getent hosts 域名
getent services
getent services 端口号
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所有变量
# 列出系统所有的用户
compgen -u
# 列出系统所有的组
compgen -g
# 计算两个日期相差的天数
# 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"
参考: