Linux

¿Cuál es la mejor manera de usar mkdir en Linux?

noviembre 10, 2026 Qué es mejor? 10 min read
¿Cuál es la mejor manera de usar mkdir en Linux?

Los datos están comprobados en octubre de 2026.

La respuesta corta: usa mkdir -p y controla los permisos

Si vas a crear rutas dentro de un script, conviene mkdir -p: crea los directorios intermedios que falten y no falla porque el destino ya exista. Si trabajas de forma manual y quieres detectar un conflicto, usa mkdir sin opciones.

Para información privada, combina mkdir -p -m 700 /ruta/directorio y comprueba después el propietario y el grupo. El modo 700 permite al propietario leer, escribir y acceder al directorio; los demás usuarios no reciben permisos.

Mi recomendación concreta: usa mkdir -p como opción general, revisa el resultado con ls -ld y reserva mkdir simple para una carpeta individual cuya ausencia quieras confirmar. No sustituyas la revisión de permisos por confiar en el umask.

Qué necesitas antes de crear un directorio

  1. Ruta y directorio actual. Ejecuta pwd para saber desde dónde se resolverá una ruta relativa. Usa una ruta absoluta si el script puede ejecutarse desde otro directorio.
  2. Usuario y grupo. Ejecuta id y id -nG. El propietario heredado normalmente será tu usuario, pero un directorio padre con setgid puede propagar su grupo.
  3. Máscara de permisos. Consulta umask; por ejemplo, umask 022 affecta a los modos predeterminados de archivos y directorios. Puedes ver el valor vigente con umask y ajustarlo solo dentro del proceso o script.
  4. Sistema de archivos. df -h . muestra espacio disponible y el punto de montaje. df -i . muestra los inodos disponibles, importantes cuando hay muchos archivos pequeños.
  5. Permisos del padre. Para crear un hijo necesitas permiso de escritura y ejecución sobre el directorio padre. ls -ld /ruta/padre permite comprobarlo.
  6. Existencia del destino. test -e /ruta/destino devuelve un código de salida distinto de cero si no existe. test -d exige que sea un directorio.

Ejemplo: si /datos pertenece a otra persona y no concede escritura, mkdir /datos/proyecto producirá Permission denied, aunque tengas espacio.

Métodos comparados para crear directorios

Método Sintaxis Crea rutas anidadas Directorio ya existente Permisos Estado de salida
mkdir simple mkdir ruta No Error Modo predeterminado afectado por umask Distinto de cero si ya existe
mkdir -p mkdir -p ruta Sí No genera error Modo predeterminado, salvo -m Cero si la ruta existe como directorio
mkdir -m mkdir -m 700 ruta No, salvo con -p Error sin -p Modo solicitado Distinto de cero si ya existe
mkdir -p -m mkdir -p -m 700 ruta Sí No genera error Modo solicitado para elementos creados Cero si la ruta existe como directorio
install -d install -d -m 700 ruta Sí No genera error Modo solicitado y propietario configurables Cero si la ruta existe

La documentación de GNU Coreutils distingue mkdir -p de la creación simple y explica que los componentes intermedios se crean con permisos predeterminados. install -d es útil cuando quieres establecer modo y propietario en una sola orden, aunque no sustituye siempre a mkdir -p en scripts sencillos.

Para automatización, la combinación más robusta es mkdir -p; para datos privados, añade un modo explícito y verifica el resultado.

Método 1: mkdir simple para un directorio nuevo

  1. Sitúate en el directorio de trabajo y comprueba la ruta con pwd. En este ejemplo, el directorio actual es /tmp/proyecto.
  2. Crea la carpeta con mkdir informes. mkdir acepta rutas relativas y absolutas; con esta orden, el destino será /tmp/proyecto/informes.
  3. Verifica el resultado con ls -ld informes. La primera columna debe mostrar d al principio para indicar un directorio; las demás muestran tipo, permisos, enlaces, propietario, grupo y tamaño.
  4. Comprueba que existe con test -d informes && echo 'Directorio correcto'. El comando imprime esa frase solo si la comprobación devuelve código cero.
  5. Si el destino existe, mkdir devuelve el error File exists y un código de salida distinto de cero. No trates ese error como si el directorio se hubiera creado: inspecciona quién lo posee y qué permisos tiene.

Ejemplo: mkdir /tmp/proyecto/informes es útil para una carpeta individual. Si después necesitas crear /tmp/proyecto/informes/2026/enero, ese mkdir simple no construirá los dos niveles intermedios.

