Linux имена файлов windows

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 нигде не касается данных, связанных с ограничением длины.

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

Так как в 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

Читайте также:  Windows reopen closed window

Стоит рассмотреть такие системы как 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 );

Glibc

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

Пакеты

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

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

Источник

Отличия файловых систем Linux и Windows

Обновл. 15 Авг 2021 |

В сравнении с Windows, файловые системы Linux имеют довольно много отличий. Вы не найдете здесь никаких букв для обозначения дисков или символа обратной косой черты ( \ ), указывающего на подкаталоги. При этом сами файлы могут иметь одни и те же имена, различающиеся только регистром букв. На этом уроке мы рассмотрим некоторые различия между файловыми системами Linux и Windows, узнать о которых будет полезно начинающим пользователям Linux-систем.

Отличия файловых систем Linux и Windows

Структура каталогов

В файловых системах Linux отсутствуют папки Windows, Program Files, Users (хотя каталог /home/ очень похож на папку Users в Windows).

Структура каталогов Linux не просто использует разные имена для папок и файлов. В ней применяется в целом иной принцип их расположения. Например, приложение в Windows может хранить все свои файлы в папке C:\Program Files\Имя_приложения, в то время как в Linux данные файлы будут разделены между несколькими расположениями: двоичные файлы будут помещены в /usr/bin, библиотеки — в /usr/lib, а конфигурационные файлы — в /etc/.

Структура каталогов в Debian Linux

Чувствительность к регистру

В Windows вы не можете в одной папке одновременно иметь файлы file и FILE. Файловая система Windows не чувствительна к регистру, поэтому она обрабатывает их имена как один и тот же файл.

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

Косая черта vs. Обратная косая черта

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

В Linux же путь к домашнему каталогу пользователя представлен в виде:

Читайте также:  Steam linux ��� ����������

Примечание: Также не трудно заметить, что URL-адрес в вашем веб-браузере — даже в Windows — использует символ прямой косой черты, например, https://ravesli.com/ .

Символ «/» вместо буквы диска

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

В Linux же дела обстоят совсем иначе: вместо букв здесь применяются пути к различным каталогам (в Windows такое тоже возможно, но требуется дополнительная настройка).

В Linux все файлы находятся в / — корневом каталоге. Вне корневого каталога файлов нет. Когда вы подключаете к компьютеру какое-нибудь устройство, оно монтируется (подключается) в разделе /media/. При этом содержимое каталога будет отображать содержимое смонтированного раздела:

Если у вас несколько жестких дисков или разделов жесткого диска, вы можете смонтировать их в любом месте вашей файловой системы. Например, разместить свои домашние каталоги в отдельном разделе, смонтировав его в /home или в любой другой каталог, даже в /myBackupDrive.

Everything is a File

Точно так же, как каждая смонтированная файловая система является каталогом внутри корневого каталога / , всё в Linux является файлом. Например, ваш первый жесткий диск в системе представлен каталогом /dev/sda, CD-привод доступен в /dev/cdrom, а ваша мышь — в /dev/mouse.

Примечание: Детально о принципе «Everything is a File» в Linux-системах мы расскажем в отдельной статье.

Вы можете удалять или изменять открытые файлы

В Linux и других UNIX-подобных операционных системах приложения не блокируют доступ к файлам так, как это делает Windows. Например, предположим, что вы смотрите фильм через медиаплеер VLC в Windows. Идут титры, вы закончили его смотреть и поэтому пытаетесь удалить. Система выдаст сообщение об ошибке — вам нужно прекратить просмотр файла в VLC, прежде чем вы сможете удалить его (переименовать или сделать с ним что-либо еще).

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

Заключение

Эти различия должны относиться и к другим UNIX-подобным операционным системам, хотя могут быть свои нюансы (например, в macOS регистр не учитывается). Повторюсь, что здесь представлены те различия между файловыми системами Windows и Linux, узнать о которых полезно именно новичкам в мире Linux.

Поделиться в социальных сетях:

Источник

