주어진 포트를 사용하는 프로세스 (특히 프로세스 ID)를 찾고 싶습니다. 한 가지 발견은 sudo를 사용하고 싶지 않으며 루트로 로그인하지 않은 것입니다. 이 작업을 수행하려는 프로세스는 프로세스 ID를 찾으려는 동일한 사용자가 실행하므로 이것이 간단하다고 생각했을 것입니다.
모두 lsof
와 netstat
내가 sudo는을 사용하여 실행하지 않으면 나에게 프로세스 ID를 말하지 않을 것이다 – 그들은 포트가 있지만 사용되고 있음을 말해 것입니다.
일부 추가 컨텍스트-SSH를 통해 관리하는 서버에 연결하고 역방향 포트 전달을 만드는 다양한 앱이 있습니다. 일단 설정되면 내 서버는 전달 포트를 사용하여 일부 처리를 수행 한 다음 연결을 끊을 수 있습니다. 특정 포트 (각 앱마다 고유 한 포트)를 프로세스에 매핑 할 수 있다면 이것은 간단한 스크립트입니다. 어떤 제안?
그건 그렇고 우분투 상자에 있지만 대부분의 Linux 배포판에서 모든 솔루션이 표준으로 추측됩니다.
답변
--program
NETSTAT 쇼 당신의 PID와 자신의 프로세스의 이름에 대한 옵션을 선택합니다. 이 옵션은 net-tools 1.60 중 netstat 1.42의 RHEL 6에서 작동 중입니다.
netstat -an --tcp --program
내 프로세스의 PID 를 보여줍니다.
답변
Pawel의 제안은 나에게 잘 작동하는 것 같지만 대안으로 shell1에서 듣는 것이 있습니다.
[madhatta@risby ~]$ nc -l localhost 3456
그리고 여기 lsof
shell2에서 그것을 보았습니다 .
[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 18109 madhatta 3u IPv4 69205153 0t0 TCP localhost.localdomain:vat (LISTEN)
편집 : 당신은 의견을 작성
SSH 전달은 다르게 작동해야합니다. 프로세스가 동일한 사용자가 소유하더라도 루트 / 스도 도로 실행하지 않으면 lsof 출력에 전혀 표시되지 않습니다.
그러나 이것은 나에게는 그렇지 않습니다. ssh를 사용하여 로컬 포트 8001을 전달
ssh vpn.example.com -L 8001:rt.int:80
하면 다음을 찾습니다.
[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 5375 madhatta 8u IPv6 381234 0t0 TCP [::1]:vcom-tunnel (LISTEN)
ssh 5375 madhatta 9u IPv4 381235 0t0 TCP 127.0.0.1:vcom-tunnel (LISTEN)
샘플 출력 중 일부를 보여 주시겠습니까? 너무 많이 수정하지 않았습니까?