Как заставить команду ps показывать память в mb вместо kb?
11
Команда Linux ps показывает различное использование памяти, например, rss, размер в килобайтах по умолчанию. Есть ли способ показать в мб или гб как ls -s --human-readableделает?
Отсутствие упоминания в man psпредполагает, что такой встроенной опции нет.
Ульрих Шварц
Ответы:
20
AFAIK, вы не можете добиться этого просто с помощью чистой psкоманды с опциями. Однако вы можете использовать некоторые текстовые процессоры, например, awkи заставить их делать то, что вы хотите:
Это берет результат из psи затем для каждой строки, кроме первой, которая заменяет 5-й столбец, который обычно находится в КБ, в МБ, добавляя суффикс М
Вы можете сделать его псевдонимом и сохранить его в файле .bashrc, чтобы вы могли вызывать его как-то так myps.
Большинство людей спрашивают, как сохранить формат или использовать другие единицы и точность.
Для простой версии вы можете использовать column -tвыходной фильтр:
Это, однако, не распознает пробелы в последнем столбце правильно. К сожалению, мы имеем дело с форматированием текста и готовим нашу собственную строку формата в printfподобном формате.
NR==1условие только для первой строки (заголовок). Мы используем исходный вывод ps, чтобы определить, откуда начинается COMMAND:
o=$0 хранит неизмененную целую строку, чтобы мы могли использовать ее позже
a=match($0,$11) находит местоположение 11-го поля (должно быть там, где столбец COMMAND начинается в исходном выводе)
NR>1для следующих строк (данных). Мы меняем 5-е поле:
$5=int(10*$5/1024)/10"M" изменяет значение в мегабайтах с одним десятичным знаком и добавляет суффикс "M".
printf отображает все поля в виде столбца:
%-10sозначает sдля строки, 10для 10 символов в ширину, -для выравнивания по левому краю
%8sозначает sдля строки, 8для 8 символов в ширину, и из-за отсутствия -вывода этого поля выравнивается по правому краю.
substr(o, a)берет подстроку исходной строки (следовательно, oсохраненной ранее), начиная с позиции, aвычисленной в предыдущем условии, поэтому мы можем отобразить вывод команды с сохранением пробелов.
man ps
предполагает, что такой встроенной опции нет.Ответы:
AFAIK, вы не можете добиться этого просто с помощью чистой
ps
команды с опциями. Однако вы можете использовать некоторые текстовые процессоры, например,awk
и заставить их делать то, что вы хотите:Это берет результат из
ps
и затем для каждой строки, кроме первой, которая заменяет 5-й столбец, который обычно находится в КБ, в МБ, добавляя суффикс МВы можете сделать его псевдонимом и сохранить его в файле .bashrc, чтобы вы могли вызывать его как-то так
myps
.Большинство людей спрашивают, как сохранить формат или использовать другие единицы и точность.
Для простой версии вы можете использовать
column -t
выходной фильтр:Это, однако, не распознает пробелы в последнем столбце правильно. К сожалению, мы имеем дело с форматированием текста и готовим нашу собственную строку формата в
printf
подобном формате.Объяснение:
NR==1
условие только для первой строки (заголовок). Мы используем исходный вывод ps, чтобы определить, откуда начинается COMMAND:o=$0
хранит неизмененную целую строку, чтобы мы могли использовать ее позжеa=match($0,$11)
находит местоположение 11-го поля (должно быть там, где столбец COMMAND начинается в исходном выводе)NR>1
для следующих строк (данных). Мы меняем 5-е поле:$5=int(10*$5/1024)/10"M"
изменяет значение в мегабайтах с одним десятичным знаком и добавляет суффикс "M".%-10s
означаетs
для строки,10
для 10 символов в ширину,-
для выравнивания по левому краю%8s
означаетs
для строки,8
для 8 символов в ширину, и из-за отсутствия-
вывода этого поля выравнивается по правому краю.substr(o, a)
берет подстроку исходной строки (следовательно,o
сохраненной ранее), начиная с позиции,a
вычисленной в предыдущем условии, поэтому мы можем отобразить вывод команды с сохранением пробелов.источник
1.23GB
ps aux | awk '{$5=int(100 * $5/1024/1024)/100"GB";}{ print;}'
ps
форматирование? Снимки полностью удаленыawk