not linux shell mkdir

linux - not - mkdir-p falla cuando existe el directorio



mkdir ubuntu (4)

¿Fue su directorio un montaje en red basado en FUSE por casualidad?

Además de un archivo con ese nombre ya existente (otra respuesta), esto puede suceder cuando un proceso FUSE que una vez montó algo en este directorio se bloqueó (o se eliminó, por ejemplo, con kill -9 o mediante el asesino OOM de Linux).

Para ver qué sucede en detalle, ejecute el strace -fy mkdir -p $directory , que muestra todos los syscalls involucrados y sus valores de retorno.

Considero que los mensajes de error emitidos en este caso son un error en mkdir -p (en particular la biblioteca gnulib ):

Cuando lo ejecutas en un directorio que tiene un proceso FUSE montado pero el proceso se bloquea, dice

mkdir: cannot create directory ‘/mymount’: File exists

que es bastante inexacto, porque la llamada stat() subyacente devuelve ENOTCONN (Transport endpoint is not connected) ; pero mkdir propaga el error menos específico del anterior mkdir() sycall . Es extra confuso porque la página del manual dice:

-p, --parents no error if existing, make parent directories as needed

por lo que no debería aparecer un error si el directorio existe, sin embargo, ls -l / shows:

d????????? ? ? ? ? ? files

así que de acuerdo con esta ( d ), es un directorio, pero no está de acuerdo con la test -d .

Creo que un mejor mensaje de error (que mkdir -p debería emitir en este caso) sería:

mkdir: cannot create directory ‘/mymount’: Transport endpoint is not connected

En uno de nuestros sistemas remotos, el mkdir -p $directory falla cuando el directorio existe. lo que significa que se muestra

mkdir: no se puede crear el directorio ''$ directorio'': el archivo existe

Esto es realmente desconcertante, ya que creía que el contrato de -p era que siempre tiene éxito cuando el directorio ya existe. Y funciona en los otros sistemas que probé.

hay una test usuario en todos estos sistemas y directory=/home/test/tmp .


Esto podría ser causado si ya existe un archivo con el mismo nombre ubicado en el directorio.

Edición: tenga en cuenta que un directorio no puede contener un archivo y una carpeta con el mismo nombre en las máquinas Linux.


Verifique si hay un archivo (no un directorio) con el mismo nombre que $ directorio.


mkdir -p no creará el directorio si hay un archivo con el mismo nombre que existe en el mismo directorio. De lo contrario funcionará como se esperaba.