lsof는 List Open Files의 약자로, 리눅스에서 현재 시스템에서 열려 있는 모든 파일을 확인할 수 있는 강력한 도구입니다. 리눅스에서 모든 것은 파일로 취급되기 때문에, lsof 명령어는 파일뿐만 아니라 네트워크 소켓, 파이프, 디렉토리 등도 확인할 수 있습니다. 이를 통해 특정 프로세스가 어떤 파일을 열고 있는지, 네트워크 연결 상태를 진단할 수 있어 시스템 관리, 네트워크 모니터링, 디버깅 등의 작업에 유용합니다.
lsof 명령어의 주요 기능
- 열려 있는 파일 확인: 특정 프로세스나 사용자가 현재 열고 있는 파일들을 확인할 수 있습니다.
- 네트워크 연결 상태 확인: 열려 있는 네트워크 소켓 정보를 제공하여 TCP/UDP 포트 상태를 파악할 수 있습니다.
- 특정 파일을 열고 있는 프로세스 찾기: 특정 파일을 열고 있는 프로세스를 찾아서 파일 잠금 문제를 해결할 수 있습니다.
- 디버깅과 시스템 분석: 시스템에서 파일 및 프로세스 간의 상호작용을 분석하여 디버깅에 사용할 수 있습니다.
lsof 명령어의 기본 사용법
기본적으로 lsof 명령어만 입력하면 현재 시스템에서 열려 있는 모든 파일 목록을 출력합니다.
user@linux:~$ lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 4096 2 /
systemd 1 root rtd DIR 253,0 4096 2 /
systemd 1 root txt REG 253,0 1638400 1338 /usr/lib/systemd/systemd
bash 1234 user cwd DIR 253,0 4096 100 /home/user
bash 1234 user txt REG 253,0 89512 1060 /bin/bash
위의 결과는 시스템에서 열려 있는 파일들과 관련된 프로세스 정보를 보여줍니다. 각 열(column)은 프로세스 이름(COMMAND), 프로세스 ID(PID), 사용자(USER), 파일 디스크립터(FD), 파일 유형(TYPE), 파일 크기 및 오프셋(SIZE/OFF), 노드 번호(NODE), 파일 이름(NAME)을 나타냅니다.
특정 파일을 열고 있는 프로세스 찾기
특정 파일을 열고 있는 프로세스를 찾고 싶다면 lsof <파일 경로>를 사용합니다.
user@linux:~$ lsof /var/log/syslog
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 501 root 1w REG 253,0 12345 1060 /var/log/syslog
위의 예시는 /var/log/syslog 파일을 열고 있는 프로세스가 rsyslogd이며, 파일 디스크립터 1w(쓰기 모드)로 열려 있음을 보여줍니다.
특정 포트를 사용하는 프로세스 찾기
네트워크 포트와 관련된 프로세스를 찾을 때도 lsof는 유용합니다. 예를 들어, 80번 포트를 사용하고 있는 프로세스를 찾으려면 다음과 같이 실행합니다.
user@linux:~$ lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2034 root 12u IPv4 34567 0t0 TCP *:http (LISTEN)
위의 결과는 80번 포트를 사용 중인 nginx 프로세스 정보를 보여줍니다.
특정 사용자에 의해 열린 파일 확인
특정 사용자가 열고 있는 파일들을 확인하려면 -u 옵션을 사용하여 사용자 이름을 지정합니다.
user@linux:~$ lsof -u user
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1234 user cwd DIR 253,0 4096 100 /home/user
bash 1234 user txt REG 253,0 89512 1060 /bin/bash
위 예시는 user라는 사용자가 현재 열고 있는 파일 목록을 보여줍니다.
lsof와 네트워크 연결 상태
lsof는 네트워크 연결 상태를 확인하는 데도 매우 유용합니다. -i 옵션을 사용하면 현재 열려 있는 네트워크 소켓을 모두 확인할 수 있습니다.
user@linux:~$ lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1024 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
sshd 1024 root 4u IPv6 12346 0t0 TCP *:ssh (LISTEN)
nginx 2034 root 12u IPv4 34567 0t0 TCP *:http (LISTEN)
이 명령어는 시스템에서 활성화된 네트워크 연결 정보를 제공합니다.
lsof의 추가 유용한 옵션
- -c <프로세스 이름>: 특정 프로세스 이름으로 열려 있는 파일 확인.
- -p <PID>: 특정 프로세스 ID가 열고 있는 파일 확인.
- -t: 파일을 열고 있는 프로세스 ID만 출력.
- +d <디렉토리>: 지정한 디렉토리에서 열린 파일 확인.
lsof 명령어의 실행 결과 필드 설명
- COMMAND: 파일을 연 프로세스의 이름.
- PID: 프로세스 ID.
- USER: 프로세스를 실행한 사용자.
- FD: 파일 디스크립터. cwd는 현재 작업 디렉토리, txt는 실행 파일, mem은 메모리 매핑된 파일, 0u는 읽기 및 쓰기 모드로 열린 파일을 의미.
- TYPE: 파일 유형. DIR은 디렉토리, REG는 일반 파일, CHR은 문자 장치 파일.
- NAME: 파일 경로 또는 네트워크 주소.
참고사이트
'Linux' 카테고리의 다른 글
[리눅스] strace 명령어 완벽 가이드 사용법(프로세스 추적) (0) | 2024.10.19 |
---|---|
[리눅스] nohup 명령어 완벽 가이드 사용법(백그라운드 실행) (1) | 2024.10.19 |
[리눅스] nice, renice 명령어 완벽 가이드 사용법(프로세스 우선순위 변경) (0) | 2024.10.18 |
[리눅스] iostat 명령어 완벽 가이드 사용법(디스크 I/O 성능 확인) (0) | 2024.10.18 |
[리눅스] umask 명령어 완벽 가이드 사용법(파일/디렉토리 기본권한 설정) (0) | 2024.10.18 |
[리눅스] sudo -s 명령어 완벽 가이드 사용법(root 쉘로 전환) (1) | 2024.10.16 |
[리눅스] sudo !! 명령어 완벽 가이드 사용법 (0) | 2024.10.16 |
[리눅스] timedatectl 명령어 완벽 가이드 사용법(시스템 시간 설정) (0) | 2024.10.16 |