Linux下执行一些命令前加sudo时出现command not found的原因

转载请注明来自“柳大的优快云博客”:http://blog.youkuaiyun.com/poechant


    当我们用sudo来执行cd、ls等命令时,会出现command not found的提示:

sudo cd /home/michael
sudo: command not found

    我们知道在执行Linux命令时,如果在其前面加上sudo,就表示以root权限执行。但是这其实是有一个前提的,就是只有那些Linux内置系统命令才可以用如此的形式来执行,而对于Shell内置命令或其他用户自定义命令、别名等,是不能用sudo来使用root权限的。为什么呢?详细说一下sudo幕后隐藏的过程才能明白。


    因为当在Linux下用sudo执行某一命令时,是在原进程(parent process)的基础上fork出来一个子进程(child process),这个子进程是以root权限执行的。然后在子进程中,执行你在sudo后面跟的命令。


    在子进程中是无法调用涉及到父进程的状态的一些命令的,所以非系统内置命令会被拒绝。这就是为什么会出现command not found的提示。具体来说,当我们执行:

sudo cd /home/michael

    所在这个shell进程中(称其为PP,表示parent process)fork出一个子进程(称其为CP,表示child process),那么在CP中是无法改变PP的所在目录的。

sudo ls /home/michael

    sudo后由PP产生了CP,CP是无法获取PP所在的目录的内容的(具体来说,是读取该目录的block data,可详见《柳大的Linux游记·基础篇(2)Linux文件系统的inode》一文)。


转载请注明来自“柳大的优快云博客”:http://blog.youkuaiyun.com/poechant

-

### 解决 `sudo` 和 `yum` 命令未找到的问题 #### 1. 系统环境确认 在解决问题之,需先确认当使用的 Linux 发行版及其包管理工具。如果是基于 **RedHat** 的发行版(如 CentOS),则默认使用的是 `yum` 而不是 `apt-get`[^2]。 如果尝试执行 `sudo yum command not found`,可能是因为以下两种原因之一: - 系统尚未安装 `sudo` 工具。 - 系统尚未安装 `yum` 工具。 --- #### 2. 安装 `sudo` 当系统提示 `sudo: command not found` ,表明该系统的 `sudo` 功能未被安装或配置。可以通过以下方式解决: 对于基于 Debian 的系统(如 Ubuntu),可以使用以下命令来安装 `sudo`: ```bash apt-get install sudo ``` 而对于基于 RedHat 的系统(如 CentOS),由于此无法直接使用 `sudo`,需要切换至 root 用户并手动安装 `sudo`: ```bash su - yum install sudo ``` 上述操作会以管理员权限完成 `sudo` 的安装过程[^1]。 --- #### 3. 安装 `yum` 如果系统提示 `-bash: yum: command not found`,这通常意味着 `yum` 包管理器本身缺失或者路径设置错误。以下是具体修复步骤: ##### 方法一:通过 RPM 手动安装 YUM 下载适合版本的 `yum` RPM 文件,并强制安装它: ```bash rpm -ivh --force --nodeps yum-<version>.el7.centos.noarch.rpm ``` 其中 `<version>` 是具体的版本号,可以根据实际需求替换为对应文件名[^3]。 ##### 方法二:重新初始化 YUM 配置 有可能是 YUM 插件或其他依赖损坏所致,可尝试清理缓存后再重试: ```bash rm -rf /var/cache/yum/* yum clean all yum makecache ``` --- #### 4. 权限问题排查 即使成功安装了 `sudo` 和 `yum`,仍可能出现因用户权限不足而导致的操作失败情况。确保当登录账户已被入到 `/etc/sudoers` 文件中的允许列表里。可通过编辑此文件实现: ```bash visudo ``` 然后添类似下面的一行内容授权给指定用户: ```plaintext username ALL=(ALL) NOPASSWD:ALL ``` --- #### 示例脚本验证流程 为了方便测试整个恢复过程是否正常工作,这里提供一段简单的 Shell 测试代码片段供参考: ```bash #!/bin/bash if ! type "sudo" > /dev/null; then echo "[ERROR] Sudo is missing!" exit 1 fi if ! type "yum" > /dev/null; then echo "[ERROR] Yum is missing!" exit 1 else echo "[INFO] Both commands are available." fi ``` --- ### 总结 综上所述,针对 `sudo yum command not found` 错误的主要处理思路包括检查基础服务是否存在以及适当调整访问控制策略两方面入手。最终目的是让目标主机能够正常使用标准包管理和提权机制开展后续运维活动。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值