Introducción a Lsof

En Linux, muchos objetos se consideran un archivo, independientemente de si el objeto es realmente un archivo, dispositivo, directorio o socket. Enumerar un archivo es fácil, existe el shell incorporado lspara eso. Pero, ¿qué sucede si un usuario desea ver qué archivos están abiertos actualmente por el proceso del servidor web? ¿O si ese usuario desea saber qué archivos se abren en un determinado directorio? Ahí es donde lsofentra en juego. Imagínese lsofcomo un lscon la adición de "archivos abiertos".

Tenga en cuenta que si bien los BSD tienen una utilidad diferente para este trabajo, fstattambién poseen varios otros sabores de Unix (Solaris, por ejemplo) lsof. Las opciones y los marcadores son diferentes en las otras plataformas, así como el aspecto de la salida, pero en general el conocimiento en este artículo también debería ser aplicable para ellos.

Primero, echemos un vistazo al formato de lsofsalida y cómo se debe leer. La salida habitual de lsofsin ningún parámetro sería similar a la siguiente. Esto se ha recortado para facilitar la lectura.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

Estas columnas significan lo siguiente:

  • COMANDO - El proceso al que pertenece un archivo abierto, en este ejemplo todo está relacionado init.
  • PID: el número de identificación del proceso de dicho proceso.
  • USUARIO: el usuario con el que se ejecuta el proceso. Para init, es casi siempre root.
  • FD: el descriptor de archivo del archivo, siendo el más común:
    • cwd- El directorio de trabajo actual (puede notar la similitud con el pwdcomando que imprime el directorio de trabajo actual).
    • rtd - El directorio raíz de un proceso.
    • txt- A text file, esto puede significar un archivo de configuración relacionado con el proceso o el "código fuente" relacionado con (o que pertenece al) proceso.
    • mem - Un llamado "archivo mapeado de memoria", que significa un segmento de memoria virtual (lectura: RAM) que se ha asignado a un archivo.
    • Un número: el número representa el descriptor real del archivo, el carácter después del número es el modo en que se abre el archivo:
    • r - Leer
    • w - Escribir.
    • u - Lee y escribe.
  • TYPE: especifica el tipo real del archivo, los más comunes son:
    • REG - Un archivo normal.
    • DIR - Un directorio.
    • FIFO - Primero en llegar y primero en salir.
  • DISPOSITIVO: el número mayor y menor del dispositivo que contiene el archivo.
  • TAMAÑO: el tamaño del archivo, en bytes.
  • NODE: el número de inodo del archivo.
  • NOMBRE: el nombre del archivo.

Esto puede ser un poco abrumador por ahora, pero si trabajas lsofvarias veces, se hundirá rápidamente en tu cerebro.

Como se mencionó anteriormente, la salida de lsofse ha acortado aquí. Sin ningún argumento o filtro, lsofproduce cientos de líneas de salida que solo te dejarán confundido.

Hay dos enfoques básicos para resolver ese problema:

  • Use una o más de las lsofopciones de línea de comando para limitar los resultados.
  • Canalice la salida a través de, por ejemplo grep,.

Si bien la última opción puede sonar más cómoda ya que no tendrá que memorizar las lsofopciones de la línea de comandos, generalmente no es tan flexible y eficiente, por lo que nos quedaremos con la primera.

Imaginemos que desea abrir un archivo con su editor de texto favorito, y que el editor de texto le dice que solo se puede abrir en modo de solo lectura porque otro programa ya está accediendo a él. lsofle ayudará a descubrir quién es el autor:

lsof /path/to/your/file

Esto producirá una salida similar a esta:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Al parecer, se olvidó de cerrar y una sesión anterior! Un problema muy similar ocurre cuando intenta desmontar un recurso compartido NFS y umountle dice que no puede porque algo todavía está accediendo a la carpeta montada. Nuevamente, lsofpodemos ayudarlo a identificar al culpable:

lsof +D /path/to/your/directory/

