Linux操作系统中查看用户信息的几种方法 && 如何在 Linux操作系统中 命令行中切换用户登录
查看用户信息
1、查看当前登录用户
1.1、whoami 命令
查看当前登录用户名
1.2、id 命令
打印 当前用户名 的信息,输出结果各字段如下:
-
uid:显示 用户ID 和 用户名
-
gid:显示 用户组ID 和 组名称
-
groups:显示 用户的附加 组ID 和 组名称
2、查看/etc/passwd文件
文件 /etc/passwd 存储着所有用户的基本信息,并且 所有用户 都对此文件拥有读权限。
可以看到每行记录对应着一个用户信息,每条记录 共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 权限用户 对此文件拥有读权限。
可以看到每行记录对应着一个用户密码信息,每条记录 共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:用户的其它信息(如:用户描述)
5、使用getent命令
getent 命令是从管理数据库中获取条目。
5.1、getent passwd
输出格式同 cat /etc/passwd 命令
- 获取 所有 用户信息
- 获取 指定 用户信息
5.2、getent hosts
输出格式同 cat /etc/hosts 命令
- 获取 所有 主机信息
- 获取 指定 主机信息
# 根据 IP地址 查找 getent hosts IP地址 # 根据 域名 查找 getent hosts 域名
5.3、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]
compgen用法:
compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语] 选项: -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

切换用户登录
前言
① Linux 操作系统有不同类型的用户,用户有不同类型的权限。
②并非所有用户都可以执行所有命令,也不是所有用户都可以切换到其他用户。
③ su 命令用于切换当前用户身份到指定用户或者以指定用户的身份执行命令或程序。
④ su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。
⑤普通用户切换到root用户,可以使用su -- 或su root,但是必须输入root密码才能完成切换;
⑥root用户切换到普通用户,可以直接使用su username,不需要输入任何密码即可完成切换。
⑦su 和 su - 的区别:
注意,使用 su 命令时,有 - 和没有 - 的命令执行效果是完全不同的;(理解:即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令))
- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。(环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。)
⑧Linux 中的各种用户类型:
一般来说,Linux 系统中有三种类型的用户。
- 系统用户:这些用户是在 Linux 系统中自动创建的,以便能够运行服务或应用系统,且不会登录系统(一般来说,我们不能使用这些用户登录)。
- 常规用户:可以登录到系统中的用户,这些用户中的每一个在系统中都拥有不同的权限和级别,这些权限和级别是由他们所属的组授予的。
- 超级用户:可以执行高级任务或关键任务的系统管理员用户。
语法格式
su [选项] [用户名]
常用参数:
- | 当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等);使用 - 选项可省略用户名,默认会切换为 root 用户。 |
-c或--command | 执行完指定的指令后,即恢复原来的身份 |
-f或--fast | 适用于csh与tsch,使shell不用去读取启动文件 |
-l或--login | 改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname,此外,也会变更PATH变量 |
-m,-p或--preserve-environment | 变更身份时,不要变更环境变量 |
-s或--shell | 指定要执行的shell |
--help | 显示帮助信息 |
--version | 显示版本信息 |
实例
1、
[lamp@localhost ~]$ su -root 密码: <-- 此处输入 root 用户的密码 # "-" 代表连带环境变量一起切换,不能省略
2、
[lamp@localhost ~]$ whoami lamp #当前我是lamp [lamp@localhost ~]$ su - -c "useradd user1" root 密码: #不切换成root,但是执行useradd命令添加user1用户 [lamp@localhost ~]$ whoami lamp #我还是lamp [lamp@localhost ~]$ grep "user1' /etc/passwd userl:x:502:504::/home/user1:/bin/bash #user用户已经添加了
3、终端命令行切换普通用户
当使用 Linux 系统时,我们使用一个用户登录,然后在同一个命令行会话中切换到另一个用户。要切换到另一个用户,可以使用命令 su -
$ su - janedoe Password:
在上面的示例中,你需要知道 janedoe用户 的密码才能切换到该用户。这是必须的,否则的话将存在安全风险。
4、终端命令行切换root用户
出于安全原因,一些系统的 root 用户会被阻止直接登录,不管是本地还是远程。也就是说,Linux操作系统不会接受使用 root 用户登录系统,即使密码正确。
如果想要以root角色在终端命令行中执行操作,可以使用sudo命令。
sudo 命令可以允许我们像 root 用户一样执行任何操作,而不需要知道 root 用户的密码。你只需要知道自己用户的密码,且该用户需要在 sudo 组中即可。
同样出于安全考虑,即使在某些允许 root 用户登录的系统中,也最好使用 sudo 来运行 root 权限的操作,如下所示:
sudo <command>
但如果要更改为 root 用户,以便所有后续命令都以 root 用户身份运行,则可以使用:
sudo -i
在这里需要使用自己用户的密码,而不是 root 账户的密码:
作为一个 sudo 用户,可以将其他用户添加到 sudo 组中来创建一个 sudo 用户。
Linux 系统可以让我们使用 su 或者 sudo 命令切换用户或执行高级命令。但是需要记住,拥有超级用户(sudo)的权限,需要有更强的安全意识。
5、su username切换登录用户与su -切换登录用户的区别
普通用户 lamp 通过 su 命令切换成 root 用户,但没有使用 - 选项,这样情况下,虽然看似是 root 用户,但系统中的 $PATH 环境变量依然是 lamp 的(而不是 root 的),因此当前工作环境中,并不包含 /sbin、/usr/sbin等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用。不仅如此,当 root 用户接受邮件时,会发现收到的是 lamp 用户的邮件,因为环境变量 $MAIL 也没有切换。
即在不使用 su - 的情况下,虽然用户身份成功切换,但环境变量依旧用的是原用户的,切换并不完整。
[lamp@localhost ~]$ whoami lamp #查询用户身份,我是lamp [lamp@localhost ~]$ su root 密码: <-输入root密码 #切换到root,但是没有切换环境变量。注意:普通用户切换到root需要密码 [root@localhost ~]# env | grep lamp #查看环境变量,提取包含lamp的行 USER=lamp #用户名还是lamp,而不是root PATH=/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lamp/bin #命令査找的路径不包含超级用户路径 MAIL=/var/spool/mail/lamp PWD=/home/lamp LOGNAME=lamp #邮箱、主目录、目前用户名还是lamp
参考博客:https://blog.csdn.net/Sn_Keys/article/details/126987262
参考博客:https://blog.csdn.net/weixin_53641036/article/details/127367920
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!