“sudo cd ……”单行?

偶尔我想要进入我的用户没有权限的目录,所以我求助于sudo

显而易见的命令sudo cd somedir不起作用:

 $ sudo mkdir test $ sudo chmod go-rxw test $ ls -l drwx------ 2 root root [...snip...] test $ cd test -bash: cd: test: Permission denied $ sudo cd test sudo: cd: command not found 

使用sudo su作品:

 $ sudo su # cd test 

是否有可能将其变成单线? (没什么大不了的,只是空闲的好奇心:)

我试过的变化不起作用:

 $ sudo "cd test" sudo: cd: command not found $ sudo -i cd test -bash: line 0: cd: test: No such file or directory $ sudo -s cd test 

最后一个没有给出错误,但它在一个新的shell中退出,该行退出该行的末尾,所以它实际上并没有带我到任何地方。

有人可以告诉我为什么会这样吗? 为什么没有找到sudo cd ,例如sudo ls ...工作正常?

从理论上讲,问题是如果您没有目录的执行权限,则无法读取目录的内容。 现在假设你可以做你想做的事:

 user@desktop:/$ sudo cd restricted-dir user@desktop:/restricted-dir$ ls file1 file2 

如您所见,您使用sudo权限进入目录,然后,当sudo返回时,您再次成为用户,并且您位于通常不应该访问的目录中。

从技术上讲,问题如下。

 sudo cd restricted-dir 

cd是内置的shell,而不是命令。

 sudo cd -i restricted-dir 

你可能在/ root中,但它会遇到与下一个问题相同的问题。

 sudo cd -s restricted-dir 

你打开一个新的root shell,cd进入该目录,然后退出root shell,然后返回到你开始的地方。

总而言之,唯一的解决方案是在您进入该目录时打开root shell并保持打开状态。

 sudo sh -c "cd restricted-dir; some-other-command" 

 sudo sh -c "cd /root/restricted-dir; ls -l" 

关键部分是“sh -c”,我经常使用它来在同一个shell上下文/进程中运行一系列命令。