在ubuntu中使用如下命令:
cd是shell内置的,不是普通的命令,所以不能通过sudo运行
如果确实需要运行cd,可以先输入sudo -s,然后就可以运行cd了,不过发现变成root@hostname了,也就是说变成root登陆了。
引用一段比较好的英文解释
cdis a shell built-in command. it cannot be run in a child process. the child process simply cannot change the working directory of its parent shell process.
redirection also does not work with sudo for the same reason (redirection being a shell "thing")
sudo 'ls /root/restricted >/root/out.txt'
sudo: ls /root/restricted >/root/out.txt: command not found
注:sudo 是一种程序,用于提升用户的权限,在linux中输入sodu就是调用这个程序提升权限,shell是一个命令解析器,sudo cd是错误的,因为cd是shell内置的,不是系统里面的,sudo可以运行系统带的命令,但无法用系统中一个软件中的命令。
cd是shell的内部命令。所谓shell是一个交互式的应用程序。shell执行外部命令的 时候,是通过fork/exec叉一个子进程,然后执行这个程序。
sudo(相关阅读:linux sudo入门教程) 的意思是,以别人的权限叉起一个进程,并运行程序。而cd是内部命令,也就是说,是直接由shell运行的,不插子进程。
在当前进程里当然不能提升进程的权限(其实也可以,不过得编程时写到代码里,然后再编译,而shell没有这个功能。)