mostra apenas serviços em execução usando service --status-all e grep

0

Se eu service --status-all obtenho algo assim:

[ ? ]  webmin
[ ? ]  whoopsie
[ + ]  winbind
[ - ]  x11-common

Eu quero mostrar apenas os que estão correndo ([+]), então eu fiz

service --status-all | grep +

que os destaca, mas como faço para excluir as outras linhas?

Além disso, isso mostra serviços em execução reais ou apenas aqueles que estão programados para serem executados na inicialização?

    
por eggbert 14.08.2013 / 12:32

1 resposta

1

Você pode alterar a quantidade de linhas circunvizinhas grep saídas (chamadas de "contexto") com as opções -C [num] ou --context=[num] .

Normalmente, a opção padrão para grep é imprimir sem contexto, então o comando que você usou deve ficar bem. Você pode forçá-lo a mostrar apenas as linhas correspondentes por service --status-all | grep + -C 0 .

Para excluir linhas correspondentes, use -v ou --invert-match . Assim, você pode canalizar o comando original através de | grep -v '[ ?' | grep -v '[ -' para se livrar das linhas com - ou ? como seu status. Você também pode combinar várias sequências de correspondência usando "ou" escapado (o símbolo de pipe), como grep -v '[ ?\|[ -' .

No entanto, como service direciona sua saída para stderr em vez do normalstdout, os fluxos de saída precisam ser combinados com |& para que o grep funcione corretamente. Então, o comando de trabalho aqui seria service --status-all |& grep + .

    
por 14.08.2013 / 13:09

Tags