So che c'era un comando su Unix che potevo usare per monitorare un file e vedere le modifiche che vi venivano scritte. Ciò è stato molto utile soprattutto per il controllo dei file di registro.
Sai come si chiama?
So che c'era un comando su Unix che potevo usare per monitorare un file e vedere le modifiche che vi venivano scritte. Ciò è stato molto utile soprattutto per il controllo dei file di registro.
Sai come si chiama?
Risposte:
tail -F
seguirà i nomi dei file anziché gli oggetti file, il che è particolarmente utile in caso di rotazione dei file di registro.
tailf
ora è deprecato ed tail -f
è sicuro. (confermalo sul tuo sistema con man tailf
.) Vedi documentazione: man7.org/linux/man-pages/man1/tailf.1.html
Probabilmente intendevi coda, secondo la risposta di Jon Skeet.
Un altro utile è watch ; ti permette di eseguire periodicamente un comando e vedere l'output a schermo intero. Per esempio:
guarda -n 10 -d ls -l / var / adm / message
Eseguirà il comando ls -l /var/adm/messages
ogni 10 secondi ed evidenzierà la differenza nell'output tra le esecuzioni successive. (Utile per vedere quanto velocemente sta crescendo un file di registro, per esempio).
inotifywait
da inotify-tools è utile se si desidera eseguire un comando ogni volta che un file (o qualsiasi file in una directory) cambia. Per esempio:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
non è la scelta migliore per un nome di variabile. Acceso zsh
, sembra che l'ambiente non sia sensibile al maiuscolo / minuscolo. Per me, l'impostazione path
causa PATH
anche l'impostazione, e ciò significa sostanzialmente che nulla verrà eseguito finché non lo risolvi. On bash
, l'impostazione path
non ha alcun effetto su PATH
.
Preferisco usare less +FG
1 su tail -f
perché mi trovo a dover cercare un file di registro per un errore o un ID specifico. Se devo cercare qualcosa, scrivo ^C
per smettere di seguire il file e ?
iniziare la ricerca all'indietro.
Le combinazioni di tasti sono praticamente le stesse di vi
. Qualsiasi comando può essere inizializzato all'avvio utilizzando l' +
opzione:
+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.
Per i registri molto lunghi, trovo conveniente usare l' -n
opzione che disattiva la numerazione delle righe. Dalla manpage:
-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).
alias
con le opzioni desiderate, in modo da non doverle digitare ogni volta.
Sto modificando un file LaTeX e volevo monitorarlo anche per le modifiche da qualche parte nel mezzo. Ho preparato il seguente piccolo script di shell che mi è stato utile. Spero che possa tornare utile anche a qualcun altro.
#!/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
Salvalo come watch.sh
e fai chmod u+x watch.sh
. Quindi lo eseguo come segue:
./watch.sh file.tex pdflatex
Se si desidera eseguire il comando solo in caso di modifica effettiva, è possibile utilizzare `md5sum "$FILE"`
invece di `ls -l "$FILE"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
puoi usare il comando tailf nel modo più semplice
tailf logfile.log
Puoi anche usare inotifywatch / inotifywait che si aggancia al sottosistema di kernel inotify. In questo modo puoi anche cercare cose come "apri", "chiudi" o "accedi".
Ma se vuoi semplicemente ottenere linee aggiunte a stdout, sono d'accordo sulla coda.
Tail è lo strumento unix standard, tradizionale, disponibile ovunque. Uno strumento un po 'più sofisticato è il multitail in grado di monitorare più file contemporaneamente e di evidenziare la sintassi.
Se voglio essere in grado di cercare nel file oltre a limitarlo, ne uso meno con il comando "F".
Quando si utilizza tail, tenere presente che sono necessari argomenti aggiuntivi se il file potrebbe essere sottoposto a rollover o sostituito da edit (modalità predefinita per vim: w).
tail -f farà in modo che tail memorizzi il descrittore di file e lo segua. Se il file viene sostituito, il descrittore verrà modificato. Il vantaggio di seguire il descrittore di file è che se il file viene rinominato, lo seguirai comunque.
tail --follow = farà in modo che tail segua il file indicato riaprendolo periodicamente per vedere se è stato sostituito.
--retry è un'altra opzione utile se si desidera personalizzare un file di registro ma il file non è stato ancora creato.
tail -F è una scorciatoia per --follow = --retry.
Dimentica tailf, diff è il comando che desideri. Ecco un buon trucco per osservare le differenze che si verificano in tempo reale (o vicino) tra 2 file o in cui un file viene scritto.
È possibile utilizzare questi metodi per modificare il comportamento nel modo desiderato, ad esempio scrivere le modifiche in un file per conservare la registrazione. Gioca con l'intervallo di controllo o altre opzioni per i comandi seguenti.
Hai 1 file e vuoi vederlo mentre vengono apportate modifiche:
Quindi ecco cosa fare:
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
questo verrà aggiornato ogni 2 secondi per impostazione predefinita. Quindi, se è necessario tornare indietro e leggerli, scrivere l'output di diff in un file nello script.
oppure usa cron per eseguire regolarmente lo script se non hai bisogno di vedere l'output.
Mentre tail -f somefile.txt
continuo a scorrere con nuovi dati, a volte preferisco less +G somefile.txt
anche guardare una patch degli ultimi dati nel file.