En Unix y los sistemas operativos inspirados en él, el sistema de archivos se considera un componente central del sistema operativo. [1] También fue una de las primeras partes del sistema que fue diseñado e implementado por Ken Thompson en la primera versión experimental de Unix, fechada en 1969 . [2]
Como en otros sistemas operativos, el sistema de archivos proporciona almacenamiento y recuperación de información, y una de varias formas de comunicación entre procesos , ya que los muchos programas pequeños que tradicionalmente forman un sistema Unix pueden almacenar información en archivos para que otros programas puedan leerlos, aunque conduzcan lo complementó en este rol a partir de la Tercera Edición . Además, el sistema de archivos proporciona acceso a otros recursos a través de los llamados archivos de dispositivo que son puntos de entrada a terminales , impresoras y ratones .
El resto de este artículo usa Unix como un nombre genérico para referirse tanto al sistema operativo Unix original como a sus muchos similares .
Principios
El sistema de archivos aparece como un árbol de directorios con raíces . [1] En lugar de abordar volúmenes separados como particiones de disco , medios extraíbles y recursos compartidos de red como árboles separados (como se hace en DOS y Windows : cada unidad tiene una letra de unidad que denota la raíz de su árbol del sistema de archivos), dichos volúmenes pueden se monta en un directorio, causando árbol del sistema de archivos del volumen que aparezca como ese directorio en el árbol más grande. [1] Se indica la raíz de todo el árbol /
.
En el Bell Labs Unix original , era habitual una configuración de dos discos, donde el primer disco contenía programas de inicio, mientras que el segundo contenía archivos y programas de los usuarios. Este segundo disco se montó en el directorio vacío nombrado usr
en el primer disco, lo que provocó que los dos discos aparecieran como un sistema de archivos, con el contenido del segundo disco visible en /usr
.
Los directorios de Unix no contienen archivos. En su lugar, contienen los nombres de los archivos emparejados con referencias a los llamados inodos , que a su vez contienen tanto el archivo como sus metadatos (propietario, permisos, hora del último acceso, etc., pero sin nombre). Varios nombres en el sistema de archivos pueden hacer referencia al mismo archivo, una característica denominada vínculo físico . [1] Los rasgos matemáticos de los enlaces duros hacen que el sistema de archivos sea un tipo limitado de gráfico acíclico dirigido , aunque los directorios todavía forman un árbol, ya que normalmente pueden no estar vinculados. (Como se concibió originalmente en 1969, el sistema de archivos Unix se usaría de hecho como un gráfico general con enlaces físicos a directorios que proporcionan navegación, en lugar de nombres de ruta. [2] )
Tipos de archivo
El sistema de archivos original de Unix admitía tres tipos de archivos: archivos ordinarios, directorios y "archivos especiales", también denominados archivos de dispositivo. [1] El Berkeley Software Distribution (BSD) y System V cada agregado tipo un archivo para ser utilizado para la comunicación entre procesos : BSD añadieron sockets , [3] mientras System V añadió FIFO archivos .
BSD también agregó enlaces simbólicos (a menudo denominados "enlaces simbólicos") a la gama de tipos de archivos, que son archivos que hacen referencia a otros archivos y complementan los enlaces físicos. [3] Los enlaces simbólicos se modelaron a partir de una característica similar en Multics , [4] y se diferencian de los enlaces duros en que pueden abarcar sistemas de archivos y que su existencia es independiente del objeto de destino. Otros sistemas Unix pueden admitir tipos de archivos adicionales. [5]
Diseño de directorio convencional
Existen ciertas convenciones para localizar algunos tipos de archivos, como programas, archivos de configuración del sistema y directorios de inicio de los usuarios . Estos se documentaron por primera vez en la hier(7)
página de manual desde la versión 7 de Unix ; [6] Las versiones posteriores, los derivados y los clones suelen tener una página de manual similar. [7] [8] [9] [10] [11] [12]
Los detalles del diseño del directorio han variado con el tiempo. Aunque el diseño del sistema de archivos no es parte de la Especificación Única de UNIX , existen varios intentos para estandarizar (partes de) ella, como la Interfaz Binaria de Aplicación System V , el Estándar de Compatibilidad Binaria Intel , el Entorno del Sistema Operativo Común y la Fundación Linux ' s Estándar de jerarquía del sistema de archivos (FHS). [13]
A continuación, se ofrece una descripción general generalizada de las ubicaciones comunes de archivos en un sistema operativo Unix:
Directorio o archivo | Descripción |
---|---|
/ | El / carácter de barra inclinada solo denota la raíz del árbol del sistema de archivos. |
| Significa binarios y contiene ciertas utilidades fundamentales, como ls o cp , que se necesitan para montar /usr , cuando se trata de un sistema de archivos separado, o para ejecutarse en modo de un usuario (administrativo) cuando /usr no se puede montar. En System V.4, este es un enlace simbólico a /usr/bin . De lo contrario, debe estar en el propio sistema de archivos raíz. |
| Contiene todos los archivos necesarios para un proceso de arranque exitoso. En Research Unix , este era un archivo en lugar de un directorio. [14] Actualmente, generalmente en el sistema de archivos raíz, a menos que el sistema, el cargador de arranque, etc. requieran lo contrario. |
| Significa dispositivos . Contiene representaciones de archivos de dispositivos periféricos y pseudodispositivos . Consulte también: Autoridad de Números y Nombres Asignados de Linux . Necesita estar en el propio sistema de archivos raíz. |
| Contiene archivos de configuración de todo el sistema y bases de datos del sistema; el nombre se refiere a etcétera [14] pero ahora una mejor expansión es e ditable- t EXT- c onfigurations. Originalmente también contenía "servicios de mantenimiento peligrosos" como init , [6] pero estos normalmente se han trasladado a /sbin otro lugar. Necesita estar en el propio sistema de archivos raíz. |
| Contiene directorios de inicio de usuario en Linux y algunos otros sistemas. En la versión original de Unix, los directorios de inicio estaban en su /usr lugar. [15] Algunos sistemas usan o han usado ubicaciones diferentes todavía: macOS tiene directorios de inicio /Users , versiones anteriores de BSD los colocan /u , FreeBSD los tiene /usr/home . |
| Bibliotecas originalmente esenciales : bibliotecas C , pero no Fortran . [14] En los sistemas modernos, contiene las bibliotecas compartidas que necesitan los programas /bin y posiblemente los controladores de dispositivos o módulos del kernel cargables . Las distribuciones de Linux pueden tener variantes /lib32 y /lib64 para soporte de múltiples arquitecturas. |
| Punto de montaje predeterminado para dispositivos extraíbles, como memorias USB, reproductores multimedia, etc. Por sentido común, el directorio en sí, cuyos subdirectorios son puntos de montaje, se encuentra en la partición raíz. |
| Soportes para montar . Directorio vacío que suelen utilizar los administradores del sistema como punto de montaje temporal. Por sentido común, el directorio en sí, cuyos subdirectorios son puntos de montaje, se encuentra en la partición raíz. |
| Contiene software instalado localmente. Se originó en System V , que tiene un administrador de paquetes que instala software en este directorio (un subdirectorio por paquete). [dieciséis] |
| sistema de archivos virtual procfs que muestra información sobre procesos como archivos. |
| El directorio de inicio de la raíz del superusuario , es decir, el administrador del sistema. El directorio de inicio de esta cuenta generalmente se encuentra en el sistema de archivos inicial y, por lo tanto, no en / home (que puede ser un punto de montaje para otro sistema de archivos) en caso de que sea necesario realizar un mantenimiento específico, durante el cual otros sistemas de archivos no están disponibles. Tal caso podría ocurrir, por ejemplo, si una unidad de disco duro sufre fallas físicas y no se puede montar correctamente. Por convención, este directorio está en la propia partición raíz; en cualquier caso, no se trata de un enlace ni de nada parecido./home/root |
| Significa " binarios del sistema (o superusuario) " y contiene utilidades fundamentales, como las que init normalmente se necesitan para iniciar, mantener y recuperar el sistema. Debe estar en la propia partición raíz. |
| Datos del servidor (datos de los servicios proporcionados por el sistema). |
| En algunas distribuciones de Linux , contiene un sistema de archivos virtual sysfs , que contiene información relacionada con el hardware y el sistema operativo. En los sistemas BSD, comúnmente un enlace simbólico a las fuentes del kernel en ./usr/src/sys |
| Un lugar para archivos temporales que no se espera que sobrevivan a un reinicio. Muchos sistemas borran este directorio al iniciarse o usan tmpfs para implementarlo. |
| El Unix núcleo en Investigación y Unix System V . [14] Con la adición de soporte de memoria virtual a 3BSD , se le cambió el nombre /vmunix . |
| El "sistema de archivos de usuario": originalmente el directorio que contiene los directorios de inicio de los usuarios, [15] pero ya en la Tercera Edición de Research Unix , ca. 1973, reutilizado para dividir los programas del sistema operativo en dos discos (uno de ellos una unidad de cabezal fijo de 256 K) para que los comandos básicos aparezcan en /bin o /usr/bin . [17] Ahora contiene ejecutables, bibliotecas y recursos compartidos que no son críticos para el sistema, como el sistema X Window , KDE , Perl , etc. En los sistemas Unix más antiguos, los directorios de inicio de los usuarios pueden aparecer /usr junto a los directorios que contienen programas, aunque por 1984 esto dependió de las costumbres locales . [14] |
| Almacena los encabezados de desarrollo utilizados en todo el sistema. Los archivos de encabezado son usados principalmente por la #include directiva en lenguaje C , que históricamente es como se eligió el nombre de este directorio. |
| Almacena las bibliotecas y los archivos de datos necesarios para los programas almacenados dentro /usr o en otro lugar. |
| Contiene programas destinados a ser ejecutados por otros programas en lugar de por los usuarios directamente. Por ejemplo, el ejecutable de Sendmail se puede encontrar en este directorio. [18] No presente en la FHS hasta 2011; [19] Las distribuciones de Linux tradicionalmente han movido el contenido de este directorio a /usr/lib , donde también residían en 4.3BSD. |
| Tiene una /usr estructura similar , pero sus subdirectorios se utilizan para adiciones que no forman parte de la distribución del sistema operativo, como programas personalizados o archivos de una colección de puertos BSD . Por lo general, tiene subdirectorios como o ./usr/local/lib /usr/local/bin |
| Datos del programa independientes de la arquitectura. En Linux y derivados modernos de BSD, este directorio tiene subdirectorios, como man para las páginas de manual , que solían aparecer directamente debajo /usr en versiones anteriores. |
| Significa variable . Un lugar para archivos que pueden cambiar con frecuencia, especialmente en tamaño, por ejemplo, correo electrónico enviado a usuarios en el sistema o archivos de bloqueo de ID de proceso . |
| Contiene archivos de registro del sistema. |
| El lugar donde se almacena todo el correo entrante. Los usuarios (que no sean root ) solo pueden acceder a su propio correo. A menudo, este directorio es un enlace simbólico a /var/spool/mail . |
| Directorio de spool . Contiene trabajos de impresión, spools de correo y otras tareas en cola. |
| El lugar donde se encuentra el código fuente sin compilar de algunos programas. |
| El /var/tmp directorio es un lugar para archivos temporales que deben conservarse entre reinicios del sistema. |
Ver también
- Btrfs
- ext2
- ext3
- ext4
- Estándar de jerarquía del sistema de archivos
- MARTILLO
- JFS (sistema de archivos)
- Sistema de archivos Unix
- Sistema de archivos Veritas
- ZFS
Referencias
- Este artículo incorpora material del artículo de Citizendium " Sistema de archivos Unix ", que está bajo la licencia Creative Commons Attribution-ShareAlike 3.0 Unported pero no bajo la GFDL .
- ^ a b c d e Ritchie, DM ; Thompson, K. (julio de 1978). "El sistema de tiempo compartido UNIX". Bell System Tech. J . 57 (6): 1905-1929. CiteSeerX 10.1.1.112.595 . doi : 10.1002 / j.1538-7305.1978.tb02136.x .
- ^ a b Ritchie, Dennis M. (1979). La evolución del sistema de tiempo compartido Unix . Metodología de programación y diseño de lenguajes Conf.
- ^ a b Leffler, Samuel J .; McKusick, Marshall Kirk ; Karels, Michael J .; Quarterman, John S. (octubre de 1989). El diseño e implementación del sistema operativo 4.3BSD UNIX . Addison-Wesley . ISBN 978-0-201-06196-3.
- ^ McKusick, Marshall Kirk; et al. "Un sistema de archivos rápido para Unix" (PDF) . Freebsd.org . CSRG, UC Berkeley . Consultado el 16 de noviembre de 2016 .
- ^ - Manual del programador de Linux - Llamadas al sistema
- ^ a b - Manual del programador de Unix versión 7
- ^ - Manual de información miscelánea de FreeBSD
- ^ - Manual de información miscelánea de OpenBSD
- ^ "Página de manual de hier (7) para 2.9.1 BSD" .
- ^ "Página de manual hier (7) para ULTRIX 4.2" .
- ^ "Página de manual de hier (7) para SunOS 4.1.3" .
- ^ - Manual del programador de Linux - Descripción general, convenciones y miscelánea
- ^ George Kraft IV (1 de noviembre de 2000). "¿Dónde instalar mis productos en Linux?" . Diario de Linux . Consultado el 13 de noviembre de 2014 .
- ^ a b c d e Kernighan, Brian W .; Pike, Rob (1984). El entorno de programación UNIX . Prentice Hall. págs. 63–65 . Bibcode : 1984upe..book ..... K .
- ^ a b Ritchie, Dennis. "Notas de Unix de 1972" . Consultado el 14 de enero de 2018 .
- ↑ System V Application Binary Interface Edition 4.1 (18 de marzo de 1997)
- ^ MD McIlroy (1987). Un lector de Unix de investigación: extractos comentados del Manual del programador, 1971–1986 . CSTR 139, Bell Labs.
- ^ "Capítulo 7. sendmail" . Administración de instalaciones de red de UNICOS / mp . Cray . Consultado el 14 de septiembre de 2013 .
- ^ "revisión 44 de la especificación fhs" .