Observe la barra diagonal final, eso es importante. De lsoflo contrario, supondrá que se refiere a un archivo normal. No se confunda con el +frente de la bandera: lsoftiene tantas opciones de línea de comandos que necesita +además de las más comunes -. El resultado se vería así:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

Eso significa que el proceso mocp, con el PID 5637, perteneciente al usuario musicha abierto un archivo llamado RMS_GNU_SONG.ogg. Sin embargo, incluso después de cerrar ese proceso, todavía hay un problema: el volumen NFS no se puede desmontar.

lsoftiene una -cbandera que muestra archivos abiertos con un nombre de proceso arbitrario.

lsof -c mocp

Eso produciría una salida como esta:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

En este ejemplo, hay otra instancia de mocpejecución que le impide desmontar el recurso compartido. Después de cerrar ese proceso, debe asegurarse de que el usuario musicno tenga otros archivos potencialmente problemáticos abiertos. lsoftiene una -ubandera para mostrar archivos abiertos por un usuario específico. ¡Recuerde, un archivo no siempre es un archivo normal en su disco duro!

lsof -u music

También puede pasar varios usuarios, separados por comas:

lsof -u music,moremusic

Una nota importante sobre el comportamiento predeterminado de lsof: los resultados están basados ​​en OR , lo que significa que verá resultados de archivos abiertos por procesos que son propiedad del usuario musico del usuario moremusic. Si desea ver los resultados que coinciden con los procesos que son propiedad de ambos usuarios, entonces debería pasar el indicador -a:

lsof -au music, moremusic

Dado que ambos usuarios están en el grupo musicusers, también puede enumerar archivos en función del grupo:

lsof -g musicusers

También puede combinar banderas de línea de comando:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

En la última línea, agregamos otra bandera especial ^, que significa un NOT lógico . Si la salida está vacía después de ejecutar ese comando, lo más probable es que el desmontaje sea exitoso.

En los ejemplos anteriores, miramos principalmente archivos regulares. ¿Qué hay de los enchufes y las conexiones de red?

Para enumerar todas las conexiones de red actuales lsoftiene la -ibandera:

lsof -i

El resultado es similar a lo que hemos visto hasta ahora ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... excepto por una diferencia: en lugar de nombres de archivo o directorios, la columna NAMEahora muestra información de conexión. Cada conexión consta de las siguientes partes:

  • Protocolo.
  • Nombre de host local.
  • Puerto de origen de la conexión.
  • Nombre DNS de destino.
  • Puerto de destino.
  • Estado de la conexión.

Al igual que con muchas otras herramientas, puede optar por no resolver los nombres y puertos DNS ( -ny -P, respectivamente). La bandera -itoma parámetros adicionales. Puede especificar si mostrar o no tcp, udpo icmpconexiones o ciertos puertos:

lsof -i :25
or
lsof -i :smtp

De nuevo, los parámetros se pueden combinar. El siguiente ejemplo ...

lsof -i tcp:80

... solo le mostrará las conexiones TCP utilizando el puerto 80. También puede combinarlo con las opciones que ya conoce de los archivos "clásicos":

lsof -a -u httpd -i tcp

Esto le mostrará todas las conexiones TCP abiertas por el usuario httpd. Tenga en cuenta la -abandera, que cambia el comportamiento predeterminado de lsof(como se mencionó anteriormente). Como con la mayoría de las herramientas de línea de comandos, puede ir extremadamente profundo. Lo siguiente solo le mostrará las conexiones TCP cuyo estado es "ESTABLECIDO":

lsof -i -s TCP:ESTABLISHED

En este punto, debe tener una comprensión básica de cómo lsoffunciona, junto con algunos casos de uso comunes. Para más información, consulte la página de manual de lsofsu sistema.



