¿Qué significa que en Linux todo es archivo?
Ángel Vilte, de la Facultad de la Universidad de la Plata me invitó a dar una charla para un evento de software libre. Las diapositivas de la misma se pueden descargar haciendo clic en filesystems .\
Todo es archivos
Eso no es del todo correcto. Es más apropiado decir que todo es un descriptor de archivo o que todo puede tener un descriptor de archivo. En Linux un descriptor de archivo es un identificador único de proceso para un archivo u otro recurso de entrada o salida. Por ejemplo, no existe necesariamente un archivo para una interfaz de red. Sin embargo existen sockets relacionados con ellas.
En el siguiente ejemplo podemos ver los descriptores de archivos para la ip 127.0.0.1 de la interfaz lo.
sudo lsof -n -i@127.0.0.1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chronyd 1337 chrony 5u IPv4 8171 0t0 UDP 127.0.0.1:323 cupsd 1538 root 7u IPv4 14727 0t0 TCP 127.0.0.1:ipp (LISTEN) qemu-syst 1774 qemu 32u IPv4 19480 0t0 TCP 127.0.0.1:rfb (LISTEN) syncthing 2620 sergio 19u IPv4 22825 0t0 TCP 127.0.0.1:8384 (LISTEN)
En este caso, vemos los descriptores de archivos de lectura y escritura 5u, 7u, 32u y 19u.
lsfd -p 646429 -i -o +FD COMMAND PID USER ASSOC XMODE TYPE SOURCE MNTID INODE NAME FD ping 646429 sergio 3 rw---m PING sockfs 9 3737509 state=close id=3 laddr=0.0.0.0 3 ping 646429 sergio 4 rw---- PINGv6 sockfs 9 3737510 socket:[3737510] 4
ls -l /proc/646429/fd total 0 lrwx------ 1 sergio sergio 64 may 11 03:21 0 -> /dev/pts/6lsfd -p 646429 -Q '(FD == 1) or (FD == 2)' COMMAND PID USER ASSOC XMODE TYPE SOURCE MNTID INODE NAME ping 646429 sergio 1 -w-D-- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log ping 646429 sergio 2 -w-D-- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log l-wx------ 1 sergio sergio 64 may 11 03:21 1 -> /home/sergio/to_delete/ping.log l-wx------ 1 sergio sergio 64 may 11 03:21 2 -> /home/sergio/to_delete/ping.log lrwx------ 1 sergio sergio 64 may 11 03:21 3 -> 'socket:[3737509]' lrwx------ 1 sergio sergio 64 may 11 03:21 4 -> 'socket:[3737510]'
lsfd -p 646429 -Q '(FD == 1) or (FD == 2)' COMMAND PID USER ASSOC XMODE TYPE SOURCE MNTID INODE NAME ping 646429 sergio 1 -w-D-- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log ping 646429 sergio 2 -w-D-- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log
Despué de borrar ping.log:
lsfd -p 646429 -Q '(FD == 1) or (FD == 2)' COMMAND PID USER ASSOC XMODE TYPE SOURCE MNTID INODE NAME ping 646429 sergio 1 -w---- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log ping 646429 sergio 2 -w---- REG 0:41 94 37863261 /home/sergio/to_delete/ping.log
Descriptor de archivo para abrirlo, leerlo y modificarlo como si fuera un archivo.
Cada vez que un proceso abre un archivo (o cualquier otro recurso que pueda ser representado como un archivo en el sistema operativo), el kernel del sistema operativo asigna un descriptor de archivo único para ese archivo abierto. Este descriptor de archivo actúa como un "enlace" entre el proceso y el archivo, permitiendo al proceso interactuar con el archivo mediante operaciones de lectura, escritura, búsqueda, etc.
Por lo tanto, puedes pensar en el descriptor de archivo como un puente entre el proceso y el recurso que está accediendo. Permite al proceso comunicarse con el recurso subyacente de manera eficiente y uniforme, independientemente de si el recurso es un archivo en el sistema de archivos, un dispositivo de hardware o un socket de red.
Comentarios
Comments powered by Disqus