вывод хвостовой программы в файл в Linux


9

Я знаю, что мы можем использовать следующий формат для перенаправления вывода экрана в файл:

$ your_program > /tmp/output.txt

Однако, когда я использовал приведенную ниже команду, она говорит : «-bash: /home/user/errors.txt: В доступе отказано»

sudo tail /var/log/apache2/error.log > ~/errors.txt

Могу ли я узнать, как заставить работать этот вывод? Файл ~ / errors.txt не существует. Нужно ли создавать этот текстовый файл перед использованием команды redirect?


1
Что произойдет, если вы печатаете echo hi > ~/errors.txt? Является ли /home/userваш правильный каталог дома (или же каким - то образом Баш запутаться о том, где ваш домашний каталог)?
— CJM

Является ли userпользователь, запускающий команду?
— пользователь неизвестен

да, пользователь является пользователем, который запускает команду
— Xianlin

Это нормальное поведение для sudo. sudoне разрешает перенаправление. слишком много способов, которыми люди могли бы использовать это, чтобы делать непослушные вещи, не включенные в sudoers.confфайл. В качестве альтернативы, вы можете запустить sudo bash -c "tail /var/log/apache2/error.log > ~/errors.txt"очистку конца error.log к файлу в вашей домашней директории.
— Тим Кеннеди

Ответы:


17

За трубой судо не работает. Я не знаю, почему вы не можете написать у себя дома - возможно, файл принадлежит root?

 sudo tail /var/log/apache2/error.log | sudo tee ~/errors.txt

Может быть, вам нужен другой пользователь позади трубы. Конечно, вам не нужен существующий файл.


Да, это сработало ...
— Xianlin

Что касается проблемы с разрешениями, может быть, $ HOME монтируется по NFS с rootquash?
— Ансгар Эстерманн

$ HOME не смонтирован по NFS.
— Xianlin

6

Когда вы пишете sudo somecommand > ~/errors.txt, оболочка, которая вызывает sudo(и работает как вы), выполняет перенаправление и открытие ~/errors.txt. См. Перенаправление stdout в файл, для которого у вас нет разрешения на запись . Обычно проблема в этом случае заключается в том, что вы хотите, чтобы root записывал в файл; см. связанный вопрос для способов сделать это.

Здесь странно, что вы не можете записать файл в свой домашний каталог. Скорее всего, вы ранее сохранили какой-то вывод как root /home/user/errors.txt, и этот файл теперь существует и принадлежит root. Удалите файл (вы можете сделать это, если у вас есть разрешение на запись /home/user, и тогда вы сможете создать его как своего пользователя.

rm ~/errors.txt
sudo tail /var/log/apache2/error.log > ~/errors.txt

Если файл действительно не существует, то у вас нет разрешения на запись в домашний каталог. Хотя это технически возможно и иногда полезно для некоторых пользователей с ограниченными правами, это очень необычно.


Я попытался удалить '/home/user/errors.txt' и использовать указанную выше команду. Это не сработало, все еще запрещают мне писать в домашний каталог. В любом случае, я думаю, что предоставленная вами ссылка может быть использована в качестве моего решения. Это так же, как первый ответ в этом посте. Однако вы дали некоторые подробные объяснения о перенаправлении stdout в файл, и я благодарю вас за это.
— Xianlin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.