Несколько практических задач из командной строки, которые можно выполнить в Mac OS


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

1$ cd Documents

Эта команда позволяет перейти из рабочего каталога в папку Documents в вашем домашнем каталоге. Рабочим каталогом является тот каталог, в котором вы находитесь на текущий момент. Его можно считать аналогом активному окну Finder. Чтобы посмотреть результаты этого перемещения, введите следующую команду:

1$ pwd

Вывод этой команды отобразит путь к вашему текущему каталогу: /Users/username/documents. Чтобы вернуться обратно в домашний каталог, введите следующую команду:

1$ cd

Эта команда действует подобно волшебным туфелькам Дороти — она всегда перемещает вас в ваш домашний каталог, неважно, в каком каталоге вы находились до этого. Разумеется, эту команду можно использовать и в различных комбинациях. Например, если вам требуется попасть в вашу библиотеку iPhoto, просто добавьте к этой команде путь к нужному каталогу:

1$ cd Pictures/iPhoto Library

При рассмотрении данного примера следует сделать несколько замечаний. Чтобы команда UNIX cd могла правильно интерпретировать путь к каталогу, в который вы желаете попасть, следует знать, что Mac OS X по умолчанию хранит файлы библиотеки iPhoto в каталоге ~/Pictures/iPhoto Library. Если имя папки, в которую вы желаете попасть, содержит пробел, то для того, чтобы имя было правильно интерпретировано, символ пробела следует заменить на комбинацию » » (иными словами, символ пробела должен предваряться символом обратной наклонной косой черты — именно поэтому команда так и выглядит:

1cd Pictures/iPhoto Library)

Следует обратить внимание и на то, что имена файлов не всегда в точности совпадают при отображении через Finder и командную строку UNIX. В UNIX расширение имени файла видимо всегда, даже если файл был сохранен с использованием опции Hide Extension. Хотя и редко, но встречаются файлы и без расширений. Возможно, вы с ними и не столкнетесь, но должны знать об этой возможности. Если вы столкнетесь с такой ситуацией, когда вы не сможете скопировать файл, который явным образом присутствует в окне Finder, воспользуйтесь командой ls, чтобы проверить, совпадает ли вводимое вами имя с именем, которое отображается этой командой.

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

1$ cd ..

Если вы не слишком любите вручную вводить путь к файлу из командной строки, то к вашим услугам всегда доступна удобная функциональная возможность Mac OS X, которая автоматически вводит полное имя пути. Чтобы воспользоваться этой возможностью, введите из командной строки команду cd, за которой следует пробел, а затем перетащите папку из ближайшего окна Finder в ваше окно приложения Terminal. Путь к каталогу будет введен в командную строку автоматически. Например, на моем компьютере ввод команды cd, за которой следовал символ пробела, с последующим перетаскиванием библиотечной папки iPhoto привел к следующему результату:


1ElChupacabra:everything cks2$ cd /Users/cks2/Pictures/iPhoto Library

После этого вам останется лишь нажать клавишу , и вы окажетесь в нужном каталоге:

1ElChupacabra:iPhoto Library cks2$

Освоив основы навигации по файловой системе с помощью командной строки, перейдем к изучению остальных приемов работы с файлами и каталогами. Теперь нам пора научиться создавать каталоги самостоятельно. Делается это с помощью команды mkdir. Сама по себе команда mkdir не выполняет никаких действий. Для того чтобы каталог (папка) действительно был создан, в командной строке необходимо задать его имя, например:

1$ mkdir bigbook

После этого в каталоге, где вы находитесь на текущий момент, появится новая вложенная папка с именем bigbook. Но значит ли это, что вы можете создавать вложенные каталоги только там, где находитесь на текущий момент? Разумеется, это не так. По аналогии с методом навигации по файловой системе, который использует команда cd, команде mkdir тоже можно указать полный путь к каталогу, в котором следует создать новую папку, например:

1$ mkdir ~/Documents/bigbook

Выполнение этой команды приведет к созданию папки с именем bigbook в составе папки Documents. Но чего стоит каталог, если в нем не содержится никаких файлов? Давайте переместим во вновь созданный каталог какой-нибудь файл. Перемещение файлов в UNIX осуществляется с помощью команды mv. Например, если вы хотите переместить файл monk.tif во вновь созданную папку bigbook, дайте следующую команду:

1$ mv monk.tif bigbook/

В результате выполнения этой команды указанный файл (в данном случае, monk.tif) будет помещен в папку bigbook. Команда mv может использоваться и для переименования файлов:

1$ mv monk.tif bigbook/monknew.tif

Приведенная в этом примере командная строка переместит файл monk.tif в папку bigbook и изменит его имя на monknew.tif. Чтобы переименовать файл без изменения его текущего местоположения, используйте команду следующего вида:

1$ mv monk.tif monknew.tif

Разумеется, бывают и случаи, когда вам требуется не переместить файл, а просто создать его копию. В UNIX для этой цели используется команда cp. В качестве аргументов для этой команды следует указать имя файла и имя
копии:

1$ cp monk.tif monkcopy.tif

В результате этой команды в рабочем каталоге сохранится исходный файл, и появится его идентичная копия с именем monkcopy.tif. Все это замечательно, но чаще всего вам будет нужно создавать копии файлов в других каталогах. Делается это так:

1$ cp monk.tif bigbook/monkcopy.tif

