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

评论

参见:arvimal.blog/2016/07/21/…

#1 楼

有关文件系统比较的信息,请参见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


评论


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

– doc_id
2012年9月17日15:04

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

–nonchip
14年6月27日在14:13

其实这是关于:D

–nonchip
14年6月29日在1:14

只是指出:字节!=字符,特别是如果您使用UTF-8。看这里。

–克里斯
2015年6月5日20:35

这些限制让我感到震惊。每个目录的文件是无限的,每个卷有40亿个文件,文件大小达到TB级,卷大小达到EB级,但是对于文件名,我们有255个字节的愚蠢限制吗?

– jlh
17年9月19日在19:14

#2 楼

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

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


等等。

评论


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

–大卫·巴拉西奇(DavidBalažic)
2012年1月3日23:56

只是指出:字节!=字符,特别是如果您使用UTF-8。看这里。

–克里斯
2015年6月5日在20:36

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

–拉利
16年5月30日在19:21

#3 楼

我引用了其他答案,请对其进行投票。


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


是的,文件名和路径名的长度受WerkkreW所述文件系统限制的限制:


>由sfp声明的在linux/limits.h中定义的常量。

要动态获取这些属性:


使用Michael Aaron Safyan提出的函数pathconffpathconf

创建更长的文件名(或路径名),如dogbane所述


使用tim提出的getconf命令,该命令在Linux上也可用:

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




评论


这是C中的pathconf示例:stackoverflow.com/questions/16285623/…

– Ciro Santilli郝海东冠状病六四事件法轮功
19年1月11日23:24



#4 楼

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

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

评论


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

– Mikko Rantalainen
18-2-28在10:50

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

–ssokolow
19年3月13日在20:19

#5 楼

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

# define FILENAME_MAX 4096


评论


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

–伊凡
09年5月18日在18:33

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

– jj33
09年5月18日在19:53

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

–艾琳·佩恩(Avery Payne)
09年5月18日23:52

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

– jj33
09年5月19日在12:12

@AveryPayne向文件添加标签,以便可以使用简单的位置进行搜索。

–休伯特·卡里奥(Hubert Kario)
2012年6月18日在20:33

#6 楼

无法以可移植的方式确定Linux上路径的最大长度。在我的系统上:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096


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

评论


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

–tripleee
16年4月12日在4:12

另外,例如Python的os.pathconf()模块将提供一些答案;如果Python端口很好,则应该合理。

–tripleee
16年4月12日在4:14

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

–BjörnLindqvist
16年4月12日在14:46

这是正确的答案,只不过这是由于@BjörnLindqvist评论所致。 PATH_MAX只是一个准则,并且99%的文件可能在该限制之内。

–拉利
16年5月30日在19:25

#7 楼

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

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


该限制与路径名相关。


编译计算机和运行时计算机的限制有所不同。


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


#8 楼

它是在系统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 */
...