Почему файловые системы *nix поддерживают имена файлов с символами новой строки?

Почему файловые системы *nix поддерживают имена файлов с символами новой строки?

В соответствии сэта страница:

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

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

решение1

NULи /имеет свои назначенные системные функции. Другие персонажи не имеют.

Это основа - остальное мнения, домыслы и история. Услышанное, прочитанное и т.д. и включено только какнаполнительне дебаты и не споры:

  • Запрещая определенные символы, вы создаете условия для усложнения самой файловой системы, что равносильно ее компрометации.
  • А как насчет того, какие байты считаются новой строкой в ​​различных системах? <CR>vs <LF>и т. д.
  • Что, если удаленная система решит создать файл с новой строкой на NFS?
  • Что делать, если имя файла повреждено, а его содержимое не повреждено?
  • Что делать, если приложение закодирует информацию в имени файла?

И так далее.

  • Является ли исправление ошибок в пользовательском программном обеспечении задачей системы?
  • Должна ли система на корневом уровне защищать пользователей от самих себя?
  • Должен ли способ внутренней реализации различных оболочек определять решение о том, какие имена файлов считаются допустимыми?

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


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

Другой случай — что запрещать. Вы упомянули новую строку, но в дискуссиях с каменного века UNIX это обсуждалось, затем также включались другие символы. Следует ли *запрещать? А как насчет имен файлов, начинающихся с -? Что насчет DELи ESC? Следует ли запрещать все управляющие символы? И так далее и тому подобное.

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

Связанный контент