在Linux上的文件名长度限制?

Linux上有没有文件名或path长度的限制

请参阅维基百科页面关于文件系统比较 ,特别是在最大文件名长度列。

以下是常用文件系统中的一些文件名长度限制

BTRFS 255 bytes exFAT 255 UTF-16 characters ext2 255 bytes ext3 255 bytes ext3cow 255 bytes ext4 255 bytes FAT32 8.3 (255 UCS-2 code units with VFAT LFNs) NTFS 255 characters XFS 255 bytes 

在那里我读过的path长度限制是在系统标题。 文件名长度限制也在那里。 在我的系统上的文件

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h 

C-lang定义:

  #define NAME_MAX 255 /* # chars in a file name */ #define PATH_MAX 4096 /* # chars in a path name including nul */ 

还有更多。

我提到其他答案,请注意他们。

Linux上有没有文件名或path长度的限制?

是的,文件名和path名的长度受限于:

  • 文件系统限制,如WerkkreW所述 ;
  • 常量在linux/limits.h定义,如sfp所述 。

要dynamic获取这些属性:

  • 使用Michael Aaron Safyan提出的函数pathconffpathconf
  • 创build一个文件名(或path名)越来越长,正如解释所说
  • 使用tim提供的getconf命令,该命令在Linux上也可用:

     $ getconf NAME_MAX /mnt/sda2/ 255 $ getconf PATH_MAX /mnt/sda3/ 4096 

为了节省时间(并将其固定到内存):

ext2,ext3,ext4,zfs:没有path名限制; 文件名限制为255个字节

这些是文件系统名称的长度。 “linux”本身也有一些。 比如,从bits / stdio_lim.h:

 # define FILENAME_MAX 4096 

无法以便携的方式确定Linux上path的最大长度。 在我的系统上:

 $ getconf PATH_MAX / 4096 $ getconf _POSIX_PATH_MAX / 4096 

但是我可以很容易地创build长度超过4096个字符的path。 相反,请参阅PATH_MAX作为下限。 你保证能够创造这么长的path,但你也可以创造更长的path。

你应该总是使用pathconf或者像这样的函数来得到关于指定项目的运行时间值,因为这个页面说:

但是,应该注意的是,列出的许多限制并不是不变的,并且在运行时,限制的值可能与此标题中给出的限制不同,原因如下:

  • 限制是path名相关的。

  • 编译和运行机器之间的限制是不同的。

由于这些原因,应用程序可以使用fpathconf(),pathconf()和sysconf()函数来确定运行时限制的实际值。

它在系统limits.h头文件中指定。

以下是其中一个文件:

 cat /usr/include/linux/limits.h ... #define NAME_MAX 255 /* # chars in a file name */ #define PATH_MAX 4096 /* # chars in a path name including nul */ ... 

这里是这个文件的副本所在的位置和值:

 find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {} 

输出:

 ... /usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */ ...