웹사이트 검색

Linux에서 퓨저 명령을 사용하고 최대한 활용하는 방법


이 페이지에서

  1. Linux 퓨저 명령\n
  2. 퓨저를 사용하여 프로세스를 종료하는 방법\n
  3. 퓨저 - 기타 세부 정보\n
  4. 결론

특정 파일을 사용하는 프로세스를 식별한 다음 하나씩 제거하는 작업이 주어졌다고 가정합니다. 이 모든 작업은 명령줄에서 수행해야 합니다. 어떻게 하시겠습니까? 글쎄요, 당신이 커맨드 라인 초보자라면, 당신은 도움을 청하면서 단서가 없을 것이라고 확신합니다.

그러나 명령줄 전문가는 Linux에 액세스하는 파일(또는 디렉터리 또는 소켓)을 기반으로 프로세스를 식별할 수 있는 명령줄 유틸리티가 있다는 생각을 가지고 있을 것입니다. 뿐만 아니라 이 도구를 사용하면 이러한 프로세스를 종료할 수 있으므로 kill 또는 killall 명령을 별도로 사용할 필요가 없습니다. 명령줄 유틸리티에 대해 이야기한 것은 퓨저입니다.

아직 이 유틸리티에 대해 잘 모르고 사용 방법을 알고 싶다면 더 이상 보지 마십시오. 이 기사에서는 이해하기 쉬운 몇 가지 예를 통해 fuser에 대해 자세히 설명합니다.

하지만 계속 진행하기 전에 이 튜토리얼에 언급된 모든 예제, 명령 및 지침은 Ubuntu 16.04 LTS에서 테스트되었으며 우리가 사용한 fuser 명령 버전은 22.21임을 명심하십시오.

Linux 퓨저 명령

fuser 명령은 이미 위에서 언급한 것처럼 주로 파일, 디렉토리 또는 소켓을 사용하여 프로세스를 식별하는 데 사용됩니다. 이 도구는 기본적으로 명령에 인수로 이름이 전달된 파일을 사용하는 프로세스의 PID를 표시합니다.

다음은 가장 기본적인 형태의 작동 중인 fuser 명령입니다.

위의 스크린샷에서 알 수 있듯이 fuser를 사용하여 어떤 프로세스가 /home/himanshu 디렉토리를 사용하고 있는지 확인하려고 시도했으며 출력에서 명령의 목록을 생성했습니다. 프로세스 ID. 지금까지는 좋았지 만 여기에 몇 가지 문제가 있습니다.

첫째, 각 PID에 추가되는 c는 무엇입니까? 명령 매뉴얼 페이지를 간단히 살펴보면 기본 디스플레이 모드에서 fuser 명령이 파일이나 디렉토리에 액세스하는 프로세스의 PID를 표시할 뿐만 아니라 액세스 유형도 표시한다는 것을 알 수 있습니다.

각 액세스 유형은 문자로 표시됩니다.

  • c - 현재 디렉토리.\n
  • e - 실행 중인 실행 파일입니다.\n
  • f - 파일 열기. f는 기본 표시 모드에서 생략됩니다.\n
  • F - 쓰기용으로 파일을 엽니다. F는 기본 표시 모드에서 생략됩니다.\n
  • r - 루트 디렉토리.
  • m - mmaped 파일 또는 공유 라이브러리.

이제 논의한 예제로 돌아가서 출력의 문자 c는 PID가 출력에 나열된 모든 프로세스가 /home/himanshu 디렉토리를 현재 디렉토리로 액세스하고 있음을 나타냅니다.

프로세스는 파일 또는 디렉토리에 대해 여러 유형의 액세스를 가질 수 있음을 명심하십시오. 예를 들어, 다음 출력은 루트(/) 디렉토리가 현재 및 루트 디렉토리로서 많은 프로세스에 의해 액세스되고 있음을 보여줍니다.

지금까지 fuser 출력에는 프로세스 ID만 포함되어 있었고 그 이상은 없었습니다. 프로세스 이름도 표시되면 더 좋지 않을까요? 이를 위해서는 -v 명령줄 옵션을 사용해야 합니다. 다음은 예입니다.

