不久前,我在安装NPM时注意到,当我尝试使用sudo运行他们的安装shell脚本时,它抛出了一些没有找到的命令的错误。然而,当试图运行相同的脚本,而不做,一切都像一种魅力。
我是一个新的linux用户,但据我所知,sudo的权限和visilibity是普通用户的超集。
为什么会发生这种事?
发布于 2022-08-27 15:20:14
据我理解,sudo的权限和visilibity是正常用户的超集。
权限,是的,但不一定是可见的。应用程序的可见性由PATH环境变量控制。
~$ printenv PATH
/home/vanadium/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/games输入命令时,命令解释器首先检查它是否是内部命令,或者命令是否与磁盘上可执行文件的名称相对应。然后,系统搜索PATH中列出的目录,直到找到一个具有与命令匹配的名称的可执行文件。
正如您在示例中所看到的,用户可以在PATH中拥有额外的私有目录,只有当该用户发出命令时才会搜索。因此,是的,用户帐户可以具有与root用户不同的可用命令,即管理员,在使用sudo命令时所承担的角色。
但是,可执行文件的权限最终决定谁可以运行该文件。如果权限允许,则始终可以通过在提示符上提供完整的路径名来运行可执行文件,例如/usr/bin/mount,而不仅仅是文件名mount。事实上,只要设置了可执行位,root总是可以执行的,即使只对所有者执行。
发布于 2022-08-27 15:20:31
假设您想在目录脚本中运行一个文件。你会跑:
myscript.sh剧本写得很好。但是在运行sudo之后,您得到的错误是:
sudo: myscript.sh: file not found每当使用sudo时,它都使用根用户的路径。解决这个问题的方法是以这种方式运行命令:
sudo ./myscript.sh发布于 2022-08-27 15:38:43
外壳(巴什等)在常规用户和sudo模式中使用不同的变量。只需通过以下步骤验证:
# Plain user
printenv > env1
# Using sudo
sudo printenv > env2
# Comparison
diff env1 env2
# Alternative comparison using the GUI tool meld
meld env1 env2如果meld没有安装,您可以轻松安装它。非常有用。
sudo apt-get update
sudo apt-get install meld普通用户/ sudo变量的不同内容会影响shell行为和脚本功能。
文件访问权限也不同。
https://askubuntu.com/questions/1426008
复制相似问题