Eu estava tentando descobrir quais portas estão em uso na minha máquina Linux Ubuntu. Eu estava lendo o artigo Como verificar se a porta está em uso no Linux ou Unix e vi que um de seus comandos era:
sudo lsof -i -P -n | grep LISTEN
Ainda estou molhando os pés com muitos comandos do Linux, mas acabei de aprender sobre lsof
listar todos os arquivos abertos, então queria entender para que serviam esses sinalizadores.
(E para que servem os sinalizadores -P e -n? Eu olhei o manual, mas simplesmente não está ajudando. Parece que o sinalizador -i é o mais importante aqui.)
Descobri que se eu fizesse um grep para 'LISTEN' sem o sinalizador -i, obteria resultados totalmente diferentes do que com.
No manual diz assim:
-i [i] Esta opção seleciona a listagem de arquivos cujo endereço de Internet corresponda ao endereço especificado em i. Se nenhum endereço for especificado, esta opção seleciona a listagem de todos os arquivos de rede da Internet e x.25 (HP-UX).
Eu realmente não entendo o que isso significa e definitivamente não entendo como isso me ajuda a descobrir quais portas estão em uso.
-i
seleciona arquivos ou soquetes da Internet. Funciona com um parâmetro de endereço opcional. Sem esse parâmetro, ele seleciona todos os soquetes.Você pode usar filtros adicionais com esta opção para selecionar por IPv4/IPv6, por TCP/UDP e assim por diante. A página de manual lista vários exemplos:
-i 4
para selecionar soquetes IPv4,-i 6
para selecionar soquetes IPv6.-i TCP
ou-i UDP
para selecionar por protocolo.-i @hostname
ou-i @ipaddress
selecionar pelo nome/IP da interface à qual o socket está vinculado.-i :port
para selecionar soquetes vinculados a uma porta específica.Para ilustrar as outras duas opções, considere o exemplo a seguir. Esta entrada é do meu sistema, mostrando duas portas CUPS:
Você notará que a porta é especificada como
ipp
- o Internet Printing Protocol. Para transformar isso de volta em um número, a-P
opção é usada:O nome do host é exibido como localhost aqui. Em redes maiores,
lsof
fará um esforço para listar os nomes de host pesquisando-os. Como otimização, você pode pular essa etapa de resolução de nome de host com-n
. Com-n
, os endereços IP são mostrados em vez dos nomes de host:Como um aparte, eu gosto de usar o
ss
comando para acompanhar as portas de escuta. A sintaxe que eu geralmente uso éss -ltnp
, que diz: 1) mostrar portas de escuta, 2) apenas portas TCP, 3) nenhuma pesquisa de nome de host, 4) mostrar IDs de processo. O resultado é assim (mesmas portas do CUPS):