Почему имена файлов начинаются с точки? Могу ли я скрыть файлы, не используя точку в качестве первого символа?

15

Первоначально я думал, что это совпадение, но теперь я вижу, что есть даже тег для него: все скрытые имена файлов начинаются с точки. Это соглашение? Почему это было выбрано? Можно ли это изменить? Или другими словами (как связанный вопрос @evilsoup предложил, что подразумевает ответ на кучу других): могу ли я скрывать файлы, не переименовывая их (используя .в качестве первого символа их имени)?

JMCF125
источник
Или «почему все скрытые имена файлов начинаются с точки?», Если вы предпочитаете.
JMCF125
2
Да, это соглашение, почему его выбрали, кто знает, иди спроси у пионеров UNIX, это старое соглашение.
Тердон
4
Прочитайте соответствующую статью в Википедии о скрытых файлах и добавьте plus.google.com/101960720994009339267/posts/R58WgWwN9jp для аспектов истории. Это не может быть изменено.
Джофель
Я думал, что Linux полностью настраиваемый ...
JMCF125
1
@ JMCF125 на самом деле этот комментарий получился немного более саркастичным, чем я хотел, извините за это. Вы действительно спрашиваете: «Могу ли я скрыть файлы, не переименовывая их?» - если это так, вы должны отредактировать это в своем вопросе.
evilsoup

Ответы:

26

Согласно Википедии ,

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

... поэтому он начинался как ошибка, а затем был воспринят как функция (для записи .это ссылка на текущий каталог и ..ссылка на каталог над ним, но я уверен, что вы уже знаете, что ). Поскольку этот метод скрытия файлов на самом деле достаточно хорош в большинстве случаев, я полагаю, что никто не удосужился реализовать скрытие файлов в стиле Windows.

Также существует тот факт, что реализация другого поведения привела бы к еще большей фрагментации в мир * nix, что является последним, что нужно каждому.

Есть еще один метод для сокрытия файлов, который не включает их переименование, но он работает только для файловых менеджеров с графическим интерфейсом (и он не универсален среди тех, которые используются в большинстве Linux, но я не думаю, что Finder OSX делает, и более нишевые файловые менеджеры Linux с меньшей вероятностью будут поддерживать это поведение): вы можете создать файл с именем .hiddenи поместить в него имена файлов, которые вы хотите скрыть, по одному на строку. lsи оболочки не будут уважать это, но это может быть полезно для вас, все же.

evilsoup
источник
Это сокрытие не работает на Unity. Но так как вы прямо ответили на все вопросы, я отмечу это как принятый ответ (хотя я проголосовал за оба ответа).
JMCF125
3
Страница Википедии больше не содержит информации об этом. Однако Роб Пайк работал над UNIX в Bell Labs и сделал небольшой пост на эту тему: plus.google.com/u/0/+RobPikeTheHuman/posts/R58WgWwN9jp
Александр
« OS X », а не «OSX».
Питер Мортенсен
14

Файлы, начинающиеся с точки, по умолчанию игнорируются командой «ls», которая имеет более или менее тот же эффект «скрытых» файлов, но не является тем же (другие команды могут сделать то же самое или нет). Файлы, начинающиеся с точки, не являются «скрытыми», поскольку «скрытый» не является одним из их атрибутов. В отличие от DOS / Windows, «скрытый» не является атрибутом в Unix. В Unix есть много атрибутов («man chattr» расскажет вам обо всех), но скрытый - не один из них.

Причина, по которой "ls" игнорирует dot-файлы, на самом деле довольно забавная / смущающая. Это было не дизайнерское решение, а результат ошибки программного обеспечения на заре Unix . Когда особенный. и .. записи каталога были добавлены в файловую систему, и было решено, что команда ls не должна отображать их, потому что они мешают. Тем не менее, программа была написана на скорую руку, чтобы исключить любой файл, имя которого начинается с. характер, а не точные имена "." или "..". И это создало прецедент, которому следовали с тех пор в Unix. Как ни странно, когда ребята из Unix перешли к созданию Plan 9, они специально не помещали в него дот-файлы .

sergut
источник
Я попробовал man chattr, хотя подумал, что, возможно, мне понадобится какой-нибудь пакет или специальная программа, чтобы сделать возможными другие скрытые файлы.
JMCF125
0

Вы можете скрыть файлы или нет, и от каких условий, зависит от используемой вами файловой системы и ее драйвера. Традиционные файловые системы Unix не имеют атрибута «скрыть» для файлов.

Драйвер файловой системы может скрывать любые файлы, которые он хочет, просто опуская их имена, когда он предоставляет результаты для системных вызовов, которые используются для получения списка каталогов. Как сказал Сержут в своем ответе, файлы, начинающиеся с точки, не являются действительно скрытыми.

(Это также, как руткиты могут скрывать свои файлы: они подключаются к системным вызовам, которые создают списки каталогов, и отфильтровывают файлы, которые они хотят скрыть.)

Например, в кластерных файловых системах Oracle ACFS каталог <filesystem mountpoint>/.ACFS/действительно скрыт: его просто не будет в списке, даже с ls -a. Но если вы знаете, что это там, вы можете получить к нему доступ просто отлично.

Если вы используете функцию моментальных снимков файловой системы ACFS, вы можете получить доступ к любым существующим снимкам файловой системы этой файловой системы через этот .ACFSкаталог. Если это не было скрыто, программа резервного копирования могла бы в конечном итоге выполнить резервное копирование как текущего содержимого файловой системы, так и содержимого любых существующих моментальных снимков, что, вероятно, было бы нежелательным; обычно вы хотите создать резервную копию либо текущего состояния, либо состояния одного конкретного снимка.

Телком
источник