Linux sudo一些命令出现 command not found 的原因

原创 2016年06月01日 21:54:18

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

$ sudo cd ~
sudo: cd: command not found

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

这里首先插一句:

一个命令是 Linux 内置系统命令还是 shell 内置命令的判断依据,可通过 type 命令进行判断:

$ type cd
cd is a shell builtin
$ man cd
No manual entry for cd
$ sudo cd ~
sudo: cd: command not found

$ type cp
cp is /bin/cp
$ sudo cp 

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

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

$ sudo cd ~

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

  1. Linux下执行一些命令前加sudo时出现command not found的原因
版权声明:本文为博主原创文章,未经博主允许不得转载。

Ubuntu解决sudo: source: command not found错误

Ubuntu解决sudo: source: command not found错误作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs在Ubuntu Serve...
  • chszs
  • chszs
  • 2014年03月13日 11:29
  • 42659

CentOS下yum安装、源的选择及介绍。 yum command not found

在wget rpm时会出现404,那是因为包地址过期了,可访问   http://mirrors.163.com/centos/6/os/x86_64/Packages/。镜像地址找到对应的包下载就可...
  • lizexingSpark
  • lizexingSpark
  • 2017年03月02日 10:40
  • 978

-bash: yum: command not found 问题解决

操作系统是centos5.6 x86_64,不同的机器已安装的包有所区别,关键是掌握方法。 1下载yum的rpm安装包  [root@localhost rpm]# wget http://mir...
  • gg296231363
  • gg296231363
  • 2011年11月30日 16:24
  • 80895

Ubuntu解决sudo: source: command not found错误

$ sudo -s
  • u012793120
  • u012793120
  • 2016年11月14日 18:15
  • 1876

Ubuntu解决sudo: source: command not found错误

sudo -s source filename
  • liuhu767
  • liuhu767
  • 2016年12月13日 12:59
  • 644

sudo: cd: command not found

事件起因今天忽然发现的一个问题,执行sudo cd 时出现sudo: cd: command not found原因shellshell是一个命令解析器所谓shell是一个交互式的应用程序。shell...
  • gatieme
  • gatieme
  • 2015年10月13日 23:21
  • 4273

执行sudo命令时command not found的解决办法

问题的原因: 在编译sudo包的时候默认开启了- -with-secure-path选项。  方法1: 在/etc/sudoers文件内增加这么一行:Defaults secure_path=”...
  • xueli1991
  • xueli1991
  • 2017年05月31日 11:33
  • 5711

/bin/bash: bison: command not found

/bin/bash: bison: command not found
  • jhope
  • jhope
  • 2016年11月09日 16:48
  • 1160

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

转载请注明来自“柳大的CSDN博客”:http://blog.csdn.net/poechant     当我们用sudo来执行cd、ls等命令时,会出现command not found的...
  • Poechant
  • Poechant
  • 2012年01月28日 17:00
  • 47672

更新hosts,sudo:无法解析主机,rcnscd: command not found

修改hosts后 无法解析主机,sudo:rcnscd: command not found
  • yufenghyc
  • yufenghyc
  • 2016年01月05日 15:28
  • 11606
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux sudo一些命令出现 command not found 的原因
举报原因:
原因补充:

(最多只允许输入30个字)