> A lot uglier, but you can do a one liner ...
Yeah, but that one-liner reads the whole file. 'tail' can be more clever (and is). 'strace' output:
open("a", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=545975512, ...}) = 0
lseek(3, 0, SEEK_CUR) = 0
lseek(3, 0, SEEK_END) = 545975512
lseek(3, 545972224, SEEK_SET) = 545972224
read(3, "tu 11.04 \\n \\l\n\nUbuntu 11.04 \\n "..., 3288) = 3288
'tail' is seeking to the end, then reading backwards.
The point being, these 'little tools' can contain important optimisations - they aren't necessarily equivalent to a naive reimplementation.