초보자를 위한 Linux lsof 명령 자습서(예제 15개)
이 페이지에서
- lsof 명령 정보
- Linux lsof 명령 설치
- 1. 열려 있는 모든 파일을 나열하는 방법\n
- 2. 특정 사용자에 속하는 프로세스에서 연 파일을 나열하는 방법\n
- 4. 응용 프로그램 이름으로 모든 파일을 나열하는 방법\n
- 5. 프로세스에 특정한 파일을 나열하는 방법\n
- 6. 특정 파일을 연 프로세스의 ID를 나열하는 방법\n
- 7. 디렉토리에서 열려 있는 모든 파일을 나열하는 방법\n
- 8. 모든 인터넷 및 x.25(HP-UX) 네트워크 파일을 나열하는 방법\n
- 9. 포트를 사용하는 프로그램 찾기\n
- 10. 포트 범위를 기반으로 열린 파일을 나열하는 방법\n
- 11. 연결 유형(TCP 또는 UDP)에 따라 열린 파일을 나열하는 방법\n
- 12. lsof 목록을 만드는 방법 프로세스의 부모 PID\n
- 13. 사용자별 네트워크 활동을 찾는 방법\n
- 14. 메모리 매핑된 모든 파일 나열\n
- 15. 모든 NFS 파일 나열
- 결론
Linux lsof 명령은 프로세스에서 연 파일에 대한 출력 정보를 표시합니다. 이 기사에서는 이해하기 쉬운 15가지 예제를 사용하여 Linux lsof 도구에 대해 설명합니다. 이 튜토리얼에서 언급된 모든 예제는 Ubuntu 22.04 LTS에서 테스트되었지만 Debian, Fedora 및 CentOS와 같은 다른 Linux 배포판에서도 작동합니다.
lsof 명령 정보
특정 프로세스(또는 모든 프로세스)에서 연 파일의 이름을 빠르게 보려면 lsof 명령을 사용하면 됩니다. 열린 파일은 일반 파일이나 디렉토리, 라이브러리, 특수 파일이나 블록 장치, 문자 특수 파일, 실행 텍스트 참조 또는 스트림이나 네트워크 파일일 수 있습니다. 포트 번호별로 프로세스를 나열할 수도 있습니다. 루트 사용자로 로그인하지 않은 경우 명령 앞에 sudo를 추가해야 할 수 있습니다.
Linux lsof 명령 설치
대부분의 Linux 배포판에는 lsof가 미리 설치되어 있습니다. 아직 시스템에 설치되지 않은 경우 다음 명령을 사용하여 lsof를 설치합니다.
우분투와 데비안:
$ sudo apt install lsof
Ond CentOS 및 페도라:
$ dnf install lsof
1. 열려 있는 모든 파일을 나열하는 방법
열려 있는 모든 파일을 나열하려면 인수 없이 lsof 명령을 실행하십시오.
lsof
예를 들어, 다음은 내 시스템에서 생성된 위 명령의 출력 일부에 대한 스크린샷입니다.

첫 번째 열은 프로세스를 나타내고 마지막 열은 파일 이름을 포함합니다. 모든 열에 대한 자세한 내용은 명령 매뉴얼 페이지를 참조하십시오.
2. 특정 사용자에게 속한 프로세스가 연 파일을 나열하는 방법
이 도구를 사용하면 특정 사용자에 속하는 프로세스에서 연 파일을 나열할 수도 있습니다. 이 기능은 -u 명령줄 옵션을 사용하여 액세스할 수 있습니다.
lsof -u [사용자 이름]
예를 들어:
lsof -u 관리자

3. 인터넷 주소를 기반으로 파일을 나열하는 방법
이 도구를 사용하면 인터넷 주소를 기반으로 파일을 나열할 수 있습니다. 이것은 -i 명령줄 옵션을 사용하여 수행할 수 있습니다. 예를 들어 원하는 경우 IPv4 및 IPv6 파일을 별도로 표시할 수 있습니다. IPv4의 경우 다음 명령을 실행합니다.
lsof -i 4
예를 들어:

마찬가지로 IPv6의 경우 다음 명령을 실행합니다.
lsof -i 6
예를 들어:
lsof -i 6

4. 애플리케이션 이름으로 모든 파일을 나열하는 방법
-c 명령줄 옵션을 사용하면 프로그램 이름으로 모든 파일을 열 수 있습니다.
$ lsof -c apache
apache라는 단어로 시작하는 모든 프로그램이 표시되므로 전체 프로그램 이름을 사용할 필요는 없습니다. 따라서 우리의 경우에는 apache2 애플리케이션의 모든 프로세스를 나열합니다.

-c 옵션은 기본적으로 두 명령에 대한 바로 가기입니다.
$ lsof | grep apache
5. 프로세스에 특정한 파일을 나열하는 방법
이 도구를 사용하면 프로세스 식별(PID) 번호를 기반으로 열린 파일을 표시할 수도 있습니다. 이것은 -p 명령줄 옵션을 사용하여 수행할 수 있습니다.
lsof -p [PID]
예를 들어:
lsof -p 856

