Linux lsof 명령을 사용하는 방법

Linux의 모든 것이 파일이라면 하드 드라이브에 있는 파일보다 더 많은 것이 있어야 합니다. 이 튜토리얼에서는 lsof를 사용하여 파일로 처리되는 다른 모든 장치와 프로세스를 확인하는 방법을 보여줍니다.

Linux에서는 모든 것이 파일입니다.

Linux의 모든 것이 파일이라는 자주 인용되는 문구는 일종의 사실입니다. 파일은 바이트 모음입니다. 프로그램으로 읽혀지거나 프린터로 보내질 때 바이트 스트림을 생성하는 것처럼 보입니다. 기록될 때 바이트 스트림을 허용합니다.

다른 많은 시스템 구성 요소는 키보드, 소켓 연결, 프린터 및 통신 프로세스와 같은 바이트 스트림을 허용하거나 생성합니다. 바이트 스트림을 수락, 생성 또는 수락 및 생성하기 때문에 이러한 장치는 파일인 것처럼 매우 낮은 수준에서 처리될 수 있습니다.

이 설계 개념은 Unix 운영 체제의 구현을 단순화했습니다. 이는 다양한 리소스를 처리하기 위해 작은 핸들러, 도구 및 API 세트를 생성할 수 있음을 의미했습니다.

하드 디스크에 있는 데이터 및 프로그램 파일은 일반 파일 시스템 파일입니다. ls 명령을 사용하여 목록을 나열하고 이에 대한 세부 정보를 찾을 수 있습니다.

파일인 것처럼 취급되는 다른 모든 프로세스와 장치에 대해 어떻게 알 수 있습니까? 우리는 lsof 명령을 사용합니다. 시스템에 열려 있는 파일이 나열됩니다. 즉, 파일인 것처럼 처리 중인 모든 항목을 나열합니다.

lsof 명령

lsof가 보고할 수 있는 많은 프로세스 또는 장치가 루트에 속하거나 루트에 의해 실행되었으므로 lsof와 함께 sudo 명령을 사용해야 합니다.

그리고 이 목록은 매우 길기 때문에 less 를 통해 파이프할 것입니다.

sudo lsof | less

lsof 출력이 나타나기 전에 GNOME 사용자는 터미널 창에서 경고 메시지를 볼 수 있습니다.

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

lsof는 마운트된 모든 파일 시스템을 처리하려고 시도합니다. 이 경고 메시지는 lsof가 그놈 가상 파일 시스템 (GVFS). 이것은 특별한 경우이다. 사용자 공간의 파일 시스템 (퓨즈). GNOME, API 및 커널 사이의 다리 역할을 합니다. 루트를 포함한 누구도 파일 시스템을 마운트한 소유자(이 경우 GNOME)를 제외하고는 이러한 파일 시스템 중 하나에 액세스할 수 없습니다. 이 경고는 무시해도 됩니다.

  Google 크롬북에 설치하기 위한 4가지 최고의 Linux 배포판

lsof의 출력은 매우 넓습니다. 가장 왼쪽 열은 다음과 같습니다.

가장 오른쪽 열은 다음과 같습니다.

lsof 열

모든 열은 열려 있는 모든 유형의 파일에 적용되지 않습니다. 일부는 비어 있는 것이 정상입니다.