Leave a Comment

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Aprende cómo instalar Vtiger CRM, una aplicación de gestión de relaciones con el cliente, en CentOS 7 para aumentar tus ventas y mejorar el servicio al cliente.

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Esta guía completa le mostrará cómo configurar un servidor Counter-Strike 1.6 en Linux, optimizando el rendimiento y la seguridad para el mejor juego. Aprende los pasos más recientes aquí.

Cómo instalar LiteCart Shopping Cart Platform en Ubuntu 16.04

Cómo instalar LiteCart Shopping Cart Platform en Ubuntu 16.04

LiteCart es una plataforma de carrito de compras gratuita y de código abierto escrita en PHP, jQuery y HTML 5. Es un software de comercio electrónico simple, liviano y fácil de usar.

Cómo instalar MODX Revolution en un CentOS 7 LAMP VPS

Cómo instalar MODX Revolution en un CentOS 7 LAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable, gratuito y de código abierto escrito i

Instalación de McMyAdmin en Ubuntu 14.10

Instalación de McMyAdmin en Ubuntu 14.10

McMyAdmin es un panel de control del servidor de Minecraft utilizado para administrar su servidor. Aunque McMyAdmin es gratuito, hay varias ediciones, algunas de las cuales son pai

Configurar un servidor TeamTalk en Linux

Configurar un servidor TeamTalk en Linux

TeamTalk es un sistema de conferencia que permite a los usuarios tener conversaciones de audio / video de alta calidad, chat de texto, transferir archivos y compartir pantallas. Es yo

How to Install and Configure CyberPanel on Your CentOS 7 Server

How to Install and Configure CyberPanel on Your CentOS 7 Server

Using a Different System? Introduction CyberPanel is one of the first control panels on the market that is both open source and uses OpenLiteSpeed. What thi

Instalar Grafana en Ubuntu 16.04 LTS

Instalar Grafana en Ubuntu 16.04 LTS

¿Usando un sistema diferente? Introducción Grafana es un software de código abierto que transforma múltiples feeds de sistemas como Graphite, Telegraf, an

Instalar phpBB con Apache en Ubuntu 16.04

Instalar phpBB con Apache en Ubuntu 16.04

PhpBB es un programa de tablón de anuncios de código abierto. Este artículo le mostrará cómo instalar phpBB en la parte superior de un servidor web Apache en Ubuntu 16.04. Fue escrito

Cómo instalar Foreman en Ubuntu 16.04 LTS

Cómo instalar Foreman en Ubuntu 16.04 LTS

¿Usando un sistema diferente? Foreman es una herramienta gratuita y de código abierto que lo ayuda con la configuración y administración de servidores físicos y virtuales. Forema

Configurar un usuario no root con acceso a Sudo en Ubuntu

Configurar un usuario no root con acceso a Sudo en Ubuntu

Tener un solo usuario, que es root, puede ser peligroso. Así que arreglemos eso. Vultr nos brinda la libertad de hacer lo que queramos con nuestros usuarios y nuestros servidores.

Install eSpeak on CentOS 7

Install eSpeak on CentOS 7

Using a Different System? ESpeak can generate text-to-speech (TTS) audio files. These can be useful for many reasons, such as creating your own Turin

Cómo instalar Thelia 2.3 en CentOS 7

Cómo instalar Thelia 2.3 en CentOS 7

¿Usando un sistema diferente? Thelia es una herramienta de código abierto para crear sitios web de comercio electrónico y administrar contenido en línea, escrito en PHP. Código fuente de Thelia i

Instalación de Fuel CMS en Ubuntu 16.04 LTS

Instalación de Fuel CMS en Ubuntu 16.04 LTS

¿Usando un sistema diferente? Fuel CMS es un sistema de gestión de contenido basado en CodeIgniter. Su código fuente está alojado en GitHub. Esta guía le mostrará cómo t

Cómo instalar Couch CMS 2.0 en un VPS LAMP Debian 9

Cómo instalar Couch CMS 2.0 en un VPS LAMP Debian 9

