A veces, nos enfrentamos a situaciones en las que no podemos desmontar un disco porque dice que los archivos se están utilizando, pero no podemos entender a qué archivo se refiere. En tales situaciones, podemos verificar qué archivos están abiertos y qué proceso se está ejecutando en el sistema.
Esto se puede hacer usando el comando lsof, que significa Listar archivos abiertos. Dado que Linux considera todo, incluidos directorios, dispositivos, sockets, etc., como archivos, podemos usar lsof para identificar fácilmente todos los archivos abiertos.
Si solo ejecutamos lsof, enumerará todos los archivos abiertos que pertenecen a cualquier proceso activo en el sistema. Si la salida es larga, podemos usar el comando less para desplazarnos por la salida:
# lsof | less
La salida que se muestra tiene columnas como Comando, PID, Usuario, FD, Tipo, Dispositivo, etc., para una mejor comprensión de los archivos. La columna FD tiene información sobre la descripción del archivo, como el directorio de trabajo actual (CWD), el directorio raíz (RTD), el texto del programa (TXT), etc. Si la columna FD contiene información como 0u, 1u, etc., el número significa el descriptor real del archivo y el alfabeto significa los diferentes modos (acceso de lectura, acceso de escritura y acceso de lectura/escritura).
si encuentra el siguiente error mientras ejecuta el comando lsof:
lsof: command not found
ypu puede instalar el siguiente paquete según su elección de distribución.
Distribución | Comando |
---|---|
OS X | instalar cerveza lsof |
Debian | apt-get install lsof |
Ubuntu | apt-get install lsof |
Alpino | apk agregar lsof |
Arco Linux | pacman -S lsof |
Kali Linux | apt-get install lsof |
Cent OS | yum instalar lsof |
Fedora | dnf instalar lsof |
Raspbian | apt-get install lsof |
Opciones de lsof utilizadas con frecuencia
- -cx :solo muestra archivos que están abiertos por procesos cuyo ejecutable comienza con los caracteres especificados por x.
- -i x :En lugar de mostrar archivos abiertos, muestre sockets cuya dirección de Internet sea x. Si no se especifica x, muestra todas las conexiones IP. Esto es funcionalmente equivalente a netstat –anp.
- -u nombre de usuario :muestra solo los archivos que el nombre de usuario ha abierto.
- -P :No convierta los números de puerto en nombres de puerto (por ejemplo, muestre 25 en lugar de smtp).
Ejemplos de comandos lsof
Simplemente ejecutar los comandos lsof nos da una lista de todos los archivos abiertos en el sistema. Al usar la opción -u y especificar el nombre de usuario, obtenemos una lista de archivos abiertos para un usuario en particular. Cuando usamos la opción -i y especificamos un número de puerto, obtenemos información sobre cualquier proceso que se esté ejecutando en ese puerto. Cuando usamos las opciones -i y -u con un nombre de usuario en particular, obtenemos información sobre los archivos y comandos a los que accede ese usuario.
1. Encuentra los procesos que tienen un archivo dado abierto:
# lsof path/to/file
2. Busque el proceso que abrió un puerto de Internet local:
# lsof -i :port
3. Solo genera la ID del proceso (PID):
# lsof -t path/to/file
4. Enumere los archivos abiertos por el usuario dado:
# lsof -u username
5. Enumere los archivos abiertos por el comando o proceso dado:
# lsof -c process_or_command_name
6. Listar archivos abiertos por un proceso específico, dado su PID:
# lsof -p PID
7. Lista de archivos abiertos en un directorio:
# lsof +D path/to/directory
8. Busque el proceso que está escuchando en un puerto TCP IPv6 local y no convierta los números de red o puerto:
# lsof -i6TCP:port -sTCP:LISTEN -n -P
9. Enumere los procesos que tienen su directorio de inicio abierto:
# lsof ~
10. Enumere todos los archivos abiertos en su directorio de inicio:
# lsof +D
11. Enumere los archivos abiertos por procesos cuyos nombres comienzan con "i" y cuyo propietario es "geek":
# lsof -a -c i -u geek
12. Enumere los archivos usando el puerto TCP 80, repitiendo cada dos segundos hasta que termine lsof:
Palabras finales
lsof enumera los archivos abiertos. Dado que todo en Linux es un archivo, esta herramienta puede brindarle una cantidad fantástica de información sobre su sistema en ejecución. Se usa principalmente para saber qué procesos tienen qué archivos abiertos, pero también se puede usar para ver información de conexión TCP y UDP, entre otras cosas.