В соответствии сэта страница:
Имена файлов в Linux могут содержать любые символы, кроме (1) косой черты ( / ), которая зарезервирована для использования в качестве имени корневого каталога (т. е. каталога, содержащего все остальные каталоги и файлы) и в качестве разделителя каталогов, и (2) нулевого символа (который используется для завершения сегментов текста). Пробелы разрешены, хотя их лучше избегать, поскольку в некоторых случаях они могут быть несовместимы с устаревшим программным обеспечением.
Отлично, оба ограничения имеют большой смысл. Поскольку вполне возможно запретить включение определенных символов в имена файлов, почему были разрешены переносы строк? Насколько я могу судить, их единственное применение —усложнить наши сценарии. Есть ли веская причина добавлять новую строку в имя файла?
решение1
NUL
и /
имеет свои назначенные системные функции. Другие персонажи не имеют.
Это основа - остальное мнения, домыслы и история. Услышанное, прочитанное и т.д. и включено только какнаполнительне дебаты и не споры:
- Запрещая определенные символы, вы создаете условия для усложнения самой файловой системы, что равносильно ее компрометации.
- А как насчет того, какие байты считаются новой строкой в различных системах?
<CR>
vs<LF>
и т. д. - Что, если удаленная система решит создать файл с новой строкой на NFS?
- Что делать, если имя файла повреждено, а его содержимое не повреждено?
- Что делать, если приложение закодирует информацию в имени файла?
И так далее.
- Является ли исправление ошибок в пользовательском программном обеспечении задачей системы?
- Должна ли система на корневом уровне защищать пользователей от самих себя?
- Должен ли способ внутренней реализации различных оболочек определять решение о том, какие имена файлов считаются допустимыми?
Базовая операционная система не устанавливает ограничений. Информация в систему и из нее — это потоки байтов. Если байт не имеет особого значения, не создавайте накладные расходы, добавляя проверки, которые должны обрабатываться в пользовательском пространстве.
В любом случае, самой большой проблемой, скорее всего, будет довольно долгая история, в которой были разрешены символы новой строки и другие управляющие символы.
Другой случай — что запрещать. Вы упомянули новую строку, но в дискуссиях с каменного века UNIX это обсуждалось, затем также включались другие символы. Следует ли *
запрещать? А как насчет имен файлов, начинающихся с -
? Что насчет DEL
и ESC
? Следует ли запрещать все управляющие символы? И так далее и тому подобное.
К сожалению, я не могу вспомнить ни одной цитаты на эту тему от отцов-основателей или разработчиков кода.