-
La estructura de carpetas de OSX/macOS explicada
Tanto si vamos a empezar a desarrollar habilidades Hackintosh como si simplemente queremos entender mejor cómo está organizado OS X o macOS, es fundamental que nos familiaricemos con su estructura de carpetas.
Aunque en febrero de 2019 ya hablamos normalmente de macOS, todavía es muy común encontrar documentación antigua usando los nombres Mac OS X, OS X u OSX. En la práctica nos estamos refiriendo a la misma familia de sistemas, aunque Apple haya cambiado el nombre comercial con el paso de los años.
En este artículo vamos a mantener los nombres de las carpetas en inglés porque son los nombres reales que usaremos desde Terminal. Finder puede mostrar algunas carpetas traducidas, como Aplicaciones o Usuarios, pero las rutas reales siguen siendo /Applications y /Users.
pwd ls -la / open /
La raíz del sistema se representa con una barra:
/
Desde ahí cuelga todo lo demás: aplicaciones, usuarios, librerías, volúmenes montados, binarios del sistema, configuración y directorios internos heredados de UNIX.
Carpetas principales visibles
Carpeta Uso principal /Applications Contiene las aplicaciones instaladas para todos los usuarios del Mac. /Library Contiene recursos, configuraciones, extensiones, preferencias y datos de soporte compartidos por todos los usuarios. /System Contiene los componentes del sistema operativo instalados por Apple. /Users Contiene las carpetas personales de los usuarios del equipo. /Volumes Contiene los puntos de montaje de discos, particiones, DMG, unidades USB, CD, DVD y volúmenes de red. /Network Contiene recursos disponibles en red, aunque en equipos domésticos normalmente no lo vamos a tocar. Estas son las carpetas que más nos interesa entender al principio. Son las que vamos a encontrar constantemente cuando instalamos software, revisamos preferencias, buscamos kexts o analizamos problemas de arranque.
/Applications
La carpeta /Applications contiene las aplicaciones instaladas para todos los usuarios del sistema. Finder puede mostrarla como Aplicaciones si tenemos el sistema en castellano, pero desde Terminal la ruta correcta es /Applications.
La mayoría de aplicaciones de macOS son bundles. Es decir, parecen un único archivo con extensión .app, pero internamente son carpetas con una estructura propia.
ls -la /Applications ls -la /Applications/Safari.app
Cuando arrastramos una aplicación a Aplicaciones, normalmente estamos copiando ese bundle completo dentro de /Applications.
También puede existir una carpeta Applications dentro del home de un usuario, por ejemplo:
~/Applications
Esa carpeta no es obligatoria, pero puede usarse para instalar aplicaciones disponibles únicamente para ese usuario.
/Library
/Library contiene recursos compartidos por todos los usuarios del Mac. Aquí encontraremos preferencias globales, LaunchDaemons, LaunchAgents, extensiones, fuentes, componentes de audio, perfiles, logs de algunas aplicaciones y archivos de soporte.
No debemos confundir /Library con ~/Library ni con /System/Library. Las tres carpetas se llaman Library, pero no cumplen exactamente la misma función.
Ruta Ámbito /Library Recursos compartidos por todos los usuarios. ~/Library Recursos y preferencias específicos del usuario actual. /System/Library Recursos internos del sistema operativo instalados por Apple. Para tareas Hackintosh, /Library es especialmente importante porque en versiones recientes podemos encontrar extensiones de kernel en:
/Library/Extensions
También encontraremos servicios del sistema y tareas automáticas en rutas como estas:
/Library/LaunchAgents /Library/LaunchDaemons /Library/StartupItems
StartupItems es una ubicación antigua y ya no es la forma recomendada de arrancar servicios, pero todavía podemos verla en instalaciones viejas o en software heredado.
~/Library
La carpeta ~/Library pertenece al usuario actual. El símbolo ~ representa nuestro home, por lo que estas dos rutas apuntan al mismo sitio si nuestro usuario se llama usuario:
~/Library /Users/usuario/Library
Desde OS X Lion, la carpeta Library del usuario suele estar oculta en Finder para evitar que se borren cosas por error. Desde Terminal podemos acceder sin problema.
open ~/Library
Dentro de ~/Library encontraremos preferencias de aplicaciones, cachés, datos de soporte, contenedores de aplicaciones sandboxed, extensiones del usuario, calendarios, configuraciones y muchos otros datos propios de la sesión del usuario.
Algunas rutas habituales son:
~/Library/Application Support ~/Library/Caches ~/Library/Containers ~/Library/LaunchAgents ~/Library/Preferences
Cuando una aplicación falla solamente para un usuario concreto, muchas veces el problema está en ~/Library y no en /Library ni en /System.
/System
/System contiene los componentes propios del sistema operativo. En febrero de 2019, con macOS Mojave como versión actual, esta carpeta ya está protegida por System Integrity Protection en instalaciones normales.
Dentro de /System encontraremos principalmente:
/System/Library
Ahí viven frameworks, servicios, extensiones, componentes internos y recursos críticos del sistema.
Para Hackintosh, una de las rutas históricamente más conocidas es:
/System/Library/Extensions
En versiones antiguas era común instalar o modificar kexts directamente ahí. En sistemas modernos no conviene hacerlo salvo que sepamos exactamente lo que estamos tocando. En instalaciones con Clover, lo normal es inyectar kexts desde la partición EFI, por ejemplo desde:
/EFI/CLOVER/kexts/Other
Esa ruta no forma parte de la estructura interna de macOS. Pertenece a la partición EFI y al bootloader. Conviene separarlo mentalmente: una cosa es el sistema macOS y otra cosa es el entorno de arranque Hackintosh.
/Users
/Users contiene las carpetas personales de los usuarios del equipo. Es el equivalente aproximado a /home en Linux.
Si tenemos un usuario llamado nicolas, su carpeta personal será algo parecido a esto:
/Users/nicolas
Dentro encontraremos carpetas como Desktop, Documents, Downloads, Movies, Music y Pictures.
ls -la /Users ls -la ~
También existe normalmente esta carpeta:
/Users/Shared
/Users/Shared sirve para compartir archivos entre usuarios locales del mismo Mac.
/Volumes
/Volumes contiene los puntos de montaje de los volúmenes disponibles. Cada disco, partición, imagen DMG o volumen de red montado aparece aquí.
Por ejemplo, si montamos un pendrive llamado USB, normalmente aparecerá como:
/Volumes/USB
Y si montamos una imagen DMG, también veremos su volumen dentro de /Volumes.
ls -la /Volumes
Esta carpeta es muy útil cuando trabajamos desde Terminal con instaladores de macOS, discos externos, particiones EFI o imágenes DMG.
/Network
/Network está relacionado con recursos compartidos en red. Puede contener aplicaciones, librerías, servidores o carpetas de usuarios disponibles en una red administrada.
En un Mac doméstico probablemente no veremos gran cosa aquí. En entornos de empresa, laboratorio o educación puede tener más importancia.
/Developer
/Developer era una carpeta habitual en instalaciones antiguas de Xcode. En febrero de 2019 ya no debemos asumir que exista.
Las versiones modernas de Xcode se instalan normalmente como aplicación dentro de:
/Applications/Xcode.app
Y las Command Line Tools suelen vivir en:
/Library/Developer/CommandLineTools
Si vemos /Developer en una instalación actual, probablemente venga de una instalación antigua, de herramientas heredadas o de una migración desde una versión previa del sistema.
Carpetas UNIX del sistema
Además de las carpetas más visibles, macOS conserva una estructura UNIX. Muchas de estas carpetas están ocultas en Finder, pero se ven perfectamente desde Terminal.
Carpeta Función /bin Contiene binarios esenciales disponibles incluso en fases tempranas del arranque. /sbin Contiene binarios esenciales de administración del sistema. /usr Contiene herramientas, librerías y recursos de usuario del sistema UNIX. En macOS, /usr/local suele quedar reservado para software instalado por el administrador. /etc Contiene archivos de configuración del sistema. En macOS normalmente es un enlace simbólico hacia /private/etc. /dev Contiene archivos de dispositivo. Representa discos, terminales y otros dispositivos expuestos por el kernel. /tmp Contiene archivos temporales. En macOS normalmente es un enlace simbólico hacia /private/tmp. /var Contiene datos variables como logs, colas, bases temporales, cachés y archivos que cambian durante el funcionamiento del sistema. En macOS normalmente es un enlace simbólico hacia /private/var. /private Contiene las ubicaciones reales de etc, tmp y var en macOS. Podemos comprobar esos enlaces simbólicos con:
ls -la /
Veremos algo parecido a esto:
etc -> private/etc tmp -> private/tmp var -> private/var
Esto significa que, aunque escribamos /etc/hosts, realmente estaremos accediendo a /private/etc/hosts.
/bin
/bin contiene comandos básicos necesarios para que el sistema pueda funcionar. Aquí encontramos utilidades clásicas como sh, ls, cp, mv, mkdir, rm y otras herramientas fundamentales.
ls -la /bin
No debemos modificar manualmente esta carpeta. En sistemas con SIP activado, además, no podremos alterarla de forma normal.
/sbin
/sbin contiene herramientas esenciales de administración. Aquí encontraremos comandos relacionados con montaje, apagado, reparación, red y mantenimiento de bajo nivel.
ls -la /sbin
La diferencia clásica es que /bin está más orientada a comandos esenciales generales y /sbin a comandos esenciales de administración del sistema.
/usr
/usr es una segunda jerarquía importante dentro del sistema UNIX. Contiene binarios, librerías, cabeceras, herramientas y recursos usados por el sistema y por aplicaciones.
Una ruta especialmente importante es:
/usr/local
/usr/local se usa normalmente para software instalado manualmente por el administrador o por gestores de paquetes como Homebrew. En febrero de 2019, Homebrew sigue usando /usr/local como ubicación habitual en Macs Intel.
También veremos rutas como:
/usr/bin /usr/lib /usr/sbin /usr/share
En macOS moderno, buena parte de /usr está protegida. La excepción práctica suele ser /usr/local.
/etc
/etc contiene configuración del sistema y de servicios UNIX. En macOS no es una carpeta real en la raíz, sino un enlace simbólico hacia:
/private/etc
Un archivo típico que podemos editar en tareas de laboratorio es:
/etc/hosts
Ese archivo permite definir resoluciones locales de nombres. Por ejemplo, puede servir para apuntar dominios de prueba a una IP concreta durante desarrollo o análisis.
/dev
/dev contiene archivos especiales que representan dispositivos. No son archivos normales, sino interfaces expuestas por el kernel.
Podemos ver discos y terminales con:
ls -la /dev ls -la /dev/disk*
Cuando trabajamos con diskutil, particiones EFI, imágenes o discos externos, muchos dispositivos tendrán representación dentro de /dev.
/tmp
/tmp contiene archivos temporales. En macOS suele apuntar a:
/private/tmp
Es una ubicación pensada para datos temporales, no para guardar información importante. El sistema o las aplicaciones pueden limpiarla.
/var
/var contiene datos variables, es decir, archivos que cambian durante el funcionamiento normal del sistema.
En macOS suele apuntar a:
/private/var
Dentro encontraremos logs, bases de datos temporales, colas, cachés y otros archivos generados por servicios.
Algunas rutas útiles son:
/var/log /var/db /var/folders
/var/log puede ser interesante para revisar registros. /var/db contiene bases internas del sistema. /var/folders almacena cachés y datos temporales por usuario.
/private
/private es una carpeta propia de la organización interna de macOS. Dentro están las ubicaciones reales de etc, tmp y var.
ls -la /private
En el día a día escribiremos normalmente /etc, /tmp y /var porque son las rutas UNIX esperadas, pero conviene saber que en macOS esas rutas apuntan realmente hacia /private.
APFS, HFS+ y la estructura de carpetas
Desde macOS High Sierra, APFS es el sistema de archivos por defecto en muchos Macs, especialmente en equipos con SSD. Antes de eso, lo habitual era HFS+.
Para lo que estamos explicando aquí, la diferencia entre APFS y HFS+ no cambia las rutas principales. Seguimos teniendo /Applications, /Library, /System, /Users, /Volumes y el resto de directorios UNIX.
Donde sí podemos notar diferencias es en la gestión interna de volúmenes, snapshots, recuperación y rendimiento, pero la estructura lógica básica del sistema sigue siendo reconocible.
Carpetas importantes para Hackintosh
Si estamos aprendiendo Hackintosh, hay varias rutas que nos conviene tener siempre localizadas:
Ruta Uso /System/Library/Extensions Kexts del sistema. Históricamente muy usada, pero delicada y protegida en versiones modernas. /Library/Extensions Kexts instalados a nivel local para todos los usuarios. /Extra Ruta usada por configuraciones antiguas con Chameleon o Chimera. /EFI Punto donde podemos montar la partición EFI, aunque no siempre está montada por defecto. /Volumes/EFI Ubicación habitual cuando montamos la partición EFI desde macOS. /EFI/CLOVER Configuración del bootloader Clover dentro de la partición EFI. En febrero de 2019, muchas instalaciones Hackintosh modernas usan Clover y guardan los kexts en la partición EFI, normalmente dentro de:
/EFI/CLOVER/kexts/Other
Esto permite cargar kexts sin tocar directamente /System/Library/Extensions. Es una forma más limpia y más fácil de mantener.
Cómo movernos por la estructura desde Terminal
Para empezar a ubicarnos, estos comandos son suficientes:
pwd ls ls -la cd / cd /Applications cd /Library cd /System/Library cd ~ open .
El comando pwd nos dice dónde estamos. El comando ls lista archivos. El comando cd cambia de carpeta. El comando open abre desde Finder la ruta actual o la ruta que indiquemos.
También podemos abrir directamente una ruta concreta:
open /Applications open /Library open ~/Library open /Volumes
Qué carpetas no deberíamos tocar sin saber exactamente qué hacemos
Hay carpetas que podemos explorar, pero no modificar a ciegas:
- /System
- /System/Library
- /System/Library/Extensions
- /bin
- /sbin
- /usr, salvo /usr/local
- /private/etc
- /private/var/db
Modificar estas rutas sin criterio puede romper el arranque, dañar permisos, impedir que carguen servicios o dejar el sistema en un estado difícil de recuperar.
Para pruebas, desarrollo y análisis, lo más razonable es trabajar dentro del home del usuario, dentro de /usr/local, dentro de /Library cuando corresponda, o dentro de la partición EFI si estamos configurando un Hackintosh.
Vista rápida de la estructura
/ ├── Applications ├── Library ├── Network ├── System │ └── Library ├── Users │ ├── Shared │ └── usuario │ └── Library ├── Volumes ├── bin ├── dev ├── etc -> private/etc ├── private │ ├── etc │ ├── tmp │ └── var ├── sbin ├── tmp -> private/tmp ├── usr └── var -> private/var
Con esta base ya podemos movernos por macOS con más seguridad, entender mejor dónde guarda cada cosa el sistema y diagnosticar problemas con más criterio, especialmente cuando trabajamos con kexts, bootloaders, configuraciones Hackintosh o herramientas de desarrollo.
2019/02/11
