В bash
:
bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; done'
(echo
мог быть заменен любой командой...
Или в perl
:
perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"}'
Где print "I will not automate this punishment in absurdum.\n"
мог быть заменен "любой" командой, окруженной обратными галочками (').
И для паузы, добавьте a sleep
оператор в для цикла:
bash -c 'while [ 0 ]; do echo "I will not automate this punishment in absurdum."; sleep 1; done'
и
perl -e 'for (;1;) {print "I will not automate this punishment in absurdum.\n"; sleep 1}'
netstat -lnp
перечислит pid и обработает имя рядом с каждым портом прослушивания. Это будет работать в соответствии с Linux, но не всеми другими (как AIX.) Добавляют -t
если Вы хотите TCP только.
# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:24800 0.0.0.0:* LISTEN 27899/synergys
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3361/python
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2264/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22964/apache2
tcp 0 0 192.168.99.1:53 0.0.0.0:* LISTEN 3389/named
tcp 0 0 192.168.88.1:53 0.0.0.0:* LISTEN 3389/named
и т.д.
На AIX netstat и rmsock может использоваться для определения привязки процесса:
[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4 0 0 *.37 *.* LISTEN
f1000700025de3b0 tcp 0 0 *.80 *.* LISTEN
f1000700002803b0 tcp4 0 0 *.111 *.* LISTEN
f1000700021b33b0 tcp4 0 0 127.0.0.1.32780 *.* LISTEN
# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).
Другой инструмент, доступный на Linux, является ss. Из ss страницы справочника на Fedora:
NAME
ss - another utility to investigate sockets
SYNOPSIS
ss [options] [ FILTER ]
DESCRIPTION
ss is used to dump socket statistics. It allows showing information
similar to netstat. It can display more TCP and state informations
than other tools.
Вывод в качестве примера ниже - последний столбец показывает привязку процесса:
[root@box] ss -ap
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::http :::* users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN 0 128 127.0.0.1:munin *:* users:(("munin-node",1278,5))
LISTEN 0 128 :::ssh :::* users:(("sshd",1175,4))
LISTEN 0 128 *:ssh *:* users:(("sshd",1175,3))
LISTEN 0 10 127.0.0.1:smtp *:* users:(("sendmail",1199,4))
LISTEN 0 128 127.0.0.1:x11-ssh-offset *:* users:(("sshd",25734,8))
LISTEN 0 128 ::1:x11-ssh-offset :::* users:(("sshd",25734,7))
Я был однажды сталкивающийся с попыткой определить, какой процесс был позади конкретного порта (на этот раз, это было 8000). Я попробовал множество lsof и netstat, но затем рискнул и попытался поразить порт через браузер (т.е. http://hostname:8000/). О чудо экран-заставка приветствовал меня, и стало очевидно, чем был процесс (для записи, это был Splunk).
Еще одна мысль: "PS-e-o pid, args" (YMMV) может иногда показывать номер порта в списке аргументов. Grep является Вашим другом!
telnet hostname 8000
и посмотрите, печатает ли сервер баннер. Однако это главным образом полезно, когда сервер работает на машине, где у Вас нет доступа оболочки и затем нахождения, что идентификатор процесса не релевантен.
– Gilles 'SO- stop being evil'
08.05.2011, 17:45
netstat -p
выше мой голос. также посмотрите наlsof
. – Rich Homolka 15.03.2011, 21:56