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 |