Я использую следующую версию Linux

[davea@mydevbox ~]$ uname -a
Linux mydevbox.mydomain.com 5.7.8-35.36.amzn1.x86_64 #1 SMP Wed Mar 16 17:15:34 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Я хочу узнать команду, которая запустила процесс, который прослушивает определенный порт. В идеале я хотел бы узнать, откуда эта команда работает. Но я не могу определить команду. Используя Nmap, я могу сказать, что это сервер Jetty ...

[davea@mydevbox ~]$ nmap -sV -p 4444 localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2016-04-07 20:54 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00020s latency).
PORT     STATE SERVICE VERSION
4444/tcp open  http    Jetty 5.1.x (Linux/4.4.5-15.26.amzn1.x86_64 amd64 java/1.7.0_79)

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.25 seconds

Есть ли способ выяснить, какая команда породила сервер Jetty?

Спасибо, Дэйв

Изменить: Вот вывод для данного предложения.

[davea@mydevbox ~]$ sudo lsof -i :4444
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2140 root   10u  IPv6   9994      0t0  TCP *:krb524 (LISTEN)

[davea@mydevbox ~]$ sudo ps -p $(pidof java) -o args
ERROR: Process ID list syntax error.
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
                                      -q by process ID (unsorted & quick)
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                                      --quick-pid
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy
[davea@mydevbox ~]$ 

2 ответа2

3

Есть много способов. Простой включает в себя ss:

# ss -lntp | grep 22
  LISTEN     0      128                       *:22                    *:*      users:(("sshd",1100,3))
  LISTEN     0      128                      :::22                   :::*      users:(("sshd",1100,4))

Опции означают: -l отображать порты, которые прослушивает процесс, -n не разрешать имена, -t рассматривать только порты TCP, -p отображать процесс, прослушивающий этот порт. В этом случае вы указываете имя процесса (sshd , что вряд ли удивительно) и идентификатор процесса, 1100. Для порта UDP указанная выше команда должна быть преобразована в ss -lnup .

Или вы можете использовать lsof:

# lsof -i :22
  COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  sshd    1100 root    3u  IPv4  10089      0t0  TCP *:22 (LISEN)
  sshd    1100 root    4u  IPv6  10091      0t0  TCP *:22 (LISTEN

Для порта UDP команда должна быть lsof -i UDP:22 .

Наконец, если вы хотите увидеть полную командную строку, которая запустила данный процесс, вы можете сделать следующее:

# ps -p $(pidof sshd) -o args
  COMMAND
  /usr/sbin/sshd -D

В этом случае вся команда не очень информативна, но иногда это может быть так: знаете ли вы все аргументы в вызове вашего X-сервера?

# ps -p $(pidof X) -o args
  COMMAND
  /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

Если вы хотите узнать больше, например, какая цепочка процессов запустила данную программу, что может указывать на пользователя, запустившего программу, используйте

ps auxf

которая справа покажет вам цепочку вилок, ведущую к запущенной в данный момент программе, а также много информации.

Как только вы узнаете идентификатор процесса, PID , вы сможете найти всю информацию, доступную системе, в каталоге /proc/PID , а хитрая часть заключается в том, что информация не сразу говорит сама за себя. Если вам интересно, эта статья предоставляет больше информации, в противном случае используйте man proc .

И наконец, помните, что эта информация не задана в камне: программы могут изменять хотя бы часть своей информации, см., Например, этот ответ по ServerFault.

0

lsof -i:4444

должен перечислить вам процессы, используя 4444. Вы должны запустить его как root или через sudo, чтобы избежать вывода, ограниченного отображением только процессов вашего идентификатора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .