Что такое…

Что такое dotfile (файлы с точкой) — и почему их спрятали случайно

Иллюстрация: луч фонарика выхватывает в глубине выдвижного ящика спрятанные папки

Ты скопировал проект в новую папку:

cp -r my-app/* new-app/

Запустил — а он не видит ключей API. Git говорит, что тут вообще не репозиторий. И node_modules вдруг лезут в коммит.

Все файлы на месте. Кроме тех, что начинаются с точки: .env, .git, .gitignore. Звёздочка их просто не заметила. Это dotfiles — и история, почему они невидимые, смешнее, чем кажется.

Что такое dotfile

Dotfile — файл или папка, имя которых начинается с точки. .env, .gitignore, .zshrc, .ssh, .git.

Обычно это настройки, а не содержимое. Их пишут один раз и потом не трогают. Поэтому система прячет их из обычных списков, чтобы не мешались.

Их спрятали по ошибке

Вот неожиданная часть. Никто не проектировал «скрытые файлы» в Unix.

В каждой папке есть две служебные записи: . (сама папка) и .. (папка выше). Чтобы ls их не показывал, в ранних версиях дописали проверку. Но проверка смотрела только на первый символ: начинается с точки — пропускаем.

Под эту гребёнку попали все имена с точкой. Об этом рассказывал Роб Пайк, один из авторов Unix. Программисты заметили, что такие файлы не мешаются в списке, — и начали класть туда настройки нарочно. Баг стал соглашением, которому уже полвека.

Отсюда важное следствие: dotfile не защищён. Это не пароль и не шифрование. Он просто не показывается в списке по умолчанию.

Какие dotfiles ты встретишь в проекте

  • .env — секреты и настройки окружения: ключи API, адрес базы. Подробно — в статье про переменные окружения.
  • .gitignore — список того, что git не должен коммитить.
  • .git/ — папка, в которой живёт вся история репозитория. Удалишь — проект перестанет быть репозиторием.
  • .zshrc или .bashrc в домашней папке — настройки терминала. Их читает каждое новое окно. Про то, когда изменения в них подхватываются, — в статье source или запуск скрипта.
  • .ssh/ — твои SSH-ключи. Самая ценная папка на компьютере.
  • .DS_Store — мусор Finder на Mac. Его стоит добавить в .gitignore: он выдаёт имена файлов из папки.

Как их увидеть

  • Терминал: ls -a показывает всё, включая скрытое. ls -A — то же без . и ...
  • Finder на Mac: Cmd + Shift + . — переключает показ скрытых файлов.
  • Windows: проводник не прячет файлы с точкой. Там скрытость задаёт отдельный атрибут, а не имя.
  • Редактор кода: VS Code и Cursor показывают dotfiles в дереве сразу.

Ловушка со звёздочкой

Вернёмся к копированию. * в терминале не совпадает с именами на точку — ни в bash, ни в zsh. Поэтому:

  • cp -r my-app/* new-app/ — теряет .env, .git, .gitignore;
  • mv * ../ — оставляет dotfiles в старой папке;
  • rm -rf build/* — не трогает build/.cache.

Как скопировать всё целиком:

cp -r my-app/. new-app/

Точка вместо звёздочки значит «содержимое папки целиком», включая скрытое. Или копируй папку саму: cp -r my-app new-app.

Почему это важно, когда кодишь с ИИ

Агенты и ассистенты тоже любят звёздочку. Если ИИ переносит проект командой с *, .env останется позади. Тогда приложение упадёт с ошибкой про ключ, хотя ключ на месте.

Обратная беда опаснее. .env не виден в списке — и легко забыть, что он есть, когда выкладываешь проект. Перед первым пушем проверь, что .env записан в .gitignore. Как правильно хранить ключи, разобрано в статье как хранить API-ключи безопасно.

Проверить это можно двумя командами:

git check-ignore -v .env
git ls-files | grep env

Первая должна ответить строкой из .gitignore, где упомянут .env. Если она молчит — файл не игнорируется. Вторая показывает, что git уже хранит. Если там есть .env, добавить его в .gitignore мало: git продолжит следить за файлом. Убери его из индекса командой git rm --cached .env и смени ключи — они уже в истории.

Что такое «dotfiles» на GitHub?

Так называют репозитории, где люди хранят свои настройки терминала и редактора: .zshrc, .gitconfig, .vimrc. На новом компьютере их клонируют — и окружение готово за минуту.

Можно ли просто скрыть важный файл точкой?

Нет. Это скрывает файл только из списка. Любая программа и любой человек с ls -a его увидят. Для секретов нужны права доступа и .gitignore.

Почему я не вижу .env в проекте?

Скорее всего, его нет: его создают руками, обычно копируя .env.example. Проверь ls -a в корне проекта.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →