FUSER(1)

이름
fuser - 파일 또는 소켓을 사용하는 프로세스를 식별합니다

개요
fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n <영역>] [ -k [-i] [-M] [-w] [-<시그널>] ]
<이름>     ...
fuser -l
fuser -V

설명
fuser 는 지정 파일 또는 파일 시스템을 사용하는 프로세스의 PID를 나타냅니다. 기본 표시 모드에서, 각 파일 이름 다음에는 접근 형식을 나타내는 문자가 따라옵니다:

    c   현재 디렉터리입니다.
    e   실행하고 있는 실행 파일입니다.
    f   파일을 엽니다. f 는 기본 표시 모드에서 생략합니다.
    F   기록 목적으로 파일을 엽니다. F 는 기본 표시 모드에서 생략합니다.
    r   루트 디렉터리입니다.
    m   메모리에 매핑한 파일 또는 공유 라이브러리입니다.
    .   입력 자리이며, 기본 표시 모드에서 생략합니다.

fuser 는 지정 파일에 접근한 사용자가 없거나 치명적인 오류가 있을 경우에 0이 아닌 코드 값을 반환합니다. 적어도 하나 이상의 접근 사용자 또는 프로세스를 찾으면, fuser에서 0값을 반환합니다.

TCP와 UDP 소켓으로 프로세스를 찾아보려면, 해당 이름 영역을 -n 옵션으로 선택해야합니다. fuser는 기본적으로 IPv6와 IPv4 소켓을 둘 다 찾아봅니다. 기본 동작을 바꾸려면 -4와 -6 옵션을 사용하십시오. 소켓은 로컬 또는 원격 포트, 원격 주소로 지정할 수 있습니다. 모든 필드는 옵션이지만, 빠진 입력란 앞에는 반드시 쉼표를 넣어야 합니다:

[<로컬_포트>][,[<원격_호스트>][,[<원격_포트>]]]

기호 문자 또는 숫자 값을 IP 주소와 포트 번호로 사용할 수 있습니다.

fuser 는 PID만을 표준 출력으로 내보내며 나머지는 표준 오류로 내보냅니다.

옵션

-a, --all
    명령행에 지정한 모든 파일을 나타냅니다. 기본적으로 최소한 하나 이상의 프로세스로 접근한 파일만 나타납니다.

-c  -m 옵션과 동일하며, POSIX 호환 목적으로 사용합니다.

-f  조용히 무시하며, POSIX 호환 목적으로 사용합니다.

-k, --kill
    파일에 접근하는 프로세스를 강제로 끕니다. -<시그널>로 바꾸지 않으면 SIGKILL 시그널을 보냅니다. fuser 프로세스 자체는 강제로 끝내지 않습니다만, 다른 fuser 프로세스는 강제로 끝낼 수 있습니다. fuser를 실행하는 프로세스의 해당 사용자 ID는 강제로 끝내기 전에 실제 사용자 ID로 설정합니다.

-i, --interactive
    프로세스를 강제로 끝내기 전에 사용자에게 확인합니다. 이 옵션은 -k 옵션이 없을 떄도 조용히 무시합니다.

-I, --inode
    이름 영역에 대해 <파일>을 지정한 파일의 아이노드와 모두 비교하며, 네트워크 파일 시스템의 파일 이름에 대해서는 수행하지 않습니다.

-l, --list-signals
    알려진 모든 시그널 이름을 나타냅니다.

-m <이름>, --mount <이름>
    <이름> 에는 마운트한 파일 시스템이나 마운트한 블록 장치에 있는 파일을 지정합니다. 해당 파일 시스템의 파일에 접근하는 모든 프로세스를 나타냅니다. 디렉터리를 지정했다면, 자동으로 <이름>/ 으로 바꾸어 해당 디렉터리에 마운트한 파일 시스템을 활용합니다.

-M, --ismountpoint
    <이름>으로 마운트 지점을 지정했을 때만 요청을 수행합니다. <이름>이 파일 시스템에 없을때 머신에서 사용자 여러분의 강제 퇴출을 막는 귀중한 안전장치입니다.

-w  기록 접근을 하고 있는 프로세스만 강제로 끝냅니다. -k 옵션이 없을 때도 이 옵션은 조용히 무시합니다.

-n <이름영역>, --namespace <이름영역>
    다른 이름 영역을 선택합니다. file(파일 이름, 기본), udp(로컬 UDP 포트), tcp(로컬 TCP 포트) 이름 영역을 지원합니다. 포트의 경우 포트 번호 또는 심볼 이름 둘 다 지원합니다. 햇갈리지만 않는다면 <이름>/<영역> (예: 80/tcp) 표기 방식을 활용할 수 있습니다.