В результате этой команды вы создадите каталог, содержащий вложенный в него файл. Но вот что делать, если некоторые файлы вам не нужны, и поэтому их требуется удалить? Отлично, давайте от них избавимся! На данном этапе мы собираемся воспользоваться командой rm. Здесь необходимо упомянуть, что в UNIX имеет значение все — и написание, и пробелы, и символы на верхнем и нижнем регистрах клавиатуры.

Прежде чем пользоваться командой rm, необходимо убедиться, что вы действительно знаете, в каком каталоге вы находитесь, и что именно вы собираетесь удалять. До тех пор пока вы не обретете уверенности в своих навыках, перед использованием команды rm следует всегда давать команду ls, чтобы проверить, какие файлы находятся в каталоге. Дело в том, что команда rm необратима, и файлы удаляются навсегда. Удалим файл monkcopy.tif:

1$ rm monkcopy.tif

Все, файла monkcopy.tif больше нет! И не ищите его в Trash, потому что там его нет тоже.

Команду rm можно использовать и для удаления нескольких файлов — для этого надо указать имена всех файлов, подлежащих удалению, используя пробел в качестве их разделителя. Например, чтобы удалить файлы monk.tif и monkcopy.tif, дайте следующую команду:

1$ rm monk.tif monkcopy.tif

Эта команда удалит как сам файл, так и его копию. В командной строке можно указать любое количество файлов, и все они будут удалены навсегда, как только вы нажмете клавишу Return.

Настройте TERMINAL на вывод предупреждений

Команды cp, mv, и rm — это средства, потенциально опасные для новичков, впервые приступающих к работе с Terminal. Все эти двухбуквенные команды могут быть невероятно разрушительными и привести к катастрофическим последствиям. Так, команды cp и mv могут привести к перезаписи файлов другими файлами с теми же именами, и сделают они это без предупреждения. Это может привести к реальной проблеме при перемещении файлов в каталоги, где хранятся ваши резервные копии.

В этом случае ваши старые резервные копии могут оказаться уничтоженными — получив инструкцию, Terminal просто выполнит ее, не задавая никаких вопросов. Команда rm может быть еще более опасной — она удаляет файлы без предупреждения и без возможности их восстановления. Однако есть и хорошая новость — все три команды поддерживают опцию –i. В случае с командами cp и mv команда сообщит, какие файлы будут перезаписаны, а в случае с командой rm — какие файлы будут удалены. Чтобы воспользоваться этой возможностью, введите команду rm –i filename. Некоторые пользователи применяют псевдонимы, например: alias cp=’cp –i’

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

Например, в случае команды rm monkcopy.tif аргументом является имя monkcopy.tif. Опции (options) представляют собой модификаторы, указывающие способ работы команды. Как правило, каждая команда поддерживает собственный набор опций. Чтобы ознакомиться с опциями, поддерживаемыми конкретной командой, введите команду man, а в качестве аргумента укажите интересующую вас команду. Например, команда man ls выведет список опций, с которыми может использоваться команда ls (рис. 4.5).

Рис. 4.5. Страница man, отображающая опции для команды ls
Рис. 4.5. Страница man, отображающая опции для команды ls

Имейте в виду, что просто прочтение списка опций — это одно, а вот их использование на практике — совсем другое. Попробуйте связать воедино команду, опцию и аргумент — в качестве примера выберем папку Music. Введите следующую команду:

1$ ls -F /usr/libexec/

В данном примере мы указали команду (ls), опцию (-F), а в качестве аргумента указали имя папки, содержимое которой требуется исследовать.

Благодаря использованной опции, ls возвратит не просто список, а список, в котором каталоги обозначены завершающим символом наклонной косой черты (/), а исполняемые файлы — завершающим символом (*). Фрагмент вывода этой команды показан в листинге.

12345// Фрагмент вывода команды ls -F /usr/libexec/ApplicationFirewall/ gdb/ rexecd*CCLEngine* getNAME* rlogind*InternetSharing* getty* rpc.rquotad*MiniTerm.app/ gnurmt* rpc.yppasswdd*

Опция -F модифицирует поведение команды ls. Добавляемые опции и аргументы можно комбинировать, например:

1$ ls -F -a ~/Desktop/Chapter_4 ~/Desktop/bboah_bu

В моем случае команда ls исследует каталог с именем Chapter_4, а папка с именем bboah_bu на моем рабочем столе возвращает результаты работы команды ls с использованием опций -F -a.

Наконец, на вашем Mac имеется много «скрытых» программ, о существовании которых непосвященные могут и не подозревать. Finder не отображает их, но из командной строки их можно запустить. Одной из таких программ является редактор Emacs. Чтобы запустить его, введите из командной строки:

1emacs

В результате откроется весьма полезный встроенный текстовый редактор.

Emacs — это чрезвычайно интересная программа. В сущности, это текстовый редактор, но не простой, а программируемый. За много лет его существования программистские сообщества разработали для него сотни программ, не имеющих ничего общего с обычным редактированием текста. Например, попробуйте нажать клавишу Escape, а затем — клавишу X. В самой нижней части экрана появится приглашение довольно странного вида. Попробуйте ввести:

1doctor

Если эффект покажется вам недостаточно странным, снова нажмите клавиатурную комбинацию Escape>+X, а затем введите: tetris или snake или dunnet. Вот теперь можно повеселиться! Если вы хотите узнать о том, каким образом можно было бы выполнять с помощью Emacs какую-нибудь полезную работу, нажмите клавиатурную комбинацию Ctrl>+H, затем — клавишу T, и вы сможете просмотреть руководство и воспользоваться набором упражнений по редактированию текста.

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