Linux에서 프로세스의 열린 파일을 나열하는 방법

프로세스에 대한 'lsof' 명령 사용 안내

Linux 또는 Unix 시스템을 자주 사용하는 사용자라면 "Linux에서는 모든 것이 파일입니다."라는 문구를 반드시 들어 보았을 것입니다. 이것은 개념을 지나치게 단순화한 것으로 분류될 수 있지만 Linux 시스템에서 파일이 작동하는 방식을 이해하는 데 매우 도움이 됩니다.

Linux 환경에 나타나는 모든 것이 파일일 필요는 없습니다. 때로는 프로세스일 수도 있고 하드웨어 정보, 디렉토리 및 기타 사항을 나타내는 특수 파일일 수도 있습니다.

이 자습서는 Linux의 특정 프로세스에 대해 열려 있는 모든 파일을 찾는 과정을 안내합니다.

소개 이소프 명령

Linux 시스템의 장점은 명령을 잘 알고 있으면 터미널을 통해 전체 시스템을 제어하고 관리할 수 있다는 것입니다. 명령이 알려지면 터미널의 모든 작업은 케이크 워크가 됩니다.

이소프 '를 의미한다열린 파일 목록'. 명령의 긴 버전을 알고 나면 생산적인 방식으로 명령을 이해하고 사용하는 것이 매우 쉬워집니다.

그만큼 이소프 명령은 열린 파일, 소켓 및 파이프 목록을 표시합니다. 이 명령을 사용하여 열려 있는 파일을 쉽게 검색할 수 있습니다. 때 이소프 명령은 실행 중인 활성 프로세스와 관련하여 열려 있는 모든 파일을 표시하는 옵션 없이 사용됩니다.

메모: 사용하는지 확인 수도 명령을 실행하는 동안.

사용 이소프 명령

우리는 의 출력을 연구할 것입니다 이소프 자세히 명령합니다. 다음 명령을 연구하십시오.

sudo lsof | 더 적은

메모: 직접 운영한다면 이소프 명령을 실행하면 출력이 매우 커서 더 진행하기 위해 혼란을 일으킬 수 있습니다. 따라서 여기에서 내가 사용한 이소프 | 더 적은 튜토리얼의 편의를 위한 명령어.

산출:

gaurav@ubuntu:~$ sudo lsof | less 명령 PID TID 사용자 FD 유형 장치 크기/끄기 노드 이름 kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt unknown /proc/321/exe net DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt 알 수 없음 /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root, 82 4 DIR098 / rcu_tasks 33 루트 txt 알 수 없음 /proc/33/exe kauditd 34 루트 cwd DIR 8,8 4096 2 / kauditd 34 루트 rtd DIR 8,8 4096 2 / kauditd 34 루트 txt 알 수 없음 /proc/34/exe 

다음은 다음을 사용하여 표시되는 속성입니다. 이소프 명령.

매개변수설명
명령파일을 여는 명령의 이름을 표시합니다.
PID파일을 여는 프로세스의 프로세스 식별자 번호입니다.
TID스레드 식별자 번호입니다. 스레드 또는 작업 번호일 수 있습니다.
사용자프로세스의 소유자인 사용자의 사용자 ID 또는 이름입니다.
FD파일의 파일 기술자를 표시합니다.
유형파일과 연결된 노드 유형입니다.
장치장치 번호를 표시합니다.
크기/꺼짐파일 크기를 바이트 단위로 표시합니다.
마디디렉토리 또는 상위 디렉토리의 inode 번호를 표시합니다.
이름프로세스가 위치한 파일 시스템의 이름을 표시합니다.

프로세스 나열

무엇보다도 실행 중인 프로세스와 해당 프로세스 ID를 얻는 것이 중요합니다. Linux는 PID, 사용자, 디렉토리 등과 같은 속성과 함께 프로세스를 나열하는 다양한 명령을 제공합니다.

다음과 같은 명령을 사용할 수 있습니다. 맨 위, 추신, htop, 프스트리 터미널의 프로세스를 나열합니다.

튜토리얼 전반에 걸쳐 맨 위 그렇게 하라고 명령합니다. 그만큼 맨 위 명령은 실행 중인 시스템의 동적 실시간 보기를 제공합니다. 또한 현재 Linux 커널에서 관리하고 있는 모든 프로세스와 스레드를 표시합니다. 아래 주어진 블록을 연구하여 출력을 확인하십시오. 맨 위 명령.

통사론:

스도 탑

산출:

gaurav@ubuntu:~$sudo top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.28 웹 콘텐츠 34.41는 13,765 gaurav 20 0 2,931,568 131,408 47,496이 S mongod 5.9 3.3 1 42.34 웹 콘텐츠 1 개 루트 20 0 225,904 6,824 4,900 S 0.0 0.2 0 : 27.25이 systemd 2 루트 20 0 0 0 0 S 0.0 0.0 0 : 00.05 4 루트 0 -20 kthreadd 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 루트 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 루트 20 0 0 0 0 S 0.0 ksoft q/0:01 루트 0 ksoft q/0:8ir 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 루트 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 루트 rt 0 0 0 0 S 0.0 0.0 0:03.13 마이그레이션/ 

