在linux系统中,对文件名称、目录名称和绝对路径的长度都做了限制,且限制条件包括且不限于文件系统类型,系统内核等。不考外在因素外,linux系统默认是将文件名称和目录名称的长度限制在了255个字节,而绝对路径的长度限制在了4096个字节;这两个限制值被定义在了系统自带的头文件limits.h中,如图1,路径为/usr/include/linux/limits.h,不同的linux系统有可能会有差异。
NAME_MAX宏定义表示的文件名或目录名的最大长度;
PATH_MAX宏定义表示的是绝对路径的最大长度;
图1
实例之文件名的最大长度编写一个简单的shell脚本用于测试验证实际创建文件时,限制最大的长度是多少。如图2,在shell脚本里使用随机数来作为文件名,然后使用touch命令创建文件,如果文件名太长,则会创建失败,反之,则会创建成功。
图2
实例之目录名的最大长度同样的,编写一个简单的shell脚本,然后使用随机数作为目录名以及使用mkdir命令创建目录,判断创建结果,如图3,报错时,会显示File name too long信息。
图3
实例之绝对路径的长度文件的绝对路径也可以理解为目录下可以创建多少级的子目录,不过这个绝对路径在linux系统中,可以目录名称的长度有关,目录名称长,则创建的子目录级数就少,反之就多。同样的创建一个shell脚本验证测试下,如图4,分别创建目录名为1字节和2个字节长度的时候,得出可以创建多少级的子目录。
在linux系统中,由于目录和子目录的路径是由/分割开的,因此计算绝对路径的长度时,每个目录需要多一个字节(分割符/占一个字节),因此当创建目录名长度为1和2的时候,子目录的级数并不是倍数关系。
图4