Comando principale: come ridurre le colonne visualizzate


17

Possiamo ottenere una colonna specifica in un comando in alto, ad esempio sono interessato solo alla colonna dell'utilizzo della memoria e dell'utilizzo della CPU.

Come posso ridurre le colonne visualizzate del comando superiore solo alle due colonne precedenti?


3
Quale sistema operativo? Quale topvariante? Ci sono dozzine di implementazioni principali.
Stéphane Chazelas,

Forniscici il tuo sistema operativo e la versione più recente ( top -h).
slm

Risposte:


19

NOTA: Supponendo di avere questa versione di top(procps) . Puoi controllare con questo comando:

$ top --version
    top: procps version 3.2.8
usage:  top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

procps è spesso la versione di top inclusa con Fedora / CentOS / RHEL e altre varianti.

Modifica delle colonne

Se cerchi nella pagina man topvedrai una sezione intitolata: "2b. SELEZIONARE E ORDINARE Colonne". Esistono scorciatoie da tastiera per attivare / disattivare la visibilità per i diversi campi / colonne.

Per esempio:

  f,o     . Fields/Columns: 'f' add or remove; 'o' change display order
  F or O  . Select sort field
  <,>     . Move sort field: '<' next col left; '>' next col right

È possibile utilizzare il tasto fmentre si è in topper accedere a una schermata secondaria in cui è possibile specificare quali colonne devono essere attivate o meno visibili:

Per esempio:

Current Fields:  ANOPQRSTUVbcdefgjlmyzWHIKX  for window 3:Mem
Toggle fields via field letter, type any other key to return 

* A: PID        = Process Id                                      * W: S          = Process Status
* N: %MEM       = Memory usage (RES)                              * H: PR         = Priority
* O: VIRT       = Virtual Image (kb)                              * I: NI         = Nice value
* P: SWAP       = Swapped size (kb)                               * K: %CPU       = CPU usage
* Q: RES        = Resident size (kb)                              * X: COMMAND    = Command name/line
* R: CODE       = Code size (kb)
...

Ce ne sono altri, questi sono solo un esempio. Quando hai finito di attivare e disattivare le colonne nel modo desiderato, usa il Escper uscire dalla schermata di selezione.

Salvataggio della configurazione

Puoi usare Shift+ Wper salvare le modifiche in modo che siano le impostazioni predefinite:

  W         Write configuration file

Il file viene archiviato qui $HOME/.toprce ha il seguente aspetto:

$ more .toprc 
RCfile for "top with windows"       # shameless braggin'
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=1.000, Curwin=2
Def fieldscur=AEHIoqTWKNMBcdfgjpLrsuvyzX
    winflags=129016, sortindx=19, maxtasks=0
    summclr=2, msgsclr=5, headclr=7, taskclr=7
Job fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX
    winflags=63416, sortindx=13, maxtasks=0
    summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX
    winflags=65464, sortindx=13, maxtasks=0
    summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr fieldscur=ABDECGfhijlopqrstuvyzMKNWX
    winflags=65464, sortindx=12, maxtasks=0
    summclr=3, msgsclr=3, headclr=2, taskclr=7

Vedere la sezione 5 della pagina man per maggiori dettagli, "5. FILE".


C'è un modo per cambiare le colonne / il campo tramite un flag della riga di comando? Questo sarebbe davvero utile, ad esempio per controllare il top su macchine diverse e ottenere un output standardizzato.
naught101

@ naught101 - se hai una nuova domanda, chiedila sul sito principale. I commenti non sono fatti per questo.
slm

2

[Centos-6 | Ubuntu 12.10] Questo cmd stampa 4 processi principali ordinati per CPU USAGE

top -bn 1 | grep "^ " | awk '{ printf("%-8s  %-8s  %-8s\n", $9, $10, $12); }' | head -n 5

Produzione

%CPU      %MEM      COMMAND
7.7       0.2       top
0.0       0.3       init
0.0       0.0       kthreadd
0.0       0.0       migration/0

Nota: head -n 5 anziché 4 perché abbiamo anche il nome della colonna

le colonne $ 9, $ 10, $ 12 indicano CPU, MEM, COMANDO. Utilizzare il comando 'top' per ottenere i numeri di colonna

Ordina per MEMORY USAGE (il tuo 'top' deve supportare -m per eseguirlo)

# this work on my centos-6 machine, NOT work on my Ubuntu 12.10
top -m -bn 1 | grep "^ " | awk '{ printf("%-8s  %-8s  %-8s\n", $9, $10, $12); }' | head -n 5

Quale versione di top è questa?
slm

Ho usato centos-6.4. Il comando principale su Ubuntu non supporta -m per ordinare il mio utilizzo della memoria.
Umidhat

Interessante, sono su Fedora (14), sto ottenendo la versione top di Procps. Ho appena ricontrollato e su CentOS 5 + 6 usano anche i migliori processori. Il tuo comando non ha funzionato su F14. Funziona su CentOS 5 + 6 però. Solo un FYI per chiunque incontri questa discussione!
slm

1

per visualizzare in formato json e rimuovere anche l'intestazione,

top -bn 1 | grep "^ " | awk '{ printf("%s%s%s\n","{CPU:"$9",","MEM:"$10",","CMD:"$12"}"); }' | head -n 6 | tail -n +2

uscita come sotto,

{CPU:6.4,MEM:0.3,CMD:gnome-terminal}
{CPU:6.4,MEM:1.9,CMD:chrome}
{CPU:0.0,MEM:0.0,CMD:init}
{CPU:0.0,MEM:0.0,CMD:kthreadd}
{CPU:0.0,MEM:0.0,CMD:ksoftirqd/0}

Il tuo grep | awk | head | tailpuò essere unito in un unico awk.
roaima,

0

Configurazione della riga di comando
Non volevo influire su tutto il mio utente sovrascrivendolo .toprc, quindi ho trovato una soluzione per avere una configurazione separata per caso d'uso.
È possibile toputilizzare un file di configurazione personalizzato anziché quello nella directory home degli utenti.
Basta cambiare la HOMEvariabile in una directory personalizzata contenente il .toprcfile per le tue esigenze.

# TOPRC_PROFILE_DIRECTORY contains .toprc (or can be created by saving using shift+w after configuring using keybindings) 
TOPRC_PROFILE_DIRECTORY="<your-directory>"
HOME="$TOPRC_PROFILE_DIRECTORY" top
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.