Bash中文件名长度的限制
Contents
1.概述
在基于 Unix 的系统中,文件名的长度是有限制的。这个限制在不同的文件系统上是不同的。
在本教程中,我们将学习如何找到不同文件系统的限制。此外,我们将创建一个具有长名称的文件,以确认限制是如何工作的。
2. 文件名长度限制和 Unix 文件系统
大多数 Unix 文件系统都有类似的文件名长度限制:
文件系统 | 最大文件名长度 |
---|---|
BTRFS | 255 字节 |
exFAT | 255 个 UTF-16 字符 |
ext2 | 255 字节 |
ext3 | 255 字节 |
ext3cow | 255 字节 |
ext4 | 255 字节 |
FAT32 | 8.3(255 个带有 VFAT LFN 的 UCS-2 代码单元) |
NTFS | 255 个字符 |
但是,由于字符的 Unicode 表示可以占用几个字节,因此构成路径和文件名的最大字符数可能会有所不同。 此外,无论文件名是否包含扩展名,限制都保持不变。我们可以查看更详尽的文件名和路径限制列表 ,具体取决于文件系统。
我们还可以在我们的文件系统上使用扩展来更改最大长度限制。一个很好的例子是eCryptFS ,它利用较低文件名的一部分来保存元数据,并将文件名的限制设置为 143 个字符。
3. 找到极限
Linux 有一个名为getconf 的便捷命令,用于查询系统配置变量。
我们可以运行它来查找文件名长度限制:
$ getconf -a | grep -i name_max
NAME_MAX 255
_POSIX_NAME_MAX 255
LOGNAME_MAX 256
TTY_NAME_MAX 32
TZNAME_MAX
_POSIX_TZNAME_MAX
CHARCLASS_NAME_MAX 2048
HOST_NAME_MAX 64
LOGIN_NAME_MAX 256
在这里,NAME_MAX配置代表文件名长度限制。
同样,我们可以通过修改上一条命令的最后一部分来找到路径长度限制:
$ getconf -a | grep -i path_max
PATH_MAX 4096
_POSIX_PATH_MAX 4096
4. 确认限制
让我们使用标准的*touch * 命令尝试创建一个名称包含 258 个字符的文件,即比 255 的限制多三个字符:
$ touch abcabcabcabcabcabcabc...other characters omitted....abcabcabc
这是我们得到的回应:
touch: cannot touch 'abcabcabcabcabcabcabc...other characters omitted....abcabcabc': File name too long