Korzystam z aplikacji, która zapisuje do log.txt. Aplikacja została zaktualizowana do nowej wersji, dzięki czemu obsługiwane wtyczki nie są już kompatybilne. Wymusza ogromną liczbę błędów w log.txt i nie obsługuje zapisywania do innego pliku dziennika.
Jak mogę zapisać je w innym dzienniku?
Zastanawiałem się nad zastąpieniem log.txt twardym łączem (aplikacja nie może odróżnić właściwej różnicy?) Lub twardym łączem wskazującym / dev / null. Jakie są moje opcje?
chmod -w log.txt
?Odpowiedzi:
Spowoduje to skopiowanie twojego zerowego urządzenia z odpowiednimi głównymi i mniejszymi numerami programistycznymi
log.txt
, abyś miał innynull
.Urządzenia w ogóle nie są znane z nazwy w jądrze, ale raczej z ich głównych i mniejszych liczb. Ponieważ nie wiem, jaki masz system operacyjny, wygodne było po prostu skopiowanie liczb z miejsca, w którym już wiemy. Jeśli zrobisz to z niewłaściwymi głównymi i małymi numerami, najprawdopodobniej zrobiłbyś inne urządzenie, być może dysk lub coś innego, do czego nie chcesz pisać.
źródło
sudo
(lub działa jako użytkownik root). Wyjaśnij (w swojej odpowiedzi), co rozumiesz przez „odpowiednie główne i mniejsze liczby deweloperów”./dev/null
, tak jak to zostało użyte w twoim poleceniu. I myślę, że to pomoże czytelnikom przyszłości notatki w swojej odpowiedzi , żesudo
jest to wymagane.cp -a /dev/null log.txt
moich komentarzy?sudo
do wykonywania tego polecenia, chyba że zdarzy ci się być uruchomiony jako użytkownikroot
(który jest ogólnie zniechęca). Użyciesudo
(lub uruchomienie jakoroot
) do utworzenia twardego łącza (ta odpowiedź) lub dowiązania symbolicznego (odpowiedź @ V.Michel) może być jednak właściwym rozwiązaniem, jeśli plik musi zostać umieszczony w miejscu, do którego każde konto użytkownika może zapisać, ale chodzi o to: wyraźnie zwróć uwagę na to wymaganie.mknod
. Zauważ, że komentarze zwykle nie zwracają uwagi, więc ktoś czytający tylko pytanie, a następnie twoja odpowiedź może być mylona (tak jak ja; zauważ również, że większość ludzi nigdy nie jest narażona na pojęcia takie jak główne i drobne numery urządzeń).Możesz utworzyć symboliczny link do / dev / null i nie musisz być rootem:
źródło
ls -l log.txt
pokazuje, że jest to dowiązanie symboliczne do / dev / null, zamiast polegać na wiedzy, że np. „1, 3” jest w jakiś sposób znaczący.Inne odpowiedzi tutaj prawdopodobnie będą działać. W szczególności rozwiązanie dowiązania symbolicznego będzie prawdopodobnie najłatwiejszym rozwiązaniem. Oferuję to głównie dla kompletności.
Rozwiązania wymagające
mknod
(lubcp -a
) stają się problematyczne, jeśli system plików zawierający plik nie obsługuje urządzeń (np. Został zamontowany znodev
opcją, na przykład). Oczywiście twarde łącza między systemami plików po prostu nie działają.Alternatywą dla twardych dowiązań lub tworzenia nowych węzłów urządzeń jest użycie montowania powiązań, które pozwalają zamontować plik lub katalog z jednej części drzewa systemu plików na innej. Na przykład możesz uruchomić:
Działa to jak twardy link, ale:
Kompletny przykład:
źródło
nodev
systemie plików.Zależy to krytycznie od tego, JAK aplikacja obsługuje log.txt.
Jeśli aplikacja po prostu otworzy istniejący plik i zapisze w nim, to zgodnie z opisem w innych odpowiedziach możesz go dowiązać do / dev / null, dowiązać do niego gdzie indziej, dowiązać do niego gdzie indziej (chociaż dowiązań twardych nie można przenosić między systemami plików, więc nie ma t wiele rzeczy w tym), stwórz tam kopię węzła urządzenia / dev / null itp.
OTOH, jeśli aplikacja usunie i ponownie utworzy plik log.txt, żaden z nich nie zadziała. Mógłbyś symlinkować cały katalog gdzie indziej, aby przekierować zapisy do innego systemu plików, ale to o tym i musiałbyś poradzić sobie z innymi rzeczami w katalogu.
Sądzę, że jeśli naprawdę chciałeś, możesz stworzyć niestandardowy system plików nakładki, który przeszedłby przez większość operacji, jednocześnie odrzucając wszelkie próby utworzenia pliku o nazwie log.txt.
źródło
chattr +i log.txt
za pierwszym razem, a aplikacja nie będzie już usuwać pliku.Cóż, jedna niewdzięczna metoda z nazwaną rurą :
możesz prawie wszystko zrobić z zrzutem dziennika, takim jak filtrowanie lub wysyłanie przez nc .
źródło
cat
proces zostanie zabity lub ulegnie awarii, program logowania zawiesi się, gdy potok będzie pełny.Zastanów się, czy plik nie jest rzeczywistym urządzeniem. Plik „log.txt” utworzony za pomocą mknod, z odpowiednim typem pliku i tymi samymi liczbami mniejszymi i większymi, będzie działał jako urządzenie zerowe, ponieważ tak jest.
źródło