it-swarm.xyz

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

Есть ли какие-либо ограничения на длину файла или пути в Linux?

130
ro.

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

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

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
134
WerkkreW

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

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

и еще немного.

90
sfp

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

Есть ли какие-либо ограничения на длину файла или пути в Linux?

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

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

  • Используйте функции pathconf и ​​fpathconf в соответствии с предложением Майкл Аарон Сафян
  • Создайте имя файла (или путь к файлу) длиннее и длиннее, как описано в dogbane
  • Используйте команду getconf, предложенную tim , которая также доступна в Linux:

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

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

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

20
Ivan

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

# define FILENAME_MAX 4096
6
jj33

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

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

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

3
Björn Lindqvist

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

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

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

  • Предел различается между компиляцией и машинами времени выполнения.

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

1
andy

Он указан в заголовочном файле системы 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 */
...
0
Bohdan Voloshyn