Como posso aumentar a largura da coluna ps para a coluna “user”?

6

Eu gosto desse padrão ps aux | grep something .

Dessa forma, posso encontrar facilmente as informações necessárias sem lembrar das opções de linha de comando para o comando ps .

Infelizmente, os comandos ps cortam o nome de usuário do linux (primeira coluna) após 7 caracteres e adicionam um + se o nome de usuário for maior.

No meu caso, é importante, pois os nomes dos usuários são como "foobar_123" e "foobar_234".

Eu sei que eu poderia usar o seguinte comando, mas seria muito bom se eu ainda pudesse usar o padrão ps aux | grep something .

ps ax o user:16,pid,pcpu,pmem,vsz,rss,stat,start_time,time,cmd

Como obter o formato acima por meio da configuração, para que ps aux | grep something não corte o nome de usuário?

Dica: respostas como "use ps ... special ... args ..." não correspondem à pergunta acima.

Versão: procps-ng versão 3.3.5

    
por guettli 07.11.2017 / 11:42

3 respostas

6

Se você sabe que um longo comando com múltiplas opções faz o que você quer, mas você não quer digitá-lo a cada vez, então (supondo que você esteja usando o Bash) você pode criar um alias para esse comando para facilitar. Por exemplo:

alias ps_mod='ps ax o user:16,pid,pcpu,pmem,vsz,rss,stat,start_time,time,cmd'

Então você pode simplesmente digitar esse comando simples. Você pode adicionar esta linha ao seu arquivo ~ / .bash_profile (ou ~ / .bashrc, dependendo do seu sistema), para que seja definido automaticamente no login.

Se você não estiver usando o Bash, provavelmente poderá fazer algo semelhante definindo uma função do shell.

    
por 10.11.2017 / 15:01
3

Pequeno remendo para a fonte procps-ng

Parece que um patch rápido do código-fonte faria o truque; normalmente, a coluna do usuário é definida como 8 e será truncada conforme detalhado abaixo.

Patch aplica-se ao commit 64fa8898 que foi marcado como v3.3.5 (link acima)

Você também pode fazer o download da fonte mais recente se for compilá-la - sugiro fazer o download da fonte mais recente e editar a linha "USER" no arquivo de origem ps/output.c do procps-ng de 8 a 16 como abaixo, em vez de corrigir a versão antiga (2013-ish):

---
 ps/output.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ps/output.c b/ps/output.c
index 9644ed3..41c2eda 100644
--- a/ps/output.c
+++ b/ps/output.c
@@ -1564,7 +1564,7 @@ static const format_struct format_array[] = {
 {"uname",     "USER",    pr_euser,    sr_euser,   8, USR,    DEC, ET|USER}, /* man page misspelling of user? */
 {"upr",       "UPR",     pr_nop,      sr_nop,     3,   0,    BSD, TO|RIGHT}, /*usrpri*/
 {"uprocp",    "UPROCP",  pr_nop,      sr_nop,     8,   0,    BSD, AN|RIGHT},
-{"user",      "USER",    pr_euser,    sr_euser,   8, USR,    U98, ET|USER}, /* BSD n forces this to UID */
+{"user",      "USER",    pr_euser,    sr_euser,  16, USR,    U98, ET|USER}, /* BSD n forces this to UID */
 {"usertime",  "USER",    pr_nop,      sr_nop,     4,   0,    DEC, ET|RIGHT},
 {"usrpri",    "UPR",     pr_nop,      sr_nop,     3,   0,    DEC, TO|RIGHT}, /*upr*/
 {"util",      "C",       pr_c,        sr_pcpu,    2,   0,    SGI, ET|RIGHT}, // not sure about "C"
-- 

Adendo

De acordo com a fonte do ps :

// The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition)
// requires that user and group names print as decimal numbers if there is
// not enough room in the column.  However, we will now truncate such names
// and provide a visual hint of such truncation.  Hopefully, this will reduce
// the volume of bug reports regarding that former 'feature'.
//
// The UNIX and POSIX way to change column width is to rename it:
//      ps -o pid,user=CumbersomeUserNames -o comm
// The easy way is to directly specify the desired width:
//      ps -o pid,user:19,comm
//
    
por 15.11.2017 / 09:06
2

Esta questão foi colocada em 2014 nos fóruns do askubuntu.com

Minha solução é inspirada no link acima, mas feita com alguma bondade portátil. Adicione esta função ao seu .bashrc e siga em frente!

ps() {
    if [[ $@ =~ .u* || *u ]]; then
        command getent passwd |\
        awk -F':' ' \
        !len || length($1) > len {len=length($1);s=$1}\
        END{print s, len; system("ps axo user:"len",pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm");}'
    else
        command ps "$@"
    fi
}

Adicione a função acima ao seu ~ / .bashrc, ps aux | grep someshit como você faria normalmente, e aproveite a saída com suas colunas formatadas para o maior nome de usuário possível, conforme determinado em um modo amigável e amigável de / etc / passwd usando getent - - então analisado via awk com a ajuda do bash para salvar o valor inteiro relacionado à string de nome de usuário mais longa.

Agora, quando eu

$ ps axu | grep this

ou

$ ps uaz | grep this

ou

$ ps aux | grep this

Saída:

thisisareallylonguser 9289 0.0 0.0 23192 4716 pts/6 S 17:59:54 00:00:00 bash

Deixe-me saber se você quer que eu passe pela função bash no caso de não ficar imediatamente claro.

    
por 16.11.2017 / 03:17

Tags