Polecenie powłoki do monitorowania zmian w pliku - jak się nazywa ponownie?
159
Wiem, że na Uniksie było polecenie, którego mogłem użyć do monitorowania pliku i zobaczenia zmian, które są do niego zapisywane. Było to bardzo przydatne szczególnie do sprawdzania plików dziennika.
Uwaga: Jeśli twoja dystrybucja udostępnia polecenie tailf, użyj tego zamiast tail -f. tailf jest bardziej wydajny, ponieważ nie musi uzyskiwać dostępu do oglądanego pliku, jeśli nie jest zapisywany (dostęp do ankiety jest denerwujący, jeśli podłączyłeś system plików z aktualizacją atime).
tail -Fpodąża za nazwami plików, a nie obiektami plików, co jest szczególnie przydatne w przypadku rotacji pliku dziennika.
Amir Ali Akbari,
2
Aktualizacja, kilka lat później: tailfjest już przestarzała i tail -fbezpieczna. (potwierdź to w swoim systemie za pomocą man tailf.) Zobacz dokumentację: man7.org/linux/man-pages/man1/tailf.1.html
exp1orer
124
Prawdopodobnie miałeś na myśli ogon, zgodnie z odpowiedzią Jona Skeeta.
Kolejnym przydatnym jest zegarek ; pozwala okresowo uruchamiać polecenie i wyświetlać pełny ekran wyjściowy. Na przykład:
obejrzyj -n 10 -d ls -l / var / adm / messages
Uruchomi polecenie ls -l /var/adm/messagesco 10 sekund i podświetli różnicę w wynikach między kolejnymi przebiegami. (Przydatne na przykład do obserwowania, jak szybko rośnie plik dziennika).
inotifywaitfrom inotify-tools jest przydatny, jeśli chcesz uruchomić polecenie za każdym razem, gdy zmienia się plik (lub dowolne pliki w katalogu). Na przykład:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
Tylko uwaga, która pathnie jest najlepszym wyborem dla nazwy zmiennej. Tak zsh, wydaje się, że zmienne środowiskowe nie uwzględniają wielkości liter. Dla mnie ustawienie pathpowoduje PATHrównież ustawienie, a to w zasadzie oznacza, że nic nie zostanie wykonane, dopóki go nie naprawisz. Włączone bashustawienie pathnie ma wpływu na PATH.
Thanatos
36
Wolę używać less +FG1 niż, tail -fponieważ muszę przeszukać plik dziennika w poszukiwaniu określonego błędu lub identyfikatora. Jeśli muszę coś wyszukać, piszę, ^Caby przestać śledzić plik i ?rozpocząć wyszukiwanie do tyłu.
Wiązania klawiszy są prawie takie same jak w vi. Każde polecenie można zainicjować podczas uruchamiania, używając +opcji:
+cmd Causes the specified cmd to be executed each time a new file is
examined. For example, +G causes less to initially display each
file starting at the end rather than the beginning.
W przypadku naprawdę długich dzienników uważam, że wygodnie jest skorzystać z -nopcji wyłączającej numerację linii. Z strony podręcznika:
-n or --line-numbers
Suppresses line numbers. The default (to use line numbers) may
cause less to run more slowly in some cases, especially with a
very large input file. Suppressing line numbers with the -n
option will avoid this problem. Using line numbers means: the
line number will be displayed in the verbose prompt and in the =
command, and the v command will pass the current line number to
the editor (see also the discussion of LESSEDIT in PROMPTS
below).
1. Porada dla rgmarchy za wskazanie tego w komentarzach.
Edytuję plik LaTeX i chciałem go również monitorować pod kątem zmian gdzieś pośrodku. Wymyśliłem następujący skrypt powłoki, który okazał się dla mnie użyteczny. Mam nadzieję, że przyda się także komuś innemu.
#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
sleep 1
NEW=`ls -l "$FILE"`
if [ "$NEW" != "$LAST" ]; then
"$CMD" "$FILE"
LAST="$NEW"
fi
done
Zapisz to watch.shi zrób chmod u+x watch.sh. Następnie wykonuję to w następujący sposób:
./watch.sh file.tex pdflatex
Jeśli chcesz, aby polecenie było uruchamiane tylko w przypadku faktycznej modyfikacji, możesz użyć `md5sum "$FILE"`zamiast `ls -l "$FILE"`.
Możesz także użyć inotifywatch / inotifywait, które podpinają się do podsystemu inotify jądra. W ten sposób możesz także obserwować takie rzeczy jak „otwórz”, „zamknij” lub „dostęp”.
Ale jeśli po prostu chcesz uzyskać dołączone linie na standardowe wyjście, zgadzam się na ogon.
Tail jest standardowym, tradycyjnym, dostępnym wszędzie narzędziem uniksowym. Nieco bardziej zaawansowanym narzędziem jest multitail, który może monitorować kilka plików jednocześnie i wyróżnia składnię.
Jeśli chcę mieć możliwość przeszukiwania całego pliku oprócz samego dostosowywania go, używam go mniej z poleceniem „F”.
Korzystając z tail, pamiętaj, że potrzebne są dodatkowe argumenty, jeśli plik może być zmieniany lub zastępowany przez edycję (domyślny tryb dla vima: w).
tail -f spowoduje, że tail zapisze deskryptor pliku i podąży za nim. Jeśli plik zostanie zastąpiony, deskryptor zostanie zmieniony. Zaletą zastosowania deskryptora pliku jest to, że jeśli nazwa pliku zostanie zmieniona, nadal będziesz go przestrzegać.
tail --follow = sprawi, że tail śledzi nazwany plik, otwierając go okresowo, aby sprawdzić, czy został zastąpiony.
--retry to kolejna przydatna opcja, jeśli chcesz dostosować plik dziennika, ale plik nie został jeszcze utworzony.
Zapomnij o tailf, diff to polecenie, które chcesz. Oto dobra sztuczka, aby obserwować różnice występujące w czasie rzeczywistym (lub zamykające) między 2 plikami lub w jednym zapisywanym pliku.
Możesz użyć tych metod, aby zmodyfikować zachowanie w dowolny sposób, na przykład zapisać zmiany w pliku, aby zachować zapis. Pobaw się z interwałem oglądania lub innymi opcjami dla poniższych poleceń.
Masz 1 plik i chcesz oglądać, jak wprowadzane są w nim zmiany:
Więc oto, co robić:
skopiuj plik
cp file file2
napisz skrypt bash, aby znaleźć różnice i zaktualizuj plik2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
Oto podstawowy pomysł na scenariusz. Jeśli chcesz, zapisz go do pliku
#!/bin/bash
diff file file2
cp file file2
Następnie możesz oglądać różnice na ekranie za pomocą zegarka
watch ./check-differences
będzie to aktualizować domyślnie co 2 sekundy. Więc jeśli musisz wrócić i je przeczytać, zapisz wynik diff do pliku w skrypcie.
lub użyj crona do regularnego uruchamiania skryptu, jeśli nie potrzebujesz zobaczyć danych wyjściowych.
tail -F
podąża za nazwami plików, a nie obiektami plików, co jest szczególnie przydatne w przypadku rotacji pliku dziennika.tailf
jest już przestarzała itail -f
bezpieczna. (potwierdź to w swoim systemie za pomocąman tailf
.) Zobacz dokumentację: man7.org/linux/man-pages/man1/tailf.1.htmlPrawdopodobnie miałeś na myśli ogon, zgodnie z odpowiedzią Jona Skeeta.
Kolejnym przydatnym jest zegarek ; pozwala okresowo uruchamiać polecenie i wyświetlać pełny ekran wyjściowy. Na przykład:
Uruchomi polecenie
ls -l /var/adm/messages
co 10 sekund i podświetli różnicę w wynikach między kolejnymi przebiegami. (Przydatne na przykład do obserwowania, jak szybko rośnie plik dziennika).źródło
inotifywait
from inotify-tools jest przydatny, jeśli chcesz uruchomić polecenie za każdym razem, gdy zmienia się plik (lub dowolne pliki w katalogu). Na przykład:źródło
path
nie jest najlepszym wyborem dla nazwy zmiennej. Takzsh
, wydaje się, że zmienne środowiskowe nie uwzględniają wielkości liter. Dla mnie ustawieniepath
powodujePATH
również ustawienie, a to w zasadzie oznacza, że nic nie zostanie wykonane, dopóki go nie naprawisz. Włączonebash
ustawieniepath
nie ma wpływu naPATH
.Wolę używać
less +FG
1 niż,tail -f
ponieważ muszę przeszukać plik dziennika w poszukiwaniu określonego błędu lub identyfikatora. Jeśli muszę coś wyszukać, piszę,^C
aby przestać śledzić plik i?
rozpocząć wyszukiwanie do tyłu.Wiązania klawiszy są prawie takie same jak w
vi
. Każde polecenie można zainicjować podczas uruchamiania, używając+
opcji:W przypadku naprawdę długich dzienników uważam, że wygodnie jest skorzystać z
-n
opcji wyłączającej numerację linii. Z strony podręcznika:1. Porada dla rgmarchy za wskazanie tego w komentarzach.
źródło
alias
żądane opcje, abyś nie musiał wpisywać ich za każdym razem.Ogon jest świetny ... mniej można również użyć mniej w pliku, tzn. Mniej mój plik, a następnie naciśnij Shift+ F. To mniej działa jak ogon.
źródło
Edytuję plik LaTeX i chciałem go również monitorować pod kątem zmian gdzieś pośrodku. Wymyśliłem następujący skrypt powłoki, który okazał się dla mnie użyteczny. Mam nadzieję, że przyda się także komuś innemu.
Zapisz to
watch.sh
i zróbchmod u+x watch.sh
. Następnie wykonuję to w następujący sposób:./watch.sh file.tex pdflatex
Jeśli chcesz, aby polecenie było uruchamiane tylko w przypadku faktycznej modyfikacji, możesz użyć
`md5sum "$FILE"`
zamiast`ls -l "$FILE"`
.źródło
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
możesz użyć komendy tailf, która jest najłatwiejsza
źródło
Możesz także użyć inotifywatch / inotifywait, które podpinają się do podsystemu inotify jądra. W ten sposób możesz także obserwować takie rzeczy jak „otwórz”, „zamknij” lub „dostęp”.
Ale jeśli po prostu chcesz uzyskać dołączone linie na standardowe wyjście, zgadzam się na ogon.
źródło
Tail jest standardowym, tradycyjnym, dostępnym wszędzie narzędziem uniksowym. Nieco bardziej zaawansowanym narzędziem jest multitail, który może monitorować kilka plików jednocześnie i wyróżnia składnię.
źródło
Jeśli chcę mieć możliwość przeszukiwania całego pliku oprócz samego dostosowywania go, używam go mniej z poleceniem „F”.
Korzystając z tail, pamiętaj, że potrzebne są dodatkowe argumenty, jeśli plik może być zmieniany lub zastępowany przez edycję (domyślny tryb dla vima: w).
tail -f spowoduje, że tail zapisze deskryptor pliku i podąży za nim. Jeśli plik zostanie zastąpiony, deskryptor zostanie zmieniony. Zaletą zastosowania deskryptora pliku jest to, że jeśli nazwa pliku zostanie zmieniona, nadal będziesz go przestrzegać.
tail --follow = sprawi, że tail śledzi nazwany plik, otwierając go okresowo, aby sprawdzić, czy został zastąpiony.
--retry to kolejna przydatna opcja, jeśli chcesz dostosować plik dziennika, ale plik nie został jeszcze utworzony.
tail -F to skrót od --follow = --retry.
źródło
Zapomnij o tailf, diff to polecenie, które chcesz. Oto dobra sztuczka, aby obserwować różnice występujące w czasie rzeczywistym (lub zamykające) między 2 plikami lub w jednym zapisywanym pliku.
Możesz użyć tych metod, aby zmodyfikować zachowanie w dowolny sposób, na przykład zapisać zmiany w pliku, aby zachować zapis. Pobaw się z interwałem oglądania lub innymi opcjami dla poniższych poleceń.
Masz 1 plik i chcesz oglądać, jak wprowadzane są w nim zmiany:
Więc oto, co robić:
cp file file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
#!/bin/bash
diff file file2
cp file file2
watch ./check-differences
będzie to aktualizować domyślnie co 2 sekundy. Więc jeśli musisz wrócić i je przeczytać, zapisz wynik diff do pliku w skrypcie.
lub użyj crona do regularnego uruchamiania skryptu, jeśli nie potrzebujesz zobaczyć danych wyjściowych.
źródło
Podczas
tail -f somefile.txt
przewijania z nowymi danymi czasami wolęless +G somefile.txt
też spojrzeć na łatkę najnowszych danych w pliku.źródło