以下问题仅适用于bash和linux:
- 文件的绝对路径名中的字符数是否有限制?
- 仅文件名(无扩展名)的字符数有限制吗?
如果是这样,这些限制是什么?如果它们是系统特定的,我该如何访问它们?
以下问题仅适用于bash和linux:
如果是这样,这些限制是什么?如果它们是系统特定的,我该如何访问它们?
Answers:
这在很大程度上取决于文件系统。对于ext FS(当前在Linux上最常用):
扩展名不是FS知道的,它包含255个字节,包括扩展名(您可以使用不带任何扩展名的文件名)。
这里是每个FS的这些限制的更详尽列表。
文件系统的扩展名也可以更改最大长度。例如,eCryptFS使用较低文件名的一部分来保留元数据,并将文件名的最大长度限制为143个字符。请参阅Ubuntu eCryptFS启动板条目。
ecryptfs
,我已经能够验证漏洞仍未得到解决(尽管阅读本身让我觉得它永远不会被解决的bug)
在临时目录中,运行:
num=1
while [ true ]
do
if ! touch $(printf "%${num}s" | tr ' ' 'a')
then
echo $num
break
fi
((num++))
done
我得到:
touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256
这意味着我的上限是255。
- 文件的绝对路径名中的字符数是否有限制?
就在这里。
在Linux上的文件名长度限制问题上,请参见sfp的答案?服务器故障
简而言之:
#define PATH_MAX 4096 /* # chars in a path name including nul */
对于:
- 仅文件名(无扩展名)的字符数有限制吗?
在相同的链接答案中:
#define NAME_MAX 255 /* # chars in a file name */
这与bash无关;它取决于操作系统。在Mac上,其0xff表示文件名,0x400表示路径名。Ubuntu 9的文件名限制为144个字符。
我在Wikipedia中找到了此链接。它告诉了许多文件系统的路径和文件名限制。
仅供参考,在Docker上,文件名限制当前为242个字符。