Я продолжаю думать, что функции лучше, чем eval
переменные uing
#!/bin/bash
version() { uname -a;}
wm() { head -n1 <(openbox --version);}
for f in $(compgen -A function)
do declare -f $f | sed '1,2d; $d'
$f
done
Вы можете использовать ss
из пакета iproute2 (который похож на netstat
):
ss -l -p -n | grep "pid=1234,"
или (для более старой версии iproute2):
ss -l -p -n | grep ",1234,"
Замените 1234 на PID программы.
Мне неизвестен способ использования инструментов iproute2
. Но в качестве обходного пути вы можете попробовать это.
lsof -Pan -p PID -i
должен предоставить вам информацию, которую вы ищете.
Выходные данные
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
Я получил эту команду от здесь , но не уверен в точной ссылке, поскольку все они записаны в записной книжке. Но вы тоже можете проверить оттуда.
Вы можете использовать netstat
, чтобы определить pid каждого процесса прослушивания.
netstat - Печать сетевых подключений, таблиц маршрутизации, статистики интерфейсов, маскарадных подключений и группового членства
-a, --all Показывать как слушающие, так и не слушающие (для TCP это означает установленные соединения) сокеты. С параметром --interfaces показать интерфейсы, которые не отмечены
- numeric, -n Показывать числовые адреса вместо того, чтобы пытаться определить символические имена хоста, порта или пользователя.
-p, --program Показать PID и имя программы, которой принадлежит каждый сокет.
Вот пример:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
@jofel's answer показывает подходящий инструмент, ss
, вот замены для других сетевых инструментов в iproute2.
Утраченные команды и их эквиваленты в iproute2 выглядят следующим образом:
deprecated replacement(s)
========== ==============
- arp ip n (ip neighbor)
- ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel ip tunnel
- iwconfig iw
- nameif ip link, ifrename
- netstat ss, ip route (for netstat-r), ip -s link (for netstat -i),
ip maddr (for netstat-g)
- route ip r (ip route)
Основной список также находится здесь, в Википедии: http://en.wikipedia.org/wiki/Iproute2.
Другой метод для lsof
, если вы не знаете PID, а знаете только имя программы:
lsof -Pa -p $(pgrep [programName]) -i