有时我想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
最后一个没有给出错误,但是它 cd 位于一个在行末退出的新 shell 中,所以它实际上并没有带我去任何地方。
有人能告诉我为什么会发生这种情况吗?为什么找不到sudo cd
,例如sudo ls ...
工作正常?
答案1
理论上,问题在于如果你没有目录的执行权限,你就无法读取目录的内容。现在假设你可以做你想做的事情:
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 并在该目录中保持其打开。
答案2
sudo sh -c "cd restricted-dir; some-other-command"
IE
sudo sh -c "cd /root/restricted-dir; ls -l"
关键部分是“sh -c”,我经常使用它在同一个 shell 上下文/进程中运行一系列命令。