ИМХО ps -u
показывает очень полезный вывод, намного лучше чем ps -u $USER
:
$ ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
elastic 234897 0.0 0.0 105980 1336 pts/2 S+ Oct10 0:00 /bin/bash ./run.sh collector-json-1.conf
elastic 234899 48.7 7.1 10087120 4433104 pts/2 Sl+ Oct10 2804:11 /usr/java/jdk1.7.0_09_x64/bin/java -Xmx6144m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatin
:
по сравнению с
$ ps -u $USER
PID TTY TIME CMD
234897 pts/2 00:00:00 run.sh
234899 pts/2 1-22:44:04 java
:
- Но почему это «плохой синтаксис»?
/usr/share/doc/procps-3.2.8/FAQ
не очень помогает - Какой будет «правильный синтаксис» для достижения того же результата?
В случае, если это важно:
$ uname -a
Linux h22k34.local 2.6.32-042stab044.17 #1 SMP Fri Jan 13 12:53:58 MSK 2012 x86_64 x86_64 x86_64 GNU/Linux
ps
происходят от этой линии вещей), я часто используюps -fu $USER
... получениеps -f
выходного форматирования, которое несколько похоже наps u
форматирование, но в то же время получение указания пользователя. В случае, если вы хотели оба одновременно.Ответы:
Правильный синтаксис, который возвращает тот же вывод :
Есть веская причина, по которой современный синтаксис
ps
- беспорядок. Исторически существовали две несовместимые версииps
. Опции с лидирующей чертой были унаследованы от версии AT & T Unixps
. Опции без передней черты были унаследованы от BSD. Версияps
этого дистрибутива Linux обычно использует GNU, которая объединила оба набора параметров, а также добавила свой собственный набор параметров, которые начинаются с лидирующей двойной тире.Таким образом,
ps u
это BSD-стиль иps -u $USER
AT & T-стиль. Тот факт, что GNUps
позволяет вам запускатьps -u
и, кроме предупреждения, получать те же выходные данные, что иps u
показывает, что GNU пытается извлечь максимум из плохой ситуации.источник
У
ps
команды исторически был совершенно другой синтаксис в BSD и System V Unix.В BSD
ps
, тоu
параметр (без тира) не принимает параметра и показывает «ориентированные на пользователь выход» с дополнительными колоннами.В SunOS
ps
, то-u
вариант (с тире) принимает имя пользователя в качестве параметра , и только включает в себя процессы , принадлежащие этому пользователю, но без изменения формата отображения.(В качестве еще одного очень распространенного примера, BSD
e
означает «показать среду», а SunOS-e
означает «показать процессы каждого».)Linux procps
ps
пытается поддерживать оба стиля. Так что, если вы используете опцию 'dash'-u
, она будет ожидать, что это SunOS "отфильтровать этого пользователя", а не опция расширенных столбцов. Однако они часто путаются, так что procps пытается сделать то, что вы имели в виду - если имя пользователя отсутствует, оно будет предполагать, что вы задали ему опцию BSD, но использовали синтаксис SunOS.(На самом деле было так много разных вариантов того,
ps
что у procps есть фактическая таблица «личностей», чтобы заставить неоднозначное поведение интерпретироваться как тот или иной стиль или еще один - в дополнение к ручкам типа «UNIX95», «CMD_ENV», "_XPG", "I_WANT_A_BROKEN_PS" ...)источник