Одним из интересных аспектов использования любого дистрибутива операционной системы 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.
1 | getconf -a | grep -i name_max |
Вывод NAME_MAX означает ограничение длины имени файла (255) или максимальную длину имени файла, которую может назначить система Linux.
Если вас интересует ограничение длины пути, команда getconf должна выполняться следующим образом:
1 | getconf -a | grep -i path_max |
Подтверждение ограничения длины имени файла
С помощью команды getconf мы убедились, что ограничение на длину имени файла в нашем дистрибутиве Linux OS составляет 255 символов. Давайте попробуем создать файл с помощью команды touch с длиной имени файла 256 символов (на 1 символ больше, чем ограничение в 255 символов).
1 2 | dict='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' touch $(</dev/urandom tr -dc "$dict" | head -c 256) |
Согласно приведенному выше снимку экрана, полученному в результате выполнения команды touch, мы не можем создать имя файла длиной 256 символов, поскольку оно превышает ограничение длины имени файла в 255 символов.
Если мы уменьшим длину имени файла до указанного предела (255 символов), мы сможем создать наш файл.
Значение параметра NAME_MAX, используемое командой getconf, определяет назначенный файловой системой предел длины имени файла. Попытка переопределить это ограничение (NAME_MAX) приведет к переписыванию всего исходного кода файловой системы Linux, включая структуру диска, перед его использованием.
Короче говоря, вам нужно быть хакером ядра, владеющим языком программирования C, чтобы эта реализация стала возможной.
Системный файл /usr/include/linux/limits.h еще больше подчеркивает обсуждаемое ограничение длины имени файла.
1 | cat /usr/include/linux/limits.h |
Заключение
Мы поняли, как работает ограничение длины имени файла в Linux, и какие последствия влечет за собой его изменение.