Если то, что Вы хотите, должно позволить dev
выполнять произвольные команды как tomcat
, затем не беспокойтесь su
, палка с sudo. Добавьте следующую строку к sudoers
файл (используют visudo
команда):
dev ALL = (tomcat) NOPASSWD: ALL
Выполненный sudo -iu tomcat
как пользователь dev
выполнять оболочку входа в систему как tomcat
.
На Linux необходимо быть корнем или владельцем процесса для получения информации, которой Вы требуете. По сути, для процессов, работающих как другой пользователь, предварительно ожидая sudo
большая часть того, в чем Вы нуждаетесь. В дополнение к этому, в современных системах Linux, ss
инструмент должен использовать, чтобы сделать это:
$ sudo ss -lptn 'sport = :80'
State Local Address:Port Peer Address:Port
LISTEN 127.0.0.1:80 *:* users:(("nginx",pid=125004,fd=12))
LISTEN ::1:80 :::* users:(("nginx",pid=125004,fd=11))
Можно также использовать тот же вызов, который Вы в настоящее время используете, но не забываете sudo
:
$ sudo netstat -nlp | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx
Можно также использовать lsof:
$ sudo lsof -n -i :80 | grep LISTEN
nginx 125004 nginx 3u IPv4 6645 0t0 TCP 0.0.0.0:80 (LISTEN)
Также можно использовать lsof
утилита. Потребность быть корнем.
# lsof -i :25
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
exim4 2799 Debian-exim 3u IPv4 6645 0t0 TCP localhost:smtp (LISTEN)
exim4 2799 Debian-exim 4u IPv6 6646 0t0 TCP localhost:smtp (LISTEN)
established
соединения, не просто обрабатывает, которые являются listening
.
– firelynx
18.08.2015, 13:10
lsof -i :25 -Fp
, который производит вывод как p1234
.
– Robert
09.03.2017, 12:27
Также можно использовать fuser
:
fuser -v -n tcp 22
Выход :
USER PID ACCESS COMMAND
22/tcp: root 598 F.... sshd
Я использую "CentOS 7 minimal", в котором нет ни netstat
, ни lsof
. Но во многих дистрибутивах linux есть команда статистики сокетов (т.е. ss
).
Вот пример выполнения:
# ss -tanp | grep 6379
LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
Выполнение команды с sudo
даст вам PID
.На моей машине разработки я получаю:
$ netstat -nlp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN -
$ sudo netstat -nlp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 16449/java
И, как упоминалось в других ответах, вы также можете использовать команды ss
или lsof
.
Я работаю над системой Yocto Linux с ограниченным набором доступных инструментов Linux. Мне удалось найти процесс работающего порта, используя следующие команды (, где я нахожу процесс, используя порт 1883):
root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN
tcp 0 0 localhost.localdomain:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN
tcp 0 0 :::hostmon :::* LISTEN
tcp 0 0 localhost:domain :::* LISTEN
tcp 0 0 :::ssh :::* LISTEN
tcp 0 0 :::1883 :::* LISTEN
root@root:~# fuser 1883/tcp
290
root@root:~# ps | grep 290
290 mosquitt 25508 S /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root 8444 S grep 290
Как видно выше, именно программа /usr/sbin/mosquitto
использует порт 1883.
-p
опция для протокола, а не процесса. Посмотрите этот вопрос – Bryan P 10.04.2016, 19:51Finding the PID of the process using a specific port
– mraaroncruz 10.10.2016, 14:05sudo
наверху. – Nacht - Reinstate Monica 06.01.2017, 03:10lsof -ti tcp:80
– Mohnish 19.07.2017, 16:58