Открыть сервисСервис

Файл .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»
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru