Linux查看用户信息的几种方法

整理了工作中常见查看用户信息的几种方式,供有需要的码友参考。

目录

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、代码拾遗


运行环境:

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,uidgid 对应关系详见《/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"

参考:

猜你喜欢

转载自blog.csdn.net/Sn_Keys/article/details/126987262
今日推荐