Linux에서 오픈 파일을 확인하기 위해 ‘lsof’ 명령 사용하는 방법

이것은 우리의 계속되는 시리즈 중 하나인 Linux 명령어이며, 이 글에서는 실제 예제와 함께 lsof 명령어를 검토할 것입니다. lsof‘LiSt Open Files’의 의미로, 어떤 파일이 어떤 Linux 프로세스에 의해 열려 있는지 알아내는 데 사용됩니다.

우리가 다 아는 대로 Linux/Unix모든 것을 파일로 간주합니다 (파이프, 소켓, 디렉터리, 장치 등). lsof 명령어를 사용하는 이유 중 하나는 디스크를 마운트 해제할 수 없을 때 파일이 사용 중이라고 나오는 경우입니다. lsof 명령어를 사용하여 쉽게 사용 중인 파일을 식별할 수 있습니다.

10 Linux lsof Command Examples

1. lsof 명령어로 모든 열린 파일 나열하기

다음 예에서는 열린 파일의 긴 목록을 보여줄 것입니다. 그 중 일부는 더 쉽게 이해할 수 있도록 추출되어 명령, PID, 사용자, FD, 유형 등과 같은 열을 표시합니다.

# lsof

COMMAND    PID      USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init         1      root  cwd      DIR      253,0      4096          2 /
init         1      root  rtd      DIR      253,0      4096          2 /
init         1      root  txt      REG      253,0    145180     147164 /sbin/init
init         1      root  mem      REG      253,0   1889704     190149 /lib/libc-2.12.so
init         1      root   0u      CHR        1,3       0t0       3764 /dev/null
init         1      root   1u      CHR        1,3       0t0       3764 /dev/null
init         1      root   2u      CHR        1,3       0t0       3764 /dev/null
init         1      root   3r     FIFO        0,8       0t0       8449 pipe
init         1      root   4w     FIFO       0,8       0t0       8449 pipe
init         1      root   5r      DIR       0,10         0          1 inotify
init         1      root   6r      DIR       0,10         0          1 inotify
init         1      root   7u     unix 0xc1513880       0t0       8450 socket

섹션과 그 값은 자체 설명적입니다. 그러나 FD & TYPE 열에 대해서는 보다 정확하게 검토할 것입니다.

FD – 파일 설명자를 나타내며 다음과 같은 값을 볼 수 있습니다.

  • cwd 현재 작업 디렉토리
  • rtd 루트 디렉토리
  • txt 프로그램 텍스트 (코드 및 데이터)
  • mem 메모리 맵 파일

또한 FD 열에서 1u와 같은 숫자는 실제 파일 설명자이며 u,r,w와 같은 모드가 뒤따릅니다.

  • r for read access.
  • w for write access.
  • u for read and write access.

TYPE – 파일의 유형과 식별.

  • DIR – 디렉토리
  • REG – 일반 파일
  • CHR – 문자 특수 파일.
  • FIFO – 선입선출

2. 사용자별 열린 파일 목록

다음 명령어는 사용자 tecmint의 모든 열려있는 파일 목록을 표시합니다.

# lsof -u tecmint

COMMAND  PID    USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
sshd    1838 tecmint  cwd    DIR      253,0     4096      2 /
sshd    1838 tecmint  rtd    DIR      253,0     4096      2 /
sshd    1838 tecmint  txt    REG      253,0   532336 188129 /usr/sbin/sshd
sshd    1838 tecmint  mem    REG      253,0    19784 190237 /lib/libdl-2.12.so
sshd    1838 tecmint  mem    REG      253,0   122436 190247 /lib/libselinux.so.1
sshd    1838 tecmint  mem    REG      253,0   255968 190256 /lib/libgssapi_krb5.so.2.2
sshd    1838 tecmint  mem    REG      253,0   874580 190255 /lib/libkrb5.so.3.3

3. 특정 포트에서 실행 중인 프로세스 찾기

특정 포트의 모든 실행 중인 Linux 프로세스를 찾으려면 -i 옵션과 함께 다음 명령어를 사용하세요. 아래 예제는 22번 포트의 모든 실행 중인 프로세스를 나열합니다.

# lsof -i TCP:22

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)

4. IPv4 및 IPv6 열려있는 파일 목록

아래 예제는 IPv4IPv6 네트워크 파일을 별도의 명령어로 열려있는 것만 보여줍니다.

# lsof -i 4

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600

# lsof -i 6

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)

5. TCP 포트 범위 1-1024의 열려있는 파일 프로세스 목록

TCP 포트 범위 1-1024의 모든 실행 중인 프로세스를 열려있는 파일의 목록을 나열합니다.

# lsof -i TCP:1-1024

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
cupsd   1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)
master  1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd    1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1838 tecmint    3u  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1871    root    3r  IPv4  15842      0t0  TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
httpd   1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd   1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)

6. ‘ ^ ‘ 문자로 사용자 제외

root 사용자를 제외한 것을 볼 수 있습니다. 위에서 보여드린 것처럼 ‘^’를 사용하여 특정 사용자를 제외할 수 있습니다.

# lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)

7. 누가 어떤 파일과 명령어를 조회하고 있는지 알아보세요?

다음 예제는 사용자 tecmintping 명령어와 /etc 디렉토리를 사용하고 있음을 보여줍니다.

# lsof -i -u tecmint

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1839 tecmint  cwd    DIR  253,0    12288   15 /etc
ping    2525 tecmint  cwd    DIR  253,0    12288   15 /etc

8. 모든 네트워크 연결 목록

다음 명령어와 옵션 ‘-i’를 사용하면 ‘LISTENING & ESTABLISHED’의 모든 네트워크 연결 목록을 보여줍니다.

# lsof -i

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
cupsd     1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd      1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
master    1551    root   12u  IPv4  12896      0t0  TCP localhost:smtp (LISTEN)
master    1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd      1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd     1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd     1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)
clock-app 2362   narad   21u  IPv4  22591      0t0  TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome    2377   narad   61u  IPv4  25862      0t0  TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome    2377   narad   80u  IPv4  25866      0t0  TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

9. PID로 검색

다음 예제는 PID가 1 [One]인 프로세스를 보여줍니다.

# lsof -p 1

COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
init      1 root  cwd    DIR      253,0     4096      2 /
init      1 root  rtd    DIR      253,0     4096      2 /
init      1 root  txt    REG      253,0   145180 147164 /sbin/init
init      1 root  mem    REG      253,0  1889704 190149 /lib/libc-2.12.so
init      1 root  mem    REG      253,0   142472 189970 /lib/ld-2.12.so

10. 특정 사용자의 모든 활동 종료

때때로 특정 사용자의 모든 프로세스를 종료해야 할 수도 있습니다. 다음 명령어는 tecmint 사용자의 모든 프로세스를 종료합니다.

# kill -9 `lsof -t -u tecmint`

참고: 여기서는 모든 사용 가능한 옵션의 예를 제공하는 것은 불가능합니다. 이 가이드는 lsof 명령어의 사용 방법을 보여주는 것입니다. 더 많은 정보를 알고 싶으시면 lsof 명령어의 매뉴얼 페이지를 참조하시기 바랍니다. 이 글이 유용하다고 생각되시면 아래의 댓글 상자를 통해 공유해 주세요.

Source:
https://www.tecmint.com/10-lsof-command-examples-in-linux/