ответ: ограничение обычно составляет 255 символов (для тех, кому лень
переходить
11
Ваш ответ должен содержать хотя бы краткое изложение соответствующей информации, представленной в указанной ссылке. Не просто ссылка.
Зрайм
2
@rahmanisback подходит для ограничений имени файла, в то время как ограничения пути обычно определяются ОС, а не FS (за исключением некоторых странных FS, таких как iso или ntfs), а в Linux это 4K
nonchip
2
На самом деле это было примерно так: D
nonchip
7
Просто указываю: байты! = Символы, особенно если вы используете UTF-8. Смотрите здесь .
Крис
87
Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:
Извините, но я новичок здесь, даже не могу комментировать, кроме голосования. Предыдущий ответ (по sfp) должен быть повышен, так как он полностью отвечает на вопрос, в то время как остальные частично отключены. Опять же, извините за то, что вы пошли помимо правил, но я не могу молчать, когда лучший ответ внизу.
Давид Балажич
1
Просто указываю: байты! = Символы, особенно если вы используете UTF-8. Смотрите здесь .
Крис
1
@ DavidBalažic: Несмотря на то, что PATH_MAX в Linux является верным указанием, большинство базовых файловых систем не имеют ограничений. Это затрудняет ссылки на пути, размер которых превышает этот размер. Я обычно использую "куски" PATH_MAX в качестве размера.
Рахли
23
Я имею в виду другие ответы, пожалуйста, проголосуйте за них.
Есть ли какие-либо ограничения на длину файла или пути в Linux?
Однако большинство программ ограничены абсолютными путями PATH_MAX = 4096. Это можно обойти, если ваша программа может использовать относительные пути и вы сначала измените свой рабочий каталог.
Микко Ранталайнен
Это связано с тем, что на различные API POSIX, такие как getcwdи realpath(которые можно переопределить в коде пользовательского пространства, читая метаданные, .а затем изменяя их ..и повторяя до тех пор, пока вы не достигнете корня файловой системы), положитесь PATH_MAX. ( Источник )
ssokolow
6
Это длины имен файловых систем. У самого "linux" тоже есть. Например, из бит / stdio_lim.h:
Таким образом, поскольку файловые системы extX имеют более низкий предел имени файла, чем то, что определено в ядре, вы никогда не достигнете этого предела, если только он также не включает имена путей, верно?
Иван
1
вот как это выглядит для меня. Есть также PATH_MAX для пути, который равен 4096, так что он будет достигнут до "неограниченного" размера пути на exts ... Я не уверен, как ОС разрешает свои собственные внутренние ограничения и ограничения FS, никогда не было мои руки в этом глубоко. интересный вопрос, хотя.
jj33
4096 символов - это чертово имя пути. Я уверен, что это можно было бы сделать с помощью перекомпиляции, но, честно говоря, / зачем вам такие длинные имена путей? /
Эйвери Пейн
Я не уверен, что вам это понадобится или нет. Я рассматриваю это больше как защиту от вредоносных или небрежных программ (я легко мог увидеть скрипт, который ведет себя плохо и начинает рекурсивно создавать тот же каталог. На самом деле, я создал этот скрипт, но он перенаправлял веб-сайт, а не создавал каталоги). ...).
jj33
@AveryPayne Чтобы добавить теги к файлам, чтобы их можно было искать с помощью простого locate.
Хьюберт Карио
3
Там нет никакого способа , чтобы определить максимальную длину путей на Linux переносимым способом. В моей системе:
Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите PATH_MAXкак нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.
Простой переносимый способ определить максимальную длину эмпирически - это написать программу, которая создает все более и более длинные цепочки каталогов, и посмотреть, где она не работает. Вы не будете точно знать, почему это происходит с ошибкой (хотя вы надеетесь получить внушительное для восприятия человеком сообщение об ошибке), но вы будете знать, как далеко вы можете безопасно зайти. Не забудьте проверить как длину отдельного каталога, так и относительную длину пути и абсолютную длину имени пути.
tripleee
Также, например, os.pathconf()модуль Python будет иметь несколько ответов; если порт Python хорош, они должны быть разумными.
tripleee
2
Вы не можете, потому что некоторые файловые системы не накладывают никаких ограничений . Это скорее приведет к ошибке из-за нехватки памяти, из-за которой любой программе будет трудно восстановиться.
Бьорн Линдквист,
Это правильный ответ, за исключением того, что это связано с комментарием @ BjörnLindqvist. PATH_MAX - это просто руководство, и 99% файлов, вероятно, будут в пределах этого предела.
Рахли
1
Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, поскольку на этой странице сказано, что:
Однако следует отметить, что многие из перечисленных пределов не являются инвариантными, и во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:
Предел зависит от имени пути.
Предел различается между компиляцией и машинами времени выполнения.
По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения лимита во время выполнения.
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 */
...
Здесь находятся копии этого файла и значения, которые они определяют:
Ответы:
См. Страницу Википедии о сравнении файловых систем , особенно в столбце Максимальная длина имени файла .
Вот некоторые ограничения длины имени файла в популярных файловых системах:
источник
Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:
и C-lang определяет:
и еще немного.
источник
Я имею в виду другие ответы, пожалуйста, проголосуйте за них.
Да, длина имени файла и пути ограничена:
linux/limits.h
как указано sfp .Чтобы динамически получить эти свойства:
pathconf
иfpathconf
как предложено Майклом Аароном СафяномИспользуйте команду,
getconf
предложенную Тимом, которая также доступна в Linux:источник
И ради экономии времени (и привязки его к памяти):
ext2, ext3, ext4, zfs: без ограничений пути; Ограничение имени файла 255 байт.
источник
PATH_MAX = 4096
. Это можно обойти, если ваша программа может использовать относительные пути и вы сначала измените свой рабочий каталог.getcwd
иrealpath
(которые можно переопределить в коде пользовательского пространства, читая метаданные,.
а затем изменяя их..
и повторяя до тех пор, пока вы не достигнете корня файловой системы), положитесьPATH_MAX
. ( Источник )Это длины имен файловых систем. У самого "linux" тоже есть. Например, из бит / stdio_lim.h:
источник
locate
.Там нет никакого способа , чтобы определить максимальную длину путей на Linux переносимым способом. В моей системе:
Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите
PATH_MAX
как нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.источник
os.pathconf()
модуль Python будет иметь несколько ответов; если порт Python хорош, они должны быть разумными.Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, поскольку на этой странице сказано, что:
источник
Это указано в системе limits.h файле заголовка.
Вот один из этих файлов:
Здесь находятся копии этого файла и значения, которые они определяют:
Выход:
источник