从“su -”找到命令,但没有从“su root”找到命令

从“su -”找到命令,但没有从“su root”找到命令

操作系统:Debian 10.10

我搜索了解为什么当我使用“su -”启动时“usermod”命令运行,但是当他从“su root”启动时,命令是“bash:usermod:命令未找到”。

谢谢!

答案1

su命令不-保留您现有的环境,并且仅将您切换到用户而不加载他的所有环境变量。

su -将模拟用户登录,不仅会将您切换到用户,还会加载他的环境变量。

man su

   -, -l, --login
          Start the shell as a login shell with an environment similar to a real login:

             o      clears all the environment variables except TERM and variables specified by --whitelist-environment

             o      initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH

             o      changes to the target user's home directory

             o      sets argv[0] of the shell to '-' in order to make the shell a login shell

在这种情况下,您可能不会加载 root 用户的 PATH 变量中的所有元素。

echo $PATH执行完后键入su root,执行完命令后,su -您可能会在 PATH 中看到额外的文件夹su -

usermod命令应该位于/usr/sbin,这是仅对超级用户可用的路径,内部命令用于管理目的,并且仅由管理用户而不是普通用户运行/sbin/usr/sbin

您可以使用type usermodorwhich usermod并查看它usermod在路径上/usr/sbin/usermod,您可能不会在after/usr/sbin的输出中看到它,但会在命令之后将其放在 PATH 变量中echo $PATHsu rootsu -

/sbin 与/bin 类似,该目录包含引导系统所需的命令,但普通用户通常不会执行这些命令。

/usr/sbin 该目录包含用于系统管理的程序二进制文件,这些程序对于引导过程、挂载 /usr 或系统修复来说并不是必需的。

答案2

当您运行时su -,您将使用 root 用户的环境启动 shell。这个问题的环境的重要部分是您获取 root 用户的 PATH。当您离开-并仅运行时su root,您将保留用户的环境,更重要的是,保留用户的 PATH。

相关内容