2009-05-16 6 views
2

私はルートとして実行しているスクリプトを持っています。 )/ var/lib/varlibfileにあります。スクリプトは、ファイルを作成していないようだ、と私の調査はこれに私を導いしかし:つまり出力を/ var/lib/varlibfileにリダイレクトすることはできませんが、varlibfileを/ var/libにコピーすることができます

$ 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 

+1

のようなものを試してみてください?そのためには – Allen

答えて

10

は、パイプは、ファイルへの "sudo echo something" の出力です。したがって、ファイル書き込み操作は現在のユーザーとして実行されます。ユーザーは/var/libに書き込み権限がありません。

が有効になってSELinuxを持つLinuxシステム上で実行されている。この

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

または

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

+1。何人かの人々は実際にはリダイレクトを行うシェルであることを忘れているのではなく、起動するプログラムではありません:) – TheBonsai

+0

はい、私のようです! :-)少なくともme.knowledge ++だからうまくいけば、今からそれを覚えています。 –

関連する問題