我正在尝试使用以下命令恢复数据库:
$ sudo -u postgres pg_restore -C -d dvdrental dvdrental.tar
[sudo] password for t:
但是,我收到以下错误消息:
无法将目录更改为“/home/t/mydata/.../关系模型/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
是因为它的祖先目录之一不能被任何人读取和执行吗?该文件有许多祖先目录,我如何验证?
答案1
你可以,用户postgres
不能。
sudo -u postgres
将 user-id 更改为 postgres,然后运行命令。现在用户 postgres 无法访问输入文件,甚至当前目录。
相反,这样做:
$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar
这样,在 sudo 启动之前,文件将由您的帐户下的 shell 打开,pg_restore
然后访问标准输入上的文件内容
答案2
当前目录及其所有父目录必须可供用户访问postgres
,IE在确定 的权限时,为每个目录应用的所有者/组/其他权限设置可执行/可搜索位postgres
,或者使用 ACL 授予该权限。
要检查权限,请使用namei
:
namei -l /path/to/directory
看如何检查用户是否可以访问给定文件?了解详情。