How to capture the output of a top command in a file in linux?

后端 未结 10 934
梦如初夏
梦如初夏 2020-12-24 06:14

I want to write the output of a specific \'top\' command to a file. I did some googling and find out that it can be done by using the following command.

top         


        
相关标签:
10条回答
  • 2020-12-24 06:24

    CTRL+C is not a ideal solution due to control stays in CLI. You can use below command which dumps top output to a file:

    top -n 1 -b > top-output.txt
    
    0 讨论(0)
  • 2020-12-24 06:27

    for me top -b > test.txt will store all output from top ok even if i break it with ctrl-c. I suggest you dump first, and then grep the resulting file.

    0 讨论(0)
  • 2020-12-24 06:27

    How about using while loop and -n 1:

    while sleep 3; do 
      top -b -n1 | grep init > top-output.txt
    done
    
    0 讨论(0)
  • 2020-12-24 06:27

    Solved this issue. This works even if you press Ctrl+c Even I was facing the same issue when I wanted to log Cpu%. Execute this shell script:

    #!/bin/sh
    while true; do
        echo "$(top -b -n 1 | grep init)"  | tee -a top-output.log
        sleep 1
    done
    
    • You can grep anything you wanna extract out of top command, use this script to store it to a file.
    • -b : Batch mode operation Starts top in Batch mode, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you've set with the -n command-line option or until killed.
    • -n number, this option specifies the maximum number of iterations, or frames, top should produce before ending. Here I've used -n 1.
    • Do man top for more details
    • tee -a enables the output to be visible on the console and also stores the output onto the file. -a option appends the output to the file.
    • Here, I have given an interval of 1 second. You can mention any other interval.

    Source for explanations of -b and -n: manpages

    man top
    

    Kruthika

    0 讨论(0)
  • 2020-12-24 06:30

    As pointed out by @Thor in a comment, you just need to ensure that grep is not buffering arbitrarily but per-line with the --line-buffered option:

    top -bn 10 | grep 'init' --line-buffered | tee top-output.txt
    

    Without grep-ing, redirecting the output of top to a file works just fine, interrupt included.

    0 讨论(0)
  • 2020-12-24 06:38

    From the top command, we can see all the processes with their PID (Process ID). To print top output for only one process, use the following command:

    $ top –p PID
    

    To save top command of any process to a file, use the following command:

    top -p $PROCESS_ID -b  > top.log
    

    where > redirects standard output to a file.

    0 讨论(0)
提交回复
热议问题