5.2. Имена файлов в Linux

5.2. Имена файлов в Linux

По сравнению с Windows в Linux несколько другие правила построения имен файлов, вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение имени файла. В Windows, например, для файла Document1.doc именем файла является фрагмент Document 1, а doc — это расширение. В Linux Document1.doc — это имя файла, никакого расширения нет.

Максимальная длина имени файла — 254 символа. Имя может содержать любые символы (в том числе и кириллицу), кроме / ? * » |. Но кириллицу в именах файлов я бы не рекомендовал вообще. Впрочем, если вы уверены, что не будете эти файлы передавать Windows-пользователям (на флешке, по электронной почте) — используйте на здоровье. А при обмене файлами по электронной почте (кодировка-то у всех разная, поэтому вместо русскоязычного имени пользователь может увидеть абракадабру) имя файла лучше писать латиницей.

Читайте также:  Просмотр устройств сетевых устройств linux

Также вам придется привыкнуть к тому, что Linux чувствительна к регистру в имени файла: FILE.txt и FiLe.Txt — это два разных файла.

Разделение элементов пути осуществляется символом / (прямой слэш), а не (обратный слэш), как в Windows.

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

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

Полные имена файлов Полное имя файла можно получить, используя функцию GetFullPathName. Функция GetShortPathName возвращает имя файла в формате DOS 8.3, в предположении, что данный том поддерживает короткие имена файлов.В NT 5.1 была введена функция SetFileShortName, позволяющая изменить

Имена файлов

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

IPLabs Linux Team: начало русского Linux’а

IPLabs Linux Team: начало русского Linux’а Следующая веха на пути русского Linux’а – 1998 год, когда фирма IPLabs (точнее, ее подразделение – IPLabs Linux Team) совместно с Институтом логики (на самом деле это были одни и те же люди – Алексей Новодворский, Алексей Смирнов и Юрий Девяткин с

4.4. Стандартные имена устройств в Linux

4.4. Стандартные имена устройств в Linux Как уже отмечалось раньше, все устройства в Linux являются файлами. Файлы устройств находятся в специальном каталоге /dev. Для просмотра данного каталога удобнее всего использовать команду mc. Запустите mc и перейдите в каталог /dev. Если

1.1.2. Имена разделов в ОС Linux

1.1.2. Имена разделов в ОС Linux Linux представляет наименования разделов как имена файлов, в виде /dev/xxyN, где:? /dev — это каталог, в котором расположены все файлы, связанные с устройствами;? xx — две буквы названия раздела, указывающие тип устройства, на котором размещается раздел.

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

Длинные и короткие имена файлов Запрещение длинных имен файловВы можете запретить длинные имена файлов в Windows, заставив тем самым генерировать имена в формате 8.3 (DOS-овский формат). Для этого в разделе HKLMSystemCurrentControlSetcontrolFileSystemнадо изменить параметр °Win31FileSystem°, присвоив ему

2.2. Имена IPC

2.2. Имена IPC В табл. 1.2 мы отметили, что три типа IPC стандарта Posix имеют идентификаторы (имена), соответствующие этому стандарту. Имя IPC передается в качестве первого аргумента одной из трех функций: mq_open, sem_open и shm_open, причем оно не обязательно должно соответствовать реальному

Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы

Пример A-4. blank-rename: переименование файлов, чьи имена содержат пробелы Это даже более простая версия предыдущего примера.#! /bin/bash# blank-rename.sh## Заменяет пробелы символом подчеркивания в именах файлов в текущем каталоге.ONE=1 # единственное или множественное число (см.

2.2 Имена

2.2 Имена Имя (идентификатор) состоит из последовательности букв и цифр. Первый символ должен быть буквой. Символ подчерка _ считается буквой. С++ не налагает ограничений на число символов в имени, но некоторые части реализации находятся вне ведения автора компилятора (в

У6.5 Имена

У6.5 Имена Разработайте абстрактный тип данных ИМЯ, в котором учитывались бы различные компоненты полного имени

Источник

Оцените статью