вывод программы tail в файл в Linux

вывод программы tail в файл в Linux

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

$ your_program > /tmp/output.txt

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

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

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

решение1

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

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

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

решение2

Когда вы пишете 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

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

Связанный контент