Вопрос: Ограничения длины имени файла в linux?


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


105
2018-05-18 17:27


Источник




Ответы:


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

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

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

112
2018-05-18 17:29



Ответ: ограничение обычно 255 символов (для тех, кто слишком ленив, чтобы нажать эту ссылку) - rahmanisback
Ваш ответ должен содержать как минимум краткую информацию о соответствующей информации в предоставленной ссылке. Не только ссылка. - zrajm
@rahmanisback, подходящий для пределов имени файла, в то время как ограничения на пути обычно определяются ОС, а не FS (за исключением некоторых странных FS, таких как iso или ntfs), а в Linux - 4K - nonchip
На самом деле речь шла обо всех: D - nonchip
Просто указывая: bytes! = Символы, особенно если вы используете UTF-8. Видеть Вот, - Kris


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

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

и еще несколько.


80
2017-08-31 08:58



Извините, но я здесь здесь не могу даже комментировать, за исключением голосов. Предыдущий ответ (sfp) должен быть увеличен, поскольку он полностью отвечает на вопрос, в то время как другие частично отключены. Опять же, извините за то, что вы пошли, кроме правил, но я не могу молчать, когда лучший ответ внизу. - David Balažic
Просто указывая: bytes! = Символы, особенно если вы используете UTF-8. Видеть Вот, - Kris
@ DavidBalažic: Хотя верно, PATH_MAX под linux является лишь ориентиром, большинство основных файловых систем не имеют ограничений. Это затрудняет ссылку на пути, превышающие этот размер. Обычно я использую «куски» PATH_MAX как размер. - Rahly


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

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

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

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

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

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

20
2018-05-24 07:35





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

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


17
2018-05-18 18:15



Большинство программ ограничены абсолютными путями к PATH_MAX = 4096, хоть. Это можно обойти, если ваша программа способна использовать относительные пути, и вы сначала меняете свой рабочий каталог. - Mikko Rantalainen


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

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Так как файловые системы extX имеют более низкий предел имени файла, чем то, что определено в ядре, вы бы никогда не нажмете на этот предел, если он также не включит пути, верно? - Ivan
вот что мне кажется. Существует также PATH_MAX для пути, который равен 4096, поэтому он будет удален до «неограниченного» размера пути на exts ... Я не уверен, как ОС разрешает свои собственные внутренние ограничения и настройки FS, никогда мои руки в этом глубоком. интересный вопрос. - jj33
4096 символов - это имя пути helluva. Я уверен, что его можно было бы собрать с перекомпиляцией, но, честно говоря, зачем вам нужны длительные пути? / - Avery Payne
Я не уверен, что вам это понадобится или нет. Я рассматриваю его скорее как защиту от вредоносных или небрежных программ (я мог легко увидеть скрипт, который плохо себя ведет и начинает рекурсивно создавать тот же реестр. Фактически, я создал этот скрипт, но он перенаправлял веб-сайт, не создавая dirs ...). - jj33
@AveryPayne Чтобы добавить теги в файлы, чтобы их можно было искать с помощью простого locate, - Hubert Kario


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

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

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


3
2018-01-16 02:17



Простым переносным способом найти максимальную длину эмпирически является запись программы, которая создает более длинные и более длинные цепочки каталогов и видит, где она терпит неудачу. Вы не будете точно знать, почему он терпит неудачу (хотя вы бы надеялись на наводящее на размышления сообщение об ошибке), но вы узнаете, как далеко вы можете безопасно пройти. Не забудьте проверить как длину отдельных каталогов, длину относительного пути, так и длину абсолютного пути. - tripleee
Также, например, Python os.pathconf() модуль будет иметь некоторые ответы; если порт Python хорош, они должны быть разумными. - tripleee
Вы не можете, потому что некоторые файловые системы не навязывают любые ограничения, Это скорее закончится с ошибкой памяти, из-за которой любая программа будет с трудом восстанавливаться. - Björn Lindqvist
Это правильный ответ, за исключением того, что это связано с комментарием @ BjörnLindqvist. PATH_MAX является лишь ориентиром, и 99% файлов, вероятно, будут в пределах этого предела. - Rahly


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

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

  • Предел - зависящий от пути.

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

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


1
2017-12-05 01:49





Он указан в системе 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 */
...

0