Como ver los archivos en uso en Linux

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.

Qué es un archivo LOCK en Linux

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ásComandos 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.

Usar comando lsof en Linux

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.

fuser linux

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

Deja tu comentario (puedes hacerlo de forma anónima)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.