Linux / Comando mkdir: crear directorios y controlar sus permisos
mkdir crea directorios. Con -p, también prepara los directorios intermedios que faltan y permite repetir la creación cuando la ruta ya es un directorio. Compruebe siempre la ruta final y los permisos reales antes de usarla.
Esta referencia utiliza opciones de GNU Coreutils para crear rutas y asignar permisos. La máscara de creación umask influye en los permisos iniciales; en sistemas compatibles, SELinux (Security-Enhanced Linux) también controla contextos de seguridad. Verifique las opciones de la implementación instalada.
¿Qué es el comando mkdir?
mkdir crea un directorio con el nombre especificado. Por defecto, falla si no existe la ruta superior o si ya existe un elemento con el mismo nombre. Usando -p, se crean los directorios padres necesarios y los directorios que ya existen no se consideran errores.
Sintaxis básica
mkdir [OPCIONES] DIRECTORIO ...
Si el nombre de archivo o ruta contiene espacios, se debe poner entre comillas, y los nombres que comienzan con un guion se deben especificar después de -- si es posible. Las opciones soportadas pueden variar según la distribución y la versión de GNU Coreutils, por lo que consulte la descripción del sistema actual con mkdir --help y man mkdir.
Uso básico de mkdir
Crear un directorio
Puede crear un directorio en la ubicación actual o especificar una ruta absoluta o relativa.
mkdir logs
mkdir /srv/myapp
Crear varios directorios a la vez
Cada ruta es un argumento independiente. Los nombres con espacios se deben rodear con comillas.
mkdir src tests docs
mkdir 'project files'
Crear hasta el directorio superior
-p crea los componentes intermedios ausentes y conserva los directorios existentes, sin corregir sus permisos. El ejemplo con llaves requiere Bash u otro intérprete que admita esa expansión. Las rutas bajo /srv son ilustrativas: úselas solo con permisos autorizados; para practicar, elija rutas nuevas bajo un directorio propio.
mkdir -p project/src/components
mkdir -p /srv/myapp/{bin,config,logs}
Verificar las rutas creadas
mkdir generalmente no tiene salida cuando se completa correctamente. -p crea también los directorios padres que no existen.
mkdir -p demo-dir/logs
find demo-dir -type d
Ejemplo de salida:
demo-dir
demo-dir/logs
El hecho de que se haya creado el directorio no significa que los permisos sean los esperados. Verifique los permisos reales con stat -c '%a %n' demo-dir demo-dir/logs.
Opciones principales
| Opciones | Descripción |
|---|---|
-p, --parents |
Crea los directorios superiores que faltan y no trata los directorios existentes como errores. |
-m MODE |
Configura los modos de permisos del directorio final recién especificado. |
-v, --verbose |
Imprime cada directorio creado. |
-Z |
Aplica el contexto de seguridad SELinux predeterminado en los sistemas compatibles. |
--context=CONTEXT |
Establece el contexto de seguridad especificado en el nuevo directorio en entornos compatibles. |
Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.
Ejemplos de uso práctico
Crear directorios especificando permisos
En -m se pueden usar modos numéricos o simbólicos como chmod. También verifique la política real y los permisos del directorio superior.
mkdir -m 750 private-data
mkdir -m u=rwx,go= project-secret
Controlar los permisos del directorio padre
Con mkdir -p -m 750 a/b/c, el modo se aplica al directorio final indicado, no a todos los padres creados. El siguiente ejemplo presupone que app no existe y que trabaja en un directorio de práctica nuevo. Deténgase si falla su creación. La segunda línea recorre todos los directorios bajo app y cambia sus permisos; no la aplique a un árbol existente que deba conservar.
( umask 027; mkdir -p app/cache/data )
find app -type d -exec chmod 750 {} +
Verificar el resultado de la creación
En la automatización, se verifica el estado de finalización y las rutas donde los permisos y la propiedad son importantes se verifican con stat o namei.
mkdir -pv deploy/releases/current
stat -c '%A %U:%G %n' deploy deploy/releases deploy/releases/current
Comparación de mkdir y comandos relacionados
| Comando / método | Rol principal | Situaciones adecuadas |
|---|---|---|
mkdir |
Creación de directorios normales | Al crear un espacio de trabajo y el árbol de directorios |
install -d |
Creación de directorios y configuración de permisos y propietarios | Al especificar incluso atributos durante la instalación y distribución |
rmdir |
Eliminación de directorios vacíos | Cuando se eliminan de forma segura solo directorios sin contenido |
mktemp -d |
Creación de directorios temporales difíciles de predecir | Cuando se necesita un espacio de trabajo temporal para scripts |
Precauciones al usar
-p también crea directorios incluso si hay errores tipográficos
-p también puede crear una ruta mal escrita sin detectar el error de intención. Verifique variables y destino antes de crear rutas del sistema. Para comparar otras utilidades, consulte la lista de comandos de uso frecuente en Linux.
Los permisos se ven afectados por umask
Los permisos predeterminados sin usar -m están limitados según el umask actual. En servidores colaborativos, no asuma permisos esperados en números, verifique los valores reales.
Los permisos de creación y de acceso son diferentes
Si no hay permisos de escritura o ejecución en el directorio superior, no se pueden crear subdirectorios. No solo revise los permisos de la ruta de destino, verifique toda la ruta.
FAQ
¿Se puede crear todo de una vez incluso si no existe el directorio superior?
Usando mkdir -p PADRE/HIJO/DESTINO, se crean también los directorios intermedios que faltan.
¿Cómo evito errores si el directorio ya existe?
Usando -p. Sin embargo, fallará si hay un archivo normal en la misma ruta.
¿Se aplican los permisos de mkdir -m también al directorio padre?
-m configura los directorios nuevos indicados en los argumentos; no impone ese modo a todos los padres creados por -p ni modifica directorios que ya existen. Controle la creación mediante umask y revise los permisos antes de aplicar un chmod posterior.
¿Se pueden crear también directorios temporales con mkdir?
Está bien para directorios normales que necesiten un nombre fijo, pero si se necesita un nombre único seguro en un área temporal compartida, mktemp -d es adecuado.




