Существуют ли ограничения на длину имени файла или пути в 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?
Да, длина имени файла и пути ограничена:
linux/limits.h
как заявлено SFP.Чтобы динамически получить эти свойства:
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 */
...