Linux ограничение длины имени

Максимальная длина имени файла

Как на линуксе делают nas для виндоус клиентов если с utf8 длинна русского имени файла не может быть больше 130 символов а японского 80. Может лайфхак какой есть для обхода ограничений?

Если кодировка в системе русская однобайтная то можно делать русские имена 255 символов длиной но при этом все символы которых нет в этой кодировке вызывают ошибку слишком длинное имя.

Может есть такая utf кодировка в которой русские буквы 1 байт занимают

Я не в курсе технических ограничений samba, но из твоего текста я так понимаю там есть какое-то ограничение в 256 байт на имя файла.

В utf8 символы могут занимать от 1 до 4 байт. А в utf16 всегда 2 байта. Я бы использовал utf16 и получил константные 128 символов на имя для любых языков.

Может лайфхак какой есть для обхода ограничений?

Нет. /thread (потому что других вопросов я не увидел, а на этот ответ однозначный).

Всегда два байта в UCS-2. В UTF-16 может быть два или четыре байта на символ (а может уже и больше, тут не уверен).

Я бы использовал utf16 и получил константные 128 символов на имя для любых языков.

В линуксе имя файла может содержать любые байты, кроме ‘/’ и ‘\0’ . Так что работать твоё предложение совершенно точно не будет. Пример:

Источник

Linux/VLFN

VLFN (Very Long FileName) — проблема, заключающаяся в том, что в большинстве Unix-систем (и в GNU/Linux в частности) применено ограничение в 255 байт на длину имени файла, что при использовании UTF-8 даёт для русских букв не более 127 символов.

В статье рассматриваются способы увеличения допустимой длины имени файлов в Linux и проблемы, с этим связанные.

Содержание

Имена файлов в Windows и Linux

В Windows для именования файлов принята кодировка UTF-16, то есть каждый символ в названии файла кодируется двумя байтами (16 бит). Максимальная длина имени файла — 255 символов (510 байт). В Linux же для именования файлов принята кодировка UTF-8, при этом максимальная длина файла составляет 255 байт (а не символов).

Причины проблемы

  • Ядро внутри себя не имеет общей константы для ограничения длины имени файла. NAME_MAX в include/linux/limits.h нужна только для программ (попадает в glibc-headers).
  • Файловые системы в ядре имеют ограничения по размеру (в ext3/4 вообще взяли и оставили 1 байт на хранение длины имени файла). В некоторых системах ограничение жёсткое (ext4), в некоторых — номинальное (btrfs).
  • glibc нигде не касается данных, связанных с ограничением длины.
Читайте также:  Как установить windows 10 pro вместо домашней без ключа

Постановка задачи

Так как в UTF-8 для кодирования русских букв используется два байта, то максимальная длина имени файла, состоящего из русских букв, фактически составляет 127 символов. В связи с этим появляется проблема — длинные имена файлов (от 128 до 255 русских символов) не влезают в установленные для них ограничения в Linux.

  • NTFS — 256 символов UTF-16
  • NFS — лимит 255 символов.
  • CIFS — 260 символов UTF-16.

Решение

Необходимо увеличить возможную длину файлов в Linux.

Выбранная длина нового максимального предела имени файла — 1023 байта.

  • нет привязки к Windows, поэтому нет необходимости задавать размер ровно 511 байт;
  • имя файла задается с запасом, что позволит адаптировать ОС и ФС к иероглифической, к примеру письменности, где знаки могут занимать в районе 4 байт.

NAME_MAX free

Радикальным правильным решением для userspace является отказ от использования констант, задающих размер буфера под имя файла.

Файловые системы должны быть устроены таким образом, чтобы длина имени файла была переменной и не имела ограничений (кроме временных соображений совместимости).

Уже сделано

Был проведен тест файловой системы NTFS. Оказалось, что на данной можно создавать файлы с длинным русским именем, из чего следовало, что ограничение задается самой ФС, а не ядром или библиотекой glibc: https://bugs.etersoft.ru/show_bug.cgi?id=9266

Было решено выбрать файловую систему, которую легче всего было бы адаптировать для решения данной проблемы. Затем было проведено сравнение самых распространенных и перспективных файловых систем: http://wiki.etersoft.ru/Comparison_of_file_systems

Стоит рассмотреть такие системы как btrfs, xfs, ext4.

В итоге, благодаря гибкости и динамичности развития, была выбрана файловая система BTRFS.

BTRFS

B TRee File System — файловая система, основанная на структуре Б-деревьев и работающая по принципу «копирование при записи».

Изменения

Изначально изменен предел BTRFS_NAME_LEN, заданный в файле /fs/btrfs/ctree.h. Аналогичный предел был изменен в пакете BTRFS-progs.
Изменения:

