Linux lsof 명령을 사용하는 방법

0
1888
리눅스에서 쉘 프롬프트
Fatmawati Achmad Zaenuri / Shutterstock.com

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

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

리눅스의 모든 것이 파일이라는 자주 인용되는 문구는 일종의 사실입니다. 파일은 바이트 모음입니다. 그들이 읽을 때 으로 프로그램이나 프린터로 보내면 일으키다 바이트 스트림 그들이 쓰여질 때 에, 그들 동의하기 바이트 스트림

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

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

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

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

관련 : Linux에서 “모든 것이 파일”이란 무엇입니까?

lsof 명령

많은 프로세스 또는 장치 lsof 루트에 속하거나 루트에 의해 시작되었음을보고 할 수 있으므로 sudo 명령 lsof.

이 목록은 매우 길기 때문에 less .

sudo lsof | less

터미널 창에서 lsof

전에 lsof 출력이 나타남 그놈 사용자에게는 터미널 창에 경고 메시지가 표시 될 수 있습니다.

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

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

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

터미널 창에서 lsof 출력의 가장 왼쪽 열

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

터미널 창에서 lsof 출력의 가장 오른쪽 열

lsof 열

모든 열이 모든 유형의 열린 파일에 적용되는 것은 아닙니다. 그들 중 일부는 비어있는 것이 정상입니다.

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

FD 칼럼

FD 열의 파일 설명자는 여러 옵션 중 하나 일 수 있습니다. 맨 페이지는 그들을 모두 나열합니다.

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

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

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

  • 아르 자형: 읽기 권한.
  • : 쓰기 권한.
  • : 읽기 및 쓰기 권한.
  • ‘’: 모드를 알 수없고 잠금 문자가없는 경우 공백 문자.
  • : 모드를 알 수없고 잠금 문자가 있습니다.

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

  • 아르 자형: 파일의 일부에 대한 읽기 잠금.
  • 아르 자형: 전체 파일에 대한 읽기 잠금.
  • : 파일의 일부에 쓰기 잠금이 있습니다.
  • : 전체 파일에 대한 쓰기 잠금.
  • : 모든 길이의 읽기 및 쓰기 잠금.
  • : 알 수없는 잠금 유형.
  • ‘’: 공백 문자. 잠금이 없습니다.

TYPE 열

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

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

파일을 연 프로세스 참조

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

sudo lsof /var/log/kern.log

터미널 창에서 sudo lsof /var/log/kern.log

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

터미널 창에서 lsof 출력

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

디렉토리에서 열린 파일 및이를 연 프로세스를 보려면 디렉토리를 lsof 매개 변수로. 당신은 사용해야합니다 +D (디렉토리) 옵션.

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

sudo lsof +D /var/log/

터미널 창에서 sudo lsof + D / var / log /

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

터미널 창에서 lsof 출력

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

sudo lsof +D /home

터미널 창에서 sudo lsof + D / home

파일은 /home 디렉토리가 표시됩니다. 일부 열의 설명이 짧을수록 전체 목록이 좁아집니다.

터미널 창에서 lsof 출력

프로세스에서 연 파일 목록

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

sudo lsof -c ssh -c init

터미널 창에서 sudo lsof -c ssh -c init

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

터미널 창에서 lsof 출력

사용자가 연 파일보기

특정 사용자가 연 파일로 표시를 제한하려면 -u (사용자) 옵션. 이 예에서는 Mary를 대신하여 소유하거나 시작한 프로세스에 의해 열린 파일을 살펴 봅니다.

sudo lsof -u mary

터미널 창에서 sudo lsof -u mary

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

터미널 창에서 lsof 출력

사용자가 연 파일을 제외

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

sudo lsof +D /home -u ^mary

터미널 창에서 sudo lsof + D / home -u ^ mary

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

터미널 창에서 lsof 출력

프로세스에서 연 파일 목록

특정 프로세스에서 연 파일을 나열하려면 -p (프로세스) 옵션을 선택하고 프로세스 ID를 매개 변수로 제공하십시오.

