Linux命令之su -- 用于切换当前用户身份到其他用户身份

文章目录

  • 命令介绍
  • 特别重要
  • 常用选项
  • su 命令存在的安全隐患
  • 参考示例
    • 切换成指定的用户身份,但是环境变量不变
    • 切换成指定的用户身份,并且改成对应用户的环境变量
    • 切换成指定的用户,并告知新的 shell 不要去读取启动文件
    • 切换成指定的用户执行命令,执行后恢复原来的用户身份
    • 切换成其它用户后,如何恢复成原来的用户身份
    • 切换成 root 用户

命令介绍

su 英文就是 switch user or substitute user identitysu 命令用于切换当前用户身份到其他用户身份,或者以指定用户的身份执行命令或程序。

语法为 su 后接用户登录名称,接着系统会要求输入所要变更的用户的登录密码,成功登录后,命令行的前缀会改变,说明你已经切换成功。当然你也可以利用 who -m 命令来验证当前登陆的身份。

切换后,你会一直保持该用户身份,直至退出 Terminal 或者输入 exit 命令。

普通用户切换到 root 用户,可以使用 su -su - root,但是必须输入 root 密码才能完成切换。root 用户切换到普通用户,可以使用 su - username,不需要输入任何密码即可完成切换。

特别重要

使用命令 su 切换其它用户身份时,如果不指定选项 --l--login,这叫【非登录式】切换,即不会读取目标用户的配置文件,所以运行的用户环境还是原来用户的环境;如果指定了上述选项进行切换,这叫【登录式】切换,会读取目标用户的配置文件,切换后完全使用目标用户的环境执行命令,所以建议以后切换用户的时候都加上上述选项进行切换。

常用选项

选项说明
-c<指令>--command=<指令>执行完指定的指令后,即恢复原来的身份
-f--fast适用于csh与tsch,使shell不用去读取启动文件(例如: csh.cshrc 等)
--l--login改变身份时,也同时变更工作目录,以及环境变量 HOME、SHELL、USER、LOGNAME、PATH 等。这个参数加了之后,就好像是重新 login 为目标用户一样,大部份环境变量都是以目标用户的为主,并且工作目录也会改变。
-m-p--preserve-environment变更身份时,不要变更环境变量
-s--shell指定要执行的shell
--help显示帮助信息
--version显示版本信息

su 命令存在的安全隐患

使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:
1.仅仅为了一个特权操作就直接赋予普通用户超级管理员账户的完整权限,这显然是不明智的;
2.如果大家都要使用 su 命令切换到 root 身份,而使用命令 su 切换到 root 用户必须输入 root 的登录密码,这就导致很多人都知道 root 的密码,这是很糟糕的。

所以在实际的工作中,更多的是使用命令 sudo 来获取某些用户的特有权限去执行命令,而且普通用户必须通过授权才能使用命令 sudo。

参考示例

切换成指定的用户身份,但是环境变量不变

例如,当前登录用户是 root,想要切换到 linuxcool 用户,但环境变量仍然是 root用户的:

[root@linuxcool ~]# su linuxcool

切换成指定的用户身份,并且改成对应用户的环境变量

切换成用户 linuxcool,并将工作目录以及相关的环境变量也改成用户 linuxcool 的:

[root@linuxcool ~]# su - linuxcool  

说通俗点,命令 su - 是完整地切换到另一个用户环境,建议大家切换用户的时候,尽量使用 su - username 这样,否则可能发现某些命令执行不了。

切换成指定的用户,并告知新的 shell 不要去读取启动文件

[mysql@linuxcool ~]# su root -f

切换成指定的用户执行命令,执行后恢复原来的用户身份

当前登录用户是 mysql,切换成用户 root 执行命令 ls,命令执行完后恢复原来的用户身份:

[mysql@linuxcool ~]# su root -c ls

切换成其它用户后,如何恢复成原来的用户身份

切换成另一个用户身份之后,可以输入 exit 恢复成原来的用户身份。

例如,当前登录用户是 root,切换成用户 mysql:

[root@htlwk0001host ~]# su mysql -- 切换成用户 mysql
[mysql@htlwk0001host root]$ 

输入命令 exit,退出当前用户 mysql 身份,恢复成原来的用户身份 root:

