Почему некоторые имена файлов / папок в Windows имеют точку перед ними?


34

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

.ssh
.subversion

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

Ответы:


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.

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


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

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

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

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

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

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

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

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

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


Спасибо! Очень тщательно В своей папке «C: \ users \ <username> \» я попытался использовать команду «ls» в Windows PowerShell и снова в терминале Cygwin. PowerShell перечисляет точечные файлы и скрывает AppData, тогда как Cygwin Terminal делает прямо противоположное. Интересный! Cygwin использует соглашение Unix.
Нико Беллик

@NikoBellic: Unix / Cygwin lsимеет -aвозможность перечислить все файлы.
Гравитация

1
@Ruslan: Например: в VMS вообще не было скрытых файлов; вы бы просто оказались с такими вещами, как LOGIN.COMили DECW$MAIL.DAT в вашем домашнем каталоге . (Я не уверен, какие другие системы были популярны в то время.) Unix был создан совсем недавно; у него не было никаких соглашений вообще.
Гравитация

2
@grawity MS-DOS 1.0 была операционная система в стиле DEC, разработанная Digital Research и купленная Microsoft, которая тогда работала в Unix-бизнесе . В MS-DOS 2.0 и более поздних версиях добавлена ​​иерархическая файловая система и некоторые соглашения Unix, в том числе ..для «up dir»; Microsoft фактически рекламировала эти «расширенные возможности Unix».
Фред Фу

1
@ Grawity Ах да, это были Сиэтлские Компьютерные Продукты, клонирующие CP / M DRI. Сожалею. Но я хотел сказать, что в начале 80-х Microsoft была Unix-магазином, и системы DEC были не единственной отправной точкой. (Изначально Unix работал на оборудовании DEC, но я думаю, что на него больше влияли CTSS и Multics, чем на ОС DEC.)
Фред Фу,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.