我想知道是否有办法知道 mkdir 可以创建的目录名称的最大大小。我凭经验发现我的版本 8.21 在 Ubuntu 14.04 上的限制是 1024。
$ mkdir $(python -c "print('x' * 1024)")
$ echo $?
0
$ mkdir $(python -c "print('x' * 1025)")
mkdir: cannot create directory ‘... (x repeated 1025 times) ...’: File name too long
根据 pathconf(使用来自 pjd(POSIX 文件系统测试套件)的工具):
$ # pathconf("/", NAME_MAX)
$ ./pjdfstest pathconf / _PC_NAME_MAX
255
$ # pathconf("/", PATH_MAX)
$ ./pjdfstest pathconf / _PC_PATH_MAX
4096
知道为什么值不同吗?
编辑 1:从命令行删除用户名。
最佳答案
Ubuntu 14.04 附带 coreutils 8.21,其 mkdir
实用程序对目录名称的长度没有限制。实际上,传递给 execve
的参数列表的长度是有限制的(通常是几兆字节),PATH_MAX
和 NAME_MAX
的值> 路径的配置值。
在 Linux 上,glibc 的 pathconf
函数通过在给定路径上调用 statfs
并使用 fr_namelen
来确定 NAME_MAX
返回的结构中的值。因此,/
可能有一个值,如果您的 pjdfstest
目录位于不同的文件系统中,则可能有另一个值。在评论中,您说文件系统为 NAME_MAX
返回 0,所以看起来它没有完全实现用户区代码期望的接口(interface)。您可能需要查看文件系统的源代码以了解它如何实现文件名和路径名限制。
关于linux - mkdir "max name length"与 pathconf MAX_PATH & MAX_NAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991083/