Тестирование

Проведено тестирование основной функциональности новой файловой системы. Для граничных значение — 1024 и 1023 байта:

  • При измененном ядре и измененной программе форматирования:
  • При оригинальной версии программы для форматирования:
  • При оригинальном ядре и измененной программе форматирования:

Применение

Для того, чтобы использовать файловую систему BTRFS с увеличенным пределом имени файла, необходимо:

  1. Установить исправленную версию ядра ( git.eter:/people/reprofy/packages/kernel_sis.git -> btrfs_new_bound );
  2. Отформатировать дисковый раздел, используя исправленную версию btrfs-progs ( git.eter:/people/reprofy/public/btrfs_progs.git -> filename_bound );
  3. Для обеспечения полной функциональности необходимо изменить предел в файле limits.h:
    1. Установить исправленный пакет kernel-source-3.9 ( git.eter:/people/reprofy/public/kernel_source_3.9.git -> namelength_increased );
    2. Установить пакет glibc-kernheaders(из репозитория git.alt );
Читайте также:  P7h55d m pro драйвер windows 10

Glibc

В самой glibc вносить изменения не нужно, единственное, что требуется — изменить предел в файле limits.h.

Пакеты

Пакеты для ALT Linux в LINUX@Etersoft:

  • glibc-kernheaders даёт возможность собирать программы с увеличенным ограничением
  • btrfs-utils не будет ругаться на длинные имена при проверке ФС
  • ядро с увеличенным ограничением для btrfs

Источник

Ограничения длины имени файла в 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 .

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

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

Источник

Какова максимальная длина имени пользователя в текущих системах GNU /Linux

Я хотел бы знать, какая максимальная длина имени пользователя для текущих систем GNU /Linux, например. Ubuntu 11.04.

8 символов выглядят как некоторый исторический стандарт, но я уже заметил в своей текущей системе Ubuntu, что это ограничение не применяется.

3 ответа

Предел тока — 32 символа (согласно странице useradd ).

Ответ несколько меняется.

useradd (1) ссылается на ограничение в 32 символа. Это основано на AFAIU на libc6.

Некоторые утилиты или системы могут налагать более короткие имена или вести себя непоследовательно при представлении более длинных имен, включая top, ps, w /who, finger, NFS и различные многоплатформенные системы каталогов (NIS /NIS +, SMB, CIFS, Kerberos ), потенциально основанный на ограничениях других /удаленных платформ. Многие из различных команд psutil будут отображать UID, а не имя пользователя, если последнее превышает 8 символов.

Некоторые утилиты и приложения могут налагать свои собственные произвольные ограничения. Например: IBM DB2, по-видимому, не позволит входам пользователей с именами пользователей, превышающими 8 символов: http://database.ittoolbox.com/groups/technical-functional/db2-l/length-of-username-permitted-on-db2 -95-Экс-6-3248147

8 символов — это обычно нормальный предел и сохраняет типизацию.

Как объяснили другие ответы, более длинные имена пользователей возможны, но еще одна практическая причина, чтобы попытаться ограничить максимум 8 символов, заключается в том, что ps (1) сообщает числовые uid вместо имен пользователей за пределами 8 символов .

Источник

Длинные имена файлов

Всем привет переношу файлопомойку с винды на линукс. Столкнулся с проблемой «очень длинных имён файлов». Похоже, счёт идет не на символы, а на байты (гугление это подтверждает). Внимание, вопрос: мне таки придётся использовать винду или есть какое-то решение этой проблемы? (усекновение имени — не решение в данной ситуации)

ext2/3/4,reiser,xfs,jfs — все поддерживают 255 символов в имени файла (или 127 в UTF8) — куда вам больше??

Поправочка: 127 русских букв, закодированных в UTF8.

UTF8 — однобайтовая кодировка, так что ASCII в UTF8 = ASCII 🙂

ФС те, которые поддерживаются CentOS 5.4 — то есть ext2/3, ext4 без mkfs.ext4, xfs на положении ext4.

127 букв — внезапно оказалось мало. Есть у пользователей такие имена файлов:

«Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)»

Усекновение — не вариант. На винде такое имя файла обрабатвается корректно

$ echo «Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)» | wc -c

$ touch «Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)»

$ ls Котов*
Котов АН Моделирование дорожного движения на многополосной магистрали при помощи двумерного вероятностного клеточного автомата с тремя состояниями, 2008 (диссертация)

Вроде создался файл. ext3.

Если очень нужно, то можно поставить однобайтную локаль. Хотя да, не решение.

Источник

Читайте также:  Windows 10 ограничение кадров
Оцените статью