使用 sudo 时未找到命令

2024-10-14 08:40:00
admin
原创
232
摘要:问题描述:我的主文件夹中有一个名为的脚本foo.sh。当我导航到该文件夹​​并输入时./foo.sh,我得到-bash: ./foo.sh: Permission denied。当我使用时sudo ./foo.sh,我得到sudo: foo.sh: command not found。为什么会发生这种情况?我...

问题描述:

我的主文件夹中有一个名为的脚本foo.sh

当我导航到该文件夹​​并输入时./foo.sh,我得到

-bash: ./foo.sh: Permission denied

当我使用时sudo ./foo.sh,我得到

sudo: foo.sh: command not found

为什么会发生这种情况?我该如何解决?


解决方案 1:

没有权限

为了运行脚本,文件必须设置可执行权限位

为了充分了解 Linux文件权限,您可以研究该命令的文档chmod。chmod是change mode的缩写,是用于更改文件权限设置的命令。

要阅读本地系统的 chmod 文档,请从命令行运行man chmodinfo chmod。阅读并理解后,您应该能够理解运行的输出...

ls -l foo.sh

...它将列出文件所有者、组所有者以及文件所有者或文件所属组成员以外的所有人的读、写和执行权限(最后一个权限组有时称为“世界”或“其他”)

以下是针对您的情况如何解决权限被拒绝错误的摘要。

$ ls -l foo.sh                    # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh 
    ^^^ 
 ^^^ | ^^^   ^^^^^^^ ^^^^^
  |  |  |       |       | 
Owner| World    |       |
     |          |    Name of
   Group        |     Group
             Name of 
              Owner 

所有者具有读写权限 rw,但 - 表示缺少可执行权限

chmod命令修复了这个问题。(组和其他人只对文件设置了读取权限,他们不能写入或执行它)

$ chmod +x foo.sh               # The owner can set the executable permission on foo.sh
$ ls -l foo.sh                  # Now we see an x after the rw 
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
   ^  ^  ^

就 Linux 而言,foo.sh 现在是可执行的。

使用 sudo 导致命令未找到

当您使用sudo运行命令时,您实际上是以超级用户或 root 身份运行该命令。

root 用户找不到您的命令的原因可能是PATHroot 的环境变量不包含所在的目录foo.sh。因此找不到该命令。

PATH 环境变量包含用于搜索命令的目录列表。每个用户都可以根据自己的需要设置自己的 PATH 变量。要查看它设置为运行什么

env | grep ^PATH

下面是env首先以普通用户身份运行上述命令,然后使用 sudo 以 root 用户身份运行上述命令的一些示例输出

rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty: 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

请注意,尽管类似,但在这种情况下非特权用户(rkielty)和超级用户的 PATH 中包含的目录并不相同

所在目录foo.sh不在 root 用户的 PATH 变量中,因此出现命令未找到错误。

解决方案 2:

到目前为止,我在这里看到的其他解决方案都是基于一些系统定义,但实际上只要正确调用它就可以sudo使用当前环境PATH(使用env命令)和/或其余环境(使用选项):-E

sudo -E env "PATH=$PATH" <command> [arguments]

事实上,我们可以用它创建一个别名:

alias mysudo='sudo -E env "PATH=$PATH"'

(也可以直接命名别名sudo,替换原来的sudo。)

解决方案 3:

检查sudo 上的secure_path

[root@host ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

如果$PATH被覆盖使用visudo和编辑/etc/sudoers

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

解决方案 4:

  1. 检查您是否具有该脚本的执行权限。即chmod +x foo.sh

  2. 检查该脚本的第一行是否是#!/bin/sh或类似内容。

  3. 对于 sudo,你位于错误的目录中。请检查sudo pwd

解决方案 5:

您还可以在超级用户 PATH 中的一个目录 (/usr/local/bin例如 ) 中创建指向脚本的软链接。然后它将可供 sudo 使用。

chmod +x foo.sh
sudo ln -s path-to-foo.sh /usr/local/bin/foo

看一下这个答案,了解应该将软链接放在哪个目录中。

解决方案 6:

即使你明确给出了文件的路径,linux 似乎也会说“未找到命令”。

[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
sudo: /tmp/uid.sh: command not found
1
[veeam@jsandbox ~]$ chmod +x /tmp/uid.sh
[veeam@jsandbox ~]$ sudo /tmp/uid.sh;echo $?
0

这是一个有点误导性的错误,但从技术上来说可能是正确的。文件只有在可执行时才是一个命令,因此无法找到。

解决方案 7:

如果您在使用上述指南时遇到问题,请尝试使用chmod u+x foo.shchmod +x foo.sh当其他解决方案不起作用时,这种方法对我有用。

解决方案 8:

关于使用 sudo 时出现“未找到命令”的更简单的方法是编辑 secure_path。

这里完美地描述了:
https: //superuser.com/questions/927512/how-to-set-path-for-sudo-commands

解决方案 9:

好的,这是我的解决方案:在 ~/.bash_aliases 中只需添加以下内容:

# ADDS MY PATH WHEN SET AS ROOT
if [ $(id -u) = "0" ]; then
   export PATH=$PATH:/home/your_user/bin 
fi

瞧!现在您可以使用 sudo 执行自己的脚本或设置为 ROOT,而不必每次都执行 export PATH=$PATH:/home/your_user/bin。

请注意,添加 PATH 时需要明确,因为超级用户的 HOME 是 /root

解决方案 10:

如果您对命令行不太熟悉并且正在使用Ubuntu,您可以按如下方式解决问题:

  1. 打开文件所在文件夹窗口

  2. 右键单击可执行文件并选择Properties

  3. 转到Permissions标签并突出显示Allow executing file as program

在此处输入图片描述

通过此解决方案,您可以允许用户将文件作为程序执行,并且不需要 sudo(或更改PATHroot 的环境变量)。

解决方案 11:

好像sudo没有找到命令
要检查你的系统上是否安装了 sudo 包,请输入sudo,然后按 Enter 。如果你已经sudo安装,系统将显示一条简短的帮助消息,否则你会看到类似的内容sudo: command not found

要安装 sudo,请使用 root 帐户运行以下命令之一:

apt-get install sudo # 如果你的系统基于 apt 包管理器

yum install sudo # 如果你的系统基于 yum 包管理器

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2588  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1553  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   31  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   26  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   21  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用