题 linux上的文件名长度限制?


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


110
2018-05-18 17:27






答案:


关于文件系统比较的维基百科页面,特别是在专栏中 最大文件名长度

这里有一些 文件名长度限制 在流行的文件系统中:

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

117
2018-05-18 17:29



答案是:限制通常是255个字符(对于那些懒得单击此链接的人) - rahmanisback
您的答案应至少包含所提供链接中相关信息的摘要。不只是一个链接。 - zrajm
@rahmanisback适用于文件名限制,而路径限制通常由操作系统定义,而不是FS(除了一些奇怪的FS,如iso或ntfs),在linux上,是4K - nonchip
实际上它是关于两者:D - nonchip
只是指出:bytes!= chars,特别是如果你使用UTF-8。看到 这里。 - Kris


我读了 这里 路径长度限制在系统标头中。文件名长度限制也在那里。在我的系统上它的文件:

  /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 */

还有一些。


81
2017-08-31 08:58



对不起,但我是新来的,甚至不能评论,保存投票。之前的答案(通过sfp)应该被提升,因为它完全回答了问题,而其他答案则部分关闭了。再次,抱歉除了规则之外,但是当最好的答案在底部时,我不能安静。 - David Balažic
只是指出:bytes!= chars,特别是如果你使用UTF-8。看到 这里。 - Kris
@DavidBalažic:尽管如此,linux下的PATH_MAX只是一个指导原则,大多数底​​层文件系统都没有限制。这使得很难引用大于该大小的路径。我通常使用PATH_MAX的“块”作为大小。 - Rahly


我请参考其他答案,请提出投票。

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

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

要动态获取这些属性:

  • 使用功能 pathconf 和 fpathconf 正如提议的那样 Michael Aaron Safyan
  • 如下所述,创建更长和更长的文件名(或路径名) 罗布麻
  • 使用该命令 getconf 正如提议的那样 蒂姆 也可以在Linux上使用:

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

20
2018-05-24 07:35





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

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


17
2018-05-18 18:15



大多数程序都受限于绝对路径 PATH_MAX = 4096但是。如果您的程序能够使用相对路径并且您首先更改工作目录,则可以解决此问题。 - Mikko Rantalainen


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

# define FILENAME_MAX 4096

6
2018-03-22 18:31



因此,由于extX文件系统的文件名限制低于内核中定义的文件系统限制,所以除非它还包含路径名,否则你不会达到这个限制,对吧? - Ivan
这就是我的样子。路径上还有PATH_MAX,即4096,因此它会在exts上的“无限”路径大小之前被击中......我不确定操作系统如何解决自己的内部限制以及FS的内部限制,从未有过我的手臂在那深处。但有趣的问题。 - jj33
4096个字符是helluva路径名。我确信它可以通过重新编译来提升,但老实说,/为什么你需要那么长的路径名?/ - Avery Payne
我不确定你是否需要它。我更多地将其视为对恶意或疏忽程序的保护(我可以很容易地看到一个行为很差的脚本并开始递归地创建相同的目录。实际上,我已经制作了该脚本,但它重定向了一个网站,而不是创建dirs ...)。 - jj33
@AveryPayne要向文件添加标签,以便可以使用简单的方法进行搜索 locate。 - Hubert Kario


没门 以便携方式确定Linux上路径的最大长度。在我的系统上:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

但我可以轻松创建超过4096个字符的路径。相反看 PATH_MAX 作为下限。您可以保证能够创建这么长的路径,但您也可以创建更长的路径。


3
2018-01-16 02:17



根据经验找到最大长度的简单可移植方法是编写一个程序,该程序可以创建更长和更长的目录链,并查看它失败的位置。你不会确切地知道它失败的确切原因(尽管你希望提供一个人为可读的错误信息),但你会知道你可以安全地走多远。请记住检查单个目录长度,相对路径名长度和绝对路径名长度。 - tripleee
另外,例如, Python os.pathconf() 模块会有一些答案;如果Python端口有任何好处,它们应该是合理的。 - tripleee
你不能,因为一些文件系统不强加 任何限制。它会很快因为内存不足错误而失败,任何程序都很难从中恢复。 - Björn Lindqvist
这是正确的答案,除了这是由于@BjörnLindqvist评论。 PATH_MAX只是一个指导原则,99%的文件可能都在这个限制范围内。 - Rahly


你应该经常使用 的pathconf 或者像这样的一些函数来获取关于指定项的运行时值,就像这样  说:

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

  • 限制是路径名依赖的。

  • 编译和运行时计算机之间的限制不同。

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


1
2017-12-05 01:49





它在系统中指定 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 */
...

0