Я запускаю приложение, которое пишет в log.txt. Приложение было обновлено до новой версии, благодаря чему поддерживаемые плагины перестали быть совместимыми. Он вызывает огромное количество ошибок в log.txt и не поддерживает запись в другой файл журнала.
Как я могу записать их в другой журнал?
Я подумал о замене файла log.txt жесткой ссылкой (приложение не может определить разницу, верно?) Или жесткой ссылкой, указывающей на / dev / null. Какие у меня варианты?
chmod -w log.txt
?Ответы:
Это копирует ваше нулевое устройство с правильными старшими и младшими номерами разработчиков,
log.txt
чтобы у вас было другоеnull
.Устройства вообще не известны по имени в ядре, а по их старшим и младшим номерам. Поскольку я не знаю, какая у вас ОС, мне было удобно просто скопировать числа, откуда мы уже знаем, что они есть. Если вы сделаете это с неправильными старшими и младшими номерами, вы, скорее всего, сделали бы какое-то другое устройство, возможно, диск или что-то еще, что вы не хотите записывать.
источник
sudo
(или работает от имени пользователя root). Пожалуйста, объясните (в своем ответе), что вы подразумеваете под "правильными номерами старших и младших разработчиков"./dev/null
, как используется в вашей команде. И я думаю, что это поможет будущим читателям отметить в вашем ответе, чтоsudo
требуется.cp -a /dev/null log.txt
и мои комментарии?sudo
чтобы выполнить эту команду, если не случится быть запущен как пользовательroot
(который , как правило , не рекомендуется). Использованиеsudo
(или запуск от имениroot
) для создания жесткой ссылки (этот ответ) или символической ссылки (ответ @ V.Michel) может быть правильным решением в конце концов, если файл должен быть расположен в месте, в которое любая учетная запись пользователя может писать, но дело в том: обратите внимание на это требование явно.mknod
. Обратите внимание, что комментариям обычно уделяется мало внимания, поэтому кто-то читает только вопрос, а затем ваш ответ может быть сбит с толку (как и я; также обратите внимание, что большинство людей никогда не сталкиваются с такими понятиями, как основные и второстепенные номера устройств).Вы можете сделать символическую ссылку на / dev / null, и вам не нужно быть пользователем root:
источник
ls -l log.txt
показывает, что это символическая ссылка на / dev / null, а не полагается на знание того, что, например, «1, 3» имеет какое-то значение.Другие ответы здесь, вероятно, будут работать. В частности, решение по символической ссылке, вероятно, будет самым простым решением. Я предлагаю это в основном для полноты.
Решения с участием
mknod
(илиcp -a
) становятся проблематичными, если файловая система, содержащая файл, не поддерживает устройства (например, она была смонтирована сnodev
опцией, например). И, конечно, жесткие ссылки между файловыми системами просто не будут работать.Альтернативой жестким ссылкам или созданию новых узлов устройств является использование привязок, которые позволяют монтировать файл или каталог из одной части дерева вашей файловой системы в другую. Так, например, вы можете запустить:
Это действует как жесткая ссылка, но:
Для полного примера:
источник
nodev
файловой системе.Это критически зависит от того, КАК приложение обрабатывает log.txt.
Если приложение просто открывает существующий файл и записывает в него, то, как описано в других ответах, вы можете создать символическую ссылку на / dev / null, символическую ссылку где-нибудь еще, жесткую ссылку где-то еще (хотя жесткие ссылки не могут быть кросс-файловой системой, поэтому нет ' в этом много смысла) создайте копию узла устройства / dev / null и т. д.
OTOH, если приложение удаляет и воссоздает log.txt, все это не будет работать. Вы можете создать символическую ссылку на весь каталог где-нибудь еще, чтобы перенаправить записи в другую файловую систему, но это все, и вам придется иметь дело с другими вещами в каталоге.
Я думаю, если бы вы действительно хотели, вы могли бы создать пользовательскую оверлейную файловую систему, которая бы выполняла большинство операций, одновременно отбрасывая любые попытки создать файл с именем log.txt.
источник
chattr +i log.txt
в первый раз, и приложение больше не будет удалять файл.Ну, один изящный метод с именованным каналом:
Вы почти можете сделать что-нибудь с дампом журнала, например, фильтровать или отправлять через nc .
источник
cat
процесс завершается или происходит сбой, программа входа в систему будет зависать при заполнении канала.Подумайте о том, чтобы сделать файл фактическим нулевым устройством. Файл "log.txt", созданный с помощью mknod, с правильным типом файла и теми же младшими и старшими номерами, будет действовать как нулевое устройство, потому что это так.
источник