[mysql@htlwk0001host root]$ exit -- 退出当前用户 mysql
exit
[root@htlwk0001host ~]# 

切换成 root 用户

[mysql@htlwk0001host ~]$ su - 

[mysql@htlwk0001host ~]$ su - root

[mysql@htlwk0001host ~]$ su # 不推荐这种方式,虽然切换成用户root了,但是运行的依旧是mysql的用户环境
[root@htlwk0001host mysql]# echo $USER
mysql
[root@htlwk0001host mysql]# echo $LOGNAME
mysql
[root@htlwk0001host mysql]# echo $PATH
/var/lib/mysql/.local/bin:/var/lib/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@htlwk0001host mysql]# echo $SHELL
/bin/bash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache ignite_Apache Ignite变得简单:第一个Java应用程序

apache ignite在本文中&#xff0c;我们将更进一步&#xff0c;让您完成第一个Ignite应用程序的创建&#xff0c;以从分布式缓存中进行读写操作。 作为第一个示例&#xff0c;我们将尽可能简单地向您展示如何用Java编写用于处理Apache Ignite集群数据的应用程序。 可从GitHub存…

Linux 命令之 sudo -- 以其他用户身份来执行命令

文章目录命令介绍原理相关文件通配符和命令 su 的比较常用选项几个重要选项的解读-k 选项-s 选项-i 选项su、sudo su、sudo -i 的区别查看日志文件参考示例以用户 mysql 的身份执行命令 pwd以用户 root 的身份执行命令 pwd以 root 的权限执行上一条命令以 root 的权限编辑指定的…

openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS

openjdk和jdkJDK 11 计划于 2018年9月25日星期二发布&#xff0c;以实现全面可用性 。OpenJDK jdk-dev邮件列表上的Mark Reinhold消息于2018 年8月16日宣布“ JDK 11现在处于发布候选阶段 。” 但是&#xff0c;Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详…

Linux系统通过文件/etc/sudoers设置用户使用sudo的权限/用户使用sudo的授权配置

文章目录sudo 权限配置说明如何修改 sudo 会话有效期设置输入密码时显示星&#xff08;*&#xff09;号别名规则如何定义别名及使用别名配置权限为什么配置的命令要使用绝对路径参考示例授权用户 test 可以重启服务器授权群组可以使用 sudo 切换成任何用户身份&#xff0c;执行…

system.gc 性能_使用这些先进的GC技术提高应用程序性能

system.gc 性能应用程序性能是我们关注的重点&#xff0c;垃圾收集优化是取得小而有意义的进步的好地方 自动化垃圾收集&#xff08;与JIT HotSpot编译器一起&#xff09;是JVM中最先进&#xff0c;最有价值的组件之一&#xff0c;但是许多开发人员和工程师对垃圾收集&#…

Linux 命令之 who -- 打印当前登录用户/显示目前登入系统的用户信息。

文章目录命令介绍常用选项参考示例打印用户登录信息打印全面的信息打印系统登录进程显示登录系统的所有用户名称和总人数命令介绍 who 命令用来打印当前登录用户信息&#xff0c;包含了系统的启动时间 、 活动进程 、 使用者 ID、使用终端等信息&#xff0c;是系统管理员了解系…

SpringCloud全局过滤器自定义

一、实现步骤&#xff1a; 在gateway_service工程编写全局过滤器类GlobalFilter,Ordered编写业务逻辑代码访问接口测试&#xff0c;加token和不加token。 二、业务逻辑代码 package com.william.filters;import org.springframework.cloud.gateway.filter.GatewayFilterChain…

Linux 命令之 whoami -- 打印当前有效的用户名称

文章目录命令介绍参考示例命令介绍 whoami 命令用于打印当前有效的用户名称&#xff0c;相当于执行 id -un 命令。 参考示例 [roothtlwk0001host ~]# whoami root

java流写入数据库_使用Java流查询数据库

java流写入数据库在本文中&#xff0c;您将学习如何编写纯Java应用程序&#xff0c;这些应用程序能够使用现有数据库中的数据&#xff0c;而无需编写一行SQL&#xff08;或类似的语言&#xff0c;如HQL&#xff09;&#xff0c;而无需花费数小时将所有内容放在一起。 准备好应用…