명령: 파일을 연 프로세스와 관련된 명령의 이름입니다.
PID: 파일을 연 프로세스의 프로세스 식별 번호입니다.
TID: 작업(스레드) 식별 번호입니다. 빈 열은 작업이 아님을 의미합니다. 그것은 과정이다.
사용자: 프로세스가 속한 사용자의 사용자 ID 또는 이름, 또는 lsof가 프로세스에 대한 정보를 찾는 /proc의 디렉토리를 소유한 사람의 사용자 ID 또는 로그인입니다.
FD: 파일의 파일 기술자를 보여줍니다. 파일 디스크립터는 아래에 설명되어 있습니다.
유형: 파일과 연결된 노드 유형입니다. 음표 유형은 아래에 설명되어 있습니다.
장치: 특수 문자, 블록 특수, 일반, 디렉토리 또는 NFS 파일에 대한 장치 번호를 쉼표로 구분하거나 파일을 식별하는 커널 참조 주소를 포함합니다. 또한 Linux AX.25 소켓 장치의 기본 주소 또는 장치 이름을 표시할 수도 있습니다.
크기/해제: 파일 크기 또는 파일 오프셋을 바이트 단위로 표시합니다.
노드: 로컬 파일의 노드 번호, 서버 호스트에 있는 NFS 파일의 inode 번호 또는 인터넷 프로토콜 유형을 표시합니다. 스트림에 대한 STR 또는 Linux AX.25 소켓 장치의 IRQ 또는 inode 번호를 표시할 수 있습니다.
이름: 파일이 있는 마운트 지점 및 파일 시스템의 이름을 표시합니다.

FD 칼럼

FD 열의 파일 설명자는 많은 옵션 중 하나일 수 있습니다. 매뉴얼 페이지 모두 나열.

FD 열 항목은 파일 설명자, 모드 문자 및 잠금 문자의 세 부분으로 구성될 수 있습니다. 몇 가지 일반적인 파일 설명자는 다음과 같습니다.

cwd: 현재 작업 디렉토리.
err: FD 정보 오류(NAME 열 참조).
ltx: 공유 라이브러리 텍스트(코드 및 데이터).
m86: DOS 병합 매핑된 파일입니다.
mem: 메모리 매핑된 파일입니다.
mmap: 메모리 매핑된 장치입니다.
pd: 상위 디렉토리.
rtd: 루트 디렉토리.
txt: 프로그램 텍스트(코드 및 데이터)
파일 설명자를 나타내는 숫자.

모드 문자는 다음 중 하나일 수 있습니다.

r: 읽기 액세스 권한입니다.
w: 쓰기 액세스.
u: 읽기 및 쓰기 액세스 권한입니다.
‘ ‘: 모드를 알 수 없고 잠금 문자가 없는 경우 공백 문자입니다.
–: 모드를 알 수 없고 잠금 문자가 있습니다.

잠금 문자는 다음 중 하나일 수 있습니다.

r: 파일의 일부에 대한 읽기 잠금.
R: 전체 파일에 대한 읽기 잠금.
w: 파일의 일부에 대한 쓰기 잠금.
W: 전체 파일에 대한 쓰기 잠금.
u: 모든 길이의 읽기 및 쓰기 잠금.
U: 알 수 없는 잠금 유형입니다.
‘ ‘: 공백 문자입니다. 자물쇠가 없습니다.

유형 열

있다 70개 이상의 항목 TYPE 열에 나타날 수 있습니다. 볼 수 있는 몇 가지 일반적인 항목은 다음과 같습니다.

  Open Media Vault로 Linux NAS를 구축하는 방법

REG: 일반 파일 시스템 파일입니다.
감독: 디렉터리.
FIFO: 선입 선출.
CHR: 문자 특수 파일입니다.
BLK: 특수 파일을 차단합니다.
INET: 인터넷 소켓.
유닉스: 유닉스 도메인 소켓

파일을 연 프로세스 보기

특정 파일을 연 프로세스를 보려면 파일 이름을 lsof에 매개변수로 제공하십시오. 예를 들어, kern.log 파일을 연 프로세스를 보려면 다음 명령을 사용하십시오.

sudo lsof /var/log/kern.log

lsof는 사용자 syslog가 시작한 단일 프로세스인 rsyslogd를 표시하여 응답합니다.

디렉토리에서 열린 모든 파일 보기

디렉토리에서 열린 파일과 파일을 연 프로세스를 보려면 디렉토리를 lsof에 매개변수로 전달하십시오. +D(디렉토리) 옵션을 사용해야 합니다.

/var/log/ 디렉토리에 열려 있는 모든 파일을 보려면 다음 명령을 사용하십시오.