¿Usando un sistema diferente? Couch CMS es un sistema de gestión de contenido (CMS) simple y flexible, gratuito y de código abierto que permite a los diseñadores web diseñar

Monitoree sus dispositivos usando LibreNMS en CentOS 7

Monitoree sus dispositivos usando LibreNMS en CentOS 7

¿Usando un sistema diferente? LibreNMS es un completo sistema de monitoreo de red de código abierto. Utiliza SNMP para obtener los datos de diferentes dispositivos. Una variedad

Cómo configurar la optimización TCP en Linux

Cómo configurar la optimización TCP en Linux

Introducción ¿Tiene problemas con la conectividad cuando los visitantes de otros países acceden a su sitio web? Preguntándose por qué la velocidad de descarga de su extranjero

Cómo implementar Ghost v0.11 LTS en Ubuntu 16.04

Cómo implementar Ghost v0.11 LTS en Ubuntu 16.04

¿Usando un sistema diferente? Ghost es una plataforma de blogs de código abierto que ha estado ganando popularidad entre los desarrolladores y usuarios comunes desde su 201

Cómo instalar Pip en Linux

Cómo instalar Pip en Linux

Pip es una herramienta para administrar paquetes de Python. El uso de un administrador de paquetes permite una gestión eficiente de su servidor. En este tutorial, explicaré cómo t

Cómo instalar Cacti 1.1 en CentOS 7

Cómo instalar Cacti 1.1 en CentOS 7

Cacti es una herramienta de gráficos y monitoreo de red de código abierto y libre escrita en PHP. Con la ayuda de RRDtool (herramienta de base de datos Round-Robin), Cacti se puede usar t

ZPanel y Sentora en CentOS 6 x64

ZPanel y Sentora en CentOS 6 x64

ZPanel, un panel de control de alojamiento web popular, se bifurcó en 2014 a un nuevo proyecto llamado Sentora. Aprende a instalar Sentora en tu servidor con este tutorial.

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Aprende cómo instalar Vtiger CRM, una aplicación de gestión de relaciones con el cliente, en CentOS 7 para aumentar tus ventas y mejorar el servicio al cliente.

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Esta guía completa le mostrará cómo configurar un servidor Counter-Strike 1.6 en Linux, optimizando el rendimiento y la seguridad para el mejor juego. Aprende los pasos más recientes aquí.

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

Los ataques de ransomware van en aumento, pero ¿puede la IA ayudar a lidiar con el último virus informático? ¿Es la IA la respuesta? Lea aquí, sepa que la IA es una bendición o una perdición

ReactOS: ¿Es este el futuro de Windows?

ReactOS: ¿Es este el futuro de Windows?

ReactOS, un sistema operativo de código abierto y gratuito, está aquí con la última versión. ¿Puede satisfacer las necesidades de los usuarios de Windows de hoy en día y acabar con Microsoft? Averigüemos más sobre este estilo antiguo, pero una experiencia de sistema operativo más nueva.

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Whatsapp finalmente lanzó la aplicación de escritorio para usuarios de Mac y Windows. Ahora puede acceder a Whatsapp desde Windows o Mac fácilmente. Disponible para Windows 8+ y Mac OS 10.9+

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

Lea esto para saber cómo la Inteligencia Artificial se está volviendo popular entre las empresas de pequeña escala y cómo está aumentando las probabilidades de hacerlas crecer y dar ventaja a sus competidores.

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

Recientemente, Apple lanzó macOS Catalina 10.15.4, una actualización complementaria para solucionar problemas, pero parece que la actualización está causando más problemas que conducen al bloqueo de las máquinas Mac. Lee este artículo para obtener más información

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

¿Qué es un sistema de archivos de diario y cómo funciona?

¿Qué es un sistema de archivos de diario y cómo funciona?

Nuestra computadora almacena todos los datos de una manera organizada conocida como sistema de archivos de diario. Es un método eficiente que permite a la computadora buscar y mostrar archivos tan pronto como presiona buscar.