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.

Documentación oficial