我有一个以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而不在任何其他位置进行先前的创建。

最佳答案

什么

$ 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

关于linux - 无法将输出重定向到/var/lib/varlibfile,但是我可以将varlibfile复制到/var/lib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/872860/

10-10 17:51