Home-папка ~ или “сам себе реестр”

Пользователи Линукса (и Юникса в общем) рано или поздно сталкиваются с таким обозначением, как папка ~, которая является синонимом папки /home/username, где вместо username – ваш логин в системе. Этим синонимом можно пользоваться для написания команд в терминале, например «cd ~/Documents” или «mkdir ~/Downloads/skype” вместо «cd /home/username/Documents” или «mkdir /home/username/Downloads/skype”. Удобно, не правда ли? Но дело не только в укорачивании команд. Ведь таким образом можно написать скрипты, которые будучи написаны однажды, будут работать для любых пользователей, которые их запускают. Например какой-нибудь /usr/bin/home_init.sh мог бы проинициализировать home-папку нового пользователя, создав ему подпапки Documents, Video, Audio и т.п. Папка ~ имеет также и другие прелестные свойства, которые мы обсудим в сегодняшнем сообщении. А пока на минутку посмотрим в сторону Windows (”все познается в сравнении”).

В Windows есть некоторый аналог такой home-папки. Например, в Windows 2000/XP есть общая папка Documents and Settings, в которой находятся подпапки разных пользователей Windows-машины. А в качестве синонимов в ОС Windows используются такие переменные среды как %SYSTEM%, %USER% и т.п. Для самой Windows 2000/XP названная папка была шагом вперед по сравнению с Windows 95/98, которая хранила подпапки пользователей прямо в C:\Windows, а значит при неаккуратной переустановке системы пользователь терял все! Но даже в Windows 2000/XP нет легкого способа перенести C:\Documents and Settings на другой диск. Папка создается на том разделе, где стоит сама Windows. Это заметно усложняет переустановку системы. Также старые 16-битные программы, которых немало осталось в мире Windows, часто спотыкаются на пробелах в названии этой папки. Поэтому для себя я завел такое правило на каждой Windows-машине сразу создавать какую-нибудь C:\Temp и переобозначить системные переменные среды %TEMP% и %TMP%, чтобы указывали туда, а не в C:\Documents and Settings\Local Settings\Temp. Но я опытный пользователь Windows, а что делать пользователю, который не может запустить свою важную программу из-за этих несчастных пробелов?

Я немного отвлекся :-) Мы увидели, что Windows тоже имеет home-папку. Но на этом, пожалуй, схожести заканчиваются. А дело вот в чем. В отличие от Windows-систем, все программы Линукса хранят пользовательские настройки в соответствующих home-папках. А программы Windows в подавляющем большинстве своем хранят настройки в системном реестре Windows. Реестр Windows это своего рода база данных, которая представлена в редакторе реестра regedit как дерево с узлами HKEY_LOCAL_MACHINE, HKEY_USERS и т.д. Каждый пользователь имеет свою ветку в HKEY_USERS с некоторым уникальным буквенно-цифровым кодом (GUID), который к сожалению, не расшировать при беглом просмотре реестра – а значит даже администратору будет легко отредактировать только свои настройки, но не настройки другого пользователя. Программы Windows создают подветки в пользовательской ветке, чтобы хранить там свои настройки.

Конечно, централизованное хранение настроек это некоторый плюс – облегчается поиск той или иной настройки по фрагменту текста. Облегчается также и перенос реестра (но только всего реестра) с одной машины на другую, потому что весь реестр хранится во всего нескольких файлах системной папки. Но в этом, в централизованности, с другой стороны, и есть большой минус Windows-реестра. Он быстро раздувается, как любая не оптимизированная база данных. Многие программы после деинсталяции оставляют многочисленные следы в реестре. Многие другие программы нерационально используют реестр, занося туда все, что только хотят «запомнить”. Например, вместо того, чтобы хранить историю посещенных страниц в одном файле, а в реестре хранить адрес этого файла, браузер заносит все адреса страниц в реестр. Благодаря этому свойству реестра процветают всякие другие вспомогательные программы по его очистке, которые пишут как большие фирмы, такие как Symantec, так и программисты-одиночки. Не замечали ли Вы, как компьютерные журналы прямо-таки пестрят заметками о той или иной программе по очистке реестра. Что это за удобство такое, что потом постоянно надо за ним присматривать? Удобные изобретения должны экономить пользователям время, а не занимать их ненужными операциями. Некоторые опытные пользователи Windows даже советуют время от времени переустанавливать систему «с нуля”, чтобы у нее был девственно чистый реестр, с которым она работает быстрее всего. Но при переустановке системы все настройки программ, хранившиеся в нем – теряются! А следовательно, обесценивается то удобство, ради которого реестр затеивался…

