¿Qué es un archivo especial?

En un sistema operativo de computadora, un archivo especial es un tipo de archivo que puede almacenarse en un sistema de archivos. Un archivo especial a veces también se llama un archivo de dispositivo .

El propósito de un archivo especial es exponer el dispositivo como un archivo en el sistema de archivos. Un archivo especial proporciona una interfaz universal para dispositivos de hardware (y dispositivos virtuales creados y utilizados por el kernel), porque las herramientas para E / S de archivos se pueden usar para acceder al dispositivo.

Cuando los datos son rojos o están escritos en un archivo especial, la operación ocurre de inmediato y no está sujeta a las reglas convencionales del sistema de archivos.

En Linux, hay dos tipos de archivos especiales: archivos especiales de bloques y archivos especiales de caracteres .

Un archivo especial de bloque actúa como una interfaz directa a un dispositivo de bloque. Un dispositivo de bloque es cualquier dispositivo que realiza E / S de datos en unidades de bloques.

Ejemplos de archivos especiales de bloques:

  • / dev / sd xn - particiones montadas de dispositivos de almacenamiento físico. La letra x se refiere a un dispositivo físico, y el número n se refiere a una partición en ese dispositivo. Por ejemplo, / dev / sda1 suele ser la primera partición en el primer dispositivo de almacenamiento físico.
  • / dev / loop n - loop dispositivos. Estos son dispositivos especiales que permiten utilizar un archivo en el sistema de archivos como un dispositivo de bloque. El archivo puede contener un sistema de archivos completo propio, y se puede acceder a él como si fuera una partición montada en un dispositivo de almacenamiento físico. Por ejemplo, un archivo de imagen de disco ISO se puede montar como un dispositivo de bucle.

Si desea saber qué tan grande es un bloque en su sistema, ejecute " blockdev --getbsz device " como root, por ejemplo:

 sudo blockdev --getbsz / dev / sda1 
 4096 

En este ejemplo, el tamaño del bloque es 4096 bytes (4 kibibytes).

Archivos especiales de caracteres

Un archivo especial de caracteres es similar a un dispositivo de bloque, pero los datos se escriben un carácter (ocho bits o un byte) a la vez.

Ejemplos de archivos especiales de caracteres:

  • / dev / stdin (entrada estándar.)
  • / dev / stdout (salida estándar.)
  • / dev / stderr (error estándar.)
  • / dev / random (PRNG que puede demorar la devolución de un valor para adquirir una entropía adicional).
  • / dev / urandom (PRNG que siempre devuelve un valor inmediatamente, independientemente de la entropía requerida)
  • / dev / null (el dispositivo nulo. La lectura de este archivo siempre obtiene un byte nulo; escribir en este archivo no hace nada con éxito).

Tipos de archivos de linux

En el kernel de Linux, los tipos de archivos se declaran en el archivo de encabezado sys / stat.h. El nombre de tipo, el nombre simbólico y la máscara de bits para cada tipo de archivo de Linux se enumeran a continuación.

¿Cómo puedo saber si un archivo es especial?

Prueba de bloque especial

En bash, el comando " test -b archivo " devuelve un estado de salida de 0 si el archivo es especial de bloque, o 1 si el archivo es de otro tipo o no existe.

 prueba -b / dev / sda1; echo $? # comprobar bloque especial, estado de salida de eco de prueba 
 0 
 prueba -b / dev / null; echo $? # archivos especiales de caracteres no son especiales de bloques 
 1 

Prueba de carácter especial

Para determinar si un archivo tiene un carácter especial, use " test -c archivo ":

 prueba -c / dev / null; echo $? 
 0 

Usando stat

También puede verificar el tipo de un archivo con stat :

 stat / dev / sda1 
 Archivo: / dev / sda1 Tamaño: 0 Bloques: 0 IO Bloque: 4096 bloque archivo especial Dispositivo: 6h / 6d Inodo: 7998 Enlaces: 1 Tipo de dispositivo: 8, 1 Acceso: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / disk) Acceso: 2018-07-08 06: 41: 25.540000000 -0400 Modificar: 2018-07-08 06: 41: 25.540000000 -0400 Cambio: 2018-07-08 06: 41: 25.540000000 -0400 Nacimiento: - 
 stat / dev / random 
 Archivo: / dev / random Tamaño: 0 Bloques: 0 IO Bloque: 4096 caracteres archivo especial Dispositivo: 6h / 6d Inodo: 6518 Enlaces: 1 Tipo de dispositivo: 1, 8 Acceso: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / root) Acceso: 2018-07-08 06: 41: 19.676000000 -0400 Modificar: 2018-07-08 06: 41: 19.676000000 -0400 Cambio: 2018-07-08 06:41 : 19.676000000 -0400 Nacimiento: - 

Inodo, términos del sistema operativo, entrada estándar (stdin), salida estándar (stdout)