Sé que había un comando en Unix que podría usar para monitorear un archivo y ver los cambios que se están escribiendo en él. Esto fue bastante útil especialmente para verificar archivos de registro.
¿Sabes cómo se llama?
Sé que había un comando en Unix que podría usar para monitorear un archivo y ver los cambios que se están escribiendo en él. Esto fue bastante útil especialmente para verificar archivos de registro.
¿Sabes cómo se llama?
Respuestas:
tail -F
seguirá los nombres de archivo en lugar de los objetos de archivo, lo cual es especialmente útil en caso de rotación del archivo de registro.
tailf
ahora está en desuso y tail -f
es seguro. (confirme esto en su sistema con man tailf
). Consulte la documentación: man7.org/linux/man-pages/man1/tailf.1.html
Probablemente quisiste decir cola, según la respuesta de Jon Skeet.
Otro útil es el reloj ; le permite ejecutar un comando periódicamente y ver la salida en pantalla completa. Por ejemplo:
watch -n 10 -d ls -l / var / adm / messages
Ejecutará el comando ls -l /var/adm/messages
cada 10 segundos y resaltará la diferencia en la salida entre ejecuciones posteriores. (Útil para ver qué tan rápido crece un archivo de registro, por ejemplo).
inotifywait
from inotify-tools es útil si desea ejecutar un comando cada vez que cambia un archivo (o cualquier archivo en un directorio). Por ejemplo:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
no es la mejor opción para un nombre de variable. Sí zsh
, parece que las variables de entorno no distinguen entre mayúsculas y minúsculas. Para mí, la configuración también path
hace PATH
que se configure, y eso básicamente significa que nada se ejecutará hasta que lo arregles. Activado bash
, la configuración path
no tiene efecto PATH
.
Prefiero usar less +FG
1 sobre tail -f
porque necesito buscar en un archivo de registro un error o ID específico. Si necesito buscar algo, escribo ^C
para dejar de seguir el archivo y ?
comenzar a buscar hacia atrás.
Las combinaciones de teclas son más o menos las mismas que en vi
. Cualquier comando se puede inicializar al inicio utilizando la +
opción:
+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.
Para registros realmente largos, me parece conveniente usar la -n
opción que desactiva la numeración de líneas. Desde la página del manual:
-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. Hat-tip para rgmarcha por señalar esto en los comentarios.
alias
con sus opciones deseadas, para que no tenga que escribirlas cada vez.
Estoy editando un archivo LaTeX y quería monitorearlo también para detectar cambios en algún punto intermedio. Creé el siguiente pequeño script de shell que me resultó útil. Espero que también sea útil para alguien más.
#!/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
Guárdalo como watch.sh
y hazlo chmod u+x watch.sh
. Luego lo ejecuto de la siguiente manera:
./watch.sh file.tex pdflatex
Si desea que el comando solo se ejecute si se produce una modificación real, puede usarlo en `md5sum "$FILE"`
lugar de `ls -l "$FILE"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
puedes usar el comando tailf es el más fácil
tailf logfile.log
Tail es la herramienta estándar, tradicional, disponible en todas partes para Unix. Una herramienta un poco más sofisticada es el multitail, que puede monitorear varios archivos simultáneamente y resalta la sintaxis.
Si deseo poder buscar alrededor del archivo además de seguirlo, utilizo menos con el comando "F".
Cuando use tail, tenga en cuenta que se necesitan argumentos adicionales si el archivo se puede pasar o reemplazar por edición (modo predeterminado para vim's: w).
tail -f hará que tail almacene el descriptor de archivo y lo siga. Si se reemplaza el archivo, se cambiará el descriptor. El beneficio de seguir el descriptor de archivo es que si se cambia el nombre del archivo, aún lo seguirá.
tail --follow = hará que tail rastree el archivo nombrado volviéndolo a abrir periódicamente para ver si ha sido reemplazado.
--retry es otra opción útil si desea seguir un archivo de registro pero el archivo aún no se ha creado.
tail -F es un atajo para --follow = --retry.
Olvídate de tailf, diff es el comando que deseas. Aquí hay un buen truco para observar las diferencias a medida que ocurren en tiempo real (o cercano) entre 2 archivos o en un archivo en el que se está escribiendo.
Puede usar estos métodos para modificar el comportamiento de la forma que desee, como escribir los cambios en un archivo para mantener un registro. Juegue con el intervalo de observación u otras opciones para los comandos a continuación.
Tiene 1 archivo y desea ver cómo se realizan cambios en él:
Entonces aquí está lo que hay que hacer:
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
esto se actualizará cada 2 segundos por defecto. Entonces, si necesita volver y leerlos, escriba la salida de diff en un archivo en el script.
o use cron para ejecutar su script regularmente si no necesita ver la salida.
Si bien se tail -f somefile.txt
sigue desplazando con datos nuevos, a veces también prefiero less +G somefile.txt
mirar un parche de datos más recientes en el archivo.