Вернемся к тому, как организована home-папка в Линукс. Все программы Линукса, начиная с терминала до графических сред, всевозможные утилиты и пакеты создают внутри home-папки свои незаметные невооруженным глазом папки, названия которых начинаются с точки, например, .gnome2, .openoffice, .mozilla и т.п. По умолчанию при просмотре папок, эти подпапки и файлы, названия которых начинаются с точки, являются невидимыми (в Линуксе у файлов нет флага невидимости, как в Windows). Как правило, все настройки хранятся в текстовых файлах, которые можно свободно отредактировать и при следующем запуске, соответствующая программа подхватит настройки и будет работать. Эти файлы легко копировать, переносить, сохранять в архивы. Кроме того, нет никакой нужды в редакторе реестра (хотя для настроек системы GNOME, которых стало слишком много, все таки создан редактор gconf, который по интерфейсу напоминает regedit из Windows). Нет нужды и в оптимизации базы данных реестра, потому что файловая система сама об этом заботится. Программы просто считывают свои настройки (выставленные пользователем во время работы с программой) из этих маленьких (изредка больших) файлов.

Другое назначение home-папки это конечно хранение всех файлов, которые пользователь создал во время работы. Ведь по умолчанию home-папка это единственное место в системе, куда пользователь имеет доступ на запись. Все другие части системы по умолчанию закрыты для него (если только после установки Линукса не будут произведены какие-то специальные настройки). Папка для временных файлов, /tmp, конечно тоже доступна, но сюда при здравом уме никто не станет сохранять документы, потому что система очистит эту папку при следующем запуске. Можно сказать, что home-папка это аналог папки «Мои документы” (My Documents) в ОС Windows. Возможно, именно с оглядкой на Линукс (или на Юникс) разработчики Windows так назвали свою папку Documents and Settings (документы и настройки). Но они скопировали идею не полностью, оставив себе реестр.

Теперь посмотрим, что происходит при переустановке Линукса. Если диск был разбит на несколько разделов, то достаточно задать переформатирование системного раздела (обычно помеченного как /), установить туда Линукс, задать список пользователей и все программы заработают со своими старыми настройками. Мы можем даже восстановить полностью всех пользователей и групп (вместе с их паролями!), если перед переустановкой сохраним файлы /etc/passwd, /etc/shadow, /etc/group. Тогда у восстановленных пользователей и групп будут те же uid и gid, что и раньше, а следовательно, права доступа на файлы из /home не изменятся. В отличие от Windows, при переустановке Линукса home-папка сохранит нам ВСЕ.

Имея такой удобный инструмент, как home-папка, можно хоть каждый день переустанавливать Линукс. У меня сегодня именно это и случилось – переустановил Ubuntu 7.04, заменив ее Fedora 7. Все программы (Thunderbird, Firefox, GAIM, Rhythmbox и т.д.) ничуть не пострадали. Они запустились после переустановки как будто ничего и не происходило. Сэкономленное время использовал на написание этого сообщения в блоге :-)

При желании (и наличии места на жестком диске) можно было бы поставить разные дистрибутивы Линукса (и *BSD, например) и работать с одной общей home-папкой на всех. Некоторые исследователи-экспериментаторы так и делают.

Пожалуй, на этом все. Надеюсь, что убедил Вас в удобстве такой вещи, как home-папка в Линуксе :-) Всего хорошего.