
Я знаю, что мы можем использовать следующий формат для перенаправления вывода экрана в файл:
$ 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
Если файл действительно не существует, то у вас нет разрешения на запись в вашем домашнем каталоге. Хотя технически это возможно и иногда полезно для некоторых ограниченных пользователей, это очень необычно.