Cómo averiguar quién está usando un archivo en Linux

Cómo averiguar quién está usando un archivo en Linux

En este artículo, explicaremos cómo averiguar quién está usando un archivo en particular en Linux. Esto le ayudará a conocer el usuario del sistema o el proceso que está usando un archivo abierto.

Podemos usar el comando lsof para saber si alguien está usando un archivo, y si es así, quién. Lee la memoria del kernel en su búsqueda de archivos abiertos y le ayuda a enumerar todos los archivos abiertos. En este caso, un archivo abierto puede ser un archivo normal, un directorio, un archivo especial de bloque, un archivo especial de carácter, un flujo, un archivo de red y muchos otros, porque en Linux todo es un archivo.

Lsof se usa en un sistema de archivos para identificar quién está usando archivos en ese sistema de archivos. Puede ejecutar el comando lsof. en el sistema de archivos de Linux y la salida identifica al propietario y la información del proceso para los procesos que utilizan el archivo como se muestra en la siguiente salida.

$ lsof/dev/null. Lista de todos los archivos abiertos en Linux COMMAND PID USER FD TYPE DISPOSITIVO TAMAÑO/OFF NODE NAME systemd 1480 tecmint 0r CHR 1,3 0t0 6/dev/null sh 1501 tecmint 0r CHR 1,3 0t0 6/dev/null sh 1501 tecmint 1w CHR 1,3 0t0 6/dev/null dbus-daem 1530 tecmint 0u CHR 1,3 0t0 6/dev/null xfce4-ses 1603 tecmint 0r CHR 1,3 0t0 6/dev/null xfce4-ses 1603 tecmint 1w CHR 1,3 0t0 6/dev/null at-spi-bu 1604 tecmint 0r CHR 1,3 0t0 6/dev/null dbus-daem 1609 tecmint 0u CHR 1,3 0t0 6/dev/null at-spi2-r 1611 tecmint 0u CHR 1,3 0t0 6/dev/null xfconfd 1615 tecmint 0u CHR 1,3 0t0 6/dev/null xfwm4 1624 tecmint 0r CHR 1,3 0t0 6/dev/null xfwm4 1624 tecmint 1w CHR 1,3 0t0 6/dev/null xfce4-pan 1628 tecmint 0r CHR 1,3 0t0 6/dev/null xfce4-pan 1628 tecmint 1w CHR 1,3 0t0 6/dev/null Thunar 1630 tecmint 0r CHR 1,3 0t0 6/dev/null Thunar 1630 tecmint 1w CHR 1,3 0t0 6/dev/null xfdesktop 1632 tecmint 0r CHR 1,3 0t0 6/dev/null xfdesktop 1632 tecmint 1w CHR 1,3 0t0 6/dev/null ….

Para enumerar los archivos abiertos específicos del usuario, ejecute el siguiente comando y reemplace tecmint con el nombre de usuario real.

$ lsof-u tecmint. Lista de archivos abiertos por el usuario COMANDO PID USUARIO FD TIPO TAMAÑO DEL DISPOSITIVO/APAGADO NODO NOMBRE systemd 1480 tecmint cwd DIR 8,3 4096 2/systemd 1480 tecmint rtd DIR 8,3 4096 2/systemd 1480 tecmint txt REG 8,3 1595792 3147496/lib/systemd/systemd systemd 1480 tecmint mem REG 8,3 1700792 3150525/lib/x86_64-linux-gnu/libm-2.27.so systemd 1480 tecmint mem REG 8,3 121016 3146329/lib/x86_64-linux-gnu/libudev.so.1.6.9 systemd 1480 tecmint mem REG 8,3 84032 3150503/lib/x86_64-linux-gnu/libgpg-error.so.0.22.0 systemd 1480 tecmint mem REG 8,3 43304 3150514/lib/x86_64-linux-gnu/libjson-c.so.3.0.1 systemd 1480 tecmint mem REG 8,3 34872 2497970/usr/lib/x86_64-linux-gnu/libargon2.so.0 systemd 1480 tecmint mem REG 8, 3 432640 3150484/lib/x86_64-linux-gnu/libdevmapper.so.1.02.1 systemd 1480 tecmint mem REG 8,3 18680 3150450/lib/x86_64-linux-gnu/libattr.so.1.1.0 systemd 1480 tecmint mem REG 8,3 18712 3150465/lib/x86_64-linux-gnu/libc ap-ng.so.0.0.0 systemd 1480 tecmint mem REG 8,3 27112 3150489/lib/x86_64-linux-gnu/libuuid.so.1.3.0 systemd 1480 tecmint mem REG 8,3 14560 3150485/lib/x86_64-linux-gnu/libdl-2.27.so …

Otro uso importante de lsof. es descubrir el proceso que escucha en un puerto específico. Por ejemplo, identifique el proceso que escucha en el puerto 80. con el siguiente comando.

$ sudo lsof-i TCP: 80. Proceso de búsqueda Puerto de escucha COMANDO PID USUARIO FD TIPO TAMAÑO DEL DISPOSITIVO/APAGADO NOMBRE NOMBRE httpd 903 root 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 1320 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 1481 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 1482 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 1493 apache 4u IPv6 20222 0t0 TCP * : http (ESCUCHAR) httpd 1763 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 2027 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 2029 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 2044 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 3199 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) httpd 3201 apache 4u IPv6 20222 0t0 TCP *: http (ESCUCHAR) freestar.config.enabled_slots.push (LocationName: “tecmint_incontent”, slotId: “tecmint_in content “);

Nota. Dado que lsof. lee la memoria del kernel en su búsqueda de archivos abiertos, los cambios rápidos en la memoria del kernel pueden resultar en salidas impredecibles. Esta es una de las principales desventajas de usar el comando lsof.

Para obtener más información, consulte la página de manual de lsof.

$ man lsof

¡Eso es todo! En este artículo, hemos explicado cómo saber quién está usando un archivo en particular en Linux. Hemos mostrado cómo identificar al propietario y procesar la información para los procesos utilizando un archivo abierto. Utilice el formulario de comentarios a continuación para comunicarse con nosotros si tiene preguntas o comentarios.