我想cd
进入,/var/named
但它给出了一个权限被拒绝的错误,当我想使用sudo
它来执行此操作时,却没有被允许。这背后的技术原因是什么?是否可以通过其他方式实现?
答案1
你不能这样做的原因很简单,有两个方面
1
cd
它不是一个程序,而是一个内置命令,并且sudo
仅适用于程序。
sudo foo
表示以 root 身份运行程序 foo
sudo cd /path
返回
sudo: cd: command not found
因为cd
不是一个程序。
2
如果可以使用须藤到cd
受保护的目录,然后运行该命令,sudo cd /var/named
您将作为普通用户进入该目录,但普通用户不允许进入该目录。
这不可能。
解决方法:
您可以使用sudo -i
将自己提升为超级用户。例如:
sudo -i
cd /var/named
您现在已以 root 身份登录,可以使用任何您想要的命令。输入完成后exit
,您将恢复为以普通用户身份登录。
答案2
这是因为cd
它不是一个可执行文件,而是一个用于更改目录的 shell 函数。
如果你运行:
type cd
您将获得:
cd 是一个 shell 函数
您可以使用sudo -s
打开交互式 shell,然后cd
转到所需的目录:
sudo -s
cd /var/named
要返回正常 shell,只需按Ctrl+ D。
答案3
以上所有答案都是正确的;不过这里有一个解决方法
sudo sh -c "cd restricted-dir; some_command"
答案4
如果您是 sudo 用户,您也可以暂时更改权限。
sudo chmod 0775 路径
或者
sudo chmod +r 文件夹路径
如果有必要的话请务必将其放回原处。