Как заставить команду ps отображать память в мегабайтах вместо килобайт?

Из man snmp_config :

   INCLUDING OTHER CONFIGURATION FILES
   It is possible to include other configuration files for processing 
   during normal configuration file processing.:

          # include site specific config
          includeFile site.conf

   This will load the specified configuration file. The
   path to file must be either absolute, starting with '/',
   or relative. The relative path is then relative to the directory
   where the parent file with 'includeFile' directive resides.

   The included file name does not need to have '.conf' suffix.

          # include a all *.conf files in a directory
          includeDir /etc/snmp/config.d

   This will search specified directory for all files with '.conf'
   suffix and process them as if they were included using includeFile
   directive. The configuration files are not processed in any particular
   order.

   The specified directory must be absolute directory path.
9
21.06.2017, 05:40
1 ответ

Насколько я знаю, этого нельзя добиться простой командой psс параметрами. Однако вы можете использовать некоторые текстовые процессоры, такие как awk, и заставить их делать то, что вы хотите :

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

Это берет результат из ps, а затем для каждой строки, кроме первой, он заменяет 5-й столбец, который обычно находится в KB, на MB, добавляя суффикс M.

Вы можете сделать его псевдонимом и сохранить в .bashrc файле, чтобы вы могли вызывать его как-то вроде myps.

Большинство людей спрашивают, как сохранить формат или использовать другие единицы измерения и точность.

Для простой версии можно использовать column -tвыходной фильтр:

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

Это, однако, неправильно распознает пробелы в последнем столбце. К сожалению, нам приходится иметь дело с форматированием текста и подготавливать собственную строку формата в формате printf-.

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);}'

Пояснение:

  • 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, рассчитанной в предыдущем условии, поэтому мы можем отображать вывод команды с сохранением пробелов.
32
27.01.2020, 20:05

Теги

Похожие вопросы