stringtranslate.com

Tipos de archivos Unix

Los siete tipos de archivos estándar de Unix son regular , directory , symbolical link , FIFO special , block special , character special y socket según lo definido por POSIX . [1] Diferentes implementaciones específicas de SO permiten más tipos de los que requiere POSIX (por ejemplo, Solaris doors ). El tipo de un 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 los archivos regulares , Unix no impone ni proporciona ninguna estructura de archivo interna; por lo tanto, su estructura e interpretación dependen completamente del software que los utiliza. [2] Sin embargo, el filecomando generalmente se puede usar para determinar qué tipo de datos contienen. [3]

Representaciones

Numérico

En la estructura stat , 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 de archivos posibles; 9 bits para permisos). El diseño de los permisos está definido por POSIX como al menos 9 bits significativos , 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 octales), y "010" ( 1000 en binario) generalmente representa un archivo normal. Los siguientes 3 bits (1 dígito) se usan generalmente 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 un archivo se puede comprobar utilizando macros como S_ISDIR. Esta comprobación se realiza normalmente enmascarando el modo con S_IFMT(a menudo el número octal "170000" para la convención de 4 bits iniciales) y comprobando si el resultado coincide con S_IFDIR. S_IFMTno es un concepto básico de POSIX, sino una extensión de X/Open System Interfaces (XSI); los sistemas que sólo cumplen con POSIX pueden utilizar otros métodos. [1]

Cadena de modo

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

drwxr-xr-x 2 root root 0 1 de enero de 1970 inicio

POSIX especifica [5] el formato de la 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 coreutils de lsutiliza 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 menor cantidad de tipos de archivos. [7]

Directorio

El archivo especial más común es el directorio. La disposición de un archivo de directorio se define según el sistema de archivos utilizado. Como hay varios sistemas de archivos disponibles en Unix, tanto nativos como no nativos, no existe una disposición única de archivos de directorio.

Un directorio se marca con una dcomo primera letra en el campo de modo en la salida de ls -dl[5] o stat, por ejemplo

$ ls -dl / d rwxr-xr-x 26 root root 4096 22 de septiembre 09:29 /$estadística / Archivo: "/" Tamaño: 4096 Bloques: 8 Bloque IO: 4096 directorioDispositivo: 802h/2050d Inodo: 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 no existir en absoluto).

Un enlace simbólico se marca con una l(minúscula L) como la 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)

Una de las fortalezas de Unix siempre ha sido la comunicación entre procesos . Entre las facilidades que proporciona 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 padre, iniciado por el mismo usuario, pero hay circunstancias en las que los procesos que se comunican deben utilizar FIFO, aquí denominados tuberías 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 tubería con nombre se marca con una pcomo la primera letra de la cadena de modo, por ejemplo en esta ls -lsalida abreviada: [5]

p rw-rw---- ... mipipe

Enchufe

Un socket es un archivo especial que se utiliza para la comunicación entre procesos y 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 mediante las llamadas del sistema sendmsg()y recvmsg().

A diferencia de las tuberías con nombre, que solo permiten un flujo de datos unidireccional, los sockets son totalmente compatibles con dúplex .

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

es rwxrwxrwx /tmp/.X11-unix/X0

Archivo de dispositivo (bloque, carácter)

En Unix, casi todo se maneja como archivos y tiene 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 distingue entre dispositivos de caracteres y dispositivos de bloques. La distinción es, en líneas generales, la siguiente:

Aunque, por ejemplo, las particiones de disco pueden tener dispositivos de caracteres que proporcionan acceso aleatorio sin búfer a los bloques de la partición y dispositivos de bloque que proporcionan acceso aleatorio con búfer a los bloques de la partición.

Un dispositivo de caracteres se marca con un ccomo la primera letra de la cadena de modo y un dispositivo de bloque se marca con un b, por ejemplo en esta ls -lsalida abreviada: [5]

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

Referencias

  1. ^ abc "<sys/stat.h>". Especificaciones básicas de The Open Group , número 6. The Open Group. 21 de julio de 2019. Archivado desde el original el 27 de noviembre de 2016. Consultado el 10 de febrero de 2017 .
  2. ^ Loukides, Mike (octubre de 2002). "¿Cuándo un archivo no es un archivo?". Unix Power Tools (3.ª edición). O'Reilly. pág. 80. ISBN 9780596003302Un archivo no es más que un flujo de bytes...
  3. ^ "archivo". IEEE Std 1003.1-2017 ( POSIX ) . The Open Group . 2018. Archivado desde el original el 12 de octubre de 2018. Consultado el 26 de octubre de 2023 .
  4. ^ Kitt, Stephen. "¿Qué modo de archivo es un enlace simbólico?". Unix & Linux Stack Exchange .
  5. ^ abcde "ls". IEEE Std 1003.1-2008 ( POSIX ) . The Open Group. 11 de marzo de 2017. Archivado desde el original el 3 de agosto de 2017. Consultado el 10 de febrero de 2017 .
  6. ^ "Función filemode en GNU coreutils". GNU. 11 de marzo de 2017.
  7. ^ "Función printtype de FreeBSD". FreeBSD. 11 de marzo de 2017.