我想知道是否有办法知道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_MAXNAME_MAX配置值的值都有限制。
在Linux上,glibc的pathconf函数通过在给定路径上调用NAME_MAX并在返回的结构中使用statfs值来确定fr_namelen。因此,如果您的/目录位于不同的文件系统中,那么它可能有一个值。在一条注释中,您说文件系统为pjdfstest返回0,所以看起来它没有完全实现userland代码所期望的接口。您可能需要查看文件系统的源代码,以了解它如何实现文件名和路径名限制。

关于linux - mkdir“最大名称长度” vs pathconf MAX_PATH和MAX_NAME,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35991083/

10-13 23:55