it-swarm.com.de

Wie kann der Befehl ps den Speicher in mb anstelle von kb anzeigen lassen?

Der Linux-Befehl ps zeigt verschiedene Speichernutzungen wie RSS und die Größe standardmäßig in KB an. Gibt es eine Möglichkeit, in mb oder gb wie ls -s --human-readable tut?

10
balki

AFAIK Sie können es nicht einfach durch den reinen Befehl ps mit Optionen erreichen. Sie können jedoch einige Textprozessoren wie awk verwenden und es so machen, dass Sie tun, was Sie wollen:

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}'

Dies ergibt sich aus ps und ersetzt dann für jede Zeile mit Ausnahme der ersten die fünfte Spalte, die normalerweise in KB ist, durch MB, indem das Suffix M hinzugefügt wird.

Sie können es zu einem Alias ​​machen und in der Datei . Bashrc speichern, damit Sie es mit etwas wie myps aufrufen können.

Die meisten Leute fragen, wie man das Format beibehält oder andere Einheiten und Präzision verwendet.

Für eine einfache Version können Sie den Ausgabefilter column -t Verwenden:

ps afu | awk 'NR>1 {$5=int($5/1024)"M";}{ print;}' | column -t

Dies erkennt jedoch Leerzeichen in der letzten Spalte nicht korrekt. Leider müssen wir uns mit der Textformatierung befassen und unsere eigene Formatzeichenfolge im printf -ähnlichen Format vorbereiten.

ps afu | awk 'NR==1 {o=$0; a=match($0,$11);}; NR>1 {o=$0;$5=int(10*$5/1024)/10"M";}{ printf "%-8s %6s %-5s %-5s %9s %9s %-8s %-4s %-6s %-5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, substr(o, a);}'

Erläuterung:

  • Die Bedingung NR==1 Gilt nur für die erste Zeile (Header). Wir verwenden die ursprüngliche ps-Ausgabe, um zu bestimmen, wo COMMAND startet:
    • o=$0 Speichert die unveränderte gesamte Zeile, damit wir sie später verwenden können
    • a=match($0,$11) findet die Position des 11. Feldes (an der Stelle, an der die COMMAND-Spalte in der ursprünglichen Ausgabe beginnt)
  • NR>1 Steht für folgende Zeilen (Daten). Wir ändern das 5. Feld:
    • $5=int(10*$5/1024)/10"M" ändert den Wert in Megabyte mit einer Dezimalstelle und fügt das Suffix "M" hinzu.
    • printf zeigt alle Felder in spaltenartiger Form an:
      • %-10s Bedeutet s für Zeichenfolge, 10 Für 10 Zeichen Breite, - Für Linksausrichtung
      • %8s Bedeutet s für Zeichenfolge, 8 Für 8 Zeichen breit und da kein - Ausgegeben wird, ist die Ausgabe dieses Felds rechtsbündig.
    • substr(o, a) verwendet die Teilzeichenfolge der ursprünglichen Zeile (daher o, die zuvor gespeichert wurde) ab der Position a, die in der vorherigen Bedingung berechnet wurde, sodass die Befehlsausgabe mit beibehaltenen Leerzeichen angezeigt werden kann.
19
DevilaN