¿Alguna vez ha intentado desmontar una unidad USB y ha recibido un error de "Dispositivo o recurso ocupado"? Este problema común ocurre cuando un proceso todavía está utilizando un archivo o directorio en el dispositivo. Para resolver esto, necesita averiguar qué proceso está reteniendo el recurso. Dos utilidades potentes para esta tarea son lsof y fuser.
Usando lsof para listar archivos abiertos
En Linux, casi todo se trata como un archivo, incluidos discos, tuberías, sockets de red y dispositivos. El comando lsof (abreviatura de "list open files" o listar archivos abiertos) le muestra una lista detallada de todos los archivos abiertos y los procesos que los utilizan.
Para ver qué procesos están utilizando el directorio actual (.), puede ejecutar:
pete@icebox:~$ lsof .
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lxsession 1491 pete cwd DIR 8,6 4096 131 .
update-no 1796 pete cwd DIR 8,6 4096 131 .
nm-applet 1804 pete cwd DIR 8,6 4096 131 .
xterm 2205 pete cwd DIR 8,6 4096 131 .
bash 2207 pete cwd DIR 8,6 4096 131 .
lsof 5914 pete cwd DIR 8,6 4096 131 .
La salida muestra el comando (COMMAND), el ID de proceso (PID) y el usuario (USER) asociados con cada archivo abierto. Con esta información, puede identificar los procesos que le impiden desmontar un dispositivo.
El comando fuser
Otra excelente herramienta es el comando fuser (abreviatura de "file user" o usuario de archivo). Esta utilidad identifica qué procesos están utilizando archivos, sockets o sistemas de archivos específicos. El comando linux fuser es una forma rápida de ver los PID de los procesos que acceden a un recurso en particular.
El uso de la opción -v (verbose o detallado) proporciona una salida más detallada:
pete@icebox:~$ fuser -v .
USER PID ACCESS COMMAND
/home/pete: pete 1491 ..c.. lxsession
pete 1796 ..c.. update-notifier
pete 1804 ..c.. nm-applet
pete 2205 ..c.. xterm
pete 2207 ..c.. bash
Aquí, podemos ver claramente qué procesos están utilizando nuestro directorio actual. La columna ACCESS muestra cómo se está utilizando el archivo (por ejemplo, c para directorio actual).
Terminación de procesos con fuser
Una característica clave del comando fuser es su capacidad para terminar procesos que están utilizando un recurso. La opción fuser -k envía una señal SIGKILL a cada proceso que accede al archivo o sistema de archivos especificado. Esto es particularmente útil para desmontar un dispositivo ocupado.
Por ejemplo, para eliminar todos los procesos que utilizan un punto de montaje en /mnt/usb, ejecutaría:
sudo fuser -k /mnt/usb
Usar fuser -k en Linux es una forma rápida y efectiva de liberar un recurso.
fuser vs lsof
Entonces, ¿cuándo debe usar fuser vs lsof?
lsofes excelente para la investigación detallada. Proporciona información exhaustiva sobre todos los archivos abiertos, lo que lo hace ideal para la solución de problemas complejos.fuseres más directo. Es perfecto para identificar rápidamente y, si es necesario, terminar procesos en un archivo o punto de montaje específico. Elfuser commandes a menudo la opción más rápida para resolver errores de "Dispositivo o recurso ocupado".
Ambas herramientas son esenciales para cualquier usuario de Linux. Familiarícese con ellas para administrar archivos y procesos de manera eficiente.