У меня нет Mac, поэтому я не могу сказать ничего о таких вещах, как ?
или :
в именах файлов…
Меня особенно интересует разделитель пути Dos/Windows®: \
. Я знаю, что в Linux это допустимый символ, который можно использовать внутри имен файлов fat32.(Windows® сообщит, что том поврежден).
То же самое относится и к osx? Или запуск mkdir ..\\dirent
создаст dirent
в родительском каталоге(все еще в случае fat32, так как я уже знаю поведение на hfs) ?
Конечно, я говорю о случае, когда том монтируется через Finder.
В зависимости от ответа, это может подтвердить наличие уязвимости в популярном программном обеспечении для управления исходным кодом…
решение1
Это интересный вопрос, и мне пришлось выяснить это самому на моем MacBook с операционной системой "OS X El Capitan". Вам нужно различать недопустимые символы в Finder / приложениях, использующих Finder (например, текстовый редактор) и командную строку.
Прежде всего, обратная косая черта "\" похожа на любой обычный символ как в Finder, так и в командной строке. Таким образом, вы можете создать файл или каталог, например A\B. То же самое касается и вопросительного знака.
Когда дело доходит до двоеточия ":", то все становится сложнее. Когда вы создаете файл с именем A:B в командной строке, то он создается и отображается правильно в командной строке, но отображается как A/B в Finder. И если вы пытаетесь создать файл, содержащий двоеточие в Finder, например C:D, то вы получаете ошибку "Имя C:D не может быть использовано. Попробуйте использовать имя с меньшим количеством символов или без знаков препинания".
Создать файл или каталог, начинающийся с точки "." можно в командной строке, без проблем. Но поскольку такие файлы и каталоги используются для скрытых файлов и каталогов, вы не сможете создать их в Finder. Вместо этого вы получите окно с сообщением об ошибке "Вы не можете использовать имя, начинающееся с точки "."", поскольку эти имена зарезервированы для системы. Пожалуйста, выберите другое имя." Если вы выполните команду
mkdir ..\\dirent
в командной строке, то это создаст скрытый каталог с именем
..\\dirent
в текущем каталоге, то есть не в каталоге, вызываемом dirent
в родительском каталоге.
Кстати: я проверил это с помощью USB-накопителя, отформатированного в FAT32, но даже если я использую внешний жесткий диск, отформатированный в NTFS, или внутренний SSD-накопитель, отформатированный в HFS+, все ведет себя одинаково.
Если я посмотрю на все эти файлы и каталоги (которые я записал на свой MacBook на USB-накопитель) в проводнике Windows (с Windows 10), то и обратная косая черта, и двоеточие, и вопросительный знак отображаются иначе, чем на MacBook, каждый из них с тем же специальным символом, который я не могу создать на своей клавиатуре, и не могу правильно скопировать и вставить - вставка в это окно создает "", который не похож на символ, отображаемый в проводнике Windows. В проводнике Windows он выглядит как точка ".", но эта точка расположена немного выше обычной точки, то есть вертикально посередине.
Надеюсь, я смог вам как-то помочь.