Explicación de & quot; Todo es un archivo & quot; y tipos de archivos en Linux


Si es nuevo en Linux, o lo ha usado durante algunos meses, debe haber escuchado o leído declaraciones como " En Linux, todo es un archivo ".

De hecho, esto es cierto, aunque es solo un concepto de generalización, en Unix y sus derivados, como Linux, todo se considera como un archivo. Si algo no es un archivo, debe ejecutarse como un proceso en el sistema.

Para comprender esto, tome, por ejemplo, la cantidad de espacio en su directorio raíz (/) que siempre utilizan los diferentes tipos de archivos de Linux. Cuando crea un archivo o transfiere un archivo a su sistema, ocupa un espacio en el disco físico y se considera que está en un formato específico (tipo de archivo).

Además, el sistema Linux no distingue entre archivos y directorios, pero los directorios hacen un trabajo importante, es decir, almacenar otros archivos en grupos en una jerarquía para una ubicación fácil. Todos los componentes de su hardware se representan como archivos y el sistema se comunica con ellos utilizando estos archivos.

La idea es una descripción importante de una gran propiedad de Linux, donde los recursos de entrada/salida como documentos, directorios (carpetas en Mac OS X y Windows), teclado, monitor, discos duros, medios extraíbles, impresoras, módems, virtuales Los terminales y también la comunicación entre procesos y redes son flujos de bytes definidos por el espacio del sistema de archivos.

Una ventaja notable de que todo sea un archivo es que se puede usar el mismo conjunto de herramientas, utilidades y API de Linux en los recursos de entrada/salida anteriores.

Aunque todo en Linux es un archivo, hay ciertos archivos especiales que son más que solo un archivo, por ejemplo, sockets y tuberías con nombre.

¿Cuáles son los diferentes tipos de archivos en Linux?

En Linux hay básicamente tres tipos de archivos:

  1. Ordinary/Regular files
  2. Special files
  3. Directories

Estos son archivos de datos que contienen texto, datos o instrucciones de programa y son el tipo más común de archivos que puede esperar encontrar en un sistema Linux e incluyen:

  1. Readable files
  2. Binary files
  3. Image files
  4. Compressed files and so on.

Los archivos especiales incluyen lo siguiente:

Bloquear archivos : estos son archivos de dispositivo que proporcionan acceso en búfer a los componentes de hardware del sistema. Proporcionan un método de comunicación con los controladores de dispositivos a través del sistema de archivos.

Un aspecto importante de los archivos de bloque es que pueden transferir un gran bloque de datos e información en un momento dado.

Listado de archivos de bloques de sockets en un directorio:

# ls -l /dev | grep "^b"
brw-rw----  1 root disk        7,   0 May 18 10:26 loop0
brw-rw----  1 root disk        7,   1 May 18 10:26 loop1
brw-rw----  1 root disk        7,   2 May 18 10:26 loop2
brw-rw----  1 root disk        7,   3 May 18 10:26 loop3
brw-rw----  1 root disk        7,   4 May 18 10:26 loop4
brw-rw----  1 root disk        7,   5 May 18 10:26 loop5
brw-rw----  1 root disk        7,   6 May 18 10:26 loop6
brw-rw----  1 root disk        7,   7 May 18 10:26 loop7
brw-rw----  1 root disk        1,   0 May 18 10:26 ram0
brw-rw----  1 root disk        1,   1 May 18 10:26 ram1
brw-rw----  1 root disk        1,  10 May 18 10:26 ram10
brw-rw----  1 root disk        1,  11 May 18 10:26 ram11
brw-rw----  1 root disk        1,  12 May 18 10:26 ram12
brw-rw----  1 root disk        1,  13 May 18 10:26 ram13
brw-rw----  1 root disk        1,  14 May 18 10:26 ram14
brw-rw----  1 root disk        1,  15 May 18 10:26 ram15
brw-rw----  1 root disk        1,   2 May 18 10:26 ram2
brw-rw----  1 root disk        1,   3 May 18 10:26 ram3
brw-rw----  1 root disk        1,   4 May 18 10:26 ram4
brw-rw----  1 root disk        1,   5 May 18 10:26 ram5
...

