#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提出的函数
pathconf
和fpathconf
创建更长的文件名(或路径名),如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 */
...
评论
参见:arvimal.blog/2016/07/21/…