无法将输出重定向到/ var/lib/varlibfile,但我可以将varlib文件复制到/ var/lib

2 linux bash

我有一个以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/
Run Code Online (Sandbox Code Playgroud)

换句话说,我能够在/ 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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?以及如何解决这个问题,理想情况下我想直接编写/ var/lib/varfile,而不需要在其他位置创建任何文件.

dF.*_*dF. 10

什么

$ sudo echo something >/var/lib/varlibfile
Run Code Online (Sandbox Code Playgroud)

是,将" sudo echo something" 的输出传递给文件.因此,文件写入操作以当前用户身份完成,该用户无权写入/var/lib.

尝试类似的东西

$ sudo sh -c "echo something >/var/lib/varlibfile"  
Run Code Online (Sandbox Code Playgroud)

要么

$ echo something | sudo tee /var/lib/varlibfile
Run Code Online (Sandbox Code Playgroud)