En Linux, todo se considera como archivos y se organiza dentro de directorios. lsof (Lista de archivos abiertos) muestra una lista de archivos abiertos. Principalmente ayuda a encontrar la información sobre el proceso que abrió los archivos. Además de los archivos, puede enumerar un directorio, un archivo especial de bloque, una biblioteca compartida, un archivo especial de caracteres, una canalización normal, una canalización con nombre, un conector de Internet, un conector de dominio UNIX y muchos otros.
En este tutorial, aprendemos sobre el comando lsof en Linux usando ejemplos fáciles de entender .
comando lsof
El comando lsof por defecto está disponible en la mayoría de las distribuciones de Linux. Muy comúnmente, el comando lsof se usa cuando no podemos desmontar un disco, luego el comando lsof ayuda a encontrar el archivo abierto y su proceso que lo causa.
Sintaxis:
lsof [options] [names]
La sintaxis anterior listará todos los archivos que han sido abiertos por todos los procesos en el sistema.
1. Listar todos los archivos abiertos
Para obtener rápidamente una lista de archivos abiertos, escriba lsof. Enumera todos los archivos que han sido abiertos por los diversos procesos del sistema.
$ lsof
Normalmente, la salida será muy larga, usa $ sudo lsof | more
, si desea ver el contenido de una pantalla a la vez.
2. Listar archivos abiertos por nombre de usuario
lsof tiene un comando que se puede usar para encontrar una lista de archivos específicos abiertos por un usuario específico.
Para listar archivos abiertos por nombre de usuario use el siguiente comando:
$ lsof -u bobbin
Para varios usuarios, utilice la siguiente sintaxis:
$ lsof -u [username1] -u [username2]
O
$ lsof -u [username1], [username2]
Para listar archivos abiertos excepto para ciertos usuarios:
$ lsof -u ^root
Para enumerar solo la identificación del proceso, use -t
opción.
$ lsof -t -u sonar
Esto será útil en caso de que necesite eliminar todos los procesos relacionados con un uso específico.
$ kill -9 lsof -t -u sonar
3. Listar archivos abiertos por proceso
lsof también se puede usar para listar archivos abiertos por un proceso específico usando -c
opción seguida del nombre del proceso.
Por ejemplo, para listar todos los archivos abiertos por ssh:
$ lsof -c ssh
4. Listar archivos abiertos por nombre de archivo
Podemos especificar el nombre del archivo como argumento para listar todos los procesos que han abierto un archivo específico.
Para enumerar todos los procesos abiertos por el archivo /var/log/messages, escriba:
$ lsof /var/log/messages
5. Lista de archivos abiertos por ID de proceso
A cada archivo se le asigna un ID de proceso. Un solo proceso puede abrir una gran cantidad de archivos. Podemos usar el comando lsof para enumerar todos los archivos abiertos para una ID de proceso determinada.
Por ejemplo, para enumerar los archivos abiertos con ID de proceso 2, escriba:
$ lsof -p 2
En caso de listar archivos abiertos para múltiples ID de proceso, escriba
$ lsof -p 2,3
Un sistema contiene una gran cantidad de procesos, cada uno de los cuales tiene archivos abiertos para su uso. Un proceso puede tener muchos procesos secundarios, y este proceso también se conoce como proceso principal.
El comando lsof se usa con -R
opción para obtener una lista de archivos abiertos por PPID (identificación de proceso principal).
$ lsof -R
Desde la salida, la quinta columna mostrará el PPID de los archivos abiertos.
Para encontrar el PPID para un PID específico, escriba:
$ lsof -p [PID] -R
6. Listar archivos abiertos en un Directorio
Para enumerar los archivos abiertos en un directorio específico, podemos usar el comando lsof.
Utilice +d
opción para mostrar una lista de archivos abiertos en el directorio provisto, sin embargo, no va a los subdirectorios.
El siguiente ejemplo busca archivos abiertos en el directorio /var/log:
$ lsof +d /var/log
La opción +D ordena a lsof que busque en toda la profundidad del directorio todas las instancias abiertas, así como todos los archivos y directorios que contiene.
En este caso, lsof busca archivos abiertos en /var/log y sus subdirectorios:
$ lsof +D /var/log
7. Lista de archivos abiertos con protocolo de red
Un sistema se puede vincular a varias redes para varios propósitos. Todo en Linux es un archivo, podemos examinar los archivos que se abren mediante alguna conexión de red en el sistema.
Para listar los archivos abiertos en el protocolo TCP, podemos ejecutar el siguiente comando.
$ lsof -i TCP
Para listar los archivos abiertos en el protocolo UDP, podemos ejecutar el siguiente comando.
$ sudo lsof -i UDP
8. Lista de archivos abiertos por número de puerto
lsof tiene un comando que enumera específicamente los archivos abiertos en un número de puerto determinado para enumerar todos los procesos que se ejecutan en ese puerto.
Por ejemplo, para listar archivos abiertos en el número de puerto 443
$ lsof -i :443
Puede enumerar los archivos abiertos para múltiples números de puertos de la siguiente manera:
$ lsof -i :80,443
También puede enumerar los archivos abiertos de TCP o UDP por intervalos de puertos.
$ lsof -i TCP:1-49151
9. Listar archivos abiertos por IPv4/IPv6
Hay una opción en lsof para enumerar los archivos de red IPv4 o IPv6 abiertos.
Para mostrar los archivos abiertos de IPv4, escriba
$ lsof -i4
La siguiente sintaxis se puede utilizar para mostrar archivos abiertos de IPv6:
$ lsof -i6
10. Ejecutar lsof continuamente
El modo de repetición permite a lsof repetir continuamente con actualizaciones con retrasos específicos. El modo de repetición se puede habilitar usando la opción '-r' o '+r', donde '+r' terminará cuando no se encuentren archivos abiertos y '-r' continuará en la lista hasta que se inicie una interrupción manual. Cada salida del ciclo de retardo se separará usando '========'.
Sintaxis:
$ lsof [options] -r/+r[time-interval]
Por ejemplo:
$ lsof -u sonar -r5
Encabezados de comandos lsof
El lsof
tiene varias columnas.
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
El nombre del comando UNIX asociado con el proceso se almacena en el COMMAND
columna.
El PID
muestra el ID de proceso del comando.
El USER
muestra el nombre del usuario asociado con el siguiente proceso.
El TID
muestra el ID de la tarea.
El FD
es un descriptor de archivo que incluye abreviaturas como cwd (directorio de trabajo actual), txt (archivos de texto), mem (archivo asignado a la memoria), rtd (directorio raíz) y muchos otros.
TYPE
es una abreviatura de un tipo de archivo específico, como REG (archivo normal), DIR (directorio), CHR (archivo especial de caracteres), etc.
El DEVICE
contiene los números de dispositivo.
El SIZE/OFF
contiene el tamaño del archivo o el desplazamiento del archivo en bytes.
El NODE
el valor de la columna representa el número de nodo de un archivo local.
El NAME
muestra el nombre del punto de montaje y el sistema de archivos del archivo, así como la dirección de Internet.
Conclusión
En este tutorial, aprendimos sobre el comando lsof y sus usos con ejemplos. lsof proporciona una serie de opciones para personalizar su salida para satisfacer sus necesidades. Le permite combinar fácil y rápidamente múltiples argumentos para obtener el resultado requerido.