вихід хвостової програми до файлу в Linux


9

Я знаю, що ми можемо використовувати нижче формат, щоб перенаправити вихідний екран на файл:

$ your_program > /tmp/output.txt

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

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

Чи можу я знати, як зробити так, щоб цей результат працював? ~ / Errors.txt не існує. Чи потрібно мені створити цей файл txt спочатку, перш ніж використовувати команду переадресації?


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?
Ansgar Esztermann

$ HOME не встановлено NFS.
Xianlin

6

Коли ви пишете sudo somecommand > ~/errors.txt, оболонка, яка викликає sudo(і працює як ви), - це та, яка виконує перенаправлення та відкриття ~/errors.txt. Див. Розділ Перенаправлення stdout на файл, на який у вас немає дозволу на запис . Зазвичай проблема в цьому випадку полягає в тому, що ви хочете, щоб 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.