With less, you have to keep track of the current position by timestamp or other unique message, and it's easy to lose your place when the output starts streaming in. With tail, you only need a moment to mark your spot and then it's visually distinct even as more message come in.
* page forward and backward, including using numeric prefixes to indicate a lineno or indicate "repeat 'n' times".
* launch vi if less(1) is working on a file (versus (eg) stdout of some process)
* search fwd/backward
* start examining a new file w/o leaving less(1)
* ... --retry
keep trying to open a file even if it is inaccessible when tail
starts or if it becomes inaccessible later; useful when follow-
ing by name, i.e., with --follow=name
-F same as --follow=name --retry Do not stop when end-of-file is reached, but rather to wait for
additional data to be appended to the input. If the file is re-
placed (i.e., the inode number changes), tail will reopen the
file and continue. If the file is truncated, tail will reset its
position to the beginning. This makes tail more useful for
watching log files that may get rotated. The -f option is ig-
nored if the standard input is a pipe, but not if it is a FIFO.
So, no -F or --retry but a different default behaviorAlso, if you are using a proper ssh client, opening a second ssh connection to manage the reacting to the log files is habit for me at this point. The only time I'm using tail -F is after a new configuration deployment. Otherwise, I'm looking at archival data in ELK.
The downside: less buffers and tail -f prints directly. On a slow printing log this can cause events to show up slowly, and can cause performance issues on a fast moving log. If you're piping through a script for processing, tail -f is still the best bet. If you need multiple files, multitail is probably better. less +F hits a quick+easy operational niche and is available almost everywhere (whereas multitail is not).
[1] Everything i've used on Linux in the last few years, not the vanilla one on the Mac, but the one in Homebrew
$ less ./somefile
/somesearch^M (<--- does a search)
F (<--- puts less(1) in "follow mode", highlighting your previous search-term if it occurs in the future)
(Edit: formatting)I typically read logfiles with less +F, but it would be nice to create an alias for patterns in specific types of logs, so I don't have to remember them or rely on command history.
I've commented a bit more on them (in the context of other RSS tools) here:
https://www.reddit.com/r/dredmorbius/comments/1udv6i/further...
Folkert's site: http://www.vanheusden.com/ http://www.vanheusden.com/multitail/ http://www.vanheusden.com/rsstail/
Though not quite applicable to logfiles, I've written a script to tail my Newsbeuter feed URLs with Multitail support, for a console / terminal-based RSS feed.
tail -f whatever.log | grep --color=auto -C99 exception
And there are other ways pausing/scrolling back, such as tmux's scroll mode.
Personally, I'd love to see some hot young talent just do a 100% redo of the standard gnu utils from an interface perspective. Just go crazy with new interface and display ideas, novel presentation modes, novel navigation, etc while still maintaining backwards compatibility. I could see a big disruption here.
For example: tail -F somefile.log|ccze -A
For your shell, there's a lot of funky colorful interactive customizations you can get on zsh and fishfish.
The use case that drove its development was needing to keep track of UUIDs across multiple logs - and grep --color will colorize its matches, but not differentiate between ones that have different content. With this, I could watch both logs as data was passed from one to the other and keep track of e.g. the orange one.
I also thought it would be nice to be able to use patterns from logstash's grok, so I wrote grokpat[2] to find patterns for me. A lot of grok's patterns use atomic groups, which aren't available in Python 2, so I wrote redi[3] to convert them from grok's syntax to Python compatible syntax.
So I can now colorize logs easily as follows:
tail -F program.log | synesthesia "$(redi "$(grokpat uuid)")"
[1] https://github.com/cromo/synesthesia
[2] https://github.com/cromo/grokpat
[3] https://github.com/cromo/rediOf course, I'm not opposed to colours, I'm opposed to colours that look tacky / l33t hax0r, which would be most terminal stuff. I like 𝐛𝐨𝐥𝐝 better than trying to find colours I won't hate.
There's also no need to do that if you're running tmux, screen or have navigation tools baked into your terminal emulator.
Not that I'm trying to dismiss the effectiveness for +F for those inclined, but as the author acknowledged, +F also comes with some usability issues that -f does not (namely working with multiple files, and piping output into grep et al). Plus learning to navigate though terminal history is a useful skill to have in other situations anyway, and utilities like tmux are actually a very handy tool to use for a whole plethora of additional reasons too.
So kudos to the author for his recommendation and providing helpful write ups to future sysadmins, but I'm inclined disagree with him and instead recommend people stick with -f and learn tmux instead.
tail -n 2000 -f
The beauty of this is a file with less that 2000 files will be read in it's entirety, and you're gracefully managing larger files by cropping out the surplus data at the beginning.And the best thing about this method is you can still pipe grep (which you couldn't do with less) so if you are writing out ~2000 lines rapidly enough that the content you want wouldn't be at the bottom, you can manage the text stream more efficiently (ie grep -v out stuff you don't want or only grep in the content you do want)
I should add that I am a fan of less on many occasions, but in this instance the piping ability of tail is a deal breaker when working with larger files.
apt-get install tmux # tail -f busy.log
< see something of interest >
ctrl+s # Stops flow of output.
pgup/pgdn for navigation # fn+up/dn for OS X users
ctrl+q # Continues flow.
No need to reinvent the wheel, the functionality you want is probably built into the tools you're already using.But really, it's 2015. Are you really using a terminal emulator without a buffer search? Are you not using screen or tmux, both of which can do these things natively, with no external tools? Why? And what is wrong with backgrounding the tail command, running your grep, and then foregrounding the tail command?
If tmux can do that, then I'd consider it reason to switch.
There was also a time when there was a utility called inotail, bridging that gap until tail proper was improved. I very much preferred it over regular tail.
poll(), select() et al don't define "readable" as meaning "a byte of data is available". They define it as "read() will not block".
When you read to the end of a file, read() returns "". This is the same as when you try to read from a closed socket. Conceptually, they are linking the concepts of "EOF" and "closed", not the concepts of "EOF" and "waiting for data". And indeed, if you call poll() on a socket that has been closed on the remote end, you will find it is "readable".
Ultimately, regular files just were never intended to be used as pipes. The abstractions just weren't chosen to work in that way.
There is also the command `tailf` which is quite similar to 'tail -f'.
2 characters make so much difference :)
I saved you three more!
Maximum savings!
When you jump to the end of the file ('>' command) you'll see "Calculating line numbers... (interrupt to abort)" and interrupt (ctrl-C) here will also turn them off.
You can also open the file and engage auto-revert-mode or auto-revert-mode-tail. In my status bar it shows up as ARev mode.
Also you can bind those to your auto-mode-alist so all .log files get the tail treatment or whatever.
Scrolling can get weird.
Theres some google-able settings for the timeout to revert, default is about a sip of water (a few seconds?) but I guess you could crank it down to 1 second or something.
I like doing this in emacs so its all in the same ecosystem, if I need to cut and paste something weird to test it or put the message into code or even more likely to cut and paste actual error messages into docs or comments, I can do it inside emacs.
= In Your Terminal = Many logging tools, like Splunk, provide great features but are optimized for large-scale deployments. They require installing and configuring servers before they can be effectively used. There is still a need for a robust log file analyzer for the terminal.
= Easy to Use = Just point lnav to a directory and it will take care of the rest. File formats are automatically detected and compressed files are unpacked on the fly.
= Improved Presentation = Log files are a wealth of information, lnav can help highlight the parts that are important and filter out the noise.
journalctl -u service-name -f
-f, --follow
Show only the most recent journal entries, and continuously print new entries as they are appended to the journal. journalctl -fu service-nameI always preferred
watch -n 1 -d 'tail /path/to/log/file'
to tail -fbecause of its nice highlighting feature.
My method is usually '+G' to go to the end of the log file and check the damage report. Quick reverse search with '?' + search term to find last error, then probably hit 'n' to find the next previous any other occurrences to determine how frequent it's popping up. If it looks like it's a recurring problem i'll '+F' to see follow latest output. Then CTRL+c to quit that mode.
tail -f still has it's uses for cases as pimlottc mentioned. I like to put a bit of distance between the last bit of output. Especially if its a particularly repetitive and lengthy stacktrace.
Interprets color codes as RAW, relaying them to the screen as-is.
All this in my humble opinion. less is useful and I may use F to wait for data if I was looking for something in old logs, but for new data I still like tail -f :)
A much nicer alternative, IMHO.
Many of the comments I see on here about using '-F' with tail instead of '-f', live searching, and so on are handled in lnav by default. I would really encourage folks to give it a try.
Yes, this is mentioned in the post, but I feel it is so big it would have deserved large, bold letters.
Textbook HN hit.
Of course I'll probably fail to use any of it because of finger memory just typing out tail -f for me.
Meanwhile, tail -f still useful for simple tailing to multiple machine, like
function dogfight_tail {
logfile=/var/log/nginx/access.log
pids=""
for box in 02 03; do
ssh lb$box tail -f $logfile | grep " 500 " & # find error machines
pids="$pids $!"
done
trap 'kill -9 $pids' SIGINT
trap wait
}
dogfight_tailtail -f sys.log | grep NETDEV
But I would definitely give this a try, thanks for sharing.
$ alias stalk='less +F'"What is a linux command that's mostly not known?".
I could not remember anything that's special, at least for me at the time but "less -F" poped up to my mind. Thank you :)
Oh now I can think of ccze, column and tac. Interviews..
ctrl+c...
<shit its not working>
ctrl+c * 1e9 impatiently
...
build stopped
oops
what is meant by 'pretty much?'
/thefox