Los siete tipos de archivos estándar de Unix son regular , directorio , enlace simbólico , especial FIFO , especial de bloque , especial de carácter y socket según lo definido por POSIX . [1] Las diferentes implementaciones específicas del sistema operativo permiten más tipos de los que requiere POSIX (por ejemplo, puertas Solaris ). El tipo de archivo se puede identificar mediante el ls -l
comando, que muestra el tipo en el primer carácter del campo de permisos del sistema de archivos .
Para archivos normales , Unix no impone ni proporciona ninguna estructura de archivo interna; por lo tanto, su estructura e interpretación depende completamente del software que los utilice. Sin embargo, el file
comando se puede utilizar para determinar qué tipo de datos contienen.
Representaciones
Numérico
En la estructura de estadísticas , el tipo de archivo y los permisos (el modo ) se almacenan juntos en un st_mode
campo de bits , que tiene un tamaño de al menos 12 bits (3 bits para especificar el tipo entre los siete tipos posibles de archivos; 9 bits para permisos) . POSIX define el diseño de los permisos como mínimo de 9 bits, pero el resto no está definido. [1]
Por convención, el modo es un valor de 16 bits escrito como un número octal de seis dígitos sin un cero inicial. La parte de formato ocupa los 4 bits iniciales (2 dígitos) y "10" ( 1000 en binario) generalmente representa un archivo normal. Los 3 bits medios (1 dígito) se utilizan normalmente para setuid, setgid y sticky . La última parte ya está definida por POSIX para contener el permiso. Un ejemplo es "100644" para un archivo típico. Este formato se puede ver en git , tar y ar , entre otros lugares. [2]
El tipo de archivo se puede probar usando macros como S_ISDIR
. Esta verificación generalmente se realiza enmascarando el modo con S_IFMT
(a menudo el número octal "170000" para la convención de 4 bits de la derivación) y verificando si el resultado coincide S_IFDIR
. S_IFMT
no es un concepto central de POSIX, sino una extensión X / Open System Interfaces (XSI); Los sistemas que solo se ajustan a POSIX pueden utilizar otros métodos. [1]
Cadena de modo
Tomemos, por ejemplo, una línea en la ls -l
salida:
drwxr-xr-x 2 raíz raíz 0 1 de enero de 1970 inicio
POSIX especifica [3] el formato de salida para el formato largo ( -l
opción). En particular, el primer campo (antes del primer espacio) se denomina "cadena de modo de archivo" y su primer carácter describe el tipo de archivo. El resto de esta cadena indica los permisos del archivo .
Por lo tanto, en el ejemplo, la cadena de modo es drwxr-xr-x
: el tipo de archivo es d
(directorio) y los permisos son rwxr-xr-x
.
Ejemplos de implementaciones
La versión de GNU coreutilsls
usa una llamada a filemode()
una función glibc (expuesta en la biblioteca gnulib [4] ) para obtener la cadena de modo.
FreeBSD usa un enfoque más simple pero permite un número menor de tipos de archivos. [5]
Archivo regular
Los archivos normales se muestran ls -l
con un guión menos -
en el campo de modo:
$ ls -l / etc / passwd - rw-r - r-- ... / etc / passwd
Directorio
El archivo especial más común es el directorio. El diseño de un archivo de directorio está definido por el sistema de archivos utilizado. Como varios sistemas de archivos están disponibles bajo Unix, tanto nativos como no nativos, no hay un diseño de archivos de directorio.
Un directorio se marca con a d
como la primera letra en el campo de modo en la salida de ls -dl
o stat
, p. Ej.
$ ls -dl / d rwxr-xr-x 26 raíz raíz 4096 22 de septiembre 09:29 /$ stat / Archivo: "/" Tamaño: 4096 Bloques: 8 Bloque IO: directorio 4096 Dispositivo: 802h / 2050d Inode: 128 Enlaces: 26Acceso: (0755 / d rwxr-xr-x) Uid: (0 / root) Gid: (0 / root)...
Enlace simbólico
Un enlace simbólico es una referencia a otro archivo. Este archivo especial se almacena como una representación textual de la ruta del archivo al que se hace referencia (lo que significa que el destino puede ser una ruta relativa o puede que no exista).
Un enlace simbólico está marcado con una l
(minúscula L
) como la primera letra de la cadena de modo, p. Ej.
l rwxrwxrwx ... termcap -> / usr / share / misc / termcap l rwxrwxrwx ... S03xinetd -> ../init.d/xinetd
FIFO (tubería con nombre)
Uno de los puntos fuertes de Unix siempre ha sido la comunicación entre procesos . Entre las facilidades proporcionadas por el sistema operativo se encuentran las tuberías , que conectan la salida de un proceso con la entrada de otro. Esto está bien si ambos procesos existen en el mismo espacio de proceso principal, iniciado por el mismo usuario, pero hay circunstancias en las que los procesos de comunicación deben utilizar FIFO, aquí denominados canalizaciones con nombre . Una de esas circunstancias ocurre cuando los procesos deben ejecutarse con diferentes nombres de usuario y permisos.
Las canalizaciones con nombre son archivos especiales que pueden existir en cualquier parte del sistema de archivos. Se pueden crear con el comando mkfifo
como en mkfifo mypipe
.
Una tubería con nombre se marca con a p
como la primera letra de la cadena de modo, por ejemplo
p rw-rw ---- ... mypipe
Enchufe
Un socket es un archivo especial utilizado para la comunicación entre procesos, que permite la comunicación entre dos procesos. Además de enviar datos, los procesos pueden enviar descriptores de archivos a través de una conexión de socket de dominio Unix utilizando las llamadas al sistema sendmsg()
y recvmsg()
.
A diferencia de las canalizaciones con nombre que solo permiten el flujo de datos unidireccional, los sockets son totalmente compatibles con dúplex .
Un conector está marcado con una s
como la primera letra de la cadena de modo, p. Ej.
s rwxrwxrwx /tmp/.X11-unix/X0
Archivo de dispositivo (bloque, carácter)
En Unix, casi todas las cosas se manejan como archivos y tienen una ubicación en el sistema de archivos, incluso los dispositivos de hardware como los discos duros. La gran excepción son los dispositivos de red, que no aparecen en el sistema de archivos, pero se manejan por separado.
Los archivos de dispositivo se utilizan para aplicar derechos de acceso a los dispositivos y para dirigir las operaciones en los archivos a los controladores de dispositivo adecuados.
Unix hace una distinción entre dispositivos de caracteres y dispositivos de bloque. La distinción es aproximadamente la siguiente:
- Los dispositivos de caracteres proporcionan solo un flujo de entrada en serie o aceptan un flujo de salida en serie
- Los dispositivos de bloque son accesibles aleatoriamente
Aunque, por ejemplo, las particiones de disco pueden tener dispositivos de caracteres que brindan acceso aleatorio sin búfer a los bloques de la partición y dispositivos de bloque que brindan acceso aleatorio con búfer a los bloques de la partición.
Un dispositivo de caracteres se marca con una c
como la primera letra de la cadena de modo. Del mismo modo, un dispositivo de bloqueo se marca con b
, p. Ej.
c rw ------- ... / dev / null b rw-rw ---- ... / dev / sda
Puerta
Una puerta es un archivo especial para la comunicación entre procesos entre un cliente y un servidor, actualmente implementado solo en Solaris .
Una puerta está marcada con una D
(mayúscula) como la primera letra de la cadena de modo, p. Ej.
D r - r - r-- ... nombre_puerta_servicio
Ver también
Referencias
- ^ a b c "
" . The Open Group Base Especificaciones Edición 6 . El grupo abierto. 21 de julio de 2019. - ^ Kitt, Stephen. "¿Qué modo de archivo es un enlace simbólico?" . Stack Exchange de Unix y Linux .
- ^ "IEEE Std 1003.1-2008 ls" . El grupo abierto. 11 de marzo de 2017.
- ^ "función de modo de archivo en GNU coreutils" . ÑU. 11 de marzo de 2017.
- ^ "función printtype de FreeBSD" . FreeBSD. 11 de marzo de 2017.