output lsof separado por coluna

2

Eu estou usando este comando abaixo e tentando separar as colunas Eu só quero pegar o PID para usá-lo no meu script python.

Eu posso facilmente obter essa linha por linha, mas como separar as colunas de uma maneira não hacky?

Eu posso dividir o espaço facilmente, mas vamos encarar isso, é uma idéia terrível, alguma sugestão?

root@python-VirtualBox:/var/python# lsof | grep TCP
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    3449 root    3u  IPv4  24248      0t0  TCP *:22 (LISTEN)
sshd    3449 root    4u  IPv6  24257      0t0  TCP *:22 (LISTEN)
    
por TheHidden 16.01.2016 / 19:34

3 respostas

1

Acho que awk é bom para isso porque divide os campos para você:

lsof | awk '$8 == "TCP" { print $2 }'

Se o campo 8 for "TCP", imprima o campo 2.

    
por 16.01.2016 / 19:47
4

O comando lsof é bastante completo, permitindo que você especifique vários critérios de pesquisa diferentes. Em particular, a opção -i permite pesquisar por endereço na Internet, incluindo protocolo, tornando grep desnecessária. Então você poderia substituir

lsof | grep TCP

com

lsof -i TCP

lsof também permite que você especifique em quais campos você está interessado com a opção -F e apenas gera aqueles (um em cada linha). Então nós podemos fazer

lsof -i TCP -F 'p'

para gerar uma lista de PIDs para processos que estão usando TCP.

No entanto, cada um desses PIDs é prefixado com um "p" (por exemplo, "p156"), então, finalmente, podemos usar cut para obter o ID numérico. Isso nos dá um comando final de

lsof -i TCP -F 'p' | cut -c 2-

É claro que a resposta de @ RobertL também está perfeitamente bem, mas eu gosto de me desafiar a não usar o AWK para resolver todos os meus desafios de processamento de texto.

    
por 17.01.2016 / 02:44
2

in:

lsof -iTCP -Fp

out:

p1135                                
p6326                                                                  
p16841                                                                 
p18130                                                                 
p37908                                                                 
p41768                                                                 
p51944                                                                 
p71882                                                                 
p74759                                                                 
p79636                                                                 
p82203                                
    
por 17.01.2016 / 21:25