Archivos de caracteres : también son archivos de dispositivos que proporcionan acceso en serie sin almacenamiento a los componentes de hardware del sistema. Funcionan al proporcionar una forma de comunicación con los dispositivos mediante la transferencia de datos de un personaje a la vez.

Listado de sockets de archivos de caracteres en un directorio:

# ls -l /dev | grep "^c"
crw-------  1 root root       10, 235 May 18 15:54 autofs
crw-------  1 root root       10, 234 May 18 15:54 btrfs-control
crw-------  1 root root        5,   1 May 18 10:26 console
crw-------  1 root root       10,  60 May 18 10:26 cpu_dma_latency
crw-------  1 root root       10, 203 May 18 15:54 cuse
crw-------  1 root root       10,  61 May 18 10:26 ecryptfs
crw-rw----  1 root video      29,   0 May 18 10:26 fb0
crw-rw-rw-  1 root root        1,   7 May 18 10:26 full
crw-rw-rw-  1 root root       10, 229 May 18 10:26 fuse
crw-------  1 root root      251,   0 May 18 10:27 hidraw0
crw-------  1 root root       10, 228 May 18 10:26 hpet
crw-r--r--  1 root root        1,  11 May 18 10:26 kmsg
crw-rw----+ 1 root root       10, 232 May 18 10:26 kvm
crw-------  1 root root       10, 237 May 18 10:26 loop-control
crw-------  1 root root       10, 227 May 18 10:26 mcelog
crw-------  1 root root      249,   0 May 18 10:27 media0
crw-------  1 root root      250,   0 May 18 10:26 mei0
crw-r-----  1 root kmem        1,   1 May 18 10:26 mem
crw-------  1 root root       10,  57 May 18 10:26 memory_bandwidth
crw-------  1 root root       10,  59 May 18 10:26 network_latency
crw-------  1 root root       10,  58 May 18 10:26 network_throughput
crw-rw-rw-  1 root root        1,   3 May 18 10:26 null
crw-r-----  1 root kmem        1,   4 May 18 10:26 port
crw-------  1 root root      108,   0 May 18 10:26 ppp
crw-------  1 root root       10,   1 May 18 10:26 psaux
crw-rw-rw-  1 root tty         5,   2 May 18 17:40 ptmx
crw-rw-rw-  1 root root        1,   8 May 18 10:26 random

Archivos de enlace simbólico : un enlace simbólico es una referencia a otro archivo en el sistema. Por lo tanto, los archivos de enlaces simbólicos son archivos que apuntan a otros archivos y pueden ser directorios o archivos normales.

Listado de sockets de enlaces simbólicos en un directorio:

# ls -l /dev/ | grep "^l"
lrwxrwxrwx  1 root root             3 May 18 10:26 cdrom -> sr0
lrwxrwxrwx  1 root root            11 May 18 15:54 core -> /proc/kcore
lrwxrwxrwx  1 root root            13 May 18 15:54 fd -> /proc/self/fd
lrwxrwxrwx  1 root root             4 May 18 10:26 rtc -> rtc0
lrwxrwxrwx  1 root root             8 May 18 10:26 shm -> /run/shm
lrwxrwxrwx  1 root root            15 May 18 15:54 stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root            15 May 18 15:54 stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root            15 May 18 15:54 stdout -> /proc/self/fd/1

Puede hacer enlaces simbólicos utilizando la utilidad ln en Linux como se muestra en el siguiente ejemplo.

# touch file1.txt
# ln -s file1.txt /home/tecmint/file1.txt  [create symbolic link]
# ls -l /home/tecmint/ | grep "^l"         [List symbolic links]

En el ejemplo anterior, creé un archivo llamado file1.txt en el directorio /tmp , luego creé el enlace simbólico, /home/tecmint/file1.txt para apuntar a /tmp/file1.txt .

Canalizaciones o tuberías con nombre : estos son archivos que permiten la comunicación entre procesos al conectar la salida de un proceso a la entrada de otro.

Una canalización con nombre es en realidad un archivo que dos procesos utilizan para comunicarse y actúa como una tubería de Linux.

Listado de sockets de tuberías en un directorio:

