Ограничения длины имени файла в linux?
Существуют ли какие-либо ограничения на длину файла или длину пути для Linux?
8 ответов
Вот несколько ограничений длины имени файла в популярных файловых системах:
и C-lang определяет:
Я ссылаюсь на другие ответы, пожалуйста, повысьте их.
Существуют ли какие-либо ограничения на длину файла или длину пути для Linux?
Да, имя файла и длина пути ограничены:
Чтобы динамически получить эти свойства:
И ради экономии времени (и привязки к памяти):
ext2, ext3, ext4, zfs: нет ограничений пути; Ограничение имени файла 255 байтов.
Это длина имен файловой системы. У самого «linux» тоже есть. Например, из бит /stdio_lim.h:
Но я могу легко создавать дорожки длиной более 4096 символов. Вместо этого посмотрите PATH_MAX как нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.
Вы всегда должны использовать pathconf или некоторые функции, подобные этому, чтобы получить значение времени выполнения для указанных элементов, так как это страница говорит, что:
Следует отметить, однако, что многие из перечисленных ограничений не являются инвариантными, а во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:
Предел зависит от пути.
Предел отличается между машинами компиляции и времени выполнения.
По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения предела во время выполнения.
Вот один из этих файлов:
Здесь находятся копии этого файла и значения, которые они определяют:
Какова максимальная длина пути к файлу в Ubuntu?
Давно пользуясь системами Windows, я знаю, что в определенный момент может появиться окно с ошибкой, когда имена файлов и папок становятся слишком длинными.
Это случилось со мной, когда я попытался сделать резервную копию файлов с SFTP с сервера в папку (например):
Как вы можете видеть, я иногда создаю очень определенные пути к папкам, и если имя файла слишком длинное, NTFS может не сохранить его таким образом.
В настоящее время я беспокоюсь о своих физических резервных копиях, так как путь к папке на моем резервном диске добавит /backups/(drive name)/. ко всем путям файлов.
Есть ли такой предел (или аналогичный) в ext4 / Ubuntu, на который мне пришлось бы обратить внимание?
Я считаю, что наиболее надежный способ определить это с помощью pathconf(«.», _PC_PATH_MAX); функции POSIX, которая определяет максимальный путь для данного пути.
Как предполагает функция, это может варьироваться между файловыми системами.
Ограничения пути зависят от используемой файловой системы. Ответ jtoscarson охватывает ext4, который используется по умолчанию в Ubuntu, однако вы можете использовать различные файловые системы в Ubuntu. Чтобы процитировать ответ WerkkreW о сбое сервера, вот некоторые из файловых систем и их ограничения:
Также обратите внимание, что файловые системы Linux должны учитывать определения POSIX :
Символьная строка, используемая для идентификации файла. В контексте стандарта IEEE Std 1003.1-2001 имя пути состоит не более чем из
Максимальное количество байтов в пути, включая завершающий нулевой символ. Минимально допустимое значение:
Максимальное количество байтов в пути. Значение: 256
Как сказал @ sergiy-kolodyazhnyy, максимальная длина имени файла будет зависеть от файловой системы, а подавляющее большинство ограничивает длину имени файла 255 байтами.
Имена файлов Joliet ограничены либо 64 кодовыми точками UTF-16, либо 103 из них, если ваша программа для мастеринга дисков имеет возможность отойти от спецификации способами, которые, как кажется, не причиняют вреда на практике.
Аналогично, уровни 2 и 3 стандарта ISO 9660, без расширений Rock Ridge, ограничены именами файлов из 31 символа или 37, если вы играете быстро и плохо со спецификацией.
ISO 9660: 1999, которая будет поддержана genisoimage но не фронтэнды как K3b, имеет предел либо 207 байт (без Rock Ridge) или 197 байт (с Rock Ridge).
(Источник: genisoimage справочная страница)
Единственными вытекающими исключениями из этого соглашения «без ограничения длины пути» являются FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясно, но я видел оно указывается как 180, 207, 212 или 222 байта).
Это можно легко продемонстрировать, запустив эту маленькую программу на Python, а затем изучив получившиеся каталоги.
Ограничения длины имени файла на Linux?
Есть ли какие-либо ограничения на длину файла или пути в Linux?
Вот некоторые ограничения длины имени файла в популярных файловых системах:
Я читал здесь, что ограничение длины пути в системных заголовках. Ограничение длины имени файла тоже там. В моей системе это файл:
и C-lang определяет:
Я имею в виду другие ответы, пожалуйста, проголосуйте за них.
Есть ли какие-либо ограничения на длину файла или пути в Linux?
Да, длина имени файла и пути ограничена:
Чтобы динамически получить эти свойства:
Используйте команду, getconf предложенную Тимом, которая также доступна в Linux:
И ради экономии времени (и привязки его к памяти):
ext2, ext3, ext4, zfs: без ограничений пути; Ограничение имени файла 255 байт.
Это длины имен файловых систем. У самого «linux» тоже есть. Например, из бит / stdio_lim.h:
Но я могу легко создавать пути намного длиннее, чем 4096 символов. Вместо этого смотрите PATH_MAX как нижнюю границу. Вы гарантированно сможете создавать пути так долго, но вы также можете создавать гораздо более длинные.
Вы всегда должны использовать pathconf или какую-либо функцию, подобную этой, чтобы получить значение времени выполнения для указанных элементов, поскольку на этой странице сказано, что:
Однако следует отметить, что многие из перечисленных пределов не являются инвариантными, и во время выполнения значение предела может отличаться от значений, указанных в этом заголовке, по следующим причинам:
Предел зависит от имени пути.
Предел различается между компиляцией и машинами времени выполнения.
По этим причинам приложение может использовать функции fpathconf (), pathconf () и sysconf () для определения фактического значения лимита во время выполнения.
Как увеличить максимальную длину пути/имени файла в Linux?
Всем добрый день, пожалуйста помогите в решении проблемы, имеется шара на linux, в ней находятся файлы (сборки для solidworks) с довольно большой структурой (10 промежуточных папок до файла) при открытии этих файлов в программе solidworks возникает ошибка открытия сборки, опытным путем было обнаружено, что проблема в файловой системе, при укорачивании имени файла и/или пути, сборка открывается. Можно ли как нибудь установить максимальное значение на длину имени/пути файла, чтобы не упираться в предел?
ОС: ubuntu 16.04×64
ФС: ext4
Благодарю за ответ, но я ничего не выдумываю, а просто хочу решить свою проблему
Подскажите, как это решит мою проблему?
У вас проблемма с длинной пути, и в пользователи винды пирвыкли что в ней не используются символические ссылки (кстати они там таки есть).
Если в кратце есть (техническая структура каталога)
А есть так которая вам удобна, в линуксе нет проблем подмонтировать корень внутрь каталога а внем еще раз конень.
Но в вашем случае все гораздо проще
ваш путь (пример разумеется)
/var/www/site1.ru/test/test3/local/templates/themplates1/html/pdf/all/
и такой
/home/all
по сути это ярлычок имеющий все тот же набор файлов на конечную папку.
Теперь вам не нужно использовать длиный путь делайте его себе коротким, как хотите.
Так же можно положить этот путь прям по дороге
Например в папке
Какова максимальная длина пути к файлу в Ubuntu?
Используя системы Windows в течение долгого времени, я знаю, что в определенный момент, ошибочное окно может появиться, когда файлы и имена папок становятся слишком длинными.
Это произошло со мной, когда я попробовал к файлам резервных копий SFTP от сервера до папки в (например):
Как Вы видите, я склонен создавать очень указанные пути к папкам иногда и если имя файла, оказывается, долго также, NTFS не смог сохранять его этот путь.
Я в настоящее время волнуюсь о своих физических резервных копиях, как добавит путь к папке на моем резервном диске /backups/(drive name)/. ко всем путям к файлам.
Есть ли предел (или подобный) в ext4/Ubuntu, который я должен был бы высматривать?
4 ответа
Макс. длина имени файла составляет 255 байтов. Найденный в страница Wiki для ext4.
, Хотя, я действительно находил эта статья Wiki, которая не указывает макс. путь к файлу в ext4.
Я полагаю, что самый надежный способ определить это с pathconf(«.», _PC_PATH_MAX); функция POSIX, которая определяет максимальный путь для данного пути.
, Поскольку функция предлагает, это может варьироваться между файловыми системами.
Пределы пути зависят от используемой файловой системы. ответ jtoscarson покрытия ext4, который является значением по умолчанию на Ubuntu, однако можно использовать множество файловых систем на Ubuntu. Для цитирования ответа WerkkreW на serverfault вот некоторые файловые системы и их пределы:
Примечание также, которое файловые системы Linux должны учесть определения POSIX :
символьная строка А, которая используется для идентификации файла. В контексте Станд. IEEE 1003.1-2001, путь состоит из, самое большее,
байтов в пути, включая завершающийся нулевой символ. Минимальное Допустимое значение: максимальное количество
байтов в пути. Значение: 256
Как @sergiy-kolodyazhnyy сказано, максимальная длина имени файла будет зависеть от файловой системы, и подавляющее большинство ограничивают длины имени файла 255 байтами.
А известный пропуск из его диаграммы является оптическими средами. В то время как UDF и расширения Rock Ridge имеют тот же предел с 255 символами для имен файлов, ISO9660 без Rock Ridge и Joliet, у обоих есть намного более строгие пределы, с которыми можно на самом деле столкнуться при выполнении чего-то как резервное копирование youtube-dl загрузки.
имена файлов Joliet ограничены или 64 кодовыми точками UTF-16 или 103 из них, если Ваша осваивающая диск программа имеет опцию повредиться от спецификации способами, которые, кажется, не наносят ущерба на практике.
Аналогично, Уровни ISO 9660 2 & 3, без расширений Rock Ridge, ограничены именами файлов или 31 символа или 37, если Вы играете быстро и свободные со спецификацией.
ISO 9660:1999, который является поддерживается genisoimage, но не frontends как K3b, имеет предел любых 207 байтов (без Rock Ridge) или 197 байтов (с Rock Ridge).
(Источник: genisoimage страница справочника)
единственными последовательными исключениями к этому «никакому пределу на длину пути» конвенция является FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясный, но я видел, что это указало как 180, 207, 212, или 222 байта).
Это может быть легко продемонстрировано путем запущения этой маленькой программы Python и затем исследования получающихся каталогов.

