linux基本功系列之su命令

简介: linux基本功系列之su命令

在这里插入图片描述

@[toc]

前言🚀🚀🚀
想要学好Linux,命令是基本功,企业中常用的命令大约200多个,不管是写shell脚本还是管理操作系统,最常用的命令必须要牢牢掌握,像我们以前学乘法口诀一样,烂熟于心,唯有如此,才能打牢基础。
💓 知识最重要的是记忆
💓 入门须知: 想要人生从容,必须全力以赴,努力才是你最终的入场券🚀🚀🚀
💕 最后: 努力成长自己,愿我们都能在看不到的地方闪闪发光 ,一起加油进步🍺🍺🍺

一. su命令介绍

su命令来自于英文单词“switch user”的缩写,其功能是用于切换用户身份。

管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。

另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。

特别说明的是:
切换用户分为login-shell方式与non-login shell方式,区别在于是否在su后面加上-,主要涉及到PATH/USER/MAIL等环境变量读取方法。使用root用户切换至任何用户,都不需要输入用户密码。

二. 语法格式及常用选项

依照惯例,我们还是要查看一下帮助文档


[root@mufenggrow test]# su -help

用法:
 su [选项] [-] [USER [参数]...]

将有效用户 id 和组 id 更改为 USER 的 id。
单个 - 视为 -l。如果未指定 USER,将假定为 root。

选项:
 -m, -p, --preserve-environment  不重置环境变量
 -g, --group <组>             指定主组
 -G, --supp-group <组>        指定一个辅助组

 -, -l, --login                  使 shell 成为登录 shell
 -c, --command <命令>            使用 -c 向 shell 传递一条命令
 --session-command <命令>        使用 -c 向 shell 传递一条命令
                                 而不创建新会话
 -f, --fast                      向shell 传递 -f 选项(csh 或 tcsh)
 -s, --shell <shell>             若 /etc/shells 允许,则运行 shell

 -h, --help     显示此帮助并退出
 -V, --version  输出版本信息并退出

通过帮助文档,我们整理出几个常用的参数:
在这里插入图片描述

三. 参考案例

3.1 切换到root用户

案例一: 切换root,但是不切换环境
我们需要创建一个普通用户mufeng,然后使用su命令切换到root用户, 但是shell环境依然是普通用户的shell

## 创建用户
[root@mufenggrow test]# useradd mufeng
[root@mufenggrow test]# echo 12345678 |passwd --stdin mufeng
更改用户 mufeng 的密码 。
passwd:所有的身份验证令牌已经成功更新。
## 登录普通用户
[root@mufenggrow test]# ssh mufeng@192.168.1.101
The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established.
ECDSA key fingerprint is SHA256:9uJW2mOqzhYy5gtMsTHmt4V584na0LFqEGYXxA4rUM8.
ECDSA key fingerprint is MD5:42:35:b0:99:2c:04:c5:94:e6:f4:74:6d:af:ec:07:29.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.101' (ECDSA) to the list of known hosts.
mufeng@192.168.1.101's password: 

## 切换root
[mufeng@mufenggrow ~]$ su
密码:
[root@mufenggrow mufeng]# whoami
root
## 切换完之后,还是在mufeng的家目录下
[root@mufenggrow mufeng]# pwd
/home/mufeng
[root@mufenggrow mufeng]# 

案例二: 切换root用户,同时切换环境

这时候就需要一个在root前面加上 - 来切换,切换完成后,用户和shell环境都切换为root

[root@mufenggrow mufeng]# ssh mufeng@192.168.1.101
mufeng@192.168.1.101's password: 
Last login: Wed Jan 25 17:10:32 2023 from mufenggrow
[mufeng@mufenggrow ~]$ pwd
/home/mufeng
[mufeng@mufenggrow ~]$ su - root
密码:
上一次登录:三 1月 25 17:11:50 CST 2023pts/1 上
[root@mufenggrow ~]# pwd
/root
[root@mufenggrow ~]# 

3.2 切换到指定用户

从root用户切换到普通用户,无需输入密码:

[root@mufenggrow ~]# su - mufeng
上一次登录:三 1月 25 17:16:59 CST 2023从 mufenggrowpts/2 上
[mufeng@mufenggrow ~]$ exit
登出
[root@mufenggrow ~]# su mufeng
[mufeng@mufenggrow root]$ 

可以看到不加横线的时候,切换过去之后,还是在root目录上。

也就是说,使用- 表示连同shell环境一同切换。

3.3 不切换成root,但执行root才能执行的命令

案例一: 不切换成root,执行head -n 3 /etc/passwd

此时会用到 -c参数
-c, --command <命令> 使用 -c 向 shell 传递一条命令

[mufeng@mufenggrow ~]$ whoami
mufeng
[mufeng@mufenggrow ~]$ head -n 3 /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够

[mufeng@mufenggrow ~]$ su - root -c "head -n 3 /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

需要注意的是: -c后面的命令一定要加上 双引号。

案例二:不切换root,执行lastb, 执行后返回原用户

[mufeng@mufenggrow ~]$ whoami
mufeng
## 不切换成root用户,但执行lastb命令
[mufeng@mufenggrow ~]$ su - root -c lastb
密码:

btmp begins Thu Dec  8 19:36:40 2022

## 切换用户执行命令,执行玩之后返回原用户
[mufeng@mufenggrow ~]$ su -c ls  root
密码:
anaconda-ks.cfg  initial-setup-ks.cfg  test  公共  模板  视频  图片  文档  下载  音乐  桌面

su命令的缺憾

su命令的局限在于,如果主机是多人管理的环境,如果大家都用su命令切换至root身份,每个人都需要知道root密码,非常不安全。

su 和su- 的区别

su命令和su -命令最大的本质区别就是:

  • 前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;
  • 而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误

总结

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述

相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
110 8
|
22天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
50 14
Linux 10 个“who”命令示例
|
2天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
22 8
|
11天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
90 20
|
11天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
35 7
|
1月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
34 9
|
29天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
1月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
136 3
|
1月前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
65 4
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
39 1