34

Например, в « My Documents есть следующие папки:

.ssh
.subversion

Это какое-то соглашение об именах, о котором я не знаю?

1 ответ1

94

Это соглашение об именах происходит от Unix-подобных операционных систем (таких как Linux или OS X), где оно означает "скрытый" файл или каталог. Он работает где угодно, но его основное назначение - скрыть файлы конфигурации в вашем домашнем каталоге (например, ~/.cache/ или ~/.plan - их часто называют "точечными файлами").

В некотором смысле Dotfiles можно назвать традиционным Unix, эквивалентным каталогу "AppData" в Windows. (Многие программы Linux изменяются в соответствии со спецификацией базового каталога XDG, перемещая их конфигурацию в ~/.config/ а другие данные в ~/.cache/ & ~/.local/share/ - это делает его немного более похожим на AppData\Roaming и AppData\Local .)

У вас есть эти каталоги .ssh и .subversion в Windows, потому что вы использовали некоторые программы - в частности, OpenSSH и Subversion - которые были портированы для использования системных API-интерфейсов Windows, а не POSIX, но не были настроены для некоторых других соглашений Windows ,

Иногда эту адаптацию намеренно пропускают, чтобы облегчить жизнь людям, которые используют Unix-подобные среды, такие как Cygwin, в своих системах Windows. Например, Cygwin устанавливает стандартный набор Unix-подобных инструментов, таких как ls , который игнорирует "скрытый" флаг Windows и учитывает только имена .dotfile . Кроме того, использование одного и того же местоположения (например, <home>/.ssh) может упростить синхронизацию конфигурации между компьютерами Windows и Linux/BSD/OSX.

Также: Обычно эти файлы находятся в домашнем каталоге пользователя, например, /home/name/.ssh в Linux или C:\Users\name\.ssh в Windows 7+. Они редко помещаются в подкаталоги "Документы" или "Мои документы".


Как пишет Роб Пайк в Google+, это была случайная особенность:

Давным-давно, когда разрабатывался дизайн файловой системы Unix, записи . и .. появился, чтобы облегчить навигацию. Я не уверен, но я верю .. вошел во время переписывания Версии 2, когда файловая система стала иерархической (вначале она имела совершенно другую структуру). Однако, когда вы набрали ls, эти файлы появились, поэтому Кен или Деннис добавили в программу простой тест. Тогда это было на ассемблере, но рассматриваемый код был эквивалентен примерно так:

if (name[0] == '.') continue;

Это утверждение было немного короче, чем должно было быть,

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

но эй, это было легко.

Две вещи привели.

Во-первых, был создан плохой прецедент. Многие другие ленивые программисты вносили ошибки, делая то же самое упрощение. Фактические файлы, начинающиеся с периодов, часто пропускаются, когда они должны быть подсчитаны.

Во-вторых, что гораздо хуже, была создана идея "скрытого" или "точечного" файла. Как следствие, более ленивые программисты начали сбрасывать файлы в домашний каталог каждого. У меня не так много всего установлено на машине, которую я использую, чтобы напечатать это, но мой домашний каталог содержит около ста файлов, и я даже не знаю, что из них большинство или они все еще нужны , Каждая оценка имени файла, которая проходит через мой домашний каталог, замедляется этим накопленным осадком.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .