Основной вопрос заключается в том, зачем же тогда возиться с командной строкой, если в большинстве случаев можно обойтись и без нее? Для настоящих хакеров ответ на этот вопрос очевиден: чтобы получить доступ ко всей мощи системы, невидимой для простых пользователей. Однако командная строка в действительности нужна не только хакерам — наоборот, это инструмент, который может оказаться очень полезным для каждого. Например, с помощью командной строки можно внести изменения в такие компоненты 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 запустится, вы увидите приглашение командной строки, выглядящее примерно следующим образом:
Здесь computer — это имя вашего Mac, а username — имя, под которым вы зарегистрировались в системе. Приглашение командной строки обладает гибкими возможностями по конфигурированию. Для обеспечения единообразия, в этой книге для обозначения приглашения командной строки будет использоваться символ $.
Как уже говорилось, значок $ представляет собой приглашение командной строки. При выполнении примеров, приведенных здесь и далее, вам его вводить с клавиатуры не следует.
Значок тильды (~) обозначает ваш домашний каталог, в котором вы находитесь в данный момент (в мире UNIX папки принято называть каталогами). Чтобы просмотреть содержимое вашего текущего каталога, введите следующую команду и нажмите клавишу Return:
1$ ls
Посмотрите на результат, возвращенный командой — он в точности соответствует содержимому вашей домашней папки (рис. 4.2).
Для сравнения, посмотрите, как содержимое вашей домашней папки отображается приложением Finder — вы сразу же увидите сходства и различия в принципах работы между UNIX и приложениями Mac OS X с графическим интерфейсом (рис. 4.3).
Изменение оболочки, используемой по умолчанию
Как уже говорилось ранее в этом подразделе, приглашение командной строки обладает бесконечными возможностями по конфигурированию. Если вы работаете в системе, которая была получена путем последовательного обновления более ранних версий 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).
Если вы раскроете окно 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.