# ls -l | grep "^p"
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe1
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe2
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe3
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe4
prw-rw-r-- 1 tecmint tecmint    0 May 18 17:47 pipe5

Puede usar la utilidad mkfifo para crear una canalización con nombre en Linux de la siguiente manera.

# mkfifo pipe1
# echo "This is named pipe1" > pipe1

En el ejemplo anterior, creé una canalización con nombre llamada pipe1 , luego le pasé algunos datos utilizando el comando echo, después de lo cual el shell se volvió no interactivo al procesar la entrada.

Luego abrí otro shell y ejecuté el otro comando para imprimir lo que se pasó a la tubería.

# while read line ;do echo "This was passed-'$line' "; done<pipe1

Archivos de socket : estos son archivos que proporcionan un medio de comunicación entre procesos, pero pueden transferir datos e información entre procesos que se ejecutan en diferentes entornos.

Esto significa que los sockets proporcionan transferencia de datos e información entre procesos que se ejecutan en diferentes máquinas en una red.

Un ejemplo para mostrar el trabajo de sockets sería un navegador web que realiza una conexión a un servidor web.

# ls -l /dev/ | grep "^s"
srw-rw-rw-  1 root root             0 May 18 10:26 log

Este es un ejemplo de un socket creado en C utilizando la llamada al sistema socket () .

int socket_desc= socket(AF_INET, SOCK_STREAM, 0 );

En lo anterior:

  1. AF_INET is the address family(IPv4)
  2. SOCK_STREAM is the type (connection is TCP protocol oriented)
  3. 0 is the protocol(IP Protocol)

Para referirse al archivo de socket, use el socket_desc , que es el mismo que el descriptor del archivo, y use read () y write () Sistema de llamadas para leer y escribir desde el socket respectivamente.

Estos son archivos especiales que almacenan tanto archivos ordinarios como otros especiales y están organizados en el sistema de archivos de Linux en una jerarquía a partir del directorio raíz (/) .

Listado de sockets en un directorio:

# ls -l / | grep "^d" 
drwxr-xr-x   2 root root  4096 May  5 15:49 bin
drwxr-xr-x   4 root root  4096 May  5 15:58 boot
drwxr-xr-x   2 root root  4096 Apr 11  2015 cdrom
drwxr-xr-x  17 root root  4400 May 18 10:27 dev
drwxr-xr-x 168 root root 12288 May 18 10:28 etc
drwxr-xr-x   3 root root  4096 Apr 11  2015 home
drwxr-xr-x  25 root root  4096 May  5 15:44 lib
drwxr-xr-x   2 root root  4096 May  5 15:44 lib64
drwx------   2 root root 16384 Apr 11  2015 lost+found
drwxr-xr-x   3 root root  4096 Apr 10  2015 media
drwxr-xr-x   3 root root  4096 Feb 23 17:54 mnt
drwxr-xr-x  16 root root  4096 Apr 30 16:01 opt
dr-xr-xr-x 223 root root     0 May 18 15:54 proc
drwx------  19 root root  4096 Apr  9 11:12 root
drwxr-xr-x  27 root root   920 May 18 10:54 run
drwxr-xr-x   2 root root 12288 May  5 15:57 sbin
drwxr-xr-x   2 root root  4096 Dec  1  2014 srv
dr-xr-xr-x  13 root root     0 May 18 15:54 sys
drwxrwxrwt  13 root root  4096 May 18 17:55 tmp
drwxr-xr-x  11 root root  4096 Mar 31 16:00 usr
drwxr-xr-x  12 root root  4096 Nov 12  2015 var

Puede crear un directorio utilizando el comando mkdir .

# mkdir -m 1666 tecmint.com
# mkdir -m 1666 news.tecmint.com
# mkdir -m 1775 linuxsay.com

Resumen

Ahora debe tener un claro entendimiento de por qué todo en Linux es un archivo y los diferentes tipos de archivos que pueden salir de su sistema Linux.

Puede agregar más a esto leyendo más sobre los tipos de archivos individuales y se crean. Espero que esta guía le resulte útil y, para cualquier pregunta e información adicional que le gustaría compartir, deje un comentario y discutiremos más.