Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

리눅스의 가장 큰 장점 중 하나는 부팅 과정부터 소프트웨어 패키지 설치까지 시스템의 모든 요소를 손쉽게 확인하고 관리할 수 있다는 점입니다. 이번 글에서는 리눅스에서 lsof 명령어를 사용해 현재 열려 있는 파일과 해당 파일을 사용 중인 프로세스를 확인하는 방법을 자세히 알아봅니다. 이를 활용하면 시스템이 내부적으로 어떻게 동작하는지 이해할 수 있고, 특정 프로세스에 대해 필요한 조치를 취하는 데도 큰 도움이 됩니다.

lsof 명령어란?

열린 파일과 그 파일을 사용 중인 사용자 또는 프로세스를 확인하려면 lsof(List Open Files) 유틸리티를 사용합니다. 대부분의 리눅스 배포판에는 lsof가 기본적으로 설치되어 있습니다.

만약 시스템에 설치되어 있지 않다면 패키지 관리자를 통해 간단히 설치할 수 있습니다.

Debian/Ubuntu 계열

데비안 및 우분투에서는 다음 명령어를 실행합니다:

sudo apt-get install lsof

Arch/Manjaro 계열

Manjaro를 포함한 Arch 기반 배포판에서는 pacman을 사용합니다:

sudo pacman -S lsof

CentOS/RHEL/Fedora 계열

CentOS와 RHEL 계열 배포판에서는 dnf를 이용해 설치할 수 있습니다:

sudo dnf install lsof

lsof로 프로세스가 사용 중인 파일 목록 조회하기

대부분의 리눅스 명령어와 마찬가지로 lsof는 매우 직관적이고 간단하게 사용할 수 있습니다. 터미널에 다음과 같이 입력해 보세요:

sudo lsof

위 명령어를 실행하면 시스템에서 현재 열려 있는 모든 파일에 대한 정보가 출력됩니다.

COMMAND PID TID TASKCMD USER   FD      TYPE             DEVICE SIZE/OFF            NODE NAME
init      1             root  cwd       DIR               8,48     4096               2 /
init      1             root  rtd       DIR               8,48     4096               2 /
init      1             root  txt       REG               0,19   632048 281474976743906 /init
init      1             root    0u      CHR                1,3      0t0           15362 /dev/null
init      1             root    1u      CHR                1,3      0t0           15362 /dev/null
init      1             root    2u      CHR                1,3      0t0           15362 /dev/null
init      1             root    3w      CHR               1,11      0t0           15367 /dev/kmsg
init      1             root    4u     sock                0,8      0t0           22689 protocol: AF_VSOCK
init      1             root    5r      REG                0,4        0      4026532185 mnt
init      1             root    6r      REG                0,4        0      4026532201 mnt
init      1             root    7r      DIR               8,48     4096             240 /home/cap
init      1             root    8u      DIR               8,48     4096               2 /
init      1             root    9u     sock                0,8      0t0           21853 protocol: AF_VSOCK

참고: sudo 권한이 있다면 반드시 명령어 앞에 sudo를 붙여 실행하세요. 그렇지 않으면 일부 시스템 파일에서 "permission denied"(권한 거부) 오류가 발생할 수 있습니다.

위 출력 결과의 각 컬럼이 의미하는 바는 다음과 같습니다:

컬럼설명
COMMAND대상 파일을 사용 중인 프로세스의 이름입니다.
PID파일을 사용 중인 프로세스의 고유 식별자(ID)입니다.
TID스레드 식별자(Thread ID)를 나타냅니다.
TASKCMD태스크 명령어의 이름입니다.
USER프로세스를 실행한 사용자의 이름 또는 UID입니다.
FD파일 디스크립터와 접근 모드 정보입니다.
TYPE대상 파일과 연관된 노드 유형입니다.
DEVICE콤마로 구분된 장치 번호입니다.
SIZE/OFF파일 크기(바이트 단위) 또는 파일 오프셋 크기입니다.
NODE로컬 파일의 inode 값입니다. stat 명령어로 파일의 inode 정보를 확인할 수 있습니다.
NAME파일의 마운트 지점 경로입니다.

이제 lsof 출력 결과의 의미를 이해했으니, 원하는 정보만 골라서 확인하는 필터링 방법을 살펴보겠습니다.

특정 프로세스로 필터링하기

특정 프로세스가 연 파일만 확인하려면 프로세스 이름 또는 PID 값을 사용하면 됩니다.

예를 들어 firefox 프로세스가 사용 중인 파일을 보려면 다음 명령어를 실행합니다:

sudo lsof -c firefox
리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

이 명령은 firefox 프로세스가 현재 열어 놓은 모든 파일을 화면에 출력합니다.

PID로 필터링하고 싶다면 -p 옵션 뒤에 프로세스 ID를 전달하면 됩니다. 대상 프로세스의 PID는 top 명령어나 ps 명령어로 쉽게 확인할 수 있습니다.

예를 들어 firefox 프로세스의 PID를 찾으려면 다음과 같이 입력합니다:

sudo ps aux | grep firefox

PID를 확인한 후에는 lsof로 해당 프로세스가 연 파일을 조회합니다:

sudo lsof -p 2121
리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

위 명령은 지정한 PID를 가진 프로세스가 연 파일들을 모두 출력합니다.

특정 사용자로 필터링하기

특정 사용자가 연 파일만 보고 싶다면 -u 옵션을 사용합니다. 예를 들어 debian 사용자가 연 파일을 확인하려면 다음 명령어를 실행합니다:

sudo lsof -u debian
리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

특정 파일로 필터링하기

반대로, 특정 파일을 어떤 프로세스와 사용자가 열었는지 궁금한 경우가 있을 수 있습니다. 이때는 파일 이름을 lsof에 직접 전달하면 됩니다:

sudo lsof /bin/sleep
리눅스 lsof 명령어 완벽 가이드 – 열린 파일과 프로세스 확인 방법

위 명령은 지정한 파일과 관련된 정보만 필터링하여, 해당 파일을 연 사용자, 프로세스 ID 등을 함께 보여줍니다.

마무리

이번 튜토리얼에서는 리눅스에서 lsof 명령어를 사용해 시스템의 열린 파일 정보를 조회하는 다양한 방법을 살펴보았습니다. lsof를 능숙하게 활용하면 시스템의 동작 방식을 더 깊이 이해할 수 있고, 문제를 일으키는 프로세스를 신속하게 파악해 적절한 조치를 취할 수 있습니다. 아울러 터미널에서 디렉터리 내용을 나열하는 여러 명령어도 함께 익혀 두면 일상적인 시스템 관리에 큰 도움이 될 것입니다.