Познакомьтесь с UNIX в исполнении Mac OS


В этом рецепте приводится вводная информация о скрытой мощи Mac OS X — возможностях операционной системы UNIX, кроющихся за блестящим интерфейсом. В частности, в этом рецепте будут продемонстрированы исключительно важные методы закрытия ненадлежащим образом ведущих себя программ и процессов.Операционная система UNIX изначально предназначалась исключительно для работы с терминальной консоли в текстовом режиме, и ко многим ее функциям по-прежнему можно получить доступ только из командной строки. Чтобы получить доступ к командной строке в Mac OS X, вам необходимо запустить приложение Terminal. Как правило, рядовые пользователи Mac OS X для выполнения повседневной работы не испытывают необходимости пользоваться приложением Terminal. По крайней мере, это высказывание справедливо в отношении пользователей современных версий; в ранних версиях Mac OS X иногда требовалось запускать Terminal для очистки Корзины (Trash).

Основной вопрос заключается в том, зачем же тогда возиться с командной строкой, если в большинстве случаев можно обойтись и без нее? Для настоящих хакеров ответ на этот вопрос очевиден: чтобы получить доступ ко всей мощи системы, невидимой для простых пользователей. Однако командная строка в действительности нужна не только хакерам — наоборот, это инструмент, который может оказаться очень полезным для каждого. Например, с помощью командной строки можно внести изменения в такие компоненты Mac OS X, которые не могут быть модифицированы иным способом. Кроме того, в некоторых случаях командная строка по-прежнему представляет собой более мощное и гибкое средство, нежели графический пользовательский интерфейс.

Простейший способ получить доступ к командной строке заключается в вызове приложения Terminal (его можно найти в папке Applications/Utilities). Когда приложение Terminal запускается и начинает работу, в вашем распоряжении оказывается оболочка (shell). В мире UNIX оболочкой называется программа, которая ожидает команд пользователя и исполняет их (в чем-то это поведение напоминает поведение приложения Finder). Именно в среде этой оболочки вы перемещаетесь по файловой системе, копируете файлы, создаете каталоги (directories) и модифицируете файлы. Вся эта работа выполняется в текстовом режиме, сильно отличающемся от графического интерфейса Mac и гораздо менее дружественном по отношению к пользователю. Тем не менее, во многих ситуациях графические инструменты сильно проигрывают командной строке в том, что касается доступных возможностей и гибкости.

Практически все функции UNIX являются конфигурируемыми (именно благодаря этому разработчики Apple и смогли превратить UNIX в Mac OS X), и вы, работая с оболочкой, тоже имеете доступ к таким возможностям. Используемой по умолчанию оболочкой является bash (Bourne Again shell), но вы можете выбрать и другую — вариантов выбора здесь предостаточно (рис. 4.1). Для большинства пользователей оболочка bash будет наилучшим выбором, так как она позволит гарантировать совместимость со всеми командными сценариями (scripts), которые приведены в этой книге и большинством сценариев, доступных для скачивания из Интернета.

Итак, приступим к знакомству с UNIX. Запустите приложение Terminal (Applications/Utilities/Terminal). Как только приложение Terminal запустится, вы увидите приглашение командной строки, выглядящее примерно следующим образом:

Рис. 4.1. Изменение оболочки, используемой по умолчанию
Рис. 4.1. Изменение оболочки, используемой по умолчанию

Здесь computer — это имя вашего Mac, а username — имя, под которым вы зарегистрировались в системе. Приглашение командной строки обладает гибкими возможностями по конфигурированию. Для обеспечения единообразия, в этой книге для обозначения приглашения командной строки будет использоваться символ $.

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


Значок тильды (~) обозначает ваш домашний каталог, в котором вы находитесь в данный момент (в мире UNIX папки принято называть каталогами). Чтобы просмотреть содержимое вашего текущего каталога, введите следующую команду и нажмите клавишу Return:

1$ ls

Посмотрите на результат, возвращенный командой — он в точности соответствует содержимому вашей домашней папки (рис. 4.2).

Рис. 4.2. Содержимое домашнего каталога, отображаемое приложением Terminal
Рис. 4.2. Содержимое домашнего каталога, отображаемое приложением Terminal

