尾程序输出到Linux中的文件


9

我知道我们可以使用以下格式将屏幕输出重定向到文件:

$ your_program > /tmp/output.txt

但是,当我使用下面的命令时,它显示“ -bash:/home/user/errors.txt:权限被拒绝”

sudo tail /var/log/apache2/error.log > ~/errors.txt

我可以知道如何使此输出有效吗?〜/ errors.txt不存在。使用重定向命令之前是否需要先创建此txt文件?


1
如果输入会echo hi > ~/errors.txt怎样?/home/user您的主目录是否正确(或者bash 是否对您的主目录感到困惑)?
cjm 2012年

user运行命令的用户吗?
用户未知

是的,用户是运行命令的用户
Xianlin 2012年

这是的正常行为sudosudo不允许重定向。人们有太多的方式可以使用它来执行sudoers.conf文件中未包含的顽皮的事情。作为替代方案,您可以sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"尝试将errors.log的结尾爬到主目录中的文件中。
蒂姆·肯尼迪

Answers:


17

在管道后面,sudo不起作用。我不知道您为什么不能写到家庭中-也许该文件属于root?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

也许您在管道后面需要其他用户。当然,您不需要预先存在的文件。


是的,那行得通...
仙林2012年

至于权限问题,也许$ HOME是用rootsquash安装在NFS上的?
Ansgar Esztermann 2012年

$ HOME未安装NFS。
仙林2012年

6

在编写时sudo somecommand > ~/errors.txt,正在调用的shell sudo(并正在按您的方式运行)是执行重定向和open 的shell ~/errors.txt。请参阅将stdout重定向到您没有写入权限的文件。通常,在这种情况下,问题是您希望root用户将其写入文件。请参阅链接的问题以了解执行此操作的方法。

在这里,奇怪的是您无法写入主目录中的文件。可能您以前曾将某些输出另存为root /home/user/errors.txt,并且该文件现在存在并属于root。删除文件(只要您具有对的写入权限,就可以执行此操作/home/user,然后您就可以以用户身份创建该文件。

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

如果该文件确实不存在,那么您的主目录中没有写许可权。尽管在技术上是可行的,并且偶尔对某些受限用户有用,但这是非常不寻常的。


我尝试删除'/home/user/errors.txt'并使用您上面的命令。它没有用,仍然禁止我写入主目录。无论如何,我想您提供的链接可以用作我的解决方案。与这篇文章中的第一个答案相同。但是,您已经对将stdout重定向到文件给出了一些详细的说明,对此我非常感谢。
仙林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.