본문 바로가기

linux

Linux lsof 명령어

lsof 란 LiSt Open Files 의 글자를 따온 열려있는 파일의 목록이다.
프로세스가 사용하는 오픈된 파일의 목록

[ lsof ] : 열려있는 모든 파일들 목록

lsof
COMMAND     PID        USER   FD      TYPE             DEVICE  SIZE/OFF                NODE NAME
loginwind   154 myungsworld  cwd       DIR               1,13       640                   2 /
loginwind   154 myungsworld  txt       REG               1,13   2754560 1152921500312205591 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow
loginwind   154 myungsworld  txt       REG               1,13     46944            18104124 /Library/Preferences/Logging/.plist-cache.yy4HMn9F
loginwind   154 myungsworld  txt       REG               1,13   2177216 1152921500312782996 /usr/lib/dyld
loginwind   154 myungsworld  txt       REG               1,13  30399984 1152921500312794839 /usr/share/icu/icudt70l.dat               2 /

직접 터미널에 lsof 를 쳐보면 위와 같이 듣도보도 못한 커맨드와 내용이 출력된다.
백그라운드로 돌아가는 모든 파일의 목록을 출력해주기 때문에 별도의 옵션없이 lsof 만 사용하는건 흔하지 않으므로

자주 사용되는 명령어 위주로 사용해보자
[ lsof -i ] : 네트워크 연결에 접근하는 모든 파일들 목록 출력

lsof -i
COMMAND    PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
loginwind  154 myungsworld    7u  IPv4 0x878ff88c9c4c2599      0t0  UDP *:*
rapportd   387 myungsworld    3u  IPv4 0x878ff88c9a6c6f11      0t0  TCP *:49153 (LISTEN)
rapportd   387 myungsworld    4u  IPv6 0x878ff887cfe4ce99      0t0  TCP *:49153 (LISTEN)
rapportd   387 myungsworld    5u  IPv4 0x878ff88c9c4babb9      0t0  UDP *:*
rapportd   387 myungsworld    6u  IPv4 0x878ff88c9c4b77a9      0t0  UDP *:*

지금 위에서 보여지고 있는 것들은 네트워크에 연결된 파일들의 목록을 출력한것이다 저걸봐도 사실 감흥이 없다.

 

-i 는 가장 많이 사용되는 lsof 명령어의 옵션이다

우리가 서버를 열고 제대로 들어가보기전 아래 명령줄을 쳐보고 어떻게 나오는지 확인해보자
[ lsof -i tcp ] : 네트워크 연결에 접근하는 파일 목록중 tcp 연결만 보기                  

[ lsof -i udp ] : 네트워크 연결에 접근하는 파일 목록중 udp 연결만 보기               

[ lsof -i 4 ] : 네트워크 연결에 접근하는 파일 목록중 IPv4 타입만 보기                   
[ lsof -i 6 ] : 네트워크 연결에 접근하는 파일 목록중 IPv6 타입만 보기                   

[ lsof -i :포트번호 ] : 네트워크 연결에 접근하는 파일 목록중 해당 포트번호만 보기 

[ lsof -t ] : 네트워크 연결에 접근하는 파일 목록중 Process ID 목록 가져오기       

    

 

그럼 우리가 서버를 열고 거기에 관한 파일 리스트를 출력해보자

필자는 리액트를 받고 바로 열어봤다

npm run start
You can now view myungsworld in the browser.

  Local:            http://localhost:3000/react-js
  On Your Network:  http://192.168.0.8:3000/react-js

위에서 localhost에 3000번 포트로 서버가 열린걸 확인했다.

[ lsof -i :3000 ] : 네트워크에 연결 접근하는 파일중 3000번 포트만 가져오기

lsof -i :3000
COMMAND   PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    30920 myungsworld   26u  IPv4 0x878ff88c970379a9      0t0  TCP *:hbci (LISTEN)

이제 우리는 lsof -i :3000 내가 열었던 서버의 파일목록을 가져와서 확인을 할수 있게 되었다. 

 

자 이제 간지나는 리눅스 쉘 풔뤄구래밍 시간이다.
서버를 열고 서버를 닫을때 그냥 우리는 이스케이프를 하거나 편집기에서 빨간네모 버튼만 눌러줬었다.
물론 그게 편하긴 하지만 리눅스에서 어떤식으로 돌아가는지 알면 더 간지가 난다.
아래와 같은 코드로 서버를 종료해보자

lsof -t -i :3000
[PID]
kill -9 [PID]

The build failed because the process exited too early. 
This probably means the system ran out of memory or someone called `kill -9` on the process.

lsof -t 와 -i :3000 의 조합으로 3000번 포트로 돌아가는 서버를 확인후
kill -9 [Process ID] 명령어로 서버를 종료해봤다.

우리는 위의 명령어를 한줄로 표현할수 있다.

kill -9 $(lsof -t -i :3000)

$() 로 lsof -t -i :3000 으로 가져온 PID 를 변수로 넣어주고 그 값을 kll -9 해줬다.
그럼 위의 명령어와 같은 결과를 낼수있다.

lsof 에 대한 옵션은 이거에 적기에는 너무나 많기에 [ lsof --help ] 로 어떤 명령어가 있는지 보거나

lsof --help


아래의 사이트에서 간단한 예제를 찾아보면 되겠다.
https://phoenixnap.com/kb/lsof-command

 

lsof Command in Linux {14 Practical Examples}

lsof is a practical sysadmin tool that prints a list of all open files in Linux. Read this guide on lsof command in Linux with examples.

phoenixnap.com

 

'linux' 카테고리의 다른 글

linux 명령어  (0) 2022.11.29
Linux curl 명령어  (0) 2022.10.13
listen tcp :5000: bind: address already in use MacOs Monterey  (0) 2022.10.12
초보자를 위한 깃허브 ssh 설정 스크립트 (macOS)  (0) 2022.10.06
윈도우 wsl 세팅  (0) 2022.10.04