La utilidad fuser en Linux es una herramienta poderosa. Como sugiere el nombre, proporciona información sobre el usuario del archivo o el proceso que está utilizando actualmente el archivo o directorio.
Pero la funcionalidad del fusor no se limita solo a brindar información sobre el proceso. El artículo explica cómo usar la utilidad fuser con 5 ejemplos prácticos.
1. ¿Quién está usando un archivo o directorio?
Este es el uso básico del comando fuser. es decir, para identificar qué procesos están utilizando un archivo o directorio en particular.
$ fuser . ./: 3965c 4175c 4281c 4334c 4337c
En el ejemplo anterior, usamos la utilidad fuser para encontrar todos los procesos usando el directorio actual './' .
Vemos que la salida consta de ID de proceso de los procesos que usan fuser, pero todos los PID van seguidos de un carácter 'c'. Esto indica el tipo de acceso. El tipo de acceso puede ser cualquiera de los siguientes:
- 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 escribir. F se omite en el modo de visualización predeterminado
- r directorio raíz
- m archivo de mapa o biblioteca compartida
Entonces, 'c' en la salida significaría que estos procesos están usando este directorio como su directorio actual.
Use la opción -v para mostrar información detallada en la salida:
$ fuser -v ./ USER PID ACCESS COMMAND ./: himanshu 3965 ..c.. bash himanshu 4175 ..c.. gedit himanshu 4281 ..c.. bash himanshu 4334 ..c.. socket_serv himanshu 4337 ..c.. bash
Entonces vemos arriba que ejecutar fuser en el directorio actual brinda información sobre todos los procesos que están usando este directorio.
2. fusor en un ejecutable
socket_serv es un programa ejecutable en C que es un servidor TCP que escucha en un puerto en particular.
$ ./socket_serv
Cuando ejecute fuser en este ejecutable, verá lo siguiente:
$ fuser -v socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
El especificador de acceso en este ejemplo es 'e'. Es diferente del especificador de acceso que vimos en los ejemplos anteriores. Transmite que el archivo es un ejecutable.
3. Comprobar procesos mediante sockets TCP/UDP
Usando fuser también podemos verificar los procesos usando sockets TCP/UDP. Dado que el ejecutable del programa C de muestra socket_serv mencionado anteriormente se ejecuta en el puerto TCP 5000, usemos la utilidad fuser en este socket.
$ fuser -v -n tcp 5000 USER PID ACCESS COMMAND 5000/tcp: himanshu 4334 F.... socket_serv
Entonces vemos que fuser brinda toda la información detallada del proceso que se ejecuta en el puerto TCP 5000.
Aparte de los ejemplos anteriores, podemos usar el indicador '-m' con esta utilidad para mostrar procesos usando un sistema de archivos montado como una unidad USB.
4. Matar procesos que usan un programa en particular
Hasta ahora aprendimos que fuser brinda información sobre los procesos usando archivos, directorios, sockets, etc. Pero el poder de esta utilidad no se limita a brindar información solamente. También puede eliminar procesos con esta utilidad.
Vimos que se está ejecutando un servidor TCP en el sistema que accede al archivo binario 'socket_serv'. Ahora, intentemos eliminar el proceso usando este archivo binario usando fuser.
$ fuser -v -k socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 4334 ...e. socket_serv
Tenga en cuenta que hemos usado el indicador '-k' para eliminar el proceso usando el archivo 'socket_serv'. Veamos en la otra terminal donde se estaba ejecutando el servidor.
$ ./socket_serv Killed
Ya te explicamos cómo puedes matar un proceso usando 4 métodos diferentes. Ahora conoce un método más para matar un proceso.
5. Matar procesos de forma interactiva usando fuser
En el ejemplo anterior, vimos que la bandera '-k' se usa cuando queremos eliminar los procesos que usan un archivo en particular, pero para evitar la eliminación accidental de procesos, existe otra opción '-i'. Si usamos esta opción, 'fuser' se ejecutará en modo interactivo y preguntará antes de finalizar el proceso. Vea el ejemplo a continuación.
$ fuser -v -k -i socket_serv USER PID ACCESS COMMAND socket_serv: himanshu 5643 ...e. socket_serv Kill process 5643 ? (y/N) y
Entonces vemos que usando '-k' y '-i' podemos matar procesos selectivamente usando un archivo en particular.
Ahora, este es un uso muy poderoso del comando 'fuser'.
Suponga que desea eliminar un archivo a la fuerza, pero muchos procesos lo están utilizando, entonces los procesos no le permitirán eliminar el archivo. En ese caso, puede usar la utilidad fuser para eliminar todos los procesos (o procesos seleccionados) que usan ese archivo.
$ fuser -v -k -i ./ USER PID ACCESS COMMAND ./: himanshu 3965 ..c.. bash himanshu 4175 ..c.. gedit himanshu 4281 ..c.. bash himanshu 4334 ..c.. socket_serv himanshu 4337 ..c.. bash Kill process 3965 ? (y/N) y Kill process 4175 ? (y/N) y Kill process 4281 ? (y/N) y Kill process 4334 ? (y/N) y Kill process 4337 ? (y/N) y
Tenga en cuenta que el uso de '-k' envía una señal SIGKILL a los procesos que utilizan ese archivo en particular. Podemos usar la opción -SEÑAL para enviar cualquier otra señal. La lista de señales compatibles con fuser está dada por:
$ fuser -l HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
Por ejemplo, lo siguiente envía SIGHUP en lugar de SIGKILL, cuando usa la opción -k.
$ fuser -v -k -HUP -i ./