Назад | Перейти на главную страницу

Ограничения длины имени файла в Linux?

Существуют ли ограничения на длину имени файла или пути в Linux?

Увидеть Страница Википедии о сравнении файловых систем, особенно в колонке Максимальная длина имени файла.

Вот некоторые ограничения длины файла в популярных файловых системах:

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

я прочел Вот этот предел длины пути указан в системных заголовках. Ограничение длины имени файла тоже есть. В моей системе это файл:

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h

а C-lang определяет:

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

и еще кое-что.

Я имею в виду другие ответы, пожалуйста, проголосуйте за них.

Существуют ли ограничения на длину имени файла или пути в Linux?

Да, длина имени файла и пути ограничена:

Чтобы динамически получить эти свойства:

  • Используйте функции pathconf и fpathconf как предложено Михаил Аарон Сафян
  • Создайте имя файла (или путь) все длиннее и длиннее, как объяснено кендырь
  • Используйте команду getconf как предложено Тим это также доступно в Linux:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    

И ради экономии времени (и сохранения его в памяти):

ext2, ext3, ext4, zfs: без ограничений по имени пути; Ограничение имени файла 255 байтов.

Это длины имен файловой системы. Сам "linux" тоже есть. Например, из bits / stdio_lim.h:

# define FILENAME_MAX 4096

Там есть ни за что для определения максимальной длины путей в Linux переносимым способом. В моей системе:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Но я легко могу создавать пути длиной более 4096 символов. Вместо этого смотрите PATH_MAX как нижнюю границу. Вы гарантированно сможете создавать такие длинные пути, но вы также можете создавать гораздо более длинные пути.

Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, так как это страница сказал, что:

Однако следует отметить, что многие из перечисленных ограничений не являются неизменными, и во время выполнения значение ограничения может отличаться от значений, указанных в этом заголовке, по следующим причинам:

  • Предел зависит от имени пути.

  • Предел различается для компьютеров компиляции и выполнения.

По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения ограничения во время выполнения.

Это указано в системе limits.h заголовочный файл.

Вот один из этих файлов:

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 */
...

Здесь находятся копии этого файла и значения, которые они определяют:

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 */
...