Linux查看用户信息的几种实现方式
作者:狂龙骄子
这篇文章主要介绍了Linux查看用户信息的几种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
整理了工作中常见查看用户信息的几种方式,供有需要的码友参考。
运行环境:
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、getentpasswd
输出格式同 cat /etc/passwd 命令
- 获取 所有 用户信息
# 查找所有用户信息 getent passwd
- 获取 指定 用户信息
# 查找指定用户信息(如:root) getent passwd root
5.2、getenthosts
输出格式同 cat /etc/hosts 命令
- 获取 所有 主机信息
# 获取 所有 主机信息 getent hosts
- 获取 指定 主机信息
# 根据 IP地址 查找 getent hosts IP地址 # 根据 域名 查找 getent hosts 域名
5.3、getentservices
- 获取 所有 服务信息(服务名、端口号、协议)
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"
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