-s, --silent
    동작 내용 출력을 하지 않습니다. 이 모드에서 -u, -v 옵션은 무시합니다. -a 옵션은 -s 옵션과 함께 사용하면 안됩니다.

-<시그널>
    프로세스를 강제로 끝낼 때 SIGKILL 대신 내보낼 지정 시그널을 사용합니다. 시그널은 이름(예: -HUP) 또는 번호(예: -1)로 지정할 수 있습니다. 이 옵션은 -k 옵션을 사용하지 않으면 조용히 무시합니다.

-u, --user
    각 PID에 프로세스 소유자 사용자 이름을 붙입니다.

-v, --verbose
    장황한 출력 모드. 프로세스를 ps 방식으로 나타냅니다. PID, 사용자, 명령을 ps와 비슷하게 나타냅니다. 접근에서는 프로세스의 파일 접근 방식을 나타냅니다. 일부 파일이 마운트 지점, knfs 익스포팅, 스왑 파일로 접근했을 경우에도 장황한 출력 모드로 나타냅니다. 이 경우 kernel이 PID 대신 나타납니다.

-V, --version
    버전 정보를 나타냅니다.

-4, --ipv4
    IPv4 소켓만 검색합니다. 이 옵션은 -6 옵션과 사용하면 안되며, tcp 및 udp 이름 영역에만 해당합니다.

-6, --ipv6
    IPv6 소켓만 검색합니다. 이 옵션은 -4 옵션과 사용하면 안되며, tcp 및 udp 이름 영역에만 해당합니다.

파일

/proc
    proc 파일 시스템의 위치입니다

예제

fuser -km /home
    어떤 힉으로든 /home 파일 시스템에 접근하고 있는 모든 프로세스를 강제로 끝냅니다.

if fuser -s /dev/ttyS1; then :; else <명령>; fi
    /dev/ttyS1을 활용하는 프로세스가 없다면 fI명령을 실행합니다.

fuser telnet/tcp
    (로컬) 텔넷 포트의 모든 프로세스를 나타냅니다.

제약사항
동일한 파일 또는 파일 시스템에 동일한 방식으로 여러번 접근하는 프로세스는 한번만 나타냅니다.

동일한 개체를 명령행에 여러번 지정하면, 일부 항목은 무시합니다.

fuser는 권한 없이 실행할 경우 일부 정보를 가져오지 못할 수 있습니다. 이 결과로, 다른 사용자가 소유한 프로세스에서 연 파일은 목록에 나타나지 않으며, 매핑한 실행 파일로 분류한 요소만 나타납니다.

fuser는 권한이 없는 파일 서술자 테이블의 프로세스 정보를 나타낼 수는 없습니다. 대부분의 경우 이런 문제는 fuser를 일반 사용자로 실행할 때 TCP 또는 UDP 소켓을 찾아볼 때 나타납니다. 이 경우 fuser에서는 접근 권한이 없다고 알려줍니다.

fuser SUID 루트를 설치하면 일부 정보를 조회하는 관련 문제를 막아주긴 하지만, 보안 및 사생활 문제로 적절하지 못합니다.

udp 와 tcp 이름 영역, 유닉스 도메인 소켓은 1.3.78 버전 이전 커널에서는 검색할 수 없습니다.

커널 접근은 -v 옵션으로만 나타납니다.

-k 옵션만 프로세스를 처리할 수 있습니다. 사용자가 커널이라면, fuser 에서 지침을 나타내긴 하지만 그 이상의 동작은 취하지 않습니다.

fuser는 다른 마운트 이름 영역에서 프로세스가 마운팅한 블록 장치는 보여주지 않습니다. fuser가 아닌 프로세스 이름 영역의 프로세스 파일 서술자 테이블에 장치 ID가 나타나서 결과적으로 일치하지 않기 때문입니다.

버그

fuser -m /dev/sgX 명령 (또는 -k 플래그로 강제로 끝냄) 은 해당 장치를 설정하지 않아도 모든 프로세스를 보여줍니다. 이런 동작을 취하는 다른 장치가 있을 수도 있습니다.

-m 마운트 옵션은 동일한 장치에서 지정한 파일과 일치하는 어떤 파일이든 찾겠지만, 마운트 지점을 지정하기만 할 경우 -M 옵션을 활용하십시오.

fuser는 stat(2) 과 /proc/<PID>/maps의 장치 ID가 달라 btrfs(5) 파일 시스템에서의 경우 프로세스 공유 라이브러리 같은 매핑 파일을 찾아내지 못합니다.

추가 참조
kill(1), killall(1), stat(2), btrfs(5), lsof(8), mount_namespaces(7), pkill(1), ps(1), kill(2).