操作系统: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 usermod
orwhich usermod
并查看它usermod
在路径上/usr/sbin/usermod
,您可能不会在after/usr/sbin
的输出中看到它,但会在命令之后将其放在 PATH 变量中echo $PATH
su root
su -
/sbin 与/bin 类似,该目录包含引导系统所需的命令,但普通用户通常不会执行这些命令。
/usr/sbin 该目录包含用于系统管理的程序二进制文件,这些程序对于引导过程、挂载 /usr 或系统修复来说并不是必需的。
答案2
当您运行时su -
,您将使用 root 用户的环境启动 shell。这个问题的环境的重要部分是您获取 root 用户的 PATH。当您离开-
并仅运行时su root
,您将保留用户的环境,更重要的是,保留用户的 PATH。