Como ver los archivos en uso en Linux
Hace escasos días que, durante una instalación rutinaria de un paquete en Windows, recibí el frecuente mensaje con el que seguro muchos os habréis topado alguna vez: «E: No se pudo bloquear el directorio de administración (/var/lib/dpkg/), ¿quizás haya algún otro proceso utilizándolo?» y he decidido hacer un pequeño tutorial para solucionarlo, ya que es un problema bastante frecuente.
Lo primero, este no es un problema grave ni es nada raro, se trata simplemente de que en el directorio mencionado se ha creado un archivo «lock» o de bloqueo. Se debe a que algún otro programa está realizando acciones de actualización sobre el sistema.
No se pudo bloquear /var/lib/dpkg/lock y como resolverlo en Ubuntu
¿Qué es un archivo LOCK en Linux?
Un archivo de bloqueo con nombre .lock se creará en Linux -así como en otros sistemas operativos- para bloquear un recurso o dispositivo y evitar que se produzcan cambios en él en un momento dado.
También conocido como «semáforo» (porque indica cuándo estará de nuevo disponible el recurso) se usa como medida para garantizar la integridad de un recurso, evitando que varios procesos escriban sobre él al mismo tiempo, lo que podría ocasionar conflictos.
Eliminar los bloqueos sobre /var/lib/dpkg/lock
Este mensaje debería, en principio, desaparecer tras un período de tiempo si el proceso en cuestión finaliza. También puede resolverse con un reinicio. Sin embargo, podría darse el caso de que al reiniciar el proceso retome la actividad, o quizá el proceso haya quedado zombi o exista un fallo que nos obligue a terminalo.
Aprende más – Comandos de ayuda en Linux
Para poder solucionar el problema «No se pudo bloquear /var/lib/dpkg/lock» lo primero que deberemos hacer es identificar el proceso que está haciendo uso del bloqueo para el recurso afectado. Para ello os recomiendo dos opciones.
LSOF – Lista de archivos en uso en Linux
Gracias al comando lsof podemos descubrir recursos y archivos en uso por cualquier programa o proceso en Linux. Al introducirlo sin argumentos veremos una lista muy extensa con todos los archivos del equipo que están siendo usados, sin embargo nos convendrá filtrar la salida.
Por ejemplo, podemos ver lo referente a la ruta del bloqueo informado ejecutando:
sudo lsof | grep /dpkg/lock
Obtendremos la sigueinte información, donde ya podemos ver el PID (proceso) responsable.
Ahora podremos cerrarlo con terminación armónica (esperando a que finalice escrituras en disco):
kill -15 <PID>
O bien podremos «matarlo» por las malas con el clásico:
kill -9 <PID>
Otras opciones para usar lsof
Limitar salida a un directorio concreto:
lsof +D </ruta/archivo>
Listar todos los PID que tienen abierto un archivo:
lsof -t </ruta/archivo>
Localizar procesos que usan un archivo con FUSER
El comando fuser de Linux nos permite igualmente localizar los procesos que tienen abierto un archivo. Se trata de una utilidad que conviene tener siempre a mano para estos casos ya que nos permite identificar qué proceso ha abierto un archivo, carpeta o incluso un socket de red concreto.
El comando fuser nos permite directamente matar el / los proceso/s responsables del bloqueo directamente sin recurrir a un kill
Si lo utilizamos como en el ejemplo anterior, nos devolverá los procesos que están utilizando la carpeta en la que me encuentro. Veamos otras opciones.
Eliminar el bloqueo para un directorio determinado
En mi caso podría desbloquear el archivo y matar los procesos directamente, aplicando las siguientes opciones:
- -v: modo «verbose» o informativo, nos muestra lo que hace el comando
- -k: «mata» el proceso que mantiene ocupado el fichero
- -i: pide confirmación para realizar el paso anterior
sudo fuser -vki /var/lib/dpkg/lock
Es importante utilizar el comando siempre como root o con permisos de sudo, para ver todos los recursos.
Ver archivos en uso por un socket de red
Si queremos ver los archivos en uso por un socket de red (socket es la dirección IP + puerto) bastará con hacer lo siguiente:
fuser -v -n <protocolo> <puerto>
Por ejemplo:
fuser -v -n tcp 443
Categories
deweloper View All
Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.