Linux 命令之 id -- 显示用户ID和组ID

文章目录命令介绍常用选项参考示例显示当前用户的用户id及所属用户组的信息显示用户所属群组的ID显示用户所属附加群组的ID显示指定用户信息命令介绍 id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID&#xff08;GID&#xff09;则对应…

SpringCloud局部过滤器自定义

一、实现步骤&#xff1a; 在gateway_service中编写MyParamGatewayFilterFactory类实现业务代码&#xff1a;循环请求参数中是否包含name&#xff0c;如果包含则输出参数值修改配置文件访问请求测试&#xff0c;带name参数 二、在gateway_service中编写MyParamGatewayFilterF…

enum.values_占用内存的Enum.values()方法

enum.values我是Java 枚举的忠实拥护者 。 似乎我们一直在等待获得它&#xff0c;但是当我们最终获得它&#xff08; J2SE 5 &#xff09;时&#xff0c;该枚举比C和C 提供的枚举要好得多&#xff0c;对我来说似乎“ 值得等待” 。 与Java enum一样好&#xff0c;它也不是没有问…

搭建配置中心微服务

一、实现步骤&#xff1a; 创建配置中心SpringBoot项目config_server配置坐标依赖启动类添加开启配置中心服务注解配置服务中心application.yml文件启动测试 二、创建配置中心SpringBoot项目config_server 配置坐标依赖 需要依赖父工程 <?xml version"1.0" en…

Linux命令之 users -- 显示当前登录的用户

文章目录命令介绍参考示例查看当前登录的所有用户命令介绍 users 命令用于显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示相同的次数。 参考示例 查看当前登录的所有用户 [rooth…

使用Spring Boot和H2可以正常工作的原型

我们确实在弹簧上使用了很多h2&#xff0c;特别是对于单元测试。 但是&#xff0c;我们可能希望有一个功能齐全的原型来显示数据&#xff0c;而不是进行单元测试。 H2是最理想的选择&#xff0c;它在spring上运行良好&#xff0c;与大多数数据库都具有良好的语法兼容性&#x…

服务去获取配置中心配置

目标&#xff1a;改造user_service工程&#xff0c;配置文件不再由微服务项目提供&#xff0c;而是从配置中心获取。 实现步骤&#xff1a; 添加配置中心客户端启动依赖修改服务提供者的配置文件启动服务测试效果 一、添加依赖 <!--spring cloud 配置中心--> <depe…

Linux查看用户信息/查看所有用户信息的命令

文章目录通过文件 /etc/passwd 来查看所有用户信息通过文件 /etc/shadow 查看所有用户信息使用 getent 命令查看所有用户信息使用 compgen 命令查看所有的用户信息相关文件/etc/passwd/etc/passwd 文件内容格式说明/etc/shadow/etc/group/etc/group 文件内容格式说明/etc/gshad…

graalvm_GraalVM上的Picocli:极快的命令行应用程序

graalvmGraalVM GraalVM允许您提前将程序编译为本地可执行文件。 与Java VM相比&#xff0c;生成的程序具有更快的启动时间和更低的运行时内存开销。 这对于通常寿命很短的命令行实用程序尤其有用。 GraalVM对Java反射的支持有限&#xff0c;它需要提前知道反射访问的程序元素…

Linux 命令之 getent -- 查看记录

文章目录命令介绍常用选项参考示例查看文件 /etc/protocols 中的所有记录查看指定用户组是否存在&#xff0c;若不存在则创建指定的用户组根据主机名称&#xff0c;查看对应的IP地址根据域名查找对应的IP根据用户名查找对应的UID获取当前登陆用户的信息根据UID查找用户名查找那…

运行SpringBoot时:Type javax.xml.bind.JAXBContext not present

原因和简单介绍 我有一些代码使用JAXB API类&#xff0c;它们是作为Java 6/7/8中JDK的一部分提供的。当我使用Java 9运行相同的代码时&#xff0c;在运行时我得到错误&#xff0c;指示无法找到JAXB类。 自Java 6以来&#xff0c;JAXB类已作为JDK的一部分提供&#xff0c;为什么…