Directorios estándar y / o comunes en sistemas operativos Unix / Linux

25

Viniendo del mundo de Windows, he encontrado que la mayoría de los nombres de directorio de carpetas son bastante intuitivos:

  • \Program Files contiene archivos usados ​​por programas (¡sorpresa!)

  • \Program Files (x86) contiene archivos utilizados por programas de 32 bits en sistemas operativos de 64 bits

  • \Users(anteriormente Documents and Settings) contiene los archivos de los usuarios, es decir, documentos y configuraciones

    • \Users\USER\Application Data contiene datos específicos de la aplicación

    • \Users\USER\Documents contiene documentos que pertenecen al usuario

  • \Windows contiene archivos que pertenecen al funcionamiento de Windows mismo

    • \Windows\Fonts almacena archivos de fuentes (¡sorpresa!)

    • \Windows\Temp es un directorio temporal global

etcétera. Incluso si no tuviera idea de lo que hicieron estas carpetas, podría adivinar con buena precisión sus nombres.

Ahora estoy echando un buen vistazo a Linux, y me estoy confundiendo bastante sobre cómo encontrar mi camino en el sistema de archivos.

Por ejemplo:

  • /binContiene binarios. Pero también lo hacen /sbin, /usr/bin, /usr/sbin, y probablemente más que yo no conozco. ¿¿Cual es cual?? ¿Cuál es la diferencia entre ellos? Si quiero hacer un binario y ponerlo en algún lugar de todo el sistema, ¿dónde lo pongo?

  • /mediacontiene sistemas de archivos de medios externos. Pero también lo hace /mnt. Y ninguno de ellos contiene nada en mi sistema en este momento; todo parece estar adentro /dev. ¿Cual es la diferencia? ¿Dónde están las otras particiones en mi disco duro, como el C:y D:que estaban en Windows?

  • /homecontiene los archivos y configuraciones del usuario. Eso es intuitivo, pero entonces, ¿en qué se supone que debe entrar /usr? ¿Y cómo /rootes que todavía está separado, a pesar de que es un usuario con archivos y configuraciones?

  • /libcontiene bibliotecas compartidas, como archivos DLL. Pero también lo hace /usr/lib. ¿Cual es la diferencia?

  • ¿Qué es /etc ? ¿Realmente significa "etcétera" u otra cosa? ¿Qué tipos de archivos deberían ir allí, globales o locales? ¿Es una trampa para todo lo que nadie sabía dónde poner, o hay un caso de uso particular para ello?

  • ¿Cuáles son /opt, /procy /var? ¿Qué representan y para qué sirven? No he visto nada parecido en Windows *, y no puedo entender para qué podrían ser.

Si alguien puede pensar en otros lugares estándar que puedan ser buenos para conocer, siéntase libre de agregarlo a la pregunta; Con suerte, esto puede ser una buena referencia para personas como yo, que están comenzando a familiarizarse con los sistemas * nix.

* OK, eso es mentira. He visto cosas similares en WinObj, pero obviamente no de manera regular. Sin embargo, todavía no sé qué hacen en Linux.

Mehrdad
fuente
1
Gracias por mantener un buen espíritu de aprendizaje. Este tema es a menudo polémico. Vea mi respuesta a esta pregunta para obtener algunas explicaciones adicionales sobre las diferencias fundamentales entre las estructuras del sistema de archivos en Windows vs Linux.
Caleb
No piense en "usr" como la abreviatura de "usuario" sino en "Recursos del sistema Unix" (incluso si es probablemente un backronym ya que contenía directorios de usuarios hace años) ( linux-training.be/files/books/html /fun/ch09s08.html ).
lgeorget
No sirve de nada tratar de justificar la denominación de directorios crípticos de Unix / Linux / etc en Windows (o Mac OS X). Así es como es.
Andrew Wolfe
A partir de 2017, la estructura de carpetas de Windows es un completo desastre. C:\Program Files, C:\ProgramData, %HOME%\AppData\Local, %HOME%\AppData\LocalLow, C:\Windows\SystemApps... Todos los ejemplos en los que se pueden encontrar en los ejecutables de Windows. Y ni siquiera hablaré sobre los archivos de configuración y el registro, no quiero deprimirme aún más. PD: trabajo principalmente en Windows.
rsenna 01 de

Respuestas:

29

Las distribuciones de Linux usan el FHS: http://www.pathname.com/fhs/pub/fhs-2.3.html

También puede intentarlo man hier.

Trataré de resumir sus respuestas en la parte superior de mi cabeza, pero le sugiero encarecidamente que lea el FHS:

  • / bin es para binarios del sistema que no son superusuarios
  • / sbin es para binarios del sistema superusuario (root)
  • / usr / bin y / usr / sbin son para binarios compartidos no críticos de superusuario o superusuario, respectivamente
  • / mnt es para montar temporalmente una partición
  • / media es para montar muchos medios extraíbles a la vez
  • / dev contiene los archivos del dispositivo del sistema; Es una larga historia :)
  • La carpeta / usr, y sus subcarpetas, se pueden compartir con otros sistemas, para que tengan acceso a los mismos programas / archivos instalados en un solo lugar. Dado que / usr normalmente está en un sistema de archivos separado, no contiene archivos binarios que son necesarios para poner el sistema en línea.
  • / root está separado porque puede ser necesario poner el sistema en línea sin montar otros directorios que pueden estar en particiones / discos duros / servidores separados
  • Sí, / etc significa "etcétera". Los archivos de configuración para el sistema local se almacenan allí.
  • / opt es un lugar donde puede instalar programas que descarga / compila. De esa manera, puede mantenerlos separados del resto del sistema, con todos los archivos en un solo lugar.
  • / proc contiene información sobre el kernel y los procesos en ejecución
  • / var contiene archivos de tamaño variable como registros, correo, páginas web, etc.

