su和su-的区别

基本概念

在 Linux 系统中,su - midusersu miduser 的主要区别在于 登录环境 的加载方式:

  1. su - miduser (或等价的 su -l miduser / su --login miduser)
    • 模拟完整的登录过程。
    • 系统会创建一个全新的、干净的登录环境,就像用户 miduser 通过终端或 SSH 首次登录一样。
    • 它会读取并执行目标用户 (miduser) 的 Shell 启动配置文件
      • 对于 Bash Shell:通常是 ~/.bash_profile, ~/.bash_login, ~/.profile (按顺序读取第一个存在的),并且 可能 会读取 ~/.bashrc (取决于前面文件中的配置)。
      • 对于 Zsh Shell:通常是 ~/.zprofile~/.zlogin
      • 对于其他 Shell:读取其对应的登录配置文件。
    • 环境变量:目标用户 (miduser) 的配置文件设置的环境变量(如 HOME, USER, LOGNAME, PATH, SHELL, MAIL 等)会被完全初始化。
    • 工作目录:切换到目标用户 (miduser) 的家目录 (/home/miduser/home/miduser 指定的目录)。
    • 结果:你获得的环境与 miduser 用户自己登录系统后得到的环境几乎完全相同。所有用户自定义的设置和路径都生效。
  2. su miduser
    • 非登录切换。
    • 系统不会模拟完整的登录过程。
    • 不会读取目标用户 (miduser) 的 Shell 登录配置文件 (~/.bash_profile, ~/.profile, ~/.zprofile 等)。
    • 环境变量大部分环境变量会从当前用户(执行 su 命令的用户)的环境中继承过来。关键的例外是 USER, HOME, SHELL 会被设置为目标用户 miduser 的值。
    • 工作目录保持当前目录不变,不会切换到 miduser 的家目录。
    • 可能读取非登录配置文件:对于像 Bash 这样的 Shell,它通常会读取目标用户 (miduser) 的 ~/.bashrc 文件(如果存在),因为 ~/.bashrc 通常用于定义交互式非登录 Shell 的设置(别名、函数、提示符等)。但这不是 su 命令本身的行为,而是由新启动的 Shell 决定的
    • 结果:你获得了 miduser 用户的身份权限 (uid, gid),但环境变量(尤其是 PATH)和当前工作目录仍然保留自切换前的用户。用户 miduser 在登录配置文件中设置的环境变量(如自定义的 PATH, JAVA_HOME 等)不会生效,除非它们恰好在 ~/.bashrc 中定义并被读取。

关键区别

特性su - miduser (或 su -l miduser)su miduser
登录类型登录 Shell非登录 Shell
环境全新环境继承当前环境 (部分覆盖)
配置文件读取目标用户的登录配置文件不读取目标用户的登录配置文件
.bashrc通常不直接读取 (可能间接加载)通常会读取
环境变量目标用户的完整设置 (PATH, HOME 等)USER, HOME, SHELL 被覆盖;其他变量(尤其是 PATH)继承自原用户
工作目录切换到目标用户的家目录保持切换前的当前目录
模拟程度模拟完整用户登录仅切换用户身份

使用哪种?

  • 使用 su - miduser
    • 当你需要以 miduser 身份执行任务,并且希望环境(特别是 PATH 和其他环境变量)与 miduser 自己登录时完全一致。
    • 当你需要确保脚本或命令在 miduser 的标准环境中运行。
    • 当你需要操作 miduser 家目录下的文件,切换目录更方便。
    • 这是最常用、最推荐的方式,因为它能提供目标用户预期的完整环境。
  • 使用 su miduser
    • 当你只需要 miduser 的权限来执行一两条命令,并且明确希望保留当前的环境变量(尤其是 PATH)和当前工作目录
    • 这种情况相对少见,通常用于特定的调试或临时提权场景。容易因为环境不一致(如错误的 PATH)导致命令找不到或行为异常。

简单记忆:

  • - (短横线): 表示 login,代表完整的登录环境。获得用户的家目录和干净的配置文件设置。
  • 不带 - 只切换用户身份,不改变环境(除了 USER, HOME, SHELL)和当前目录。环境变量(尤其是 PATH)是旧的,可能导致问题。

因此,在绝大多数情况下,su - miduser 是正确且推荐的选择,因为它能提供一个干净、符合预期的目标用户环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值