GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar y aprovechar al máximo el comando fuser en Linux

Suponga que se le asigna la tarea de identificar los procesos que utilizan un archivo en particular y luego eliminarlos uno por uno; todo esto debe hacerse desde la línea de comandos. ¿Qué harías? Bueno, si eres un novato en la línea de comandos, estoy seguro de que no tienes ni idea y pides ayuda.

Pero los profesionales de la línea de comandos probablemente tendrán una idea de que existe una utilidad de línea de comandos en Linux que le permite identificar procesos en función de los archivos (o directorios o sockets) a los que acceden. No solo eso, la herramienta también le permite matar estos procesos, por lo que no tiene que usar el matar o matar a todos comandos por separado. La utilidad de línea de comandos de la que estamos hablando es fuser .

Si aún no conoce esta utilidad y quiere saber cómo usarla, no busque más, ya que en este artículo hablaremos sobre fuser en detalle, a través de algunos ejemplos fáciles de entender.

Pero antes de continuar, tenga en cuenta que todos los ejemplos, comandos e instrucciones mencionados en este tutorial se probaron en Ubuntu 16.04 LTS y el fuser La versión de comando que hemos usado es 22.21.

Comando del fusor de Linux

El fusor El comando, como ya mencioné anteriormente, se usa principalmente para identificar procesos que usan archivos, directorios o sockets. La herramienta básicamente muestra los PID de los procesos que utilizan el archivo cuyo nombre se pasa como argumento al comando.

Aquí está el fusor comando en acción en su forma más básica:

Como se desprende de la captura de pantalla anterior, intentamos usar fuser para saber qué procesos están usando /home/himanshu directorio, y el comando, en su salida, produjo una lista de ID de proceso. Hasta ahora todo bien, pero hay un par de problemas aquí.

En primer lugar, ¿qué es esa 'c' adjunta a cada PID? Una mirada rápida a la página de manual del comando revela que, en el modo de visualización predeterminado, el fusor El comando no solo muestra los PID de los procesos que acceden al archivo o directorio, sino que también muestra el tipo de acceso.

Cada tipo de acceso se indica con una letra:

  • c - directorio actual.
  • e - ejecutable en ejecución.
  • f - archivo abierto. f se omite en el modo de visualización predeterminado.
  • F - archivo abierto para escritura. F se omite en el modo de visualización predeterminado.
  • r - directorio raíz.
  • m - archivo mmap'ed o biblioteca compartida.

Ahora, volviendo al ejemplo que discutimos, la letra 'c' en la salida indica que todos los procesos cuyos PID se enumeran en la salida están accediendo a /home/himanshu directorio como su directorio actual.

Tenga en cuenta que un proceso puede tener múltiples tipos de accesos para un archivo o directorio. Por ejemplo, el siguiente resultado muestra que muchos procesos acceden al directorio raíz (/) como su directorio actual y raíz.

Hasta ahora, el fuser la salida que estamos viendo contiene solo ID de proceso, y nada más que eso. ¿No sería mejor si también se muestran los nombres de los procesos? Bueno, para eso necesitas usar -v opción de línea de comando. El siguiente es un ejemplo:

Continuando, para agregar el nombre de usuario del propietario del proceso a cada PID, use -u opción de línea de comando. Aquí hay un ejemplo de eso:

Nota:si el archivo o directorio en cuestión se encuentra en un sistema de archivos montado o en un dispositivo de bloque, utilice -m opción de línea de comando. "Se enumeran todos los procesos que acceden a los archivos en ese sistema de archivos", dice la página de manual. "Si se especifica un archivo de directorio, se   cambia automáticamente a NOMBRE/. para usar cualquier sistema de archivos que pueda estar montado en ese directorio".

Cómo eliminar procesos usando fuser

Ahora que hemos discutido el fusor conceptos básicos, vayamos a la tarea que mencioné al principio:cómo eliminar procesos usando fuser ? Tomemos un ejemplo más simple para este caso. Lo que haré es ejecutar un ejecutable y, mientras se ejecuta, intentaré eliminar el proceso usando fuser. .

Entonces, aquí está el ejecutable que se ha lanzado:

Y aquí está el fusor comando que idealmente debería eliminar el proceso iniciado por test-fuser ejecutable.

fuser -v -k test-fuser

Oh, antes de continuar y ejecutar este comando, déjame decirte que el -k opción de línea de comando le dice a fuser para matar el proceso (o procesos) usando el archivo o directorio.

Esto es lo que sucedió cuando se ejecutó el comando mencionado anteriormente:

Como se ve claramente en la captura de pantalla anterior, usando -k opción de línea de comando con fuser mató al fusor de prueba proceso. Para asegurarse de que el fusor El comando solicita la confirmación del usuario antes de finalizar un proceso, use -i opción. Vea el ejemplo a continuación:

Los siguientes son un par de detalles importantes relacionados con el fusor que debe saber al usar la opción -k:

  • Con -k, el comando fuser envía la señal SIGKILL de forma predeterminada. Pero puede cambiar este comportamiento usando la opción -SIGNAL.
  • Un proceso de fusión nunca se mata a sí mismo, pero puede matar a otros procesos de fusión.

fuser - otros detalles

Aparte de la información mencionada hasta ahora, hay varios otros detalles que vale la pena tener en cuenta. Se puede acceder a toda esa información dirigiéndose a la página de manual del comando. Por ejemplo, la siguiente es la información que el fuser listas de páginas man en la sección 'Restricciones':

       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.

Conclusión

Como ya habrás entendido, fuser es una utilidad de línea de comandos extremadamente útil en Linux. Lo bueno es que la herramienta no es difícil de entender ni de usar, por lo que incluso los novatos pueden comenzar a usarla fácilmente. Un aspecto que no mencionamos aquí es que el comando le permite identificar e incluso eliminar procesos que se ejecutan en puertos particulares, lo que también lo convierte en una herramienta difícil de ignorar para los administradores de red.


Linux
  1. Cómo usar el comando grep de Linux

  2. Cómo usar el comando de historial en Linux

  3. Cómo crear un alias y usar el comando Alias ​​en Linux

  4. Cómo instalar y usar el comando ping en Linux

  5. Cómo usar el comando "pantalla" en Linux

¿Cómo usar el comando wget en Linux?

¿Cómo usar el comando xargs en Linux?

Cómo instalar y usar el comando Ack en Linux

Cómo usar el comando RPM en Linux

Perf de Linux:cómo usar el comando y el generador de perfiles

Cómo usar el comando which en Linux