위 블록에서 모든 프로세스 관련 정보를 한 곳에서 볼 수 있습니다. 여기에서 우리는 찾을 수 있습니다 PID 다음을 사용하여 열린 파일을 표시해야 하는 프로세스의 이소프 명령.

그러나 특정 프로세스의 프로세스 ID만 알아내고 다른 원치 않는 프로세스를 피하려면 다음 명령을 사용하십시오.

통사론:

스도 탑 | grep [프로세스_이름]

예시:

gaurav@ubuntu:~$ 상단 | 그놈 터미널 - 13,819 gaurav 20 0 803,336 19,728 9160 S 1.0 0.5 0 53.63 : 53.67 그놈 : 53.66 그놈 터미널 - 13,819 gaurav 20 0 803,336 19,728 9,160 0.3 0.5 0 S 20 0 803,336 19,728 9160 단말기 13,819 gaurav grep으로하면 0.3 0.5 0 S -터미널- gaurav@ubuntu:~$

여기서 우리는 프로세스 이름에 'terminal' 문자열이 있는 프로세스의 프로세스 ID를 구체적으로 표시했습니다. 이 방법은 전체 프로세스 이름이나 PID를 모르는 경우에 유용합니다.

PID를 사용하여 프로세스와 관련된 열린 파일 표시

위 블록에서 top 명령어를 이용하여 프로세스 관련 정보를 얻는 방법을 배웠다. 이제 우리는 사용할 것입니다 PID 시스템의 모든 프로세스에 해당하고 다음을 사용하여 해당 프로세스와 관련된 열린 파일 목록을 표시하려고 시도합니다. 이소프 명령.

위의 출력에서 ​​강조 표시된 PID 1173에 해당하는 프로세스를 살펴보겠습니다. 우리는 사용할 것입니다 lsof -p [PID] 그렇게 하라고 명령합니다.

통사론:

sudo lsof -p [PID]

이 명령은 프로세스의 PID를 입력으로 사용하고 이 PID에 해당하는 모든 파일을 나열합니다.

산출:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: 경고: fuse.gvfsd-fuse 파일 시스템 /run/user/1000/gvfs를 stat()할 수 없습니다. 출력 정보가 ​​불완전할 수 있습니다. 명령 PID 사용자 FD 유형 장치 크기/꺼짐 노드 이름 mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 8 387,txt 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem/7 mongodb mem REG 8,8 101168 2624643 101168 2624643 /lib/-x memgmon REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux_mini. 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/3004224 2909671 /usr/lib/locale/3004224 mongodb mem 4 lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 11873 REGmon x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb 나 REGm REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-g 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/[email protected]/x86_64-linux-gnu. :~$

프로세스 ID가 1713인 프로세스에 대해 열려 있는 파일은 다음을 사용하여 표시됩니다. 이소프 명령.

메모: GNOME 사용자는 아래 경고가 표시될 수 있습니다. 무시해도 됩니다.

lsof: 경고: can't stat() fuse.gvfsd-fuse 파일 시스템 /run/user/1000/gvfs 출력 정보가 ​​불완전할 수 있습니다.

프로세스 이름을 사용하여 프로세스와 관련된 열린 파일 나열

그만큼 이소프 이 명령은 프로세스 이름을 사용하여 열린 파일을 나열하는 옵션도 제공합니다. 이름은 입력 문자열로 명령에 제공되어야 합니다. 이 옵션을 사용하려면 아래 구문을 참조하세요.

통사론:

sudo lsof -c [프로세스 이름]

예시:

sudo lsof -c mysql

산출:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: 경고: can't stat() fuse.gvfsd-fuse 파일 시스템 /run/user/1000/gvfs 출력 정보가 ​​불완전할 수 있습니다. 명령 PID 사용자 FD 유형 장치 크기/끄기 노드 이름 mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 8 4096 2 / mysqld 8 12266 /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 /[aio] mysqld D18 REG 0,18 28127 /[aio] mysqld 18 REG aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mysqld lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

출력은 프로세스 이름 대신 프로세스 ID가 사용된 것과 같습니다.

네트워크 연결에서 연 파일 나열

Linux에서 파일은 네트워크 연결, 하드웨어 연결 등에 대한 정보 형식일 수도 있습니다. 이소프 네트워크 연결에 의해 열린 파일을 나열하는 명령입니다. 다음 방법을 사용하십시오.

sudo lsof -i

산출:

gaurav@ubuntu:~$ sudo lsof -i 명령 PID 사용자 FD 유형 장치 크기/끄기 노드 이름 systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 135 IPv4 0t0 TCP 도메인 (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP2 23810 0t0 UDP 228 mdns avahi-dae 10 avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 localhost: mysql 2 mongod 1173 localhost: mongodb 6u IPv94 0t 2801 mysql (LISTEN) apache2 1283 루트 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$

여기에서 다음을 사용하여 네트워크 연결에 의해 열린 파일에 대한 정보를 볼 수 있습니다. lsof -i 명령.

결론

이 간단한 자습서에서는 사용하기 쉬운 다양한 방법을 사용하여 Linux에서 프로세스에 대해 열린 파일을 나열하는 방법을 배웠습니다. 더 많은 용도를 위해 이소프 명령, 참조 이소프 맨페이지.