fuser 는 파일이나 소켓을 어떤 프로세스가 사용하는 지 알려주는 명령어입니다.


umount 를 하려는 데 "device is busy" 같은 에러 메시지가 난다면 특정 프로세스가 umount 하려는 파티션의 파일을 사용하고 있어서입니다.


fuser 는 이런 경우 해당 파티션의 파일을 사용하는 프로세스를 찾는 데 유용하게 사용할 수 있습니다.


fuser 대신 lsof 를 사용해도 됩니다.


fuser 를 옵션없이 파일이나 디렉터리만 전달하면 해당 리소스를 사용하는 프로세스 ID 를 출력합니다.

$ sudo fuser /var/lib/mysql/mysql.sock      
    
/var/lib/mysql/mysql.sock    : 20309
BASH

뒤에 보이는 20309 는 mysql.sock 을 사용하는 프로세스 ID 입니다.


-v, --verbose 를 붙이면 더 자세한 프로세스 정보를 출력합니다.

$ sudo fuser -v /var/lib/mysql/mysql.sock
                     USER        PID ACCESS COMMAND
/var/lib/mysql/mysql.sock:
                     mysql     20309 F.... mysqld
BASH

lsof 를 사용해도 원하는 결과를 얻을 수 있습니다.

$ sudo lsof /var/lib/mysql/mysql.sock      
    
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
mysqld  20309 mysql   26u  unix 0xffff88803f457400      0t0 206420644 /var/lib/mysql/mysql.sock
BASH



namespace 사용

-n, --namespace 옵션을 사용하면 네임스페이스(file, udp, tcp) 안에서 프로세스를 찾게 됩니다.  다음은 MySql 의 기본 포트인 3306 을 사용하는 프로세스를 찾는 명령입니다.

$ sudo fuser -n tcp 3306
3306/tcp:            20309
BASH


80 과 443 포트를 사용하는 프로세스를 찾으려면 포트를 모두 기술해 줍니다.

$ sudo fuser -n tcp 80 443 

80/tcp:               3268  3269  3270  3271  3272
443/tcp:              3268  3269  3270  3271  3272
BASH


프로세스의 정보를 더 자세히 알고 싶으면 -v 옵션을 추가합니다.

$ sudo fuser -n tcp -v 80 443
                     USER        PID ACCESS COMMAND
80/tcp:              root       3268 F.... nginx
                     nginx      3269 F.... nginx
                     nginx      3270 F.... nginx
                     nginx      3271 F.... nginx
                     nginx      3272 F.... nginx
443/tcp:             root       3268 F.... nginx
                     nginx      3269 F.... nginx
                     nginx      3270 F.... nginx
                     nginx      3271 F.... nginx
                     nginx      3272 F.... nginx
BASH


mount 파일 시스템 사용 프로세스 찾기

-m, --mount 옵션을 사용하면 특정 파일 시스템을 사용하는 모든 프로세스를 찾아 줍니다. 예로 다음 명령어는 /var 를 사용하는 모든 프로세스의 정보를 표시합니다.

-m 옵션은 umount 하려는 데 "device is busy" 에러가 날 때 해당 파일 시스템을 사용하는 프로세스를 찾을 때 매우 유용합니다.

$ sudo fuser -v -m /var/
BASH

kill signal 보내기

-k,–kill 옵션을 사용하면 특정 파일이나 디렉터리를 사용하는 모든 프로세스에게 SIGKILL 을 전송할 수 있습니다. 예로 다음 명령어는 /var 를 사용하는 모든 프로세스에게 KILL signal 을 전송합니다.

$ sudo fuser -v -k /var/
BASH


같이 보기