análisis de comando lsof

lsof es una herramienta que enumera los archivos abiertos en el sistema actual. En el entorno Linux, todo existe en forma de archivo: a través del archivo, no solo puede acceder a datos regulares, sino también a conexiones de red y hardware. Como el Protocolo de control de transmisión (TCP) y los sockets del Protocolo de datagramas de usuario (UDP), etc., el sistema asigna un descriptor de archivo para la aplicación en segundo plano, independientemente de la naturaleza del archivo, el descriptor de archivo es para la aplicación y La interacción entre los sistemas operativos básicos proporciona una interfaz común. Porque la lista de descriptores de archivos abiertos de la aplicación proporciona mucha información sobre la aplicación misma. Por lo tanto, la herramienta lsof puede ver esta lista para monitorear y solucionar problemas del sistema.

Significado de la información de salida

Ingrese lsof en la terminal para mostrar los archivos abiertos por el sistema. Debido a que lsof necesita acceder a la memoria central y a varios archivos, debe ejecutarse como usuario root para ejercer plenamente sus funciones.

[root@queen ~]# lsof /root/
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
aliyun-se   757 root  cwd    DIR  253,1     4096 131073 /root
bash      17433 root  cwd    DIR  253,1     4096 131073 /root
lsof      17460 root  cwd    DIR  253,1     4096 131073 /root
lsof      17461 root  cwd    DIR  253,1     4096 131073 /root

Cada línea muestra un archivo abierto. Si no se especifican condiciones, todos los archivos abiertos por todos los procesos se mostrarán de forma predeterminada.

El significado de lsof que genera cada columna de información es el siguiente:

COMANDO: nombre de proceso PID: identificador de proceso

USUARIO: propietario del proceso

FD: descriptor de archivo. La aplicación identifica el archivo a través del descriptor de archivo. Tales como cwd, txt, etc. TYPE: tipo de archivo, como DIR, REG, etc.

DISPOSITIVO: especifique el nombre del disco

TAMAÑO: el tamaño del archivo

NODE: Inode (identificación del archivo en el disco)

NOMBRE: el nombre exacto del archivo abierto

lsof opciones comunes que significan

lsof filename #显示打开指定文件的所有进程
lsof -c 进程 -c 进程 #显示指定进程名现在打开的文件,可以同时列出多个程序的
lsof -p pid1,pid2... #查看指定进程号的进程打开了哪些文件
lsof -i  #列出所有的网络连接
lsof -i[:service|port]  #列出谁在使用某个特定的tcp/udp端口
    service --> /etc/service中的 service name (可以不只一个)
    port --> 端口号 (可以不只一个)

ejemplo de uso de lsof

Recuperar archivos borrados

(1.1) Si un proceso ha abierto un archivo en el sistema, pero este archivo fue eliminado accidentalmente por nosotros, en este momento esperamos restaurar el archivo eliminado accidentalmente. Si el proceso correspondiente a un archivo que se eliminó accidentalmente no se cierra, el archivo se puede recuperar.
(1.2) El descriptor de archivo FD en Linux es el mismo concepto que el identificador de archivo en Windows. Un proceso abre un archivo y se genera un descriptor de archivo correspondiente. Si el proceso cierra el archivo, el descriptor de archivo O el identificador de archivo se liberará en consecuencia.
(1.3) El problema común en el entorno de producción es que algunos miembros del personal de mantenimiento o de desarrollo utilizan el comando de cola para ver los registros en tiempo real. Luego, otra persona usa el comando rm para eliminar, lo que hará que el espacio en disco no se libere realmente, porque el archivo que desea eliminar y el proceso está en uso, el identificador de archivo no se libera, es decir, cola

¿Qué es un archivo?
  • El archivo es en realidad un enlace al inodo. El enlace del inodo contiene todos los atributos del archivo, como los permisos y el propietario, la dirección del bloque de datos (el archivo se almacena en estos bloques de datos en el disco). Cuando elimina (rm) un archivo, el El enlace al inodo se elimina y el contenido del inodo no se elimina. El proceso aún puede estar en uso. Solo cuando todos los enlaces del inodo se eliminan por completo, estos bloques de datos se pueden escribir con datos nuevos.
  • El sistema de archivos proc puede ayudarnos a recuperar datos. Cada proceso en el sistema tiene un directorio y su propio nombre en / proc, que contiene un subdirectorio fd (descriptor de archivo) (el proceso necesita todos los enlaces para abrir archivos). Para eliminar un archivo del sistema de archivos, también hay una referencia de inodo:
/proc/进程号/fd/文件描述符

Debe conocer el número de proceso (pid) y el descriptor de archivo (fd) del archivo abierto, que se pueden obtener fácilmente a través de la herramienta lsof

Use el comando lsof para solucionar problemas
  • Si conoce el nombre del archivo, puede usar directamente el siguiente comandolsof |grep file
  • Pero si no sabe qué archivo o muchos archivos tienen esta situación, debe usar el siguiente comando
lsof |grep deleted
  • Use el comando kill para liberar el identificador de archivo para liberar espacio.
    Supongamos que eliminamos accidentalmente / var / log / messages
 [root@queen home]# lsof | grep deleted
rsyslogd    759          root    4w      REG              253,1    268564     264140 /var/log/messages (deleted)
in:imjour   759   781    root    4w      REG              253,1    268564     264140 /var/log/messages (deleted)
rs:main     759   782    root    4w      REG              253,1    268564     264140 /var/log/messages (deleted)
## 4是句柄号
[root@queen home]# ls -l  /proc/759/fd/4
l-wx------ 1 root root 64 Oct 10 15:56 /proc/759/fd/4 -> /var/log/messages (deleted)
[root@queen home]# cp /proc/759/fd/4 /var/log/message
[root@queen home]# ls -l /var/log/message
-rw------- 1 root root 268564 Mar  5 14:16 /var/log/message
10 artículos originales publicados · Me gusta0 · Visitas 959

Supongo que te gusta

Origin blog.csdn.net/weixin_43572702/article/details/104631391
Recomendado
Clasificación