sudo lsof +D /var/log/

lsof는 해당 디렉토리에 있는 모든 열린 파일 목록으로 응답합니다.

/home 디렉토리에서 열린 모든 파일을 보려면 다음 명령을 사용하십시오.

sudo lsof +D /home

/home 디렉토리에서 열린 파일이 표시됩니다. 일부 열에 더 짧은 설명이 있으면 전체 목록이 더 좁아집니다.

프로세스에서 연 파일 나열

특정 프로세스에서 연 파일을 보려면 -c(명령) 옵션을 사용합니다. 한 번에 둘 이상의 검색어를 lsof에 제공할 수 있습니다.

sudo lsof -c ssh -c init

lsof는 명령줄에 제공된 프로세스 중 하나에 의해 열린 파일 목록을 제공합니다.

사용자가 연 파일 보기

특정 사용자가 연 파일로 표시를 제한하려면 -u(사용자) 옵션을 사용합니다. 이 예에서는 Mary를 대신하여 소유하거나 실행한 프로세스에서 연 파일을 살펴보겠습니다.

sudo lsof -u mary

나열된 모든 파일은 사용자 Mary를 대신하여 열렸습니다. 여기에는 예를 들어 데스크탑 환경에서 열었거나 Mary가 로그인한 결과로 열린 파일이 포함됩니다.

사용자가 연 파일 제외

사용자가 연 파일을 제외하려면 ^ 연산자를 사용합니다. 목록에서 사용자를 제외하면 관심 있는 정보를 더 쉽게 찾을 수 있습니다. 이전과 같이 -u 옵션을 사용해야 하며 사용자 이름의 시작 부분에 ^ 문자를 추가해야 합니다.

sudo lsof +D /home -u ^mary

이번에는 /home 디렉토리에 대한 목록에 사용자 Mary가 연 파일이 포함되지 않습니다.

프로세스에서 연 파일 나열

특정 프로세스에서 연 파일을 나열하려면 -p(프로세스) 옵션을 사용하고 프로세스 ID를 매개변수로 제공합니다.

sudo lsof - p 4610

제공한 프로세스 ID로 연 모든 파일이 나열됩니다.

파일을 연 프로세스 ID 나열

특정 파일을 연 프로세스의 프로세스 ID를 보려면 -t(간단한) 옵션을 사용하고 명령줄에 파일 이름을 제공합니다.

sudo lsof -t /usr/share/mime/mime.cache

프로세스 ID는 간단한 목록에 표시됩니다.

AND 및 OR 검색 사용

SSH 프로세스와 관련된 Mary 사용자가 연 파일을 나열해 보겠습니다. 우리는 명령줄에 하나 이상의 검색 항목을 제공할 수 있다는 것을 알고 있으므로 이것은 쉬울 것입니다.

sudo lsof -u mary -c ssh

이제 lsof의 출력을 살펴보겠습니다. 옳지 않아 보입니다. 루트에 의해 시작된 항목이 출력에 있습니다.

그것은 우리가 기대했던 것이 아닙니다. 무슨 일이에요?

  Linux 사용자를 위한 8가지 최고의 온라인 기술 지원 리소스

여러 검색어를 제공하면 lsof는 첫 번째 검색어 또는 두 번째 검색어와 일치하는 모든 파일을 반환하는 식입니다. 즉, OR 검색을 수행합니다.

lsof가 AND 검색을 수행하도록 하려면 -a(and) 옵션을 사용하십시오. 즉, 첫 번째 검색어, 두 번째 검색어 등과 일치하는 파일만 나열됩니다.

다시 시도하고 – 옵션을 사용합시다.

sudo lsof -u mary -c ssh -a

이제 목록의 모든 파일은 Mary가 또는 Mary를 대신하여 연 파일이며 SSH 명령과 연결되어 있습니다.

디스플레이 자동 새로 고침

