ZFS, порожденный в Солярисе в 2004 и теперь доступный в нескольких Нельдах включая FreeBSD и Linux (хотя на Linux все еще в бета-версии а не в ядре магистрали из-за лицензирования проблем) также, позволяет добавлять один или несколько вторичных названных кэшей L2ARC
на любом блочном устройстве для того же самого вида цели.
Работает следующее:
ps aux | cut -c1-$(stty size </dev/tty | cut -d' ' -f2)
Это тоже работает:
v=$(stty size | cut -d' ' -f2) ; ps aux | cut -c1-$v
Проблема, похоже, в том, что stty
должен иметь tty на стандартном входе, чтобы функционировать. Приведенные выше два подхода решают эту проблему.
Есть еще один вариант. В то время как stdin и stdout stty
перенаправляются в приведенных выше командах, stderr не перенаправляется: он по-прежнему указывает на терминал. Как ни странно, stty
также будет работать, если ему в качестве входных данных указать stderr:
ps aux | cut -c1-$(stty size <&2 | cut -d' ' -f2)
Вы также можете немного улучшить вывод ps
.
ps --width ${n:-$COLUMNS} ${opts} #set ps terminal width
ps -ww ${opts} #no word wrap
ps -o ${only_interesting_output} ${opts} #trim output
Это сообщит ps
о необходимости синтаксического анализа вывода в соответствии с вашими требованиями.
Конечно, если вы не используете перенос слов, у вас проблема с отсутствием информации. Вам действительно нужно все это для всех процессов? Если да, откройте его в пейджере:
ps ww ${opts} | $PAGER
Если нет, укажите, что вы хотите видеть:
ps -o args= -p $pid
В качестве альтернативы вы можете явно сообщить ps
вашего терминала - width
:
man ps
...
w
Широкий выход. Используйте эту опцию дважды для неограниченной ширины.
-w
Широкий выход. Используйте эту опцию дважды для неограниченной ширины.
- ширина n
Установить ширину экрана.
Параметр - width
работает в точном соответствии с вашими запрошенными спецификациями без необходимости использования каких-либо дополнительных фильтров или вспомогательных процессов (которые, вероятно, только загромождают ваш -aux
вывод даже более). А с $ COLUMNS
, как показано выше и как указывает Стефан, он будет даже работать динамически.
Вероятно, стоит отметить, что люди часто пытаются добавить такие ненужные фильтры, чтобы они могли разместить | pipe
через другой фильтр для анализа вывода, который является также, скорее всего, будет ненужным. Конечно, под людьми я в основном имею в виду меня.
Операнд -o
utput, о котором я упоминал выше, позволяет фильтровать, какие столбцы отображаются в ps
, а при добавлении задания =
вы даже можете назвать столбец как вам будет угодно. Я оставляю назначение пустым и передаю ему target -p
rocess $ pid
, поэтому единственный вывод из ps
вообще - это $ pid
имя команды и ее аргументы
при вызове. А -o
едва ли поверхностно определяет, что ps
будет отображать, а что нет.Это направление, которое я бы порекомендовал вам выбрать, особенно через:
man ps
...
Чтобы увидеть каждый процесс в системе с использованием синтаксиса BSD:
ps ax
ps axu
Чтобы распечатать дерево процессов:
ps -ejH
ps axjf
Чтобы получить информацию о потоках:
ps -eLf
ps axms
Чтобы получить информацию о безопасности:
ps -eo euser, ruser, suser, fuser, f , comm, label
ps axZ
ps -eM
Чтобы увидеть каждый процесс, запущенный как root (реальный и эффективный ID) в пользовательском формате:
ps -U root -u root u
To просмотр каждого процесса в пользовательском формате:
ps -eo pid, tid, class, rtprio, ni, pri, psr, pcpu, stat, wchan: 14, comm
ps axo stat, euid, ruid, tty, tpgid, sess, pgrp, ppid, pid, pcpu, comm
ps -Ao pid, tt, user, fname, tmout, f, wchan
Распечатать только идентификаторы процессов syslogd:
ps - C syslogd -o pid =
Вывести только имя PID 42:
ps -p 42 -o comm =
Некоторые оболочки, такие как zsh
, bash
или mksh
автоматически устанавливают переменную $COLUMNS
в ширину терминала, поэтому здесь не нужно вызывать stty
.
Все реализации ps
, которые я пробовал, поддерживающие этот нестандартный (BSD-типа) синтаксис, сами запрашивают ширину терминала. Я удивлен, что ваша не делает этого. Я ожидаю, что он будет смотреть на содержимое COLUMNS
переменной окружения.
Так что вы можете сделать:
export COLUMNS; ps aux
Если нет,
ps aux | cut -c"1-$COLUMNS"
Вы также можете сказать своему терминалу не заворачивать строки:
tput rmam
ps aux