Для сравнения, посмотрите, как содержимое вашей домашней папки отображается приложением Finder — вы сразу же увидите сходства и различия в принципах работы между UNIX и приложениями Mac OS X с графическим интерфейсом (рис. 4.3).

Рис. 4.3. Содержимое домашнего каталога, отображаемое приложением Finder
Рис. 4.3. Содержимое домашнего каталога, отображаемое приложением Finder

Изменение оболочки, используемой по умолчанию

Как уже говорилось ранее в этом подразделе, приглашение командной строки обладает бесконечными возможностями по конфигурированию. Если вы работаете в системе, которая была получена путем последовательного обновления более ранних версий Mac OS X до последующих, вы можете обнаружить, что в вашем случае при вызове приложения Terminal по умолчанию используется оболочка tcsh, а не bash. Не удивляйтесь этому, потому что tcsh была оболочкой по умолчанию вплоть до выхода Mac OS X Panther, а параметры предпочтительной настройки при обновлении операционной системы не модифицируются.

Чтобы изменить стандартную оболочку на bash (или переключиться на использование какой-либо иной оболочки), раскройте панель параметров предпочтительной настройки системы и выберите опцию Accounts. На экране появится панель со списком учетных записей пользователей. Щелкните по значку с изображением замка для аутентификации, наведите курсор на имя учетной записи (Account) и выполните щелчок правой кнопкой мыши, чтобы вывести контекстное меню. Как вариант, для вывода контекстного меню можно навести курсор на имя учетной записи и выполнить щелчок мышью при нажатой клавише Ctrl. Появится новое меню с единственной опцией, Advanced Options. Выберите ее, и на экране появится диалоговое окно, показанное на рис. 4.1. В этом окне вы можете изменить используемую по умолчанию оболочку, выбрав нужную из списка Login Shell.

Ваш новый друг — тильда

Значок тильды (~) может сильно запутать новичков, не слишком хорошо освоивших работу с приложением Terminal. Стандартный способ объяснить его смысл и значение заключается в том, чтобы сказать, что ~ используется для обозначения вашего домашнего каталога. Это объяснение является довольно точным, но, тем не менее, все равно может создать путаницу, если вы не знаете точного пути к вашему домашнему каталогу. Наиболее четким объяснением будет рекомендация считать ~ просто удобным сокращением. Ее ввод эквивалентен вводу пути к каталогу /Users/username из командной строки Terminal. Здесь username — это то имя, под которым вы зарегистрировались в системе.

Быстрый ввод справочной информации о работе с TERMINAL

Любой начинающий пользователь, приступающий к работе с Terminal, наверняка заинтересуется — а где же находятся файлы справочной системы (Help), изучив которые можно было бы самостоятельно разобраться во многих вопросах. Поскольку Terminal — это точно такая же программа, как и любое другое приложение Mac OS X, логично было бы предположить, что доступ к файлам справки можно получить точно так же, как и к файлам справки других приложений — через меню окна Finder.

Однако в данном случае это не принесет вам никакой пользы и не даст никакой информации о приложении, которое вы запускаете из среды Terminal. Например, если вам захочется узнать больше о команде grep, поистине всемогущему средству поиска из мира UNIX, то полезной информации из меню Help вы не получите. Однако не спешите думать, что все пропало — файлы справочной системы для всех программ, запускаемых через Terminal (например, cp, grep, imaemagick и т. п.), все же существуют. Они называются страницами man (manual pages или manpages). Страницы man представляют собой инструкции по использованию соответствующих программ. Чтобы прочесть эти руководства, введите из командной строки следующую команду $ man programname. Здесь programname — это имя соответствующей команды. Например, команда $ man rm отобразит страницу, на которой будет рассказано все о команде rm, с практическими примерами ее использования.

Теперь, когда приложение Terminal уже запущено и вы ознакомились с азами, настало время внести ряд модификаций, которые сделают вашу жизнь чуть проще. В первую очередь необходимо отметить, что Terminal является многооконным приложением и поддерживает множество вкладок (в данном случае вкладки аналогичны вкладкам Safari, но поддерживается просмотр на вкладках только в Leopard). Эта возможность очень удобна, и вы наверняка захотите пользоваться ее преимуществами, потому что хотя Terminal и может одновременно выполнять множество задач, но объем информации, получаемой вами в результате, существенно ограничен.

