Файл .DS_Store в macOS¶
.DS_Store — системный файл, создаваемый операционной системой macOS для хранения метаданных о содержимом директории: расположения иконок файлов, размера сетки, фонового изображения и других параметров отображения в Finder. Имя расшифровывается как Desktop Services Store («хранилище служб рабочего стола»). Файл создаётся автоматически в каждой папке, которую пользователь открывал в Finder, и обычно скрыт от глаз благодаря ведущей точке в имени.
¶Назначение и содержимое
Когда пользователь настраивает внешний вид каталога в macOS — перемещает иконки, меняет режим просмотра (иконки, список, колонки), задаёт фон — эти настройки должны где-то сохраняться. Именно для этого служит .DS_Store. Файл содержит бинарные данные в проприетарном формате, включающие:
- координаты и порядок иконок файлов и папок;
- размер сетки отображения;
- выбранный режим просмотра каталога;
- сведения о свёрнутых разделах боковой панели;
- метаданные Quick Look для превью.
Файл имеет небольшой размер — обычно от нескольких сотен байт до нескольких килобайт, в зависимости от количества объектов в каталоге.
¶Как и когда появляется
.DS_Store создаётся демоном Finder.app при первом обращении к каталогу через графический интерфейс. Если папка никогда не открывалась в Finder (например, создана скриптом или доступна только через терминал), файл в ней не появится. При копировании каталога через Finder macOS может добавить .DS_Store в целевой директорию, чтобы сохранить пользовательские настройки отображения.
¶Проблема в системах контроля версий
Исторически .DS_Store стал известен шире круга пользователей Mac из-за проблем с системами контроля версий, прежде всего Git. Если разработчик работает на macOS и добавляет в репозиторий папку, содержащую .DS_Store, этот файл попадает в коммит и «засоряет» историю проекта. Для решения проблемы используется файл .gitignore со строкой:
`` .DS_Store ``
Также существуют готовые шаблоны .gitignore для macOS, которые автоматически исключают этот файл (и другие системные артефакты вроде ._* и .Spotlight-V100). Многие хостинговые платформы и шаблоны проектов содержат .DS_Store в списке игнорируемых файлов по умолчанию.
¶Удаление и отключение
Удалить .DS_Store можно вручную через терминал командой:
`` find . -name ".DS_Store" -delete ``
Полностью отключить создание файлов можно с помощью команды:
`` defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true ``
После выполнения команды и перезапуска Finder (или перезагрузки системы) файлы перестанут создаваться в сетевых каталогах. Отдельная команда DSDontWriteUSBStores отключает их запись на съёмные носители. Стоит учитывать, что отключение приведёт к потере пользовательских настроек отображения папок.
¶Безопасность
В 2017 году исследователи из компании Synack обнаружили, что .DS_Store может использоваться для раскрытия структуры директорий на удалённых серверах. Если веб-сервер отдаёт содержимое каталога при обращении к его пути, а файл .DS_Store доступен по прямой ссылке, злоумышленник может извлечь из него список имён файлов и папок, включая скрытые. Это касалось, в частности, репозиториев на GitHub и некоторых корпоративных серверов. После публикации исследования многие хостинги и платформы стали блокировать раздачу .DS_Store.
¶Аналоги в других системах
В Windows аналогичную роль играют файлы desktop.ini и Thumbs.db, в Linux-окружениях с GNOME — .directory. Все они хранят локальные настройки отображения каталогов и при попадании в репозитории считаются нежелательными артефактами.
¶Интересные факты
- Имя
.DS_Storeпроисходит от подсистемы Desktop Services, одной из старейших компонентов классической Mac OS. - Файл существует в macOS с конца 1990-х годов и остаётся неизменным по формату на протяжении десятилетий.
- В Finder есть скрытая комбинация клавиш
Cmd + Shift + .(точка), которая временно показывает скрытые файлы, включая.DS_Store.
Источники:
- Apple Support — «Использование скрытых файлов в macOS»
- Synack — «The DS_Store files are leaking data» (2017)
- Pro Git — «Создание файла .gitignore»
- GitHub Docs — «Ignoring files»
