He puesto lsof en Linux para ver en cuestión de segundos qué proceso mantiene abierto qué archivo, socket o puerto. Así detecto los registros bloqueados, los recursos ocupados Puertos y accedo a los archivos bloqueados sin rodeos, además de resolver los problemas de forma específica.
Puntos centrales
Para que la introducción sea un éxito, resumiré los puntos más importantes Aspectos En resumen.
- Recursos Mostrar: procesos, archivos, directorios, dispositivos, tuberías, sockets.
- Filtros utilizar: por nombre de proceso (-c), PID (-p), usuario (-u), archivo, directorio (+d/+D), puerto (-i).
- Error Delimitar: localizar archivos bloqueados, resolver conflictos de puertos, identificar servicios bloqueados.
- Red Comprobar: identificar rápidamente las conexiones activas y los puertos ocupados.
- Flujo de trabajo Optimizar: primero delimitar, luego examinar de forma específica y, por último, actuar.
Por qué lsof es importante en el día a día
Utilizo lsof, cuando un servicio no se inicia, un archivo muestra el estado „ocupado“ o un puerto ya está en uso. La herramienta relaciona el archivo, el proceso, el usuario y la red en una clara Ver. Puedo identificar al instante qué PID mantiene el acceso y desde cuándo. Así puedo actuar con certeza, en lugar de tener que adivinar, y cerrar el proceso correcto, en lugar de detener por error el servicio equivocado. Especialmente en servidores de producción, esto me permite ahorrar desde minutos hasta horas, ya que identifico la causa directamente en el proceso. Este enfoque ahorra tickets, reduce las interrupciones del servicio y crea un sistema robusto Hallazgos.
Comprender la sintaxis básica y los resultados
La forma básica es lsof [opciones] y, sin parámetros, muestra todos los que están abiertos actualmente objetos. En sistemas con una carga elevada, filtro la salida en lugar de tener que revisar miles de líneas. Es importante señalar que, en Linux, el término „archivo“ tiene un significado amplio: incluye directorios, dispositivos, bibliotecas y redes-Enchufes. En la salida, resultan útiles columnas como COMMAND, PID, USER, FD, TYPE y NAME. En primer lugar, me fijo en FD (descriptor de archivo), TYPE (REG, DIR, IPv4/6) y NAME, con la ruta o el puerto indicados. Quien lea estas columnas comprenderá en poco tiempo el estado actual del sistema y asignará los recursos de forma clara. Procesos.
Instalación y permisos en la práctica
En muchas distribuciones, lsof No viene preinstalado. Por eso lo instalo cuanto antes a través del gestor de paquetes (apt install lsof, dnf install lsof, yum install lsof o pacman -S lsof), para que esté disponible de inmediato en caso de incidencia. Para obtener una visión completa, suelo ejecutar lsof con sudo porque, sin derechos elevados, muchas entradas terminan con el mensaje „permission denied“ o ni siquiera aparecen. Aun así, empiezo deliberadamente sin root, compruebo hasta dónde puedo llegar y solo amplío los permisos cuando es necesario. En sistemas con SELinux o AppArmor, tengo en cuenta que los contextos de seguridad pueden limitar la visibilidad; dependiendo de la compilación, muestra lsof Añade contextos adicionales. En las consultas masivas, suprimo las advertencias con -w, para que los scripts sigan siendo robustos.
Leer campos y tipos FD de forma segura
La columna FD es mi clave para entenderlo. Los valores más habituales son:
cwd: directorio de trabajo actual del proceso.txt: el archivo ejecutable (segmento de texto) del proceso.mem: bibliotecas compartidas cargadas y archivos mapeados (memory mappings).0 h, 1 s, 2 s: Descriptores estándar (stdin, stdout, stderr) con modor(leer),w(escribir) ou(lectura/escritura).- cifras más elevadas, como
3u,7r: descriptores abiertos normales, que suelen ser archivos, sockets o tuberías.
De TIPO Leo la clase de objeto: REG (archivo normal), DIR (Índice), CHR/BLK (dispositivo de dibujo/bloque), FIFO (tubo), IPv4/IPv6 (Red), UNIX (Socket de dominio Unix). En NOMBRE se indica la ruta o, en el caso de los sockets, el punto final, p. ej.,. TCP *:80 (LISTEN) o UDP 127.0.0.1:123. Cuando yo (eliminado) Al final, veo que se ha eliminado un archivo, pero que todavía está retenido por un PID; una causa típica de la „desaparición“ de espacio en disco.
Filtrar de forma selectiva: archivos, directorios, puertos
Primero delimito el contexto y luego empiezo con un Filtros. Para un directorio utilizo lsof +D /var/log (recursivo) o lsof +d /var/log (solo la propia carpeta). Los archivos individuales los compruebo directamente, por ejemplo: lsof /var/log/syslog, para ver los procesos que están escribiendo. Para los puertos, configuro lsof -i:80, lsof -i:443 o genérico lsof -i uno. Me gusta combinarlo con -nP, para que lsof no resuelva direcciones IP ni puertos y funcione más rápido. De este modo, a partir de un estado del sistema confuso se obtiene en muy poco tiempo una visión clara Fotografía.
Combinar y precisar los filtros
Para realizar análisis repetibles, combino filtros con -a vinculadas lógicamente. De este modo, solo obtengo los registros que cumplen todas las condiciones. Ejemplos:
lsof -a -p 1234 -d cwd,txt,mem– Solo el directorio de trabajo, el archivo binario y las bibliotecas cargadas de un proceso.lsof -a -iTCP -sTCP:ESTABLISHED -p 1234– solo las conexiones TCP establecidas de un PID.lsof -a -u www-data +d /var/www– Archivos ubicados en /var/www que mantienen abiertos procesos del usuario www-data.
Con -d filtré por descriptores (números o nombres como cwd, mem). -U Me muestra específicamente los sockets de dominio Unix en la salida cuando quiero investigar problemas de IPC local. Así reduzco el ruido y veo exactamente lo que se ajusta a la pregunta.
Asignar rápidamente procesos y usuarios
Si conozco el nombre de un servicio, me proporciona lsof -c nginx todos los archivos abiertos del servidor web, incluidos Bibliotecas, configuraciones y sockets. Para realizar un análisis claro, suelo trabajar con el PID: lsof -p 1234 Muestra todos los identificadores de un proceso concreto. Las comprobaciones relacionadas con el usuario las realizo con lsof -u mysql o con otra cuenta, para hacer visibles los recursos abiertos de una cuenta de servicio. En análisis más extensos, complemento la vista de procesos con Contabilidad por procesos y así puedo ver con qué frecuencia y durante cuánto tiempo utilizan recursos los programas. Esta combinación de perspectivas de procesos, usuarios y actividades me permite llegar rápidamente a la solución cuando me encuentro con fenómenos complicados. Causa.
Casos especiales: archivos eliminados, Logrotate y archivos que ocupan mucho espacio
Cuando „falta“ espacio en el disco, suelo encontrar la causa con lsof +L1: Muestra los archivos que ya se han eliminado, pero que aún están abiertos por algún proceso. Son típicos los archivos de registro rotados, los archivos temporales de gran tamaño o los volcados de depuración. En lugar de ampliar la partición a toda prisa, cierro de forma selectiva los PID que aparecen en pantalla o envío la señal habitual para que se recarguen. Para los servicios de registro, prefiero realizar una recarga limpia del servicio en cuestión, de modo que se vuelvan a abrir los descriptores. Soluciones provisionales como truncate o la eliminación directa sin reiniciar el proceso solo posponen el problema.
En el caso de flujos de datos largos, compruebo además la columna TALLA/DESACTIVADO (visible según la compilación), para detectar si un proceso está vinculado a un desplazamiento muy grande. Esto explica por qué un identificador ocupa tanto espacio en memoria, aunque el archivo esté marcado como eliminado.
Resolver de forma sistemática los casos típicos de error
Elimino los archivos bloqueados después de lsof me ha enseñado el proceso adecuado. En lugar de detener servicios sin un plan, cierro específicamente el PID o reinicio precisamente ese servicio. Resuelvo los conflictos de puertos con lsof -i:, compruebo el PID correspondiente y, a continuación, ajusto el puerto, el servicio o el cortafuegos. Si un proceso se cuelga, compruebo sus descriptores abiertos con lsof -p y compruebo si está a la espera de un archivo, una tubería o un socket. Para realizar análisis en profundidad, completo la vista con strace de forma selectiva, para supervisar en tiempo real las llamadas al sistema. Así resuelvo de forma fiable los fallos recurrentes y documento los pasos a seguir para futuras Incidentes.
Tener en cuenta los contenedores y los espacios de nombres
Explicado en entornos con contenedores (por ejemplo, con espacios de nombres de red propios) lsof Me encuentro con discrepancias entre el host y el contenedor. Ejecuto lsof directamente en el contenedor o accedo desde el host al espacio de nombres del proceso de destino. Así puedo averiguar por qué un puerto está en estado LISTEN en el contenedor, pero parece „libre“ en el host: se encuentran en espacios de nombres diferentes. Hago lo mismo con los espacios de nombres de montaje: los montajes Bind y los sistemas de archivos superpuestos aparecen en la columna NAME con sus rutas reales y ayudan a detectar volúmenes mal configurados. Además, clasifico los descriptores abiertos por usuario y cgroup cuando controlo servicios a través de supervisores o soluciones de orquestación.
Análisis de red con lsof -i
Con lsof -i detecto las conexiones activas y escucho las que están ocupadas Puertos. Filtros como lsof -iTCP -sTCP:LISTEN Escucha de forma selectiva los servicios que se encuentran en estado LISTEN. Para protocolos concretos, utilizo lsof -iUDP o puertos específicos como lsof -i:25 para servidores de correo. Además, compruebo si un PID mantiene abiertos varios sockets, lo que puede indicar fugas o bucles infinitos. En las comprobaciones de seguridad, comparo los servicios esperados con los resultados y detecto servicios extraños u olvidados Servicios. Esta vista de red me ahorra tiempo, ya que no tengo que consultar varias herramientas a la vez y puedo verlo todo en un solo lugar.
Profundizar en los detalles de la red
Para realizar consultas especialmente específicas, utilizo la sintaxis de direcciones y puertos de -i: Limito la búsqueda a direcciones de origen o de destino (lsof [email protected]) o combina la dirección y el puerto (lsof [email protected]:443). En -sTCP:ESTABLISHED veo sesiones productivas, mientras que -sTCP:LISTEN solo muestra los listeners. Utilizo los análisis UDP para detectar servicios con muchos sockets de corta duración (DNS, Syslog, NTP). Además, compruebo si hay procesos que están más expuestos de lo necesario en la red (por ejemplo, listeners en 0.0.0.0 (en lugar de una interfaz local). Esto reduce el esfuerzo posterior de refuerzo de la seguridad.
Resumen de la tabla: Opciones habituales
Utilizo unas pocas opciones básicas con mucha frecuencia y las amplío en función de Escenario. La siguiente tabla recoge los operadores más importantes, con una breve explicación y un ejemplo. Así encuentro más rápido la forma adecuada y me ahorro tener que leer largos manuales de ayuda. Aplico estas opciones de forma modular, lo que me permite mantener la flexibilidad. Quien domine este conjunto básico podrá resolver muchas tareas con un solo llamada.
| Opción | Propósito | Ejemplo |
|---|---|---|
| -i | Mostrar conexiones de red y puertos ocupados | lsof -i:443 |
| -c NOMBRE | Filtrar por nombre de proceso (coincidencia de prefijo) | lsof -c nginx |
| -p PID | Todos los archivos abiertos de un PID | lsof -p 1234 |
| -u USUARIO | Recursos abiertos de un usuario | lsof -u mysql |
| +d DIR | Solo el directorio indicado | lsof +d /var/log |
| +D DIR | Recursivamente por el directorio | lsof +D /var/log |
| -nP | Sin búsqueda de nombres DNS ni de puertos (más rápido) | lsof -nP -i |
| -t | Mostrar solo los PID (compatible con scripts) | lsof -t -i:80 |
| +L1 | Mostrar archivos eliminados pero aún pendientes | lsof +L1 |
Utilizo -t A menudo, para pasar los PID directamente a los scripts, por ejemplo, a matar o systemctl. Con +L1 Encuentro procesos que mantienen abiertos los archivos eliminados y, por lo tanto, bloquean espacio de almacenamiento. En combinación con -r (repito) observo cambios en breves Distancias. Si se realizan las pruebas por etapas, se evitan las interpretaciones erróneas y se trabaja de forma coherente. De este modo, el diagnóstico sigue siendo reproducible y cuantificable borrar.
Tratar los datos de salida de forma eficiente
Sigo formateando la salida directamente para obtener los resultados más rápido utilice. Con lsof -t -i:80 | xargs -r kill -TERM Cierro todos los procesos que ocupan el puerto 80. Para los informes, utilizo lsof -nP -i | grep LISTEN volver y filtrar estados de forma específica. También awk ayuda a: lsof -nP | awk '{print $1,$2,$3,$9}' Limita la visualización a nombre, PID, usuario y ruta. Anoto las líneas de comando que funcionan y así me ahorro tener que Buscar en según los patrones adecuados. Pequeños ayudantes como watch 'lsof -nP -i:443' muestran los cambios en tiempo real y facilitan una toma de decisiones más rápida.
Automatización y salida analizable
Para las pruebas periódicas utilizo el formato legible por máquina de lsof con -F. Solo selecciono los campos que necesito (por ejemplo, proceso, comando, usuario, FD, nombre) y sigo analizándolos de forma estable. Ejemplos:
lsof -Fn -Fp -Fc -Fu -t -i:443– Campos minimalistas para scripts que solo necesitan PID o nombres.lsof -Fpcun -a -iTCP -sTCP:LISTEN– Recopilar datos sobre los oyentes y procesarlos de forma específica.
Con -r 2 Genero una vista „en directo“ cada dos segundos y comparo instantáneas. En los flujos de trabajo, fusiono los cambios (ordenar, uniq, dif), para detectar handles nuevos o que desaparecen. Incluyo los tiempos de espera de forma deliberada para que las consultas no se bloqueen bajo una carga elevada y las tareas de supervisión finalicen correctamente.
Buenas prácticas y aspectos de seguridad
Inicio los análisis con derechos mínimos y solo los amplío cuando root, si me faltan permisos. Así reduzco los riesgos y mantengo los registros claros. Compruebo los análisis periódicos con lsof -i en contraposición a los servicios que esperaba, para detectar listeners o conexiones inusuales. A continuación, investigo de forma específica los PID sospechosos a través de archivos, bibliotecas y Enchufes. Durante las ventanas de mantenimiento, me aseguro de que ningún archivo eliminado, pero aún abierto, ocupe espacio innecesariamente. Quien se toma en serio la seguridad, integra lsof en sus listas de comprobación y reacciona ante las anomalías con medidas fijas Pasos.
Obstáculos habituales y soluciones eficaces
- No se ven todas las entradas: Sin acceso root, a menudo me faltan procesos de otros usuarios o identificadores relacionados con el núcleo. Utilizo específicamente
sudo. - Salida lenta: Desactivo las resoluciones con
-nP, evita la recursividad y limita con-acon fuerza. - +D Demasiado caro: Los recorridos recursivos por los directorios pueden ser enormes. Empiezo con
+do rutas concretas, y las amplío solo cuando sea necesario. - Puerto ocupado, situación poco clara: Combino
lsof -i: -nPcon-tpara el PID y voy alsof -pmás profundo. - „Falta espacio “libre»:
lsof +L1Encuentra archivos abiertos pero borrados. A continuación, reinicia o cierra el proceso de forma selectiva. - Contenedores/Espacios de nombres: Compruebo la consulta en el espacio de nombres adecuado; de lo contrario, vería escuchas erróneas o pasaría por alto archivos abiertos.
Comprender el rendimiento y los límites
En sistemas muy grandes, una captura completa con lsof lleva tiempo y genera una carga apreciable Carga. Por eso, aplico los filtros desde el principio y cambio a -nP todas las resoluciones. Cuando hay un gran número de operaciones, compruebo al mismo tiempo la Límites de descriptores de archivos y, si es necesario, amplíalas. Los scripts deben prever tiempos de espera y utilizar -t Solo transmito los PID para mantener el volumen de datos reducido. Documento las excepciones e incorporo comprobaciones periódicas en los procesos automatizados. De este modo, el diagnóstico sigue siendo fiable y claro incluso bajo carga. controlable.
Flujo de trabajo en la consulta: de los síntomas a la causa
Empezaré con la pregunta: ¿se trata de un archivo, un proceso o Puerto? A continuación, elijo la introducción adecuada, por ejemplo: lsof /ruta/al/archivo, lsof -p o lsof -i:. Compruebo USER, FD, TYPE y NAME, y anoto lo que me parece previsible y lo que me sorprende. A continuación, actúo: reinicio el proceso, ajusto la configuración, aumento el límite o libero el puerto. En caso de duda, congelo el estado, guardo los registros y repito la medición tras el cambio. Este procedimiento me ayuda a mantener la concentración y ofrece un resultado claro Cadena de pruebas.
Lista de referencia: recetas rápidas para el día a día
- ¿Quién está bloqueando el archivo?
lsof /ruta/al/archivo– Leer el PID y reiniciar o cerrar el proceso de forma selectiva. - ¿Qué servicio ocupa el puerto?
lsof -nP -i:– Resolver el conflicto, ajustar el puerto o la dirección de enlace. - ¿Dónde se va el espacio libre del disco?
lsof +L1– Encontrar archivos abiertos o eliminados, reiniciar los PID implicados. - ¿El proceso se está ralentizando por la E/S?
lsof -p– Presta atención a los pipes, los sockets o los archivos; si es necesario, utilízalo junto con strace. - ¿Qué programas de radio se escuchan realmente?
lsof -nP -iTCP -sTCP:LISTEN– Comparar con la lista de expectativas. - ¿Qué recursos utiliza una cuenta de servicio?
lsof -u– Detectar anomalías por cuenta.
Resumen para el día a día
lsof me muestra quién bloquea qué archivo, qué directorio o qué puerto. Con -c, -p, -u, +d/+D y -i Limito rápidamente el campo de visión. Desbloqueo archivos bloqueados, detecto conflictos de puertos y descubro situaciones inusuales Conexiones. En combinación con -nP Trabajo con rapidez y mantengo los resultados claros y concisos. Para análisis más detallados, utilizo herramientas complementarias, documento las líneas de código que funcionan e integro comprobaciones recurrentes en los procesos automatizados. De este modo, el diagnóstico con lsof resulta directo, fiable y cuantificable. eficaz.


