最近有朋友问我,为什么sudo cd 和sudo ll登录命令有如下提示:

 sudo: ll: command not found
 sudo: cd: command not found

 

而运行其他命令,如sudo ls等即可正常运行。

 

简单的来说,可以这样理解,sudo只能执行系统自带命令,而不能执行其他程序所带的命令。如ll、cd等均是shell所带的。

sudo 是一种程序,用于提升用户的权限,在linux中输入sodu就是调用这个程序提升权限,shell是一个命令解析器,sudo cd是错误的,因为cd是shell内置的,不是系统里面的,sudo可以运行系统带的命令,但无法用系统中一个软件中的命令。

cd是shell的内部命令。所谓shell是一个交互式的应用程序。shell执行外部命令的 时候,是通过fork/exec叉一个子进程,然后执行这个程序。sudo的意思是,以别人的权限叉起一个进程,并运行程序。而cd是内部命令,也就是说,是直接由shell运行的,不叉子进程。你在当前进程里当然不能提升进程的权限(其实也可以,不过得编程的时候写到代码里,然后再编译,而我们的 shell没有这个功能,否则岂不是太危险了?)