Linux上的文件名长度限制?


122

Linux上是否有文件名或路径长度限制?

Answers:


126

有关文件系统比较的信息,请参见Wikipedia页面,尤其是在“ 最大文件名长度”一栏中。

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

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

45
答案是:限制通常为255个字符(对于那些懒得单击该链接的人)
doc_id 2012年

11
您的答案应至少在提供的链接中包含相关信息的摘要。不只是一个链接。
zrajm 2013年

2
@rahmanisback适用于文件名限制,而路径限制通常是由操作系统而不是FS定义的(除了一些奇怪的FS,例如iso或ntfs除外),并且在Linux上是4K
nonchip

2
其实这是关于:D
nonchip

7
只是指出:字节!=字符,特别是如果您使用UTF-8。看这里
克里斯(Kris)2015年

87

我在这里读到,路径长度限制在系统标题中。文件名长度限制也存在。在我的系统上,它是文件:

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

C语言定义:

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

还有更多。


10
抱歉,但是我是新来的,除非投票,否则我都无法发表评论。上一个答案(由sfp提供)应调高,因为它可以完全回答问题,而其他答案则部分关闭。再次,很抱歉违反规则,但是当最佳答案在最底层时,我不能保持沉默。
DavidBalažic2012年

1
只是指出:字节!=字符,特别是如果您使用UTF-8。看这里
克里斯(Kris)2015年

1
@DavidBalažic:尽管确实如此,但Linux下的PATH_MAX只是一个准则,大多数底​​层文件系统没有限制。这使得引用大于该大小的路径变得困难。我通常使用PATH_MAX的“块”作为大小。
拉希

23

我指的是其他答案,请支持。

Linux上是否有文件名或路径长度限制?

是的,文件名和路径名的长度受以下限制:

要动态获取这些属性:



20

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

ext2,ext3,ext4,zfs:无路径名限制;255个字节的文件名限制。


1
不过,大多数程序都受到的绝对路径限制PATH_MAX = 4096。如果您的程序能够使用相对路径,并且您先更改工作目录,则可以解决该问题。
Mikko Rantalainen

这是因为各种POSIX API(例如getcwd和)realpath(您可以通过读取的元数据.然后更改为..并重复直到到达文件系统根目录来在用户空间代码中重新实现)依赖PATH_MAX。(来源
ssokolow

6

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

# define FILENAME_MAX 4096

因此,由于extX文件系统的文件名限制低于内核中定义的文件名限制,因此您永远都不会达到该限制,除非它还包含路径名,对吗?
伊万,

1
那就是我的样子。路径还有PATH_MAX,它是4096,因此它将在exts上的“无限”路径大小之前被击中...我不确定操作系统如何解决自己的内部限制以及FS的内部限制,我的手臂在那深处。有趣的问题。
jj33

helluva路径名是4096个字符。我敢肯定它可以通过重新编译来提高,但是说实话,/为什么您需要那么长的路径名?/
艾利·佩恩

我不确定您是否需要它。我将其更多地看作是针对恶意程序或疏忽程序的一种保护措施(我很容易看到行为不佳的脚本,并开始递归地创建相同的目录。实际上,我已经编写了该脚本,但是它是在重定向网站,而不是在创建目录...)。
jj33

@AveryPayne为文件添加标签,以便可以使用简单的进行搜索locate
休伯特·卡里奥

3

没有办法来确定在便携式方式的Linux上的最大路径长度。在我的系统上:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

但是我可以轻松地创建长度超过4096个字符的路径。而是PATH_MAX视为下限。您可以保证能够创建这么长的路径,但也可以创建更长的路径。


根据经验找到最大长度的一种简单的可移植方法是编写一个程序,该程序创建越来越长的目录链,并查看失败的地方。您将不知道它为什么会失败(尽管您希望收到提示性的人类可读错误消息),但您将知道可以安全地走多远。记住要检查单个目录的长度,相对路径名的长度和绝对路径名的长度。
Tripleee '16

另外,例如Python os.pathconf()模块将有一些答案;如果Python端口是好的,那应该是合理的。
Tripleee '16

2
您不能因为某些文件系统没有施加任何限制。它将很快因内存不足错误而失败,任何程序都将很难恢复。
比约恩·林奎斯特

这是正确的答案,除了这是由于@BjörnLindqvist注释所致。PATH_MAX只是一个准则,并且99%的文件可能在该限制之内。
拉赫利

1

您应该始终使用pathconf或类似的函数来获取有关指定项目的运行时值,因为此页面说:

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

  • 该限制取决于路径名。

  • 该限制在编译计算机和运行时计算机之间有所不同。

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


0

在系统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 */
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.