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名的长度受限于:
linux/limits.h
定义,如sfp所述 。 要dynamic获取这些属性:
pathconf
和fpathconf
使用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 */ ...