Есть ли какие-либо ограничения на длину файла или пути в 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
, предложенную tim , которая также доступна в Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
И ради экономии времени (и привязки его к памяти):
ext2, ext3, ext4, zfs: без ограничений пути; Ограничение имени файла 255 байт.
Это длины имен файловых систем. У самого "linux" тоже есть. Например, из бита/stdio_lim.h:
# define FILENAME_MAX 4096
Существует никак для определения максимальной длины путей в Linux переносимым способом. В моей системе:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите PATH_MAX
как нижняя граница. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.
Вы всегда должны использовать pathconf или какую-либо подобную функцию, чтобы получить значение времени выполнения для указанных элементов, так как это page говорит, что :
Однако следует отметить, что многие из перечисленных пределов не являются инвариантными, и во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:
Предел зависит от имени пути.
Предел различается между компиляцией и машинами времени выполнения.
По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения предела во время выполнения.
Он указан в заголовочном файле системы limit.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 */
...