Чому деякі імена файлів / папок у Windows мають крапку перед ними?


34

Наприклад, у My Documents, є такі папки:

.ssh
.subversion

Це якась угода про іменування, про яку я не знаю?

Відповіді:


94

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

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 \ <ім'я користувача> \" я спробував використовувати команду "ls" в Windows PowerShell і знову в терміналі Cygwin. PowerShell перераховує крапки-файли та приховує AppData, тоді як термінал Cygwin робить все навпаки. Цікаво! Cygwin використовує конвенцію Unix.
Ніко Белік

@NikoBellic: У Unix / Cygwin lsє -aможливість перелічити всі файли.
grawity

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

2
@grawity MS-DOS 1.0 - це O / S у стилі DEC, зроблений Digital Research і куплений корпорацією Майкрософт, яка тоді була в бізнесі Unix . MS-DOS 2.0 і пізніші версії додали ієрархічну файлову систему та деякі конвенції Unix, включаючи .."up dir"; Microsoft фактично рекламувала ці «розширені функції Unix».
Фред Фоо

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