linux上的文件名长度限制?

rea*_*nly 147 linux limits

Linux 上是否有任何文件名或路径长度限制?

Wer*_*reW 156

请参阅有关文件系统比较Wikipedia 页面,尤其是在列Maximum filename length 中

以下是流行文件系统中的一些文件名长度限制

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
Run Code Online (Sandbox Code Playgroud)

  • 答案是:限制通常为 255 个字符(对于那些懒得点击此链接的人) (56认同)
  • 只是指出: bytes != chars,特别是如果您使用 UTF-8。请参阅[此处](http://serverfault.com/questions/542450/is-the-ext3-filename-limited-to-255-symbols-or-255-bytes)。 (10认同)
  • @rahmanisback 适用于文件名限制,而路径限制通常由操作系统定义,而不是 FS(除了一些奇怪的 FS,如 iso 或 ntfs),并且在 linux 上是 4K (4认同)
  • 实际上是关于两者:D (3认同)
  • 我对这些限制感到震惊。每个目录的文件是无限的,每个卷有 40 亿个文件,文件大小达到 TB,卷大小达到 EB,但我们对文件名有 255 字节的愚蠢限制? (3认同)
  • 还应该提到的是,如果您在这些文件系统之上使用文件名加密对 eCryptFS 进行分层(如安装在带有加密主目录选项的 Ubuntu 中),则有效的最大文件名长度仅为 143 个字符。参见:https://unix.stackexchange.com/a/32834/47938 (3认同)
  • 这个 255 字节的限制实际上非常愚蠢。对于较长的文件名,有非常实用的用例,例如长课程或书籍或论文标题以及作者姓名列表。还有一些软件在无法写入完整的文件名时会崩溃,例如在下载此类课程的视频时使用 `youtube-dl`。 (2认同)

小智 101

我在这里读到路径长度限制在系统头文件中。文件名长度限制也有。在我的系统上它是文件:

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h
Run Code Online (Sandbox Code Playgroud)

和 C-lang 定义:

  #define NAME_MAX         255    /* # chars in a file name */
  #define PATH_MAX        4096    /* # chars in a path name including nul */
Run Code Online (Sandbox Code Playgroud)

还有一些。

  • 对不起,但我是新来的,甚至不能发表评论,保存投票。之前的答案(由 sfp 提供)应该得到提升,因为它完全回答了问题,而其他答案则部分关闭。再次,很抱歉违反规则,但是当最佳答案在底部时,我不能保持沉默。 (14认同)
  • 只是指出:字节!=字符,特别是如果您使用UTF-8。请参阅[此处](http://serverfault.com/questions/542450/is-the-ext3-filename-limited-to-255-symbols-or-255-bytes)。 (2认同)
  • @DavidBalažic:虽然确实如此,Linux 下的 PATH_MAX 只是一个指导方针,但大多数底层文件系统都没有限制。这使得很难引用大于该大小的路径。我通常使用 PATH_MAX 的“块”作为大小。 (2认同)

oHo*_*oHo 27

我参考了其他答案,请点赞。

Linux 上是否有任何文件名或路径长度限制?

是的,文件名和路径名长度受以下限制:

动态获取这些属性:


Iva*_*van 20

为了节省时间(并将其固定到内存中):

ext2、ext3、ext4、zfs:没有路径名限制;255 字节文件名限制。

  • 不过,大多数程序都受限于“PATH_MAX = 4096”的绝对路径。如果您的程序能够使用相对路径并且您先更改工作目录,则可以解决该问题。 (2认同)
  • 这是因为各种 POSIX API,例如“getcwd”和“realpath”(您*可以*通过读取“.”的元数据在用户空间代码中重新实现,然后更改为“..”并重复,直到到达文件系统根目录)依赖在“PATH_MAX”上。([来源](https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html)) (2认同)

jj3*_*j33 6

这些是文件系统名称长度。“linux”本身也有一些。例如,来自 bits/stdio_lim.h:

# define FILENAME_MAX 4096
Run Code Online (Sandbox Code Playgroud)