Не могу перенаправить вывод в / var / lib / varlibfile, но я могу скопировать файл varlibfile в / var / lib - PullRequest
2 голосов
/ 16 мая 2009

У меня есть скрипт, который запускается от имени 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/

Другими словами, я могу создать файл с именем varlibfile в / var / lib, но мне не разрешено создавать его с помощью перенаправления. Работает только копия файла. Мне это кажется очень странным, и я хотел бы использовать перенаправление непосредственно к намеченному файлу, а не создавать его где-то еще, а затем копировать.

Некоторая дополнительная информация:

$ 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 напрямую, без какого-либо предыдущего создания в другом месте.

1 Ответ

10 голосов
/ 16 мая 2009

Что

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...