1. Overview

In Unix-based systems, there is a limit on the length of filenames. This limit is different on different file systems.

In this tutorial, we’ll learn how to find the limit on different file systems. Additionally, we’ll create a file with a long name to confirm how the limit works.

2. File Name Length Limits and Unix File Systems

Most Unix file systems have similar filename length limits:

File System Max File Name 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

However, since the Unicode representation of a character can occupy several bytes, the maximum number of characters that comprise a path and filename can vary.

Further, the limits remain the same whether the filename contains an extension or not. We can take a look at a more exhaustive list of the filename and path limits depending on the file system.

We can also have extensions on our file system that change the maximum length limit. A good example of this is eCryptFS which utilizes part of the lower filename to keep metadata and sets the limit of a filename to 143 characters.

3. Finding the Limit

Linux has a handy command called getconf for querying system configuration variables.

We can run it to find the filename length limit:

$ getconf -a | grep -i name_max
NAME_MAX                           255
_POSIX_NAME_MAX                    255
LOGNAME_MAX                        256
TTY_NAME_MAX                       32
CHARCLASS_NAME_MAX                 2048
HOST_NAME_MAX                      64
LOGIN_NAME_MAX                     256

Here, the NAME_MAX configuration represents the filename length limit.

Similarly, we can find the path length limit by modifying the last part of our previous command:

$ getconf -a | grep -i path_max
PATH_MAX                           4096
_POSIX_PATH_MAX                    4096

4. Confirming the Limits

Let’s use the standard touch command to try and create a file with a name containing 258 characters, i.e., three characters more than the limit of 255:

$ touch abcabcabcabcabcabcabc...other characters omitted....abcabcabc

Here’s the response we get:

touch: cannot touch 'abcabcabcabcabcabcabc...other characters omitted....abcabcabc': File name too long

5. Conclusion

In this article, we learned how to check both filename and path limits on different Linux file systems. We also tried to create a file that surpassed the limit to see the error we got.