Linux максимальная длина пути

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

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

8 ответов

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

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

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

и C-lang определяет:

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

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

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

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

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

  • Использовать функции pathconf и fpathconf , предложенный Майкл Аарон Сафьян
  • Создайте имя файла (или путь) дольше и дольше, как описано dogbane .

Используйте команду getconf , предложенную tim , которая также доступна в Linux:

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

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

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

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

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

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

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

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

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

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

Он указан в системном файле limits.h .

Вот один из этих файлов:

Здесь находятся копии этого файла и значения, которые они определяют:

Источник

Какова максимальная длина пути к файлу в Ubuntu?

Давно пользуясь системами Windows, я знаю, что в определенный момент может появиться окно с ошибкой, когда имена файлов и папок становятся слишком длинными.

Это случилось со мной, когда я попытался сделать резервную копию файлов с SFTP с сервера в папку (например):

Как вы можете видеть, я иногда создаю очень определенные пути к папкам, и если имя файла слишком длинное, NTFS может не сохранить его таким образом.

В настоящее время я беспокоюсь о своих физических резервных копиях, так как путь к папке на моем резервном диске добавит /backups/(drive name)/. ко всем путям файлов.

Есть ли такой предел (или аналогичный) в ext4 / Ubuntu, на который мне пришлось бы обратить внимание?

Максимальная длина имени файла составляет 255 байт. Найдено на странице вики для ext4 .

Хотя я нашел эту вики-статью , в которой не указан максимальный путь к файлу в ext4.

$ echo «123abc» | wc -c 7 jtoscarson@Tylers-Ubuntu:

$ echo «123abc» | wc -m 7 -m подсчитывает символы, а -c подсчитывает байты. Причиной, почему это 7 вместо 6, является символ конца строки, который не печатается. Таким образом, общее количество символов в имени файла будет 255.

Я считаю, что наиболее надежный способ определить это с помощью pathconf(«.», _PC_PATH_MAX); функции POSIX, которая определяет максимальный путь для данного пути.

Как предполагает функция, это может варьироваться между файловыми системами.

Ограничения пути зависят от используемой файловой системы. Ответ jtoscarson охватывает ext4, который используется по умолчанию в Ubuntu, однако вы можете использовать различные файловые системы в Ubuntu. Чтобы процитировать ответ WerkkreW о сбое сервера, вот некоторые из файловых систем и их ограничения:

Также обратите внимание, что различные файловые системы имеют ограничения относительно того, какой тип символа может присутствовать в имени файла. Например, имена файлов в ext4 не могут содержать NULL и / . Смотрите также статью в Википедии для сравнения файловых систем .

Также обратите внимание, что файловые системы Linux должны учитывать определения POSIX :

Символьная строка, используемая для идентификации файла. В контексте стандарта IEEE Std 1003.1-2001 имя пути состоит не более чем из байтов, включая завершающий нулевой байт. Он имеет необязательный начальный слеш, за которым следуют ноль или более имен файлов, разделенных косыми чертами. Имя пути может содержать один или несколько завершающих слэшей. Несколько последовательных слешей считаются такими же, как один слеш.

Максимальное количество байтов в пути, включая завершающий нулевой символ. Минимально допустимое значение:

Максимальное количество байтов в пути. Значение: 256

Как сказал @ sergiy-kolodyazhnyy, максимальная длина имени файла будет зависеть от файловой системы, а подавляющее большинство ограничивает длину имени файла 255 байтами.

Заметное упущение из его таблицы — оптические носители. В то время как расширения UDF и Rock Ridge имеют одинаковое ограничение в 255 символов для имен файлов, ISO9660 без Rock Ridge и Joliet имеют гораздо более строгие ограничения, с которыми вы можете столкнуться, если делаете что-то вроде резервного копирования youtube-dl загрузок.

Имена файлов 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 справочная страница)

Что касается максимальной длины пути , это большое заблуждение. Нет такой для большинства файловых систем Linux.

Там есть константа с именем PATH_MAX , но это только максимум для определенных интерфейсов POSIX , которые вы можете работать вокруг .

Единственными вытекающими исключениями из этого соглашения «без ограничения длины пути» являются FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясно, но я видел оно указывается как 180, 207, 212 или 222 байта).

Это можно легко продемонстрировать, запустив эту маленькую программу на Python, а затем изучив получившиеся каталоги.

Мой bash , который отображает весь путь в приглашении, будет иметь проблемы с ним. Однако my zsh , которая отображает только текущую папку в приглашении, не будет иметь проблем и даже имеет pwd встроенную функцию, которая может отображать весь путь длиной более 5000 байт без проблем.

Источник

Что делать с максимальной длинной пути в линуксе при копировании файлов с винды?