El sistema operativo importa poco para esta orden: mkdir está disponible en Linux, Ubuntu, Debian, Fedora Workstation, Linux Mint y otros sistemas Unix. En Windows existe un comando mkdir, pero su sintaxis y su comportamiento ante rutas existentes no son los de GNU Coreutils.

Método 2: mkdir -p para rutas anidadas e idempotencia

  1. Define la ruta completa y entrecomilla las partes que contengan espacios: mkdir -p "/tmp/copia de trabajo/2026/enero".
  2. Ejecuta mkdir -p /tmp/proyecto/{datos,procesados,logs}. La expansión de llaves del shell crea tres destinos; los directorios intermedios se crean automáticamente.
  3. Repite la misma orden. Con -p, no debe aparecer File exists si la ruta ya existe como directorio y el proceso conserva permiso para examinarla.
  4. Verifica cada nivel con ls -ld /tmp/proyecto/{datos,procesados,logs} o con find /tmp/proyecto -maxdepth 1 -type d -print.
  5. Distingue idempotencia de permiso universal: mkdir -p puede devolver éxito aunque el directorio ya exista, pero no concede acceso a su contenido ni corrige un propietario incorrecto.

Ejemplo: una copia diaria puede crear /backups/app/$(date +%F) con mkdir -p. Al ejecutar el script otro día, se conserva la estructura del día anterior y se añade la nueva fecha.

-p no significa que cualquier ruta sea válida. Si falta un directorio padre al que no puedes acceder, o si el sistema no puede escribir, la orden sigue fallando. Úsala cuando la repetición segura sea una ventaja y valida después los permisos de los datos sensibles.

Método 3: mkdir -m, grupos y permisosmica

  1. Crea una ruta privada con mkdir -p -m 700 /tmp/clientes. El modo 700 concede al propietario permiso de lectura, escritura y ejecución; no permite listar ni entrar el resto de usuarios.
  2. Comprueba el modo con stat -c '%A %a %U %G %n' /tmp/clientes. Para directorios, la forma octal incluye permisos para propietario, grupo y otros.
  3. Usa 750 si un grupo autorizado necesita leer y atravesar el directorio. Usa 755 si cualquier usuario debe=listarlo y acceder, pero no modificarlo.
  4. Asigna propietario y grupo con sudo chown usuario:grupo /tmp/clientes y sudo chmod 750 /tmp/clientes cuando el directorio ya exista.
  5. Revisa el efecto de setgid: ls -ld muestra una s en la posición de grupo cuando el directorio hereda ese comportamiento. Puede cambiar el grupo de nuevos elementos.

El modo -m solicitado se aplica a los directorios que crea esa ejecución. mkdir -p -m 700 ruta no cambia los permisos de un directorio preexistente que ya cumple la ruta. Además, -m no sustituye al control del grupo.

El dato clave es el par «modo más propietario»: un 700 correcto en manos del usuario equivocado sigue siendo un problema.

Automatizar árboles, lotes y copias de seguridad

  1. Crea varios destinos. Usa mkdir -p base/{a,b,c} para tres subdirectorios. Las llaves dependen de una shell compatible; para portabilidad estricta, repite mkdir -p base/a base/b base/c.
  2. Protege espacios. Escribe mkdir -p "$HOME/copia de seguridad"; las comillas evitan que la shell divida el nombre.
  3. Genera una fecha. backup_dir="$HOME/backups/$(date +%F)" produce una ruta diaria según la configuración regional y la zona horaria del sistema. Para un identificador inequívoco, usa date -u +%Y-%m-%d.
  4. Crea y copia. Ejecuta mkdir -p "$backup_dir" && cp -a archivos/. "$backup_dir/". El operador && evita copiar si falla la creación.
  5. Procesa una lista. find origen -type d -print0 | xargs -0 mkdir -p conserva nombres con espacios, salto de línea y tabuladores gracias al separador nulo. En GNU xargs, añade -r para no ejecutar mkdir cuando no haya elementos.
  6. Copia conservando metadatos. cp -a origen/. destino/ conserva, cuando el sistema lo permite,nativas nativamente diarios como propietario, grupo, marcas de tiempo y enlaces. Revisa el resultado.

Ejemplo: mkdir -p "$HOME/backups/$(date +%F)" crea una carpeta diaria sin depender de que exista el árbol superior. Para migración masiva, find /origen -mindepth 1 -type d -print0 | xargs -0 -r mkdir -p reconstruye una jerarquía sin copiar archivos.

