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.
Czy wiesz jak to się nazywa?
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.
Czy wiesz jak to się nazywa?
Odpowiedzi:
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 i tail -f
bezpieczna. (potwierdź to w swoim systemie za pomocą man tailf
.) Zobacz dokumentację: man7.org/linux/man-pages/man1/tailf.1.html
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/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).
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:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
nie jest najlepszym wyborem dla nazwy zmiennej. Tak zsh
, wydaje się, że zmienne środowiskowe nie uwzględniają wielkości liter. Dla mnie ustawienie path
powoduje PATH
również ustawienie, a to w zasadzie oznacza, że nic nie zostanie wykonane, dopóki go nie naprawisz. Włączone bash
ustawienie path
nie ma wpływu na PATH
.
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:
+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 -n
opcji 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.
alias
żądane opcje, abyś nie musiał wpisywać ich za każdym razem.
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.sh
i 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"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
możesz użyć komendy tailf, która jest najłatwiejsza
tailf logfile.log
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.
tail -F to skrót od --follow = --retry.
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.
Podczas tail -f somefile.txt
przewijania z nowymi danymi czasami wolę less +G somefile.txt
też spojrzeć na łatkę najnowszych danych w pliku.