계속해서 특정 PID 앞에 ^기호를 추가하여 출력에서 특정 PID를 제외할 수도 있습니다. 특정 PID를 제외하려면 다음 명령을 실행할 수 있습니다.
lsof -p [^PID]
예를 들어:
lsof -p ^1

위의 스크린샷에서 볼 수 있듯이 id가 1인 프로세스는 목록에서 제외됩니다.
6. 특정 파일을 연 프로세스의 ID를 나열하는 방법
이 도구를 사용하면 특정 파일을 연 프로세스의 ID를 나열할 수 있습니다. 이것은 -t 명령줄 옵션을 사용하여 수행할 수 있습니다.
$ lsof -t [file-name]
예를 들어:
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0

7. 디렉토리에서 열린 모든 파일을 나열하는 방법
원하는 경우 lsof가 디렉토리의 모든 열린 인스턴스(포함된 모든 파일 및 디렉토리 포함)를 검색하도록 할 수도 있습니다. 이 기능은 +D 명령줄 옵션을 사용하여 액세스할 수 있습니다.
$lsof +D [디렉토리 경로]
예를 들어:
$lsof +D /usr/lib/locale

8. 모든 인터넷 및 x.25(HP-UX) 네트워크 파일을 나열하는 방법
앞에서 설명한 -i 명령줄 옵션을 사용하면 가능합니다. 인수없이 사용해야한다는 것입니다.
$lsof -i

9. 포트를 사용하는 프로그램 찾기
명령의 -i 스위치를 사용하면 특정 포트 번호를 수신 대기하는 프로세스 또는 애플리케이션을 찾을 수 있습니다. 아래 예시에서는 어떤 프로그램이 80번 포트를 사용하고 있는지 확인했습니다.
$ lsof -i :80
포트 번호 대신 /etc/services 파일에 나열된 서비스 이름을 사용할 수 있습니다. HTTPS(443) 포트에서 수신하는 앱을 확인하는 예:
$ lsof -i :https
결과:

위의 예는 TCP와 UDP를 모두 확인합니다. TCP 또는 UDP만 확인하려면 앞에 tcp 또는 udp라는 단어를 추가하십시오. 예를 들어 포트 25 TCP를 사용하는 애플리케이션은 다음과 같습니다.
$ lsof -i tcp:25
또는 UDP 포트 53을 사용하는 앱:
$ lsof -i udp:53

10. 포트 범위에 따라 열린 파일을 나열하는 방법
이 유틸리티를 사용하면 특정 포트 또는 포트 범위를 기반으로 열린 파일을 나열할 수도 있습니다. 예를 들어 포트 1-1024에 대한 열린 파일을 표시하려면 다음 명령을 사용하십시오.
$lsof -i :1-1024

11. 연결 유형(TCP 또는 UDP)에 따라 열린 파일을 나열하는 방법
이 도구를 사용하면 연결 유형에 따라 파일을 나열할 수 있습니다. 예를 들어 UDP 관련 파일의 경우 다음 명령을 사용합니다.
$lsof -i UDP

마찬가지로 lsof가 TCP 관련 파일을 표시하도록 할 수 있습니다.
12. 프로세스의 lsof 목록 부모 PID를 만드는 방법
lsof가 출력에 PPID(상위 프로세스 ID) 번호를 나열하도록 하는 옵션도 있습니다. 해당 옵션은 -R입니다.
$ lsof -R
특정 PID에 대한 PPID 정보를 얻으려면 다음 명령어를 실행하세요.
$ lsof -p [PID] -R
예를 들어:
$ lsof -p 3 -R

13. 사용자별 네트워크 활동을 찾는 방법
-i 및 -u 명령줄 옵션의 조합을 사용하여 Linux 사용자의 모든 네트워크 연결을 검색할 수 있습니다. 이는 해킹되었을 수 있는 시스템을 검사하는 경우에 유용할 수 있습니다. 이 예에서는 사용자 www-data의 모든 네트워크 활동을 확인합니다.
$ lsof -a -i -u www-data

14. 모든 메모리 매핑 파일 나열
이 명령은 Linux의 모든 메모리 매핑된 파일을 나열합니다.
$ lsof -d mem

15. 모든 NFS 파일 나열
-N 옵션은 모든 NFS(네트워크 파일 시스템) 파일 목록을 보여줍니다.
$lsof -N
결론
lsof는 다양한 옵션을 제공하지만 여기에서 논의한 옵션만으로도 충분히 시작할 수 있습니다. 연습을 마친 후에는 도구 설명서 페이지로 이동하여 자세한 내용을 알아보세요. 아, 궁금한 점이나 질문이 있으시면 아래에 의견을 남겨주세요.