sudo lsof - p 4610

터미널 창에서 sudo lsof-p 4610

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

터미널 창에서 lsof 출력

파일을 연 프로세스 ID 나열

특정 파일을 연 프로세스의 프로세스 ID를 보려면 -t (terse) 옵션을 선택하고 명령 행에 파일 이름을 제공하십시오.

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

터미널 창에서 sudo lsof -t /usr/share/mime/mice.cache

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

터미널 창에서 lsof 출력

AND 및 OR 검색 사용

사용자 Mary가 열어서 SSH 프로세스와 관련된 파일을 나열 해 봅시다. 우리는 명령 줄에 둘 이상의 검색 항목을 제공 할 수 있다는 것을 알고 있으므로 쉽게 찾을 수 있습니다.

sudo lsof -u mary -c ssh

터미널 창에서 sudo lsof -u mary -c ssh

이제 결과를 살펴 보겠습니다 lsof. 그건 옳지 않은데; 출력에 루트로 시작된 항목이 있습니다.

터미널 창에서 lsof 출력

그것은 우리가 기대 한 것이 아닙니다. 어떻게 된 거예요?

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

만들다 lsof AND 검색을 수행하려면 -a (및) 옵션. 즉, 나열된 유일한 파일은 첫 번째 검색어와 일치하는 파일이며 두 번째 검색어 등

다시 시도하고 -a 선택권.

sudo lsof -u mary -c ssh -a

터미널 창에서 sudo lsof -u mary -c ssh -a

이제 목록의 모든 파일은 Mary에 의해 또는 Mary를 대신하여 열었으며 SSH 명령과 연관되어있는 파일입니다.

터미널 창에서 lsof 출력

디스플레이 자동 새로 고침

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

어떤 형식 으로든 반복 옵션을 사용하면 lsof 평소와 같이 결과를 표시하지만 디스플레이 하단에 점선을 추가합니다. 명령 행에 제공된 시간 (초) 동안 기다린 후 새로운 결과 세트로 화면을 새로 고칩니다.

와 더불어 -r 옵션은 Ctrl + C를 누를 때까지 계속됩니다. 와 더불어 +r 결과가 표시되지 않거나 Ctrl + C를 누를 때까지 계속됩니다.

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

터미널 창에서 sudo lsof -u mary -c ssh -a -r5

목록 하단의 점선을 참고하십시오. 이것은 출력이 새로 고쳐질 때 각각의 새로운 데이터 표시를 분리합니다.

터미널 창에서 lsof 출력

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

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

lsof -i

터미널 창에서 lsof -i

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

터미널 창에서 lsof 출력

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

특정 프로세스 ID와 연결된 인터넷 연결로 열린 파일을 보려면 -p 옵션과 -a 선택권.

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

sudo lsof -i -a -p 606

터미널 창에서 lsof -i

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

터미널 창에서 lsof 출력

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

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

lsof -i -a -c ssh

터미널 창에서 lsof -i -a -c ssh

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

터미널 창에서 lsof 출력

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

우리는 만들 수 있습니다 lsof 특정 포트에서 인터넷 또는 네트워크 연결로 열린 파일에 대해보고하십시오. 이를 위해 우리는 : 문자 다음에 포트 번호가옵니다.

여기 우리는 묻는다 lsof 포트 22를 사용하여 네트워크 또는 인터넷 연결로 연 파일을 나열합니다.

lsof -i :22

터미널 창에서 lsof -i : 22

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

터미널 창에서 lsof 출력

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

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

sudo lsof -i tcp

터미널 창에서 sudo lsof -i tcp

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

터미널 창에서 lsof 출력

우리는 표면 만 긁 었어

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

그만큼 lsof 명령을 사용하여 열린 파일과 의사 파일의 계층을 더 깊이 파고들 수 있습니다. 스케치 맵을 제공했습니다. 아틀라스는 매뉴얼 페이지에 있습니다.