When redirecting top to a file, why does cat command on that file display output of multiple top attempts?
I am customizing a Linux system with a kernel of 6.4.0, and I have noticed a strange issue. When I execute top > a.txt
and then open a window to execute cat a.txt
, I find that the cat a.txt
result is the result of multiple top
attempts, but I wouldn’t have this problem with other Linux systems. In other Linux systems, the cat
command only displays the results of the top
command once. I don’t know why?
# top > a.txt
# cat a.txt
# ls /usr/bin/top -ltr
lrwxrwxrwx 1 1000 1000 17 Aug 23 02:34 /usr/bin/top -> ../../bin/busybox
add top type
:
# type top
top is /usr/bin/top
Some top
implementation (e.g. on OpenBSD, but presumably on some Linux systems too) detects whether its output is going to the terminal or to something that isn’t a terminal (to a pipe or to a file) and changes its behaviour depending on this. If the output goes to a terminal, the utility will be in interactive mode, accepting input from the user and regularly updating its display. When the output goes elsewhere, then top
runs in non-interactive mode and will, by default, just output one "screen" of results and then quit.
The top
implementation included in Busybox does not do this and will continue to output screen updates even when output goes into a file or pipe. Each update will be preceded by a control character sequence that clears the screen, so cat
should show you the final screen update (unless the terminal is not interpreting the control characters), while if you open the file in an editor or use less
to view its content, you may see several consecutive screen updates. This also seems to be the case for the procps-ng
variant of top
sometimes found on Linux systems.
If you want Busybox’s top
only to output a single screen of output to a file, use
top -n 1 >file
As to why this is so, it just comes down to the developers of the various top
implementations having implemented the tool differently. If you want further information about the decisions taken while implementing the top
utility in Busybox, you may want to ask in a Busybox-specific forum or mailing list.