Para acceder a un sistema, generalmente no necesita / var, / opt, / usr, / home; algunos de los directorios potencialmente más grandes en un sistema.

Uno de mis favoritos, que algunas personas no usan, es / srv. Es para datos que se alojan a través de servicios como http / ftp / samba. He visto / var utilizado mucho para esto, lo cual no es realmente su propósito.

bhinesley
fuente
Buena visión general que aborda las preguntas específicas. Tenga en cuenta que algunas distribuciones se usan /home/users/usernamepara usuarios y /home/services/servicenamepara lo que usted menciona /srcser. Creo que esto funciona mejor porque es más versátil para particionar. Puede tenerlo en su propia partición o usar la misma partición y sus datos de usuario, que a menudo es lo que quiero hacer.
Caleb
+1 gracias por el enlace y las descripciones, ¡son increíbles! :)
Mehrdad
/ usr debe contener archivos específicos para las aplicaciones que se encuentran en el sistema operativo y / o archivos de terceros. ¡No es intrincablemente compartible! Aunque LSB argumenta que estos se mantienen en / opt. / usr / share, por otro lado, puede contener archivos que se pueden compartir en máquinas de diferentes arquitecturas / versiones de SO. Estas son todas las convenciones sólo embargo! Es bastante posible (aunque mucho trabajo duro) usar una estructura completamente diferente. Hay otras convenciones aunque - como Arquitectura Flexible Óptima de Oracle
symcbean
1
Otra cosa a tener en cuenta sobre Unix es el concepto de que " todo es un archivo " (o al menos parece uno). Por ejemplo, las cosas en / proc se ven como archivos y directorios, pero el contenido realmente es creado dinámicamente por el núcleo cuando accede a ellos. Esto significa que puede usar las mismas herramientas (ls, cat, etc.) para acceder a esta información.
KeithB
1
@symcbean Del FHS: "... / usr es para compartir, datos de solo lectura. Eso significa que / usr debe ser compartido entre varios hosts compatibles con FHS ...". Obviamente, algunos archivos dependen de la arquitectura, y algunas distribuciones esperan jerarquías de directorio muy diferentes. La solución es hacer tu tarea, como un buen administrador :)
bhinesley
18

No responderé sobre lo que todos quieren decir (otros tienen), pero daré un pequeño contexto histórico.

Primero, recuerde que UNIX se está acercando a los 40 años, en los días de la cinta de papel y los terminales codificados de 300 baudios a los mainframes (el sistema Windows XP tiene casi 10 años). La escritura fue lenta y la necesidad de eficiencia en la escritura superó muchas otras consideraciones. Esa es la razón de los comandos básicos muy cortos (es decir, 'ls', 'cat', 'cc', 'dd', etc.). Lo mismo ocurrió con las estructuras de directorios. La idea era que si el comando tiene más de tres o cuatro caracteres, entonces el nombre era demasiado largo.

El directorio / usr originalmente contenía los directorios de inicio del usuario ya que la mayoría de los comandos estaban en / bin y todos los archivos del dispositivo estaban en / dev. Más tarde se pensó que la unidad primaria (el sistema de archivos raíz, '/') era pequeña para tiempos de arranque más rápidos. Entonces surgieron otras estructuras como / usr / bin, / usr / include y / usr / lib, donde / usr era una "unidad" separada. Mucho más tarde, se pensó que tenía directorios de inicio de usuario en / home, otra unidad más. Y mucho más tarde que eso, tener a / var (abreviatura de variable / modificable). El directorio / etc significaba 'etcétera' ya que esa era la ubicación general de todos los archivos de configuración del sistema. El / mnt se usó como un lugar temporal para acceder a una unidad (a menudo una unidad de respaldo). Directorios como / opt, / proc y / media llegaron mucho más tarde.

Hay mucho que queda fuera (como / usr / local y / net), pero esto da una breve descripción de por qué los nombres son 'menos intuitivos'.

Arcege
fuente
2
+1 Me encanta el contexto histórico, organiza mi cerebro. :) Gracias por tomarse el tiempo para escribir esto!
Mehrdad
5

Como ya se mencionó aquí, las distribuciones de Linux utilizan principalmente el FHS, consulte aquí para obtener una descripción general similar a un tutorial, especialmente adecuada para alguien que viene de Windows.

Como nota, los directorios de Windows parecen intuitivos, superficialmente. Pero déjame preguntarte, ¿a dónde pertenecen las configuraciones de un programa, como un *.iniarchivo en la carpeta de programas, en Documents and Settings\User( \Application Datao \Local Settings\Application Data), o en el infame registro? nadie lo sabe, ni siquiera Microsoft. Y así podemos seguir y seguir.

Philomath
fuente
1
Creo que los nombres de Windows 7 de las carpetas son mejores. es decir, AppData \ Roaming vs. AppData \ Local: describen el tipo de datos allí. En cuanto a la información de configuración: creo que sé dónde ponerlo cuando lo veo, pero no puedo describirlo bien, estoy de acuerdo. :)
Mehrdad