Практически всё, что необходимо для работы, можно настроить через стандартные настройки в GUI. Однако иногда возникает необходимость добраться до скрытых настроек, тогда на помощь приходит утилита defaults. Она позволяет читать, записывать и удалять пользовательские установки из командной строки. Приложения Mac OS X и прикладные программы обычно хранят настройки, используя механизм defaults. Давайте попробуем поработать с этими настройками.

В терминах defaults настройки приложения храняться в своих доменах. Получить перечень доменов можно командой:

ole-mac:~ ctrld$ defaults domains
.com.settings.local, AddressBookMe, AppFreshDaemon, Net Monitor,
SnippetDB, at.EternalStorms.flickery, at.obdev.LittleSnitchConfiguration,
at.obdev.LittleSnitchNetworkMonitor, au.id.tyson.AutoRate,
ca.indev.MAOSparkleHelper, ca.indev.MailActOn, ca.indev.MailTags,
ca.primatelabs.Geekbench2, ca.primatelabs.Geekbench2.LSSharedFileList,
com.Growl.GrowlHelperApp, com.acqualia.Picturesque2, com.adiumX.adiumX,
com.adobe.Reader, com.adobe.Reader_x86_9.0, com.adobe.acrobat.90.sh,
...

Как вы видите, идентифицировать конкретную программу достаточно просто. MailActOn – ca.indev.MailActOn, Adium – com.adiumX.adiumX, и т.д.

Просмотр содержимого домена:

ole-mac:~ ctrld$ defaults read de.metaquark.appfresh
{
    IUAppFreshUpdatesMaturity = 1;
    IUCategoriesVersion = 7;
    IULastDaemonRun = "2009-10-14 17:31:37 +0300";
    IUScheduleInterval = 0;
    IUSelectedTableViewFilter = "x-coredata://EBA970E8-B0D6-4058-A9B5-9B334546D149/IUCategory/p8";
    IUSetupWizardRun = 1;
    "IUSplitView Layout MainSplitView" =     {
        Left = 201;
        Right = 220;
    };
...

Также можно просмотреть содержимое по имени программы:

defaults read -app AppFresh

Получить значение ключа:

ole-mac:~ ctrld$ defaults read de.metaquark.appfresh IUAppFreshUpdatesMaturity
1

Установить новое значение (не выполняйте эту команду, я не знаю, что обозначает “2″ в AppFresh, это демонстрация принципа):

ole-mac:~ ctrld$ defaults write de.metaquark.appfresh IUAppFreshUpdatesMaturity 2

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

ole-mac:~ ctrld$ defaults delete de.metaquark.appfresh

Можно найти слово или фразу. Например, я хочу узнать, в каких доменах записано моё имя, например, чтобы выяснить, какие программы я купил (учтите, что в разных программах может быть разный формат имени – или “Имя Фамилия”, или “Фамилия Имя”):

ole-mac:~ ctrld$ defaults find "Oleg Serdyukov"
Found 1 keys in domain 'com.appzapper.appzapper': {
    "Registration Name" = "Oleg Serdyukov";
}
Found 1 keys in domain 'com.blacey.SuperDuper!': {
    SDuserLicenseName = "Oleg Serdyukov";
}

Я описал основные возможности defaults, за детальным описанием обращайтесь к “man defaults“.

Посмотреть, как использовать defaults для изменения различных настроек, можно, например, на “Mac OS X Hints“.