Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Are there any filename or path length limits on Linux?

share|improve this question

7 Answers 7

up vote 43 down vote accepted

See the this wikipedia page about file systems comparison, especially in column Maximum filename length.

Here is some filename length limit in popular file systems

ext2    255 bytes
ext3    255 bytes
ext3cow 255 bytes
ext4    255 bytes
FAT32   8.3 (255 UCS-2 code units with VFAT LFNs)[22]
NTFS    255 characters
share|improve this answer
answer is: limit is usually 255 chars (for those who are too lazy to click this link) –  rahmanisback Sep 17 '12 at 15:04
Your answer should contain at least a summary of the relevant information in the link provided. Not just a link. –  zrajm Sep 15 '13 at 18:18
@rahmanisback that's right for filename limits, while path limits are usually defined by the OS, not FS (except for some strange FSes like iso or ntfs), and, on linux, are 4K –  nonchip Jun 27 '14 at 14:13
@nonchip thanks for clarification although the question was about filename length not paths. –  rahmanisback Jun 28 '14 at 14:45
Actually it was about both :D –  nonchip Jun 29 '14 at 1:14

There I've read that path length limit is in system headers. File name lenght limit is there too. On my system its file


and C-lang defines:

  #define NAME_MAX         255    /* # chars in a file name */
  #define PATH_MAX        4096    /* # chars in a path name including nul */

and some more.

share|improve this answer
Sorry, but I'am new here an can't even comment, save vote. The previous answer (by sfp) should be upped, as it answers the question completely, while the others are partially off. Again, sorry for going besides the rules, but I can't be quiet when the best answer is at the bottom. –  David Balažic Jan 3 '12 at 23:56

And for the sake of saving time (and anchoring it to memory):

ext2, ext3, ext4, zfs: no pathname limits; 255 bytes filename limit.

share|improve this answer

I refer to other answers, please upvote them.

Are there any filename or path length limits on Linux?

Yes, filename and pathname lengths are limited by :

To dynamically get these properties:

  • Use functions pathconf and fpathconf as proposed by Michael Aaron Safyan
  • Create a filename (or pathname) longer and longer as explained by dogbane
  • Use the command getconf as proposed by tim that is also available on Linux:

    $ getconf NAME_MAX /mnt/sda2/
    $ getconf PATH_MAX /mnt/sda3/
share|improve this answer

Those are file system name lengths. "linux" itself has some too. For instance, from bits/stdio_lim.h:

# define FILENAME_MAX 4096
share|improve this answer
So since the extX filesystems have a lower filename limit than what's defined in the kernel, you wouldn't ever hit that limit, unless it also encompases pathnames, right? –  Ivan May 18 '09 at 18:33
that's what it looks like to me. There's also PATH_MAX for the path, which is 4096, so it would be hit before the "unlimited" path size on the exts... I'm not sure how the OS resolves its own internal restrictions and those of the FS, never had my arms in that deep. interesting question though. –  jj33 May 18 '09 at 19:53
4096 characters is a helluva path name. I'm sure it could be raised with a recompile, but honestly, /why would you need pathnames that long?/ –  Avery Payne May 18 '09 at 23:52
I'm not sure you would need it or not. I view it more as a protection against malicious or negligent programs (I could easily see a script that behaves poorly and begins creating the same dir recursively. Actually, I've made that script, but it was redirecting a web site, not creating dirs...). –  jj33 May 19 '09 at 12:12
@AveryPayne To add tags to files so they could be searched using a simple locate. –  Hubert Kario Jun 18 '12 at 20:33

It's specified in the system limits.h header file.

Here is one of these files:

cat /usr/include/linux/limits.h

#define NAME_MAX         255    /* # chars in a file name */
#define PATH_MAX        4096    /* # chars in a path name including nul */

Here is where copies of this file are located and values they define:

find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}


/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
share|improve this answer

You should always use pathconf or some function like this to get the runtime value about the specified items, as this page said that:

It should be noted, however, that many of the listed limits are not invariant, and at runtime, the value of the limit may differ from those given in this header, for the following reasons:

  • The limit is pathname-dependent.

  • The limit differs between the compile and runtime machines.

For these reasons, an application may use the fpathconf(), pathconf(), and sysconf() functions to determine the actual value of a limit at runtime.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.