我知道我们可以使用以下格式将屏幕输出重定向到文件:
$ your_program > /tmp/output.txt
但是当我使用下面的命令时,它说“-bash:/home/user/errors.txt:权限被拒绝”
sudo tail /var/log/apache2/error.log > ~/errors.txt
我可以知道如何使这个输出起作用吗? ~/errors.txt 不存在。在使用重定向命令之前是否需要先创建此 txt 文件?
答案1
在管道后面,sudo 不起作用。我不知道为什么你不能写入你的家 - 也许该文件属于 root?
sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt
也许您需要管道后面的不同用户。当然,您不需要预先存在的文件。
答案2
当您编写 时sudo somecommand > ~/errors.txt
,正在调用(并与您一起运行)的 shellsudo
是执行重定向和打开 的 shell ~/errors.txt
。看将标准输出重定向到您没有写入权限的文件。通常这种情况下的问题是您希望 root 写入该文件;请参阅链接的问题以了解执行此操作的方法。
在这里,奇怪的是您无法写入主目录中的文件。有可能您之前将一些输出保存为 root 中的文件/home/user/errors.txt
,并且该文件现在存在并且属于 root。删除该文件(只要您具有 的写入权限,就可以执行此操作/home/user
,然后您就可以以您的用户身份创建它。
rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt
如果该文件确实不存在,那么您在主目录中没有写权限。虽然技术上可行,而且实际上偶尔对某些受限用户有用,但这是非常不寻常的。