stringtranslate.com

Tipos de archivos Unix

Los siete tipos de archivos estándar de Unix son regular , directorio , enlace simbólico , FIFO especial , bloque especial , carácter especial y socket , según lo define 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 -lcomando, 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 archivos interna; por lo tanto, su estructura e interpretación depende completamente del software que los utiliza. [2] Sin embargo, el filecomando generalmente se puede utilizar para determinar qué tipo de datos contienen. [3]

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 posibles tipos 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, la moda es un valor de 16 bits escrito como un número octal de seis dígitos sin un cero a la izquierda. La parte del formato ocupa los primeros 4 bits (2 dígitos octales) y "010" ( 1000 en binario) normalmente representa un archivo normal. Los siguientes 3 bits (1 dígito) generalmente se usan 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. [4]

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 principales) y verificando si el resultado coincide S_IFDIR. S_IFMTno es un concepto central de POSIX, sino una extensión X/Open System Interfaces (XSI); Los sistemas que se ajustan únicamente a POSIX pueden utilizar otros métodos. [1]

Cadena de modo

Tomemos, por ejemplo, una línea en la ls -lsalida:

drwxr-xr-x 2 raíz raíz 0 1 de enero de 1970 inicio

POSIX especifica [5] el formato de salida para el formato largo ( -lopción). En particular, el primer campo (antes del primer espacio) se denomina "cadena de modo de archivo", aquí drwxr-xr-x. Su primer carácter describe el tipo de archivo, aquí d(directorio). El resto de esta cadena indica los permisos del archivo .

Ejemplos de implementaciones

La versión GNU coreutilsls utiliza una llamada a filemode(), una función glibc (expuesta en la biblioteca gnulib [6] ) para obtener la cadena de modo.

FreeBSD utiliza un enfoque más simple pero permite una cantidad menor de tipos de archivos. [7]

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 hay varios sistemas de archivos disponibles en Unix, tanto nativos como no nativos, no existe un diseño de archivos de directorio único.

Un directorio está marcado con a dcomo primera letra en el campo modo en la salida de ls -dl[5] o stat, por ejemplo

$ ls -dl / d rwxr-xr-x 26 raíz raíz 4096 22 de septiembre 09:29 /$ estadística / Archivo: "/" Tamaño: 4096 Bloques: 8 IO Bloque: 4096 directorioDispositivo: 802h/2050d Inodo: 128 Enlaces: 26Acceso: (0755/ d rwxr-xr-x) Uid: ( 0/ raíz) Gid: ( 0/ raíz)...

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 no existir en absoluto).

Un enlace simbólico está marcado con l(minúscula L) como primera letra de la cadena de modo, por ejemplo, en esta ls -lsalida abreviada: [5]

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 que brinda el SO 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 que se comunican deben usar 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 mkfifocomo en mkfifo mypipe.

Una canalización con nombre está marcada con a pcomo primera letra de la cadena de modo, por ejemplo, en esta ls -lsalida abreviada: [5]

p rw-rw---- ... mipipa

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 sólo permiten el flujo de datos unidireccional, los sockets son totalmente compatibles con dúplex .

Un socket está marcado con una scomo primera letra de la cadena de modo, por ejemplo

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 sino que se manejan por separado.

Los archivos de dispositivo se utilizan para aplicar derechos de acceso a los dispositivos y para dirigir operaciones en los archivos a los controladores de dispositivo apropiados.

Unix hace una distinción entre dispositivos de caracteres y dispositivos de bloques. La distinción es aproximadamente la siguiente:

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 a ccomo primera letra de la cadena de modo y un dispositivo de bloque se marca con a b, por ejemplo, en esta ls -lsalida abreviada: [5]

c rw-rw-rw- ... /dev/null b rw-rw---- ... /dev/sda

Referencias

  1. ^ abc "<sistema/stat.h>". Especificaciones básicas de Open Group, edición 6 . El grupo abierto. 21 de julio de 2019.
  2. ^ Loukides, Mike (octubre de 2002). "¿Cuándo un archivo deja de ser un archivo?". Herramientas eléctricas Unix (3 ed.). O'Reilly. pag. 80.ISBN 9780596003302. Un archivo no es más que un flujo de bytes...
  3. ^ "archivo". Estándar IEEE 1003.1-2017 ( POSIX ) . El grupo abierto . 2018.
  4. ^ Kitt, Esteban. "¿Qué modo de archivo es un enlace simbólico?". Intercambio de pilas de Unix y Linux .
  5. ^ abcde "ls". Norma IEEE 1003.1-2008 ( POSIX ) . El grupo abierto. 11 de marzo de 2017.
  6. ^ "Función de modo de archivo en GNU coreutils". ÑU. 11 de marzo de 2017.
  7. ^ "función de tipo de impresión de FreeBSD". FreeBSD. 11 de marzo de 2017.