Если вы работаете в окне Terminal над написанием сценария на языке Perl и внезапно (но вполне предсказуемо) вдруг захотите получить доступ к странице man, вы испытаете затруднения, поскольку удовлетворить все потребности в одном окне достаточно затруднительно. Решение заключается в использовании вкладок или множества окон. Например, на одной вкладке вы можете работать с текстовым редактором из командной строки, на другой — просматривать страницы man, а на третьей — тестировать сценарии Perl, причем ничто не мешает вам создать и еще дополнительную вкладку для наблюдения за сетевым трафиком.

Если вы работаете с одной из версий Mac OS X, более ранних, нежели Leopard, то вкладки в окне Terminal будут недоступны, и вам придется прибегать к запуску множества окон. Чтобы обойти это ограничение, вы можете попробовать пользоваться бесплатной утилитой iTerm. iTerm представляет альтернативу Terminal с поддержкой вкладок, а загрузить ее можно со следующего адреса: http://iterm.sourceforge.net.

Ну, а теперь, ознакомившись с базовыми возможностями Terminal, настало время приступить к его активному использованию!

Вполне возможно, что вы уже сталкивались с такой ситуацией, когда одна из запущенных вам программ зависала, и для принудительного завершения ее работы вам приходилось пользоваться опцией Force Quit из меню Apple. Проблема здесь заключалась в том, что на вашем Mac работает гораздо большее количество процессов, нежели отображаемые в окне Force Quit.

Чтобы корректно удалить именно тот процесс, который и требуется, хорошо бы отобразить список всех процессов, работающих в системе. Сделать это можно из окна Terminal с помощью команды top. Чтобы инициировать top, введите top в ответ на приглашение Y, а затем нажмите клавишу Return (рис. 4.4).

Рис. 4.4. Результаты вывода команды top
Рис. 4.4. Результаты вывода команды top

Если вы раскроете окно Force Quit и сравните его содержимое с выводом команды top, то вы увидите, что top отображает намного большее количество процессов, чем окно Force Quit. Если какой-то из процессов ведет себя некорректно, или если вам требуется аварийно завершить работу процесса, не отображаемого в окне Force Quit, то именно Terminal придет вам на помощь. Обратите внимание на идентификатор процесса (PID, Process ID, Process Identifier), работу которого вам требуется завершить, и либо нажмите клавишу Q (чтобы завершить работу top), либо откройте в окне Terminal новую вкладку (новая вкладка будет особенно полезной, если вы планируете остановить не один, а несколько процессов).

Затем введите команду kill PID. Допустим, что в рассматриваемом примере вам требуется завершить работу приложения Snapz Pro (оно не отображается в меню Force Quit). Чтобы добиться поставленной цели, введите команду kill 545 и нажмите клавишу . Обратите внимание, что на вашем компьютере это число практически наверняка будет другим — вводить надо не 545, а именно то число, которое отображается в столбце PID левее имени приложения, которое требуется принудительно закрыть. Затем перейдите на предыдущую вкладку и с помощью команды top убедитесь в том, что программа Snapz Pro больше не работает. Теперь, когда вы вооружены командой kill, а также новым способом наблюдения за работающими программами с помощью Terminal, вы сможете справиться с коварными проблемами утечек памяти и связанным с ними падением производительности.
Программа ACTIVITY MONITOR — это эквивалент команды TOP с графическим интерфейсом
Этот совет предназначается тем, кто оценил саму идею, заложенную в программу top, но ненавидит само упоминание о Terminal и командной строке. Есть хорошие новости и для них! На сегодняшний день любой компьютер Mac поставляется с замечательной утилитой Activity Monitor, которая представляет собой аналог команды top, но только снабженный графическим пользовательским интерфейсом (GUI). Для этого следует просто перейти в папку /Applications/Utilities, найти в ней это приложение и запустить его. Вам будут доступны все возможности команды top, с красивым графическим интерфейсом.

Можно произвести интересный эксперимент — запустите одновременно команду top и Activity Monitor и посмотрите, какая из программ потребляет больше ресурсов процессора (CPU). В моем случае Activity Monitor потребляет примерно в 4 раза больше ресурсов, нежели top.