При копировании файлов с винды не редко сталкивался сталкивался с ошибками о максимальной длине пути.

Длина имени файла = 255 байт?
Согласно этому треду максимальная длина пути Length of pathname is 4095 chars. (limit of kernel) . Можно ли её расширить? И действительно ли все эти 4095 символом можно использовать?

Причём сталкивался с этим не только при копировании файлов с виндовых компов по сети (особенно часто url-файлы имеют очень длинный путь), но и при загрузке торрентов. Предвкушаю проблемы с переносом профилей или файловых помоек винды на самбу, а также проблемы с rsync и бекапами.

И действительно ли все эти 4095 символом можно использовать?

Да, можно. Только учти, что это 4095 ASCII символов. А имена файлов закодированы в UTF-8 скорее всего. А там, например, русские буквы занимают 2 байта.

А можно тогда расширить эту структуру? Или тогда нужно будет и glibc пересобрать?

Ограничение в 4095 байт вряд ли тебя как-то коснётся, так как в Windows эффективное ограничение на длину пути — 260 символов. Конечно, Windows может и больше, но очень много сторонних программ имеют ограничение именно в 260 символов.

Что тебя коснётся, так это разность между символом и байтом. В Linux большинство ФС имеют ограничение на длину имени в 255 байт, тогда как в Windows это 255 символов. Если используется многобайтная кодировка вроде UTF-8, символов в имя влезает меньше, и это как раз вызывает проблемы.

Часто можно встретить мнение, что ограничение в 255 байт зашито в VFS, но это не правда (по крайней мере, сейчас). Ограничение вшито в сами ФС. Я смотрел на эту тему код ext4 и reiserfs. В ext4 под длину выделен один байт, так что больше 255 позиций там сделать точно нельзя. В reiserfs принципиальное ограничение — размер блока минус что-то там, то есть чуть больше 4000 байт. Но и там просто константой длина ограничена 255 байтами. В FUSE ограничение — 1024 байта, поэтому можно через неё подцепить ntfs-3g и писать туда. Можно ещё сделать прокси-ФС на FUSE, отображающую длинные имена в более короткие. Я так пробовал сделать, оно даже работало, но довольно криво — не доделал.

Спасибо за столь подробый пост. Можете уточнить про вариант с FUSE? И можно ли просто с iocharset и charset/codepage примонтировать? Есть ли ФС, у которых нет таких проблем (кроме ntfs-3g)? У ядерного драйвера NTFS нет проблем?
И Вы, случаем, не в курсе, что делает опция монтирования uni_xlat?

Можете уточнить про вариант с FUSE?

Так как в случае с FUSE можно писать свою ФС, ограничения в 255 байт делать никто не заставляет. Я делал вот так: https://github.com/i-rinat/insecure, оно хранит имена в SQLite. Но предупреждаю, этот код реально кривой.

Ответ на каждый из остальных вопросов: «не знаю».

Источник

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

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

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

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

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

и C-lang определяет:

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

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

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

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

  • Используйте функции pathconf и fpathconf как предложено Майклом Аароном Сафяном
  • Создайте имя файла (или путь к файлу ) длиннее и длиннее, как объяснено dogbane

Используйте команду, getconf предложенную Тимом, которая также доступна в Linux:

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

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

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

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

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

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

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

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

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

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

Источник

Какова максимальная длина пути к файлу в 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 вот некоторые файловые системы и их пределы:

Примечание также, что различные файловые системы имеют ограничения, относительно которых тип символа может присутствовать в имени файла. Например, имена файлов в ext4 не могут содержать ПУСТОЙ УКАЗАТЕЛЬ и / . См. также, статья Wikipedia для сравнения файловой системы .

Примечание также, которое файловые системы 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 страница справочника)

Что касается максимальной длины пути , это — большое неправильное представление. нет один для большинства файловых систем Linux.

существует константа, именованная PATH_MAX , но это только максимум для определенных API POSIX , который Вы можете работа приблизительно .

единственными последовательными исключениями к этому «никакому пределу на длину пути» конвенция является FAT32 и exFAT (32 760 символов Unicode), NTFS и ReFS (32 767 символов Unicode), UDF (1 023 байта) и ISO 9660 (неясный, но я видел, что это указало как 180, 207, 212, или 222 байта).

Это может быть легко продемонстрировано путем запущения этой маленькой программы Python и затем исследования получающихся каталогов.

Мой bash , который отображает целый путь в подсказке, будет иметь troublr с ним. Однако мой zsh , который отображает только текущую папку в подсказке, не испытает затруднений и даже имеет pwd встроенный, который может отобразить все 5000 +-byte путь без проблемы.

Источник

Читайте также:  Windows headers require the default packing option
Оцените статью