使用Linux系统也好多年了,最近在维护一台Ubuntu服务器的时候突然发现,出于惯性思维,在使用非root账户执行”sudo cd dir”命令进入部分敏感目录时,提示”sudo: cd: command not found“,解决完之后发现非常有意思,记录下我的解决办法。
解决办法
直接说解决办法:
sudo su -
cd dir
是的,直接通过切换到root账户再执行相关的命令,可能有更好的办法,我的办法就是这么简单粗暴。
原因是sudo只能执行文件目录中实际存在的命令,cd、mv等命令比较特殊,是shell内建的命令,部分系统中并不真实存在,使用直接执行sudo cd可能会报错或者无效。
因为权限的原因,即使执行如下命令,也无法进入对于的目录:
sudo sh -c 'cd dirname'
执行完之后,发现还是在原有的目录。
额外知识
可能很多朋友也跟我一样,从学习Linux开始就知道cd、ls、mv等命令,但是从未了解过这些命令内在的一些相关知识。
用了这么多年的Linux,遇到问题,我也是出于惯性思维直接就按照以往的经验直接在命令前面加上sudo以为直接就能解决问题了,但是发现不能生效才知道Linux要学的东西还很多啊。
很多我们常用的命令,其实并不是单独安装的软件包,而是一些shell内建的命令,通过执行如下命令即可知道对应的命令是否是shell内建的命令:
zocoxx@cloudbool.com:~# type -a cd
cd is a shell builtin
甚至在部分系统,cd等命令都不是真实存在于路径中,比如说Debian 11系统:
root@cloudbool.com:~# which cd
Illegal option --
Usage: /usr/bin/which [-a] args