【问题标题】:Can't redirect output to /var/lib/varlibfile, but I can copy a varlibfile to /var/lib无法将输出重定向到 /var/lib/varlibfile,但我可以将 varlibfile 复制到 /var/lib
【发布时间】:2009-05-16 17:32:09
【问题描述】:

我有一个以 root 身份运行的脚本,它应该将它的缓存文件(仅由脚本修改)存储在 /var/lib/varlibfile 中。但是脚本似乎没有创建文件,我的调查导致我这样做:

$ sudo echo "something" >/var/lib/varlibfile
bash: /var/lib/varlibfile: Permission denied
$ sudo echo "something" >varlibfile
$ sudo cp varlibfile /var/lib/

换句话说,我可以在 /var/lib 中创建一个名为 varlibfile 的文件,但我不能使用重定向来创建它。只有文件副本有效。这对我来说似乎很奇怪,我想直接使用重定向到预期的文件,而不是在其他地方创建它然后复制它。

一些额外的信息:

$ ls -ld /var
drwxr-xr-x 14 root root 4096 2009-03-02 14:47 /var
$ ls -ld /var/lib
drwxr-xr-x 51 root root 4096 2009-05-16 19:25 /var/lib
$ ls -la /var/lib/ | head
total 204
drwxr-xr-x  51 root          root          4096 2009-05-16 19:25 .
drwxr-xr-x  14 root          root          4096 2009-03-02 14:47 ..
drwxr-xr-x   2 root          root          4096 2009-03-02 14:22 acpi-support
drwxr-xr-x   2 root          root          4096 2009-03-02 14:39 alsa
drwxr-xr-x   2 root          root          4096 2009-05-14 14:42 apparmor
drwxr-xr-x   6 root          root          4096 2009-05-14 14:42 apt
drwxr-xr-x   2 root          root          4096 2008-04-04 11:56 aptitude
drwxr-xr-x   2 root          root          4096 2008-07-02 12:58 aspell
drwxr-xr-x   2 avahi-autoipd avahi-autoipd 4096 2009-03-05 16:42 avahi-autoipd

谁能解释为什么会这样?以及如何解决这个问题,理想情况下我想直接写 /var/lib/varfile 而不在其他位置创建任何先前的内容。

【问题讨论】:

  • 这是在启用 SELinux 的 linux 系统上运行的吗?

标签: linux bash


【解决方案1】:

什么

$ sudo echo something >/var/lib/varlibfile

确实,是将“sudo echo something”的输出通过管道传输到文件中。所以文件写入操作是以当前用户身份完成的,在/var/lib中没有写入权限。

试试类似的东西

$ sudo sh -c "echo something >/var/lib/varlibfile"  

$ echo something | sudo tee /var/lib/varlibfile

【讨论】:

  • +1。有些人似乎真的忘记了进行重定向的是shell,而不是他们启动的程序:)
  • 是的,就像我一样! :-) 至少 me.knowledge++ 所以希望从现在起我会记住它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2023-04-05
  • 2012-09-21
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多