+|-r(반복) 옵션을 사용하여 lsof를 반복 모드로 전환할 수 있습니다. 반복 옵션은 +r 또는 -r의 두 가지 방법으로 적용할 수 있습니다. 또한 디스플레이를 새로 고치기 전에 lsof가 대기할 시간(초)을 추가해야 합니다.

두 형식 중 하나에서 repeat 옵션을 사용하면 lsof가 평소와 같이 결과를 표시하지만 화면 하단에 점선이 추가됩니다. 명령줄에 제공된 시간(초) 동안 기다린 다음 새로운 결과 집합으로 디스플레이를 새로 고칩니다.

-r 옵션을 사용하면 Ctrl+C를 누를 때까지 계속됩니다. +r 형식을 사용하면 표시할 결과가 없을 때까지 또는 Ctrl+C를 누를 때까지 계속됩니다.

sudo lsof -u mary -c ssh -a -r5

목록 하단의 점선에 유의하십시오. 이렇게 하면 출력이 새로 고쳐질 때 각각의 새로운 데이터 표시가 분리됩니다.

인터넷 연결과 관련된 파일 표시

-i(인터넷) 옵션을 사용하면 네트워크 및 인터넷 연결과 관련된 프로세스에서 연 파일을 볼 수 있습니다.

lsof -i

네트워크 및 인터넷 연결에 의해 열린 모든 파일이 표시됩니다.

프로세스 ID별로 인터넷 연결과 관련된 파일 표시

특정 프로세스 ID와 연결된 인터넷 연결에 의해 열린 파일을 보려면 -p 옵션과 -a 옵션을 추가하십시오.

여기서 우리는 ID가 606인 프로세스에 의해 인터넷 또는 네트워크 연결에 의해 열린 파일을 찾고 있습니다.

sudo lsof -i -a -p 606

인터넷 또는 네트워크 연결과 관련된 프로세스 ID 606에 의해 열린 모든 파일이 표시됩니다.

인터넷 연결 및 명령과 관련된 파일 표시

-c(명령) 옵션을 사용하여 특정 프로세스에서 연 파일을 찾을 수 있습니다. ssh 프로세스와 관련된 인터넷 또는 네트워크 연결에 의해 열린 파일을 찾으려면 다음 명령을 사용하십시오.

lsof -i -a -c ssh

ssh 프로세스로 인해 열린 모든 파일이 출력에 나열됩니다.

인터넷 연결 및 포트와 관련된 파일 표시

특정 포트에서 인터넷이나 네트워크 연결로 열린 파일에 대해 lsof 보고서를 작성할 수 있습니다. 이를 위해 : 문자 다음에 포트 번호를 사용합니다.

여기서 우리는 lsof에 포트 22를 사용하여 네트워크 또는 인터넷 연결에 의해 열린 파일을 나열하도록 요청합니다.

lsof -i :22

나열된 모든 파일은 포트 22(SSH 연결의 기본 포트)와 연결된 프로세스에서 열었습니다.

인터넷 연결 및 프로토콜과 관련된 파일 표시

특정 프로토콜을 사용하는 네트워크 및 인터넷 연결과 관련된 프로세스에 의해 열린 파일을 표시하도록 lsof에 요청할 수 있습니다. TCP, UDP 및 SMTP 중에서 선택할 수 있습니다. TCP 프로토콜을 사용하고 우리가 얻는 것을 봅시다.

sudo lsof -i tcp

나열된 유일한 파일은 TCP 프로토콜을 사용하는 프로세스에서 연 파일입니다.

우리는 단지 표면을 긁었습니다

이는 lsof의 일반적인 사용 사례에서 좋은 기반이 되지만 그 이상의 것이 있습니다. 매뉴얼 페이지의 길이가 2,800줄 이상이라는 사실로 얼마나 더 많은 것을 판단할 수 있는지 알 수 있습니다.

lsof 명령을 사용하여 열린 파일 및 의사 파일의 계층을 더 깊이 드릴할 수 있습니다. 스케치 맵을 제공했습니다. 아틀라스는 매뉴얼 페이지.