계속해서 프로세스 소유자의 사용자 이름을 각 PID에 추가하려면 -u 명령줄 옵션을 사용합니다. 이에 대한 예는 다음과 같습니다.

참고: 해당 파일 또는 디렉토리가 마운트된 파일 시스템 또는 블록 장치에 있는 경우 -m 명령줄 옵션을 사용하십시오. "해당 파일 시스템의 파일에 액세스하는 모든 프로세스가 나열됩니다"라고 매뉴얼 페이지에 나와 있습니다. "디렉토리 파일이 지정되면 해당 디렉토리에 마운트될 수 있는 모든 파일 시스템을 사용하도록 자동으로 NAME/.로 변경됩니다."

퓨저를 사용하여 프로세스를 종료하는 방법

fuser 기본 사항에 대해 논의했으므로 이제 처음에 언급한 작업인 fuser를 사용하여 프로세스를 종료하는 방법을 살펴보겠습니다. 이 경우에 대해 더 간단한 예를 들어 보겠습니다. 내가 할 일은 실행 파일을 실행하고 실행되는 동안 퓨저를 사용하여 프로세스를 종료하는 것입니다.

실행된 실행 파일은 다음과 같습니다.

그리고 test-fuser 실행 파일에 의해 시작된 프로세스를 이상적으로 종료해야 하는 fuser 명령이 있습니다.

fuser -v -k test-fuser

계속해서 이 명령을 실행하기 전에 -k 명령줄 옵션이 fuser에게 파일이나 디렉토리를 사용하여 프로세스를 종료하도록 지시한다는 점을 알려드립니다.

위에서 언급한 명령이 실행되었을 때 발생한 상황은 다음과 같습니다.

위의 스크린샷에서 알 수 있듯이 fuser와 함께 -k 명령줄 옵션을 사용하면 test-fuser 프로세스가 종료됩니다. fuser 명령이 프로세스를 종료하기 전에 사용자 확인을 요청하도록 하려면 -i 옵션을 사용하십시오. 아래 예를 참조하십시오.

다음은 -k 옵션을 사용하는 동안 알아야 하는 몇 가지 중요한 퓨저 관련 세부 정보입니다.

  • -k를 사용하면 fuser 명령은 기본적으로 SIGKILL 신호를 보냅니다. 그러나 -SIGNAL 옵션을 사용하여 이 동작을 변경할 수 있습니다.\n
  • 퓨저 프로세스는 자체적으로 종료되지 않지만 다른 퓨저 프로세스를 종료할 수 있습니다.\n

퓨저 - 기타 세부 정보

지금까지 언급한 정보 외에도 염두에 두어야 할 몇 가지 다른 세부 정보가 있습니다. 이러한 모든 정보는 명령 매뉴얼 페이지로 이동하여 액세스할 수 있습니다. 예를 들어, 다음은 퓨저 매뉴얼 페이지의 제한 섹션에 나열된 정보입니다.

       Processes accessing the same file or file system several times  in  the
       same way are only shown once.

       If the same object is specified several times on the command line, some
       of those entries may be ignored.

       fuser may only be able to gather partial information  unless  run  with
       privileges.   As  a consequence, files opened by processes belonging to
       other users may not be listed and  executables  may  be  classified  as
       mapped only.

       Installing  fuser SUID root will avoid problems associated with partial
       information, but may be undesirable for security and privacy reasons.

       udp and tcp name spaces, and UNIX domain sockets can't be searched with
       kernels older than 1.3.78.

       Accesses by the kernel are only shown with the -v option.

       The  -k  option  only  works  on processes.  If the user is the kernel,
       fuser will print an advice, but take no action beyond that.

결론

지금쯤 이해하셨겠지만 fuser는 Linux에서 매우 유용한 명령줄 유틸리티입니다. 좋은 점은 도구가 이해하기 어렵거나 사용하기 어렵지 않기 때문에 초보자도 쉽게 시작할 수 있다는 것입니다. 여기서 다루지 않은 한 가지 측면은 이 명령을 사용하면 특정 포트에서 실행 중인 프로세스를 식별하고 심지어 종료할 수 있으므로 네트워크 관리자에게도 무시하기 어려운 도구가 된다는 것입니다.