我的 NAS 驱动器装载器上有一个 Samba 共享,如下所示:
mount -t smbfs -o username=backup,password=backups_password //sharebox/SVNBackup /mnt/SVNBackup
然后我尝试运行:
sudo svnadmin dump /usr/local/svn/repos/testrepo > /mnt/SVNBackup/test1.svn
但我得到:
bash:/mnt/SVNBackup/test1.svn:权限被拒绝
备份位置设置为仅接受来自用户“备份”(本地系统上不存在)的访问
我该如何解决这个问题?谢谢
答案1
sudo command > outputfile
并没有像你想象的那样。具体来说,输出文件是用你的权限,而不是 sudo 用户(在本例中为 root)的权限。这就是为什么当您成为 root 并运行命令时它会起作用的原因 - 因为重定向确实以 root 身份运行,而 root 可以写入 /mnt/SVNBackup 。sudo 这样做是必要且明智的。
找到以 root 身份运行整个命令的方法;将其放入 root 的 cron 中,或者编写一行 shell 脚本并调用那使用 sudo,或者找到另一个适合你的修复方法。在有限(且有点愚蠢)的情况下,
sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn
应该产生输出两个都在标准输出上和在文件中/mnt/SVNBackup/test1.svn
。虽然这看起来很奇怪,但如果你真的不想要输出,最简单的方法可能是
sudo svnadmin dump /usr/local/svn/repos/testrepo | sudo tee /mnt/SVNBackup/test1.svn > /dev/null
如果原始 svnadmin 命令在 STDERR 上生成了内容,并且你也希望将其显示在日志文件中,请尝试
sudo svnadmin dump /usr/local/svn/repos/testrepo 2>&1 | sudo tee /mnt/SVNBackup/test1.svn > /dev/null
请注意,这2>&1
是一个 bash 公式,如果您的 shell 是 csh 变体,或者是其他不同的东西,那么您将需要找到合适的东西。