USB 드라이브를 마운트 해제하려고 할 때 "장치 또는 리소스가 사용 중입니다 (Device or Resource Busy)" 오류가 발생한 적이 있습니까? 이 일반적인 문제는 프로세스가 여전히 해당 장치의 파일이나 디렉터리를 사용하고 있을 때 발생합니다. 이를 해결하려면 어떤 프로세스가 해당 리소스를 점유하고 있는지 확인해야 합니다. 이 작업을 위한 두 가지 강력한 유틸리티는 lsof와 fuser입니다.
lsof 를 사용하여 열린 파일 나열하기
리눅스에서는 디스크, 파이프, 네트워크 소켓, 장치를 포함하여 거의 모든 것이 파일로 취급됩니다. lsof( "list open files"의 약자) 명령어는 열려 있는 모든 파일과 해당 파일을 사용하는 프로세스의 자세한 목록을 보여줍니다.
현재 디렉터리 (.) 를 어떤 프로세스가 사용하고 있는지 확인하려면 다음을 실행할 수 있습니다.
pete@icebox:~$ lsof .
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lxsession 1491 pete cwd DIR 8,6 4096 131 .
update-no 1796 pete cwd DIR 8,6 4096 131 .
nm-applet 1804 pete cwd DIR 8,6 4096 131 .
xterm 2205 pete cwd DIR 8,6 4096 131 .
bash 2207 pete cwd DIR 8,6 4096 131 .
lsof 5914 pete cwd DIR 8,6 4096 131 .
출력에는 각 열린 파일과 관련된 명령어 (COMMAND), 프로세스 ID(PID), 사용자 (USER) 가 표시됩니다. 이 정보를 통해 장치 마운트 해제를 방해하는 프로세스를 식별할 수 있습니다.
fuser 명령어
또 다른 훌륭한 도구는 fuser( "file user"의 약자) 명령어입니다. 이 유틸리티는 특정 파일, 소켓 또는 파일 시스템을 사용하는 프로세스를 식별합니다. linux fuser 명령어는 특정 리소스에 액세스하는 프로세스의 PID 를 빠르게 확인하는 방법입니다.
-v(자세히) 옵션을 사용하면 더 자세한 출력을 얻을 수 있습니다.
pete@icebox:~$ fuser -v .
USER PID ACCESS COMMAND
/home/pete: pete 1491 ..c.. lxsession
pete 1796 ..c.. update-notifier
pete 1804 ..c.. nm-applet
pete 2205 ..c.. xterm
pete 2207 ..c.. bash
여기서 우리는 현재 디렉터리를 사용하고 있는 프로세스를 명확하게 볼 수 있습니다. ACCESS 열은 파일이 어떻게 사용되고 있는지 (예: 현재 디렉터리의 경우 c) 를 보여줍니다.
fuser 로 프로세스 종료하기
fuser 명령어의 주요 기능은 리소스를 사용하는 프로세스를 종료할 수 있다는 것입니다. fuser -k 옵션은 지정된 파일이나 파일 시스템에 액세스하는 모든 프로세스에 SIGKILL 신호를 보냅니다. 이는 사용 중인 장치를 마운트 해제할 때 특히 유용합니다.
예를 들어, /mnt/usb 마운트 지점을 사용하는 모든 프로세스를 종료하려면 다음을 실행합니다.
sudo fuser -k /mnt/usb
리눅스에서 fuser -k를 사용하는 것은 리소스를 확보하는 빠르고 효과적인 방법입니다.
fuser 대 lsof
그렇다면 fuser 대 lsof 중 언제 무엇을 사용해야 할까요?
- **
lsof**는 자세한 조사를 위해 훌륭합니다. 열려 있는 모든 파일에 대한 광범위한 정보를 제공하므로 복잡한 문제 해결에 이상적입니다. - **
fuser**는 더 직접적입니다. 특정 파일이나 마운트 지점에서 프로세스를 신속하게 식별하고 필요한 경우 종료하는 데 적합합니다.fuser command는 "장치 또는 리소스가 사용 중" 오류를 해결하는 데 더 빠른 선택인 경우가 많습니다.
두 도구 모두 모든 리눅스 사용자에게 필수적입니다. 파일을 효율적으로 관리하고 프로세스를 관리하려면 이 도구들에 익숙해지십시오.