首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么sudo找不到普通用户可以找到的命令?

问为什么sudo找不到普通用户可以找到的命令?
EN

Ask Ubuntu用户
提问于 2022-08-27 15:02:10
回答 3查看 2.9K关注 0票数 5

不久前,我在安装NPM时注意到,当我尝试使用sudo运行他们的安装shell脚本时,它抛出了一些没有找到的命令的错误。然而,当试图运行相同的脚本,而不做,一切都像一种魅力。

我是一个新的linux用户,但据我所知,sudo的权限和visilibity是普通用户的超集。

为什么会发生这种事?

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2022-08-27 15:20:14

据我理解,sudo的权限和visilibity是正常用户的超集。

权限,是的,但不一定是可见的。应用程序的可见性由PATH环境变量控制。

代码语言:javascript
复制
~$ 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总是可以执行的,即使只对所有者执行。

票数 9
EN

Ask Ubuntu用户

发布于 2022-08-27 15:20:31

假设您想在目录脚本中运行一个文件。你会跑:

代码语言:javascript
复制
myscript.sh

剧本写得很好。但是在运行sudo之后,您得到的错误是:

代码语言:javascript
复制
sudo: myscript.sh: file not found

每当使用sudo时,它都使用根用户的路径。解决这个问题的方法是以这种方式运行命令:

代码语言:javascript
复制
sudo ./myscript.sh
票数 3
EN

Ask Ubuntu用户

发布于 2022-08-27 15:38:43

外壳(巴什等)在常规用户和sudo模式中使用不同的变量。只需通过以下步骤验证:

代码语言:javascript
复制
# Plain user
printenv > env1
# Using sudo
sudo printenv > env2
# Comparison
diff env1 env2
# Alternative comparison using the GUI tool meld
meld env1 env2

如果meld没有安装,您可以轻松安装它。非常有用。

代码语言:javascript
复制
sudo apt-get update
sudo apt-get install meld

普通用户/ sudo变量的不同内容会影响shell行为和脚本功能。

文件访问权限也不同。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1426008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档