あなたのディレクトリはたまたまFUSEベースのネットワークマウントでしたか?
その名前のファイルがすでに存在している(他の回答)ことに加えて、これは、このディレクトリに何かをマウントしたFUSEプロセスがクラッシュした(または、Linux OOMキラーを使用してまたは経由して強制終了された)場合に発生する可能性がありますkill -9
。
何が起こっているかを詳細に確認するには、を実行しますstrace -fy mkdir -p $directory
。これにより、関連するすべてのシステムコールとその戻り値が表示されます。
この場合に発生するエラーメッセージはmkdir -p
(特にgnulib
ライブラリ)のバグだと思います。
FUSEプロセスがマウントされているが、そのプロセスがクラッシュしたディレクトリで実行すると、
mkdir: cannot create directory ‘/mymount’: File exists
基になるstat()
ENOTCONN (Transport endpoint is not connected)
呼び出しが;を返すため、これはかなり不正確です。ただし、前のsycallmkdir
からのあまり具体的でないエラーを伝播します。マニュアルページには次のように書かれているので、さらに混乱します。mkdir()
-p, --parents
no error if existing, make parent directories as needed
したがって、dirが存在してもエラーにはならないはずですが、次のようにls -l /
表示されます。
d????????? ? ? ? ? ? files
したがって、これ(d
)によると、これはディレクトリですが、によるとではありませんtest -d
。
より良いエラーメッセージ(mkdir -p
この場合は出力されるはずです)は次のようになると思います。
mkdir: cannot create directory ‘/mymount’: Transport endpoint is not connected