为什么我不能在权限被拒绝的情况下将目录更改为当前目录?

Tim*_*Tim 0 permissions files postgresql

我正在尝试使用以下命令恢复数据库:

$ sudo -u postgres pg_restore -C -d dvdrental dvdrental.tar 
[sudo] password for t: 
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息:

无法将目录更改为“/home/t/mydata/.../relation model/SQL/implementations/Implementations,即关系数据库管理系统/postgreSQL/general/web/postgresqltutorial/databases”:权限被拒绝

pg_restore: [archiver] 无法打开输入文件 "dvdrental.tar": 没有那个文件或目录

我想知道为什么我不能在权限被拒绝的情况下将目录更改为当前目录?

文件权限位是:

 -rw-rw-r-- 1 t t 2838016 May 26  2013 dvdrental.tar
Run Code Online (Sandbox Code Playgroud)

是因为它的祖先目录之一不是任何人都可读和可执行的吗?该文件有许多祖先目录,我该如何验证?

Jas*_*sen 5

你可以,用户postgres不能。

sudo -u postgres 将用户 ID 更改为 postgres,然后运行命令。现在用户 postgres 无法访问输入文件,甚至无法访问当前目录。

相反,这样做:

$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar 
Run Code Online (Sandbox Code Playgroud)

这样,文件在 sudo 启动之前由您的帐户下的 shell 打开,pg_restore然后在标准输入上访问文件内容