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

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

Это произошло со мной, когда я попробовал к файлам резервных копий SFTP от сервера до папки в (например):

D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png

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

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

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

9
задан 12 December 2016 в 11:09

4 ответа

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

И максимальный путь 4 096 символов. Найденный в этом Unix& Вопрос о Linux SE .

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

14
ответ дан 23 November 2019 в 04:55

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

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

я не знаю об утилите командной строки, которая выставляет его все же. Вот минимальный пример C: https://stackoverflow.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c/54155296#541552 96

0
ответ дан 23 November 2019 в 04:55

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

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

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

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

3.266 Пути

символьная строка А, которая используется для идентификации файла. В контексте Станд. IEEE 1003.1-2001, путь состоит из, самое большее, {PATH_MAX} байты, включая завершающийся пустой байт. Это имеет дополнительную наклонную черту начала, сопровождаемую нулем или большим количеством имен файлов, разделенных наклонными чертами. Путь может дополнительно содержать одну или несколько запаздывающих наклонных черт. Несколько последовательных наклонных черт считаются тем же как одной наклонной чертой.

От limits.h:

максимальное количество {PATH_MAX}

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

{_POSIX_PATH_MAX}

байтов в пути. Значение: 256

0
ответ дан 23 November 2019 в 04:55

Как @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 и затем исследования получающихся каталогов.

import os
for X in range(20):
    os.mkdir('x' * 255)
    os.chdir('x' * 255)

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

0
ответ дан 23 November 2019 в 04:55

Другие вопросы по тегам:

Похожие вопросы: