tail

Output the last part of files, print the last part (10 lines by
default) of each FILE;
tail reads from standard input if no files are given or when given a FILE of -

Syntax
tail [options]... [file]...
Key
-c, --bytes=K
Output the last K bytes; alternatively, use -c +K to output bytes starting with the Kth of each file.
-f, --follow[={name|descriptor}]
Output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent
-F
Same as --follow=name --retry
-n, --lines=K
Output the last K lines, instead of the last 10; or use -n +K to output lines starting with the Kth
--max-unchanged-stats=N
With --follow=name, reopen a FILE which has not changed size after N (default 5) iterations
to see if it has been unlinked or renamed (this is the usual case of rotated log files).
With inotify, this option is rarely useful.
--pid=PID
With -f, terminate after process ID, PID dies
-q, --quiet, --silent
Never output headers giving file names
--retry
Keep trying to open a file even when it is or becomes inaccessible;
useful when following by name, i.e., with --follow=name
-s, --sleep-interval=N
With -f, sleep for approximately N seconds (default 1.0) between iterations.
With inotify and --pid=P, check process P at least once every N seconds.
-v, --verbose
Always output headers giving file names
--help
Display this help and exit
--version
Output version information and exit

If more than one FILE is specified, `tail' prints a one-line
header consisting of ==> FILE NAME <== before the output for each FILE.

K (the number of bytes or lines) may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.

GNU `tail' can output any amount of data (some other versions of `tail' cannot).
It also has no `-r' option (print in reverse), since reversing a file is really
a different job from printing the end of a file; BSD `tail' (which is the one
with `-r') can only reverse files that are at most as large as its buffer, which
is typically 32k. A more reliable and versatile way to reverse files is the
GNU `tac' command.

`tail' accepts two option formats: the new one, in which numbers are arguments
to the options (`-n 1'), and the old one, in which the number precedes any option
letters (`-1' or `+1'). If any option-argument is a number N starting with a
`+', `tail' begins printing with the Nth item from the start of each file, instead
of from the end.

Examples

Extract the last 85 lines from a file:

$ tail -85 file,txt

Output the newly appended lines of a file instantly:

$ tail -f /var/log/wifi.log

Output newly appended lines, and keep trying if the file is temporarily inaccessible:

$ tail -f /var/log/wifi.log --retryor
$ tail -F /var/log/wifi.log

Extract lines 40-50 from a file, first using head to get the first 50 lines then tail to get the last 10:

$ head -50 file.txt | tail -10

“Money will buy a pretty good dog, but it won't buy the wag of his tail” ~ Henry Wheeler Shaw

Related:

csplit - Split a file into context-determined piecescut - Divide a file into several partsfmt - Reformat paragraph texthead - Output the first part of file(s)join - Join lines on a common fieldless -
Display output one screen at a time (less +F will monitor the tail of a file which is still growing while it is being viewed.)paste - Merge lines of filessplit - Split a file into fixed-size pieces
swatch - simple watcher
tailf - follow the growth of a log fileLNav.org - Log file Navigator
Equivalent Windows command: Get-Content -wait