웹사이트 검색

Linux에서 누가 파일을 사용하고 있는지 확인하는 방법


이 기사에서는 Linux에서 특정 파일을 사용하는 사람이 누구인지 알아내는 방법에 대해 설명합니다. 이는 열린 파일을 사용하는 시스템 사용자나 프로세스를 아는 데 도움이 됩니다.

lsof 명령을 사용하면 누군가 파일을 사용하고 있는지, 사용하고 있는지, 누구인지 알 수 있습니다. 열린 파일을 검색할 때 커널 메모리를 읽고 열려 있는 모든 파일을 나열하는 데 도움을 줍니다. 이 경우 열린 파일은 일반 파일, 디렉터리, 블록 특수 파일, 문자 특수 파일, 스트림, 네트워크 파일 등이 될 수 있습니다. Linux에서는 모든 것이 파일이기 때문입니다.

Lsof는 파일 시스템에서 해당 파일 시스템의 파일을 사용하는 사람을 식별하는 데 사용됩니다. Linux 파일 시스템에서 lsof 명령을 실행할 수 있으며 출력은 다음 출력에 표시된 대로 파일을 사용하는 프로세스의 소유자 및 프로세스 정보를 식별합니다.

lsof /dev/null
COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1480 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    0r   CHR    1,3      0t0    6 /dev/null
sh        1501 tecmint    1w   CHR    1,3      0t0    6 /dev/null
dbus-daem 1530 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-ses 1603 tecmint    1w   CHR    1,3      0t0    6 /dev/null
at-spi-bu 1604 tecmint    0r   CHR    1,3      0t0    6 /dev/null
dbus-daem 1609 tecmint    0u   CHR    1,3      0t0    6 /dev/null
at-spi2-r 1611 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfconfd   1615 tecmint    0u   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfwm4     1624 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfce4-pan 1628 tecmint    1w   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    0r   CHR    1,3      0t0    6 /dev/null
Thunar    1630 tecmint    1w   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    0r   CHR    1,3      0t0    6 /dev/null
xfdesktop 1632 tecmint    1w   CHR    1,3      0t0    6 /dev/null
....

사용자별 열린 파일을 나열하려면 다음 명령을 실행하여 tecmint를 실제 사용자 이름으로 바꿉니다.

lsof -u tecmint
COMMAND    PID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd   1480 tecmint  cwd       DIR                8,3      4096          2 /
systemd   1480 tecmint  rtd       DIR                8,3      4096          2 /
systemd   1480 tecmint  txt       REG                8,3   1595792    3147496 /lib/systemd/systemd
systemd   1480 tecmint  mem       REG                8,3   1700792    3150525 /lib/x86_64-linux-gnu/libm-2.27.so
systemd   1480 tecmint  mem       REG                8,3    121016    3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9
systemd   1480 tecmint  mem       REG                8,3     84032    3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0
systemd   1480 tecmint  mem       REG                8,3     43304    3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1
systemd   1480 tecmint  mem       REG                8,3     34872    2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0
systemd   1480 tecmint  mem       REG                8,3    432640    3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1
systemd   1480 tecmint  mem       REG                8,3     18680    3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd   1480 tecmint  mem       REG                8,3     18712    3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd   1480 tecmint  mem       REG                8,3     27112    3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd   1480 tecmint  mem       REG                8,3     14560    3150485 /lib/x86_64-linux-gnu/libdl-2.27.so
...

lsof의 또 다른 중요한 용도는 특정 포트에서 수신 대기하는 프로세스를 찾는 것입니다. 예를 들어 다음 명령을 사용하여 포트 80에서 수신 대기하는 프로세스를 식별합니다.

sudo lsof -i TCP:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    903   root    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1320 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1481 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1482 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1493 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   1763 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2027 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2029 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   2044 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3199 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)
httpd   3201 apache    4u  IPv6  20222      0t0  TCP *:http (LISTEN)

참고: lsof는 열린 파일을 검색하면서 커널 메모리를 읽기 때문에 커널 메모리의 급격한 변화로 인해 예측할 수 없는 출력이 발생할 수 있습니다. 이는 lsof 명령 사용의 주요 단점 중 하나입니다.

자세한 내용은 lsof 매뉴얼 페이지를 참조하세요.

man lsof

그게 다야! 이 기사에서는 Linux에서 특정 파일을 사용하는 사람이 누구인지 확인하는 방법을 설명했습니다. 열린 파일을 사용하여 프로세스의 소유자 및 프로세스 정보를 식별하는 방법을 보여주었습니다. 질문이나 의견이 있는 경우 아래 피드백 양식을 사용하여 당사에 문의하십시오.