Как найти и ограничить длину имени файла в Linux

Linux Logo Settings

Одним из интересных аспектов использования любого дистрибутива операционной системы Linux является его способность превращать нас в компьютерных волшебников. В Linux его открытый исходный код позволяет нарушать и/или создавать любые логические правила вычислений. Длина и ограничение имен файлов попадают под такие вычислительные правила.

Поскольку Linux является частью систем на базе Unix, длина имени файла, связанная с этой операционной системой, имеет предел. Ограничение длины имен файлов в операционной системе Linux зависит от конкретной файловой системы.

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

Ограничение длины имени файла в файловых системах

Ниже приведены ограничения на длину имен файлов в основных файловых системах Unix.

Файловая система Максимальная длина имени файла
xt2 255 байт
ext3 255 байт
ext4 255 байт
exFAT 255 символов UTF-16
FAT32 255 кодовых единиц UCS-2 с VFAT LFNs
NTFS 255 символов
BTRFS 255 байтов
ext3cow 255 байт

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

Файловая система Linux оказывает сильное влияние на ограничения имен файлов. Например, расширения файловой системы могут изменять максимальную длину имени файла, как в случае с eCryptFS.

Поиск ограничения длины имени файла в Linux

Чтобы найти предел длины имен файлов, которые могут быть созданы и сохранены на вашем компьютере под управлением Linux, мы воспользуемся утилитой командной строки getconf, которая эффективна для запроса переменных конфигурации системы. Мы можем использовать ее вместе с командой grep, чтобы получить установленный предел длины имени файла в нашей системе Linux.

getconf

Вывод NAME_MAX означает ограничение длины имени файла (255) или максимальную длину имени файла, которую может назначить система Linux.

Если вас интересует ограничение длины пути, команда getconf должна выполняться следующим образом:

getconf

Подтверждение ограничения длины имени файла

С помощью команды getconf мы убедились, что ограничение на длину имени файла в нашем дистрибутиве Linux OS составляет 255 символов. Давайте попробуем создать файл с помощью команды touch с длиной имени файла 256 символов (на 1 символ больше, чем ограничение в 255 символов).

File nam e too long

Согласно приведенному выше снимку экрана, полученному в результате выполнения команды touch, мы не можем создать имя файла длиной 256 символов, поскольку оно превышает ограничение длины имени файла в 255 символов.

Если мы уменьшим длину имени файла до указанного предела (255 символов), мы сможем создать наш файл.

Значение параметра NAME_MAX, используемое командой getconf, определяет назначенный файловой системой предел длины имени файла. Попытка переопределить это ограничение (NAME_MAX) приведет к переписыванию всего исходного кода файловой системы Linux, включая структуру диска, перед его использованием.

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

Системный файл /usr/include/linux/limits.h еще больше подчеркивает обсуждаемое ограничение длины имени файла.

/usr/include/linux/limits.h

Заключение

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

Avatar for Gnostis
Gnostis
Добавить комментарий