Cuándo no usar mkdir: errores frecuentes y alternativas

  • File exists: mkdir encuentra el destino. Usa mkdir -p si debe aceptar un directorio existente, o test -d antes de decidir. install -d también es idempotente para directorios.
  • Permission denied: falta permiso de escritura o de ejecución en el padre, o no puedes impresiones calidad nativamente cambiar un directorio propiedad de otra persona. Revisa ls -ld padre y id; no abuses de sudo.
  • No such file or directory: una ruta relativa parte de otro directorio o falta un padre que mkdir simple no crea. Ejecuta pwd o usa mkdir -p.
  • No space left on device: no queda espacio en bloques ni, posiblemente, inodos. Consulta df -h y df -i; borrar espacio o usar otro sistema de archivos.
  • mkdir de BSD: existe en sistemas BSD y ofrece opciones propias, pero la disponibilidad exacta de indicadores depende de la variante. No copies ejemplos GNU sin revisar man mkdir en el sistema.
  • touch: crea un archivo vacío, no un directorio; solo sirve para marcar la existencia de un archivo.
  • install -d: crea directorios y puede fijar modo y propietario; es útil en instalaciones, pero necesita más privilegios cuando se cambia el propietario.
  • mktemp -d: crea un directorio único y privado, apropiado para temporales; el nombre aleatorio no es una ruta estable para datos permanentes.

La elección práctica queda clara: mkdir -p para scripts, mkdir simple para detectar predecibles, -m más chown para privacidad y install -d para instalaciones. Comprueba siempre con ls -ld o stat: crear el directorio es solo el principio.

Preguntas frecuentes sobre mkdir en Linux

1. ¿Qué función del sistema llama el comando mkdir?

El comando mkdir utiliza la llamada al sistema mkdir(2), disponible en Linux mediante la función mkdir() de la biblioteca estándar de C. Esta función crea una ruta y devuelve 0 si funciona, o -1 con errno definido si aparece un error. En la terminal, mkdir es un programa que utiliza esa llamada, no la llamada al sistema en sí.

2. ¿Cómo crear un directorio solo si todavía no existe?

La opción -p permite crear el directorio y todos sus componentes superiores sin mostrar un error cuando ya existen. Por ejemplo, mkdir -p proyectos/2026/resultados crea la ruta completa y termina correctamente aunque proyectos ya exista. Si un componente intermedio existe como archivo, mkdir -p informará el error y devolverá un estado distinto de cero.

3. ¿Cómo se crea un directorio desde un programa en C?

En C se llama a mkdir(ruta, modo), por ejemplo mkdir("directorio", 0755);, y se debe incluir <sys/stat.h> y <errno.h>. El segundo argumento fija permisos para el propietario, grupo y otros, en ese orden: 0755 concede lectura y recorrido al grupo y a otros. Una llamada correcta devuelve 0; ante un error devuelve -1 y errno indica la causa.

4. ¿Qué parámetros de permisos admite mkdir en C?

El parámetro modo de mkdir() acepta los bits 0777 como máximo: lectura 04, escritura 02 y ejecución o recorrido 01. El valor 0755 permite leer y recorrer el directorio a grupo y otros, pero no escribir en él; 0700 lo restringe al propietario. La Umask del proceso puede retirar permisos antes de crear el directorio.

5. ¿Cómo consultar la documentación de la llamada al sistema mkdir?

En Linux, man 2 mkdir muestra la documentación de la llamada al sistema mkdir(2), con sus argumentos, valores devueltos y errores como EEXIST o ENOENT. Para consultar únicamente esa sección puede usarse man 2 mkdir, mientras que man 1 mkdir documenta la utilidad de terminal. La ayuda disponible depende de tener instaladas las páginas man correspondientes.

6. ¿Cómo se usa el comando mkdir en Linux?

La forma habitual es mkdir nombre_del_directorio; por ejemplo, mkdir documentos crea un directorio en la ubicación actual. Para varios niveles se usa mkdir -p uno/dos/tres, que crea también los directorios superiores. Si el destino ya existe, mkdir normalmente devuelve un error y se puede comprobar con echo $?, que mostrará 1.

Fuentes

  1. LinuxizeHow to Create a Directory in Linux: mkdir Command Examplesconsultado el 28/10/2026
  2. LinuxtodayHow to Use mkdir Like a Pro on Linux and Ubuntuconsultado el 28/10/2026
  3. Archlinuxmkdir(1) – Arch Linux manual pagesconsultado el 28/10/2026
  4. YoustableMkdir Command in Linux Explained With Examples in 2026consultado el 28/10/2026