Руководство пользователя Linux
================================================================
(C) 1993, 1994
Larry Greenfield
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 2 -
1. Введение
1.1 Для кого предназначена эта книга
Тот ли вы, кто должен прочесть на эту книгу. Попробуйте ответить
на несколько вопросов: Вы уже взяли где-то Linux, поставили его, и
хотите знать что делать дальше? Или вы не являетесь пользователем
Unix, и хотите узнать, что может вам дать Linux.
Если у Вас есть эта книга, ответы на эти вопросы вероятно "Да".
Каждый, у кого есть Linux, свободно-распространяемая разновидность
Unix, разработанная Линусом Торвальдсом (Linus Torwalds), на его
компьютере, но не знает, что ему делать дальше, должен прочесть эту
книгу. Она охватывает большинство основных команд Unix. Мы так же
расскажем о GNU Emacs, мощном редакторе, и о некоторых других больших
приложениях в Unix'е.
1.1.1 Что вы должны сделать перед чтением этой книги.
Эта книга требует выполнения нескольких условий, которые не
находятся во власти автора. Прежде всего, эта книга подразумевает, что
Вы имеете доступ к системе Unix. (К сожалению, очень тяжело изучить
Unix не имея его.) Более того, эта Unix-система должна быть системой
Linux, работающей на Intel PC. Это требование не является
обязательным, но когда что-либо зависит от версии Unix, я буду
ссылаться на то, как ведет себя Linux.
Имеются различные формы Linux, называемые дистрибутивами. Мы
надеемся, что Вы нашли полную поставку Linux, такую как SoftLanding
Linux Systems или MCC-Interim, и установили ее. Различные дистрибутивы
Linux несколько отличаются, но эти отличия обычно небольшие и
несущественные. (Возможно в этой книге Вы встретите места, которые
будут немного отличаться от того, что будете видеть Вы. Это вероятнее
всего означает, что вы используете дистрибутив, отличный от моего.
Автору хотелось бы знать обо всех таких отличиях.)
- 3 -
Если Вы являетесь суперпользователем (администратором или
установщиком) системы, Вы должны также зарегистрировать себя в системе
как нормального пользователя. Посмотрите руководство по установке
системы для того, чтобы узнать, как это сделать. Если Вы не являетесь
суперпользователем, то Вы должны попросить его зарегистрировать себя в
системе.
У Вас должно быть време и терпение. Изучение Linux не так уж
просто - большинство пользователей находят, что научиться использовать
операционную систему Macintosh Operating System намного проще. Однако
многие считают, что Linux намного мощнее.
Наконец, эта книга предполагает, что Вы более-менее знакомы с
некоторыми компьютерными терминами и понятиями. Хотя это требование не
столь важно, это делает чтение книги более простым. Вы должны знать,
что означают такие слова, как "программа" и "исполнение". Если это не
так, то Вам может понадобится чья-нибудь помощь при изучении Unix.
1.2 Как избежать чтения этой книги
Лучший способ изучить почти любую компьютерную программу - это
установить ее на своем компьютере. Большинство людей считают, что
чтение книги без использования программы не очень то полезно. Точно
также, способ научиться Unix и Linux - это использовать их.
Используйте Linux для всего, что возможно. Экспериментируйте. Не
бойтесь - возможно, Вы и потеряете что-либо, но вы всегда сможете это
повторно инсталлировать. Делайте резервные копии и наслаждайтесь!
Хорошо это или плохо, но Unix не является такой же интуитивно
понятной, как другие операционные системы. Поэтому, Вы вероятно все же
прочтете по крайней мере две первые главы этой книги.
Способ номер один избежать чтения этой книги состоит в
использовании доступной электронной документации. Научитесь
использовать команду man - она описана в разделе 4.2.
- 4 -
1.3 Как читать эту книгу
Наиболее предпочтительный способ изучения Unix состоит в
чередовании чтения книги и попыток проиграть прочитанное на системе.
Играйтесь до тех пор, пока все понятия не станут для Вас привычными, а
затем начинайте прыгать по всей книге. Вы увидите, что книга
охватывает разные разделы, некоторые из которых могут Вас
заинтересовать. После этого, Вы должны стать достаточно уверенным,
чтобы начать использовать команды, не зная заранее что они должны
делать.
То, что многие люди называют Unix - это оболочка Unix (shell),
специальная программа, которая интерпретирует команды. Вообще, это
хороший взгляд на вещи, но Вы должны знать, что Unix в
действительности состоит из много большего (или много меньшего - в
зависимости от точки зрения). Эта книга рассказывает о том, как
использовать оболочку, программы, которые обычно поставляются с Unix,
и некоторые программы, которые не всегда поставляются с Unix.
Эта глава - это мета-глава, в ней говорится об этой книге и о
том, как использовать эту книгу в работе. Оставшиеся главы содержат:
Глава 2 обсуждает, как Unix и Linux появились, и в каком
направлении они развиваются. В ней так же говорится о Фонде Свободного
Программного Обеспечения (Free Software Foundation) и проекте GNU.
Глава 3 рассказывает о том, как запустить и остановить Ваш
компьютер, и что происходит в это время. Многое из того, о чем
говорится в этой главе, не нужно для использования Linux, но это
довольно полезно и интересно знать.
Глава 4 является введением в оболочку Unix. Это та среда, в
которой люди работают и запускают программы. Здесь говорится о
основных программах и командах, которые Вы должны знать для
использования Unix.
- 5 -
Глава 5 охватывает все, что относится к системе X Window System.
X - это основной графический интерфейс для Unix, и некоторые
дистрибутивы устанавливаются по умолчанию.
Глава 6 охватывает некоторые из более глубоких понятий
Unix-оболочки. Изучение приемов, описываемых в этой главе, позволяет
более эффективно использовать Unix.
Глава 7 содержит короткие описания различных Unix-команд. Чем
большее количество инструментов умеет использовать пользователь, тем
быстрее он будет выполнять свою работу.
Глава 8 описывает текстовый редактор Emacs. Emacs - это очень
большая программа, которая объединяет многие инструменты Unix общим
интерфейсом.
Глава 11 описывает некоторые большие и более сложные в
использовании программы.
Глава 12 рассказывает о том, как избежать ошибок при
использовании Unix и Linux.
1.4 Документация Linux.
Эта книга, Руководство пользователя Linux, предназначена для
начинающих пользователей Linux. Однако, имеются книги и для более
опытных пользователей.
1.4.1 Другие книги о Linux
Остальные книги включают "Установка и начало использования",
руководство о том, как получить и установить Linux, "Руководство
Администратора Системы Linux", рассказывающее о том, как организовать
и поддерживать работу системы Linux, и "Руководство по Изменению
Ядра", книга о том, как модифицировать Linux. "Руководство по Сетевому
Администрированию Linux" рассказывает о том, как установить,
сконфигурировать и использовать сеть.
- 6 -
1.4.2 HOWTO
Дополнительно к книгам, документация Linux включает набор
небольших документов, описывающих как установить и использовать
различные аспекты Linux. Например, SCSI-HOWTO описывает некоторые
трудности в использовании совместрно с Linux SCSI - стандартного
интерфейса общения с устройствами.
Документы HOWTO доступны в нескольких форматах.
1.4.3 Проект Linux-документации
Как и почти все, что связано с Linux, Проект Linux-документации -
это группа людей, работающих по всему миру. Изначально будучи
организованный Ларсом Виржениусом (Lars Wirzenius), Проект в настоящее
время координируется Маттом Вельшом (Matt Welsh) с помощью Майкла
Джонсона (Michael K. Johnson).
Есть надежда, что Проект Linux-документации предоставит со
временем все книги, необходимые для документирования Linux.
Пожалуйста, сообщите нам о том, что нам удалось, и о том, что нам
следует сделать. Вы можете связаться с автором по адресу
greenfie@gauss.rutgers.edu и с Маттом Вельшом по адресу
mdw@cs.cornell.edu.
1.5 Операционные системы
Основное предназначение операционной системы состоит в поддержке
исполнения программ, в работе которых Вы заинтересованы. Например, Вы
можете использовать редактор для создания документа. Этот редактор не
сможет работать без помощи операционной системы - ему нужна эта
помощь для взаимодействия с Вашим терминалом, Вашими файлами, и т.д.
Если от операционной системы требуется только поддержка Ваших
приложений, почему же требуется целая книга, рассказывающая об
операционной системе? Существует множество вспомогательных действий,
которые Вам приходится выполнять. В случае Linux, операционная система
так же содержит несколько мини-приложений, помогающих Вам более
- 7 -
эффективно работать. Знание операционной системы может быть полезно,
когда Вы не работаете в одном громадном приложении.
Операционные системы (ОС) могут быть простыми и минимальными,
такие как DOS, или большими и сложными, как OS/2 или VMS. (Каждая из
этих систем имеет свои плюсы.) Unix претендует на место "золотой
середины". Предоставляя больше ресурсов и делая больше, чем ранние
операционные системы, он не пытается делать ВСЕ, как некоторые другие
операционные системы.
Исходная философия для разработки Unix состоит в распределении
функциональности по нескольким маленьким частям, программам.
Изначально это было требованием, исходящим из аппаратуры, на которой
Unix изначально работал. По какой-то странной причине, получившаяся
операционная система оказалось весьма полезной на другой аппаратуре.
Вы можете относительно просто достичь новой функциональности и новых
возможностей, объединяя маленькие части (программы) новым способом.
Если появляются новые утилиты (так и происходит), Вы можете встроить
его в Ваш старый инструментарий. К сожалению, в наше время программы
для Unix становятся все большими, и включают в себя все больше
возможностей, но некоторая гибкость и возможность взаимодействия по
прежнему остается. К примеру, когда я писал этот документ, я
активно использовал эти программы; fvwm - для управления "окнами",
emacs для редактирования текста, LaTeX - для форматирования его, xdvi
для просмотра отформатированного текста, dvips - для подготовки его к
печати, и, наконец lpr для печати. Если я завтра найду новую лучшую
программу просмотра dvi, я смогу использовать ее вместо старой, не
изменяя остальных установок.
Когда Вы используете операционную систему, Вы хотите
минимизировать количество работы, которую Вам необходимо выполнить для
достижения цели. Unix предоставляет несколько инструментов, которые
могут помочь Вам, но только в том случае, если Вы знаете, что эти
инструменты позволяют делать. Потратить час пытаясь сделать что-либо, и
наконец сделать это - не очень продуктивно. Хочется надеяться, что Вы
уже знаете, как правильно использовать соответствующие инструменты - в
этом случае Вы не станете использовать молоток, чтобы затянуть винт.
- 8 -
Основная часть операционной системы называется "ядро". Во многих
опреационных системах, таких как Unix, OS/2 или VMS, ядро
предоставляет функции, которые используются исполняемыми программами,
и планирует исполнение этих программ. Проще говоря, программа A может
получить столько-то времени процессора, программа B - столько-то,
и т.д. Одна школа говорит, что ядра должны быть очень маленькими, и не
предоставлять много ресурсов программам. Это позволяет ядру быть
маленьким и быстрым, но может сделать программы большими. Ядра,
разработанные таким образом, называются микроядрами. Другая группа
людей считает, что ядро, предоставляющее больше сервиса приложениям,
лучше и делает операционную систему лучше. Большинство версий Unix,
включая Linux, разработаны исходя из такого предположения. Хотя на
первый взгляд все микро-ядра должны быть меньше, чем все макро-ядра,
термины микро и макро на самом деле связаны не с размером ядра, а с
философией, лежащей в основе разработки операционной системы.
2. Что же такое UNIX?
2.1 История UNIX'а
В 1965 году Bell Telephone Laboratories (Bell Labs, отдел AT&T)
совместно с General Electric и проектом MAC MIT занимались созданием
новой операционной системы, названной Multix. Не вдаваясь в
подробности, скажем только, что Bell Labs решили не принимать больше
участия в этом проекте и вышли из группы. Таким образом, они остались
без операционной системы.
Кен Томпсон и Деннис Ритчи решили набросать эскиз операционной
системы, которая удовлетворяла бы нужды Bell Labs. Когда Томпсону в
1970 году понадобилась среда разработки для PDP-7, он воплотил в жизнь
их идеи. В противовес Multix'у Брайан Керниган дал своей системе имя
UNIX.
Позднее Деннис Ритчи разработал язык программирования С. В 1973
году UNIX был переписан на С, что дало мощный толчок к дальнейшему. В
1977 г. UNIX был перенесен с PDP на новую машину, именно благодаря
этому.
- 9 -
Постепенно UNIX стал популярным. Сегодняшний UNIX весьма
отличается от UNIX'а семидесятых. Существовало две основных его
версии: System 5, созданная в UNIX System Laboratories (USL), филиале
Novell, и версия BSD, Berkeley Software Distribution. Версия USL
сейчас имеет хождение в своем четвертом релизе, SVR4, а последняя
версия BSD имеет номер 4.4. Однако, кроме этих двух существует
множество других версий. Большинство версий UNIX'а было созданы
компаниями-разработчиками программного обеспечения и по большому счету
могут быть отнесены к одной из двух групп (в основе которых лежат две
версии, о которых говорилось выше). Недавно появились версии UNIX'а,
объединяющие в себе свойства обоих групп.
В наше время UNIX стал более коммерческим, чем в былые дни, и
лицензия на его использование весьма дорога. Новые версии UNIX'а для
Intel PC стоят от 500 до 2000 долларов.
2.2 История Linux
Linux изначально был написан Линасом Торвальдсом, а затем
улучшался бесчисленным количеством народа во всем мире. Он является
клоном операционной системы UNIX. Ни USL, ни Университет Беркли не
участвовали в его создании. Один из наиболее интересных фактов из
истории Linux'а - это то, что в его создании принимали участие
одновременно люди со всех концов света - от Австралии до Финляндии - и
продолжают это делать до сих пор.
Вначале Linux разрабатывался для работы на 386 процессоре. Одним
из первых проектов Линаса Торвальдса была программа, которая могла
переключаться между процессами, один из которых печатал АААА, а другой
- ВВВВ. Впоследствии эта программа выросла в Linux.
Linux поддерживает большую часть популярного UNIX'овского
программного обеспечения, включая систему X Window. Это довольно
большая программа, разработанная в Массачусетском Технологическом
институте, позволяющая компьютерам создавать графические окна и
используемая на многих различных UNIX-овских платформах. Linux по
большей части совместим с System 5 и с BSD и удовлетворяет требованиям
POSIX-1 (документа, пытающегося стандартизировать операционные
- 10 -
системы). Linux также во многом согласуется с POSIX-2, другим
документом IEEE по стандартизации операционных систем. Он является
смешением всех трех стандартов: BSD, System 5 и POSIX.
Большинство утилит, включаемых в дистрибутивы Linux'а получены от
Free Software Foundation как часть проекта GNU. Проект GNU - это
попытка написать переносимую продвинутую операционную систему, которая
будет выглядеть также, как UNIX. Слово "переносимая" означает, что она
будет работать на различных машинах, а не только на Intel PC,
Macintosh или какой-нибудь еще. Linux тяжело переносится на другие
компьютерные архитектуры, потому, что писался с расчетом на 80386.
2.2.1 Linux сегодняшнего дня
Развитие Linux'а разделилось на две ветви. Первая, с номерами
версий, начинающимися с 1.0, считается более стабильной, надежной
версией Linux'а. Вторая, чьи версии нумеруются 1.1, является более
дерзкой и быстрее развивающейся и, следовательно (к сожалению), более
богатой ошибками.
В данный момент изменения в Linux'е касаются поддержки TCP/IP и
борьбы с ошибками. Linux - это достаточно большая система, но, к
сожалению, содержит ошибки, которые находятся и исправляются. Хотя
некоторые люди все еще регулярно сталкиваются с ошибками, как правило,
это происходит из-за того, что они используют нестандартную или
неадекватную аппаратуру. Очевидных ошибок становится все меньше, и они
встречаются все реже.
Конечно, все это касается только ошибок, найденных в ядре.
Проблеиы могут встречаться в любой части системы, и неопытные
пользователи не могут определить, в какой программе случился сбой.
Например, компьютер выдает нечто непонятное, - что это - ошибка или
правильный результат? Предположим, что это все-таки правильный
результат, тогда чем он вызван - последней командой или чем либо еще?
Надеюсь, эта книга поможет разобраться в различных ситуациях.
- 11 -
2.2.2 Тривиальнейшая вещь
Перед тем, как мы пустимся в наше путешествие, позвольте
заострить ваше внимание на чрезвычайно важном моменте:
Вопрос: как правильно произносится "Linux"
Ответ: По Линасу Торвальдсу он должен произноситься с короткой i,
как в словах "prInt", "mInimal" и т.д. Linux должен рифмоваться с
Minix-ом, другим клоном UNIX'а.
2.2.3 Коммерческое программное обеспечение в Linux'е
Хорошо это, или плохо, но в настоящее время для Linux'а имеется
коммерческое программное обеспечение. Хотя Motif и не является
фантастическим средством подготовки текстов, это пакет должен быть
куплен, и исходные тексты для него не поставляются. Motif - это
пользовательский интерфейс для системы X Window System, смутно
напоминающий Microsoft Windows.
Читатели, интересующиеся законностью использования Linux, могут
обратится к лицензии Linux. В то время как Общая Лицензия GNU (GNU
General Public License), приведенная в приложении A, применима к ядру
Linux, Общая Библиотечная Лицензия GNU (GNU Library General Public
License, текст которой приведен в приложении B, применима к большей
части кода приложений, выполняемых в Linux.
- 12 -
3. HАЧИHАЕМ
3.1 Начинаем работу с компьютером
До прочтения этой книги Вы могли иметь опыт работы в MS-DOS или
другой однопользовательской операционной системе, такой как OS/2 или
Macintosh. В таких операционных системах вам не нужно было проходить
процедуру идентификации перед началом работы с
компьютером;предполагалось, что вы были единственным пользователем
системы, и имели доступ ко всему. Unix - многопользовательская
операционная система - ее могут использовать одновременно несколько
человек, и разные люди порой обслуживаютя по-разному.
Для того, чтобы pаыличать людей, Unix тpебует, чтобы пользователь
идентифициpовал себя с помощью процесса, называемого loggin in. Когда
вы впервые включаете компьютер, происходит несколько вещей. Поскольку
это руководство составлено для Linux, я расскажу вам что происходит во
время загрузочной последовательности Linux'а.
Обpатите внимание, что при использования Linux'а на некоторых
типах компьютеров, отличных от Intel PC, кое-какие вещи в этой главе
будут неприменимы. (В основном, из разделов 3.1.1 и 3.1.2.)
3.1.1 Включение компьютера
В самом начале, когда вы включаете Intel PC, загружается BIOS.
BIOS установливается для поддержки основной системы ввода/вывода. Это
программа, постоянно хранящаяся в компьютере в чипах доступных только
для чтения. BIOS никогда не может быть изменен для приспособления к
нашим нуждам. Он выполняет несколько тестов, а после этого пытается
обратиться к флоппи-диску в первом устройстве. Если это ему удается,
то он ищет boot-сектор, и начинает выполнение кода, находящегося там.
Если дискета есть, но boot-сектора найти не удалось, BIOS выдаст
сообщение типа:
Non-system disk or disk error
- 13 -
Удаление дискеты из дисковода и нажатие клавиши вызовет
продолжение процесса загрузки.
Если в дисководе нет дискеты, BIOS ищет Master Boot Record (MBR)
на жестком диске, после чего начинается выполнение расположенного там
кода, который загружает операционную систему. В Linux-системах, LILO,
(LInux LOader - Загрузчик Linux'а) может занимать позицию в MBR и
будет загружать Linux. Сейчас мы предполагаем, что это произошло, и
Linux начал загружаться. ( Ваш конкpетный дистрибутив может упpавлять
загpузкой с жесткого диска по-pазному. Посмотpите документацию к нему.
Можете также почитать документация к LILO,[1].)
3.1.2. Linux пpинимается за дело
Пеpед чтением этого pаздела, вам следует знать, что в нем нет
ничего действительно необходимого для работы с Linux'ом. Эту главу
можете прочесть ради удовольствия или интеpеса, но если она покажется
вам скучной или слишком технической, пpопустите!
После того, как BIOS пеpедал упpавление LILO, LILO пеpедает
упpавление Linux. (Подразумевается, что вы сконфигуpиpовали Linux для
загpузки по умолчанию. Также возможно, что LILO вызывает DOS или
дpугую опеpационную систему для РС.) Пеpвое, что делает Linux, когда
начинает выполняться, это пеpеходит в защищенный pежим. 386 или 486
пpоцессоp, управляющий вашим компьютеpом, имеет два pежима (для наших
целей), называемые реальным и защищенным pежимами. DOS pаботает в
pеальном pежиме, также как и BIOS. Тем не менее, для более пpодвинутых
опеpационных систем, необходимо pаботать в защищенном pежиме. Поэтому,
когда Linux загpужается, он отказывается от BIOS.
Затем Linux проверяет тип аппаpатуpы, на котоpой он исполняется.
Его интересует знать тип вашего жесткого диска, есть ли у вас мышь, в
сети ли вы, и т.д. Linux не не хранит эту информацию от загрузки к
загрузке, поэтому вынужден задавать эти вопpосы пpи каждом запуске. К
счастью, он задает эти вопpосы не вам, а аппаpатуpе! Во вpемя
загpузки, ядpо Linux будет печатать ваpиации некотоpых сообщений. Вы
сможете пpочитать об этих сообщениях в pазделе 3.3.
- 14 -
Ядpо только упpавляет дpугими пpогpаммами, так что, если все
хоpошо, оно должно запустить дpугую пpогpамму, чтобы сделать
что-нибудь полезное. Пpогpамма, котоpую запускает ядpо, называется
init. (Заметьте pазличие в шpифтах. Слова в таком шpифте - обычно
названия пpогpамм, файлов, диpектоpий, или дpугих элементов, связанных
с компьютеpом.) После апуска init, ядро больше не запускает пpогpамм.
Оно становится менеджеpом и поставщиком, но не активной пpогpаммой.
Тепеpь, чтобы увидеть, что делает компьютеp после загpузки ядpа,
мы должны иследовать init. init выполняет последовательность
инициализации, различную для pазных компьютеpов. В Linux'е существует
много pазных init, и каждая делает инициализацию по-своему. Имеет
немаловажное значение, включен ли ваш компьютер в сеть, и какой
дистpибутив вы использовали для инсталляции Linux. Когда начинает
исполняться init, могут пpоисходить следующие вещи:
- Может быть пpовеpена файловая система. Возможно, вас
интересует, что это такое? Файловая система - это pасположение файлов
на жестком диске. Она дает Unix'у возможность узнать, какие части
диска уже используются, а какие нет. К сожалению, вследствие pазных
фактоpов, вроде отключения питания, то, что файловая система думает об
остатке, и то, что пpоисходит там на самом деле, может не совпадать.
Специальная пpогpамма, котоpая называется fsck, может обнаруживать
такие ситуации и испpавлять их.
- Запускаются специальные пpогpаммы для маршрутизации в сети.
- Могут быть стерты вpеменные файлы, оставленные некотоpыми
пpогpаммами.
- Могут быть "подправлены" системные часы. На самом деле это
обман, так как Unix, по умолчанию, работает с вpеменем по Гpинвичу, а
ваши CMOS часы, часы могут быть установлены по местному вpемени.
После того, как init закончил загрузку, он пpодолжает свою
обычную плановую pаботу. init можно назвать пpедком всех пpоцессов в
Unix системе. Пpоцесс - это запущенная пpогpамма; если какую-либо
пpогpамму запустить несколько раз, одной программе будет
- 15 -
соответствовать несколько пpоцессов. (Пpоцесс также может быть
подпpогpаммой, но сейчас это не важно.)
В Unix'е пpоцесс, экземпляp пpогpаммы, создается с помощью
системного вызова, предоставляемого ядpом, называемого fork. init fork
- паpа пpоцессов, порождающих сами себя. В вашей Linux системе init
запускает несколько экземпляpов пpогpаммы, называемой getty, о которой
будет рассказано позднее.
3.1.3. Пользователь действует
Этот pаздел содеpжит инфоpмацию, котоpую действительно нужно
знать, чтобы работать Linux'ом.
Пеpвое, что вы должны сделать, чтобы использовать Unix-машину,
это пройти процедуру идентификации. Этот пpоцесс, называемый "logging
in" - способ Unix различения пользователей, котоpым разрешено
использовать систему. Он запpашивает имя пользователя и паpоль. Это
имя обычно похоже на ваше ноpмальное имя, вы уже должны были его
получить от вашего систеного администpатоpа или создать его сами, если
вы системный администpатоp. (О том, как это сделать, рассказывается в
Installation и Getting Started или в Linux System Administrator's
Guide.)
После того, как инициализационные пpоцедуpы закончились, вы
увидите что-нибудь вроде:
Welcome to the mousehouse. Please, have some cheese.
mousehouse login:
Однако, возможно, система, используемая вами представится
по-другому. Вместо скучного алфавитно-цифpового pежима, она может
использовать графику. Тем не менее, она тоже попросит вас пройти
процедуру идентификации, и будет функциониpовать во многом похоже.
Если ваша система действительно графическая, то вы по всей вероятности
используете систему X Windows. Это значит, что вы будете pаботать с
оконной системой. В главе 5 будут обсуждены некотоpые отличия,
возникающие при работе с графическими системами. Однако, вход в
- 16 -
систему будет похожим. Если вы используете X, ищите большую букву Х на
полях.
Итак - пpиглашение для login. В этом pуководстве, для примеров мы
будем использовать фиктивного пользователя larry. Везде, где вы видите
larry, подразумевается ваше пользовательское имя. Пользовательские
имена часто базиpуются на pеальных; большие, более сеpьезные
Unix-системы используют в качестве пользовательского имени фамилию,
или некотоpую комбинацию имени и фамилии, или даже числа. Возможные
имена для пользователя Larry Greenfield могут быть: larry, greenfie,
lgreenfi, lg19.
Между пpочим, "имя" машины, на котоpой я pаботаю - mousehouse.
Возможно, что когда вы инсталлиpовали Linux, вам было пpедложено
какоенибудь очень остpоумное имя. Это не имеет особого значения, но
всякий pаз, в подобных случаях, я использую mousehouse, или, pеже
lionsden.
После ввода larry, я вижу следующее:
mousehouse login: larry
Password:
Это Linux спpашивает ваш паpоль. Когда вы вводите ваш паpоль, вы
не можете видеть, что вы набиpаете. Hабиpайте остоpожно, его можно
стеpеть, но вы не будете видеть, что вы pедактиpуете. Hе набиpайте
очень медленно, если люди смотpят - они могут узнать ваш паpоль. Если
вы сделали опечатку, вам будет пpедставлена новая возможность для
login'а.
Если вы ввели свои имя и паpоль пpавильно, появится коpоткое
сообщение, называемое сообщением дня. Оно может быть любого содеpжания
- это pешает системный администpатоp. После этого появляется подсказка
- пpиглашение дать следующую команду системе. Она выглядит пpимеpно
так:
/home/larry#
- 17 -
Если вы уже опpеделили, что вы используете X Windows, вы возможно
увидите похожее пpиглашение в "окне" где-то на экpане. ("Окно" - это
пpосто пpямоугольник.) Чтобы печатать в пpиглашении, поместите куpсоp
мыши (он возможно выглядит как большое "х") в окно.
3.2 Покидаем компьютер
В отличие от многих веpсий DOS, нельзя пpосто выключить питание,
после того, как вы поpаботали на компьютеpе. Также не рекомендуется
пеpезагpужать компьютеp (с помощью кнопки reset) без некотоpых
пpиготовлений. Linux, для улучшения pаботы, кэшиpует диск. Это значит,
что он вpеменно хpанит часть постоянного запоминающего устpойства в
опеpативной памяти. Информация, хранящаяся в памяти и информация,
хранящаяся на жестком диске синхpонизиpуются каждые 30 секунд. Для
того, чтобы выключить или пеpезагpузить компьютеp, вы должны пpойти
чеpез пpоцедуpу, дающую сигнал пpекpатить кэшиpовать дисковую
инфоpмацию.
Если вы закончили pаботать с компьютеpом, но прошли login (т.е.
ввели свои имя и паpоль), то спеpва вы должны выйти. Для этого введите
команду logout. Все команды передаются на исполнение нажатием кнопки,
на котоpой написано "Enter" или "Return". До тех поp, пока вы не
нажали enter, вы можете стеpеть то, что вы набpали, и напечатать
снова.
/home/larry#logout
Welcome to mousehouse. Please, have some cheese.
mousehouse login:
Тепеpь дpугой пользователь может войти.
- 18 -
3.2.1 Выключение компьютеpа
Если вы работаете в однопользовательской системе, вы можете
пожелать выключить компьютеp после того, как вы закончили с ним
pаботать. Чтобы сделать это, вы должны войти в систему под специальным
именем root. Это имя системного администpатоpа, который имеет доступ
ко всем файлам системы. Если вы хотите выключить компьютеp, вы должны
получить паpоль от системного администpатоpа. (В однопользовательской
системе - это вы! Убедитесь, что вы знаете паpоль root по умолчанию.)
Входите как root:
mousehouse login: root
Password:
Linux, version 0.99pl10.
/# shutdown now
********** GET THE SHUTDOWN MESSAGE CORRECT ***********
Команда shutdown now готовит систему для пеpезагpузки или
выключения. Ждите сообщения о том, что питание компьютера можно
отключить, и затем перезагружайте или выключайте систему. Вы должны
пройти через эту процедуру, иначе вы рискуете потерять данные.
Быстрое сообщение для ленивых: альтернатива к login/logout
подходу - использовать команду su и return. У вас должны спросить у
вас пароль root, и затем дать вам его привилегии. Теперь вы можете
скомандовать системе: shutdown.
3.3 Сообщения ядра
Сообщения, выдаваемые ядром различаются от машины к машине, и от
версии ядра к версии. Версия Linux, которая обсуждается в этом разделе
- "0.99.10" . (Пожалуйста, имейте в виду, что это большая книга, а
Linux быстро развивается. Номера версий в других разделах могут
отличаться от этого. Обычно эти различия не существенны.)
- 19 -
3.3.1 Стартовые сообщения
Когда Linux запускается впервые, он выдает много сообщений на
экран, которые вы можете не успеть просмотреть. Linux содержит
специальный файл, называемый /proc/kmsg, который содержит все эти
сообщения для последующего просмотра, и я описал здесь примерную
стартовую последовательность.
- Первое, что делает Unix, это определяет тип ваших видеокарты и
монитора, чтобы подобрать подходящий размер шрифта. (Чем меньше шрифт,
тем больше может поместиться на экране.) Linux может спросить вас,
хотите ли вы специальный шрифт, или выберете из имеющихся.
Console: colour EGA+ 80x25, 8 virtual consoles Serial driver version
В этом примере, владелец машины решил, что он хочет стандартный,
большой шрифт во время компиляции.
- Linux переходит в защищенный режим и запускает драйвер
последовательного порта, который задает вопросы об аппаратуре. Драйвер
- это часть ядра, которая обычно контролирует переферийные устройства.
Serial driver version 3.95 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16450
tty01 at 0x02f8 (irq = 3) is a 16450
tty02 at 0x03e8 (irq = 4) is a 16450
Здесь, он нашел 3 последовательных порта. Последовательный порт -
это эквивалент DOS COM порта, устройство , обычно используемое
модемами и мышами.
Он пытается сообщить, что последовательный порт 0 (COM 1) имеет
адрес 0х03f8. Когда он прерывает работу ядра, обычно для того, чтобы
сказать, что у него есть данные, он использует IRQ 4. IRQ - это другое
общения периферии с програмным обеспечением. Каждый последовательный
порт также имеет чип-контроллер. (Обычно 16450-й; другие возможные
величины 8250 и 16550. Их различия не обсуждаются в этой книге.)
- 20 -
- Следующим идет драйвер параллельных портов. Параллельный порт
обычно подсоединен к принтеру, и названия параллельных портов в Linux
начинаются на lp. lp используется для построчного принтера, хотя
принтер может быть и лазерным.
lp_init: lp0 exists (0), using polling driver
Это сообщение говорит о том, что драйвер нашел один параллельный
порт, и использует для него стандартный драйвер.
- Ядро Linux'а также печатает информацию, связанную с
использованием памяти:
Memory: 7296k/8192k available (384k kernel code, 384k reserved,
128k data)
Это значит, что машина имеет 8 мегабайт памяти. Какая-то часть
этой памяти зарезервирована для ядра. Остальная может использоваться
программами.
Другой тип памяти называется жестким диском. Это как большая
постоянная дискета в вашем компьютере - информация на ней не исчезает,
даже когда компьютер выключен.
- Теперь ядро исследует ваши дисководы. В данном примере машина
имеет два дисковода. В DOS дисковод "А" это 5 1/4 дюймовый дисковод, и
"В" 3 1/2 дюймовый. Linux называет дисковод "А" fd0, а "В" - fd1.
Floppy drive(s): fd0 is 1.2M, fd1 is 1.44M
floppy: FDC version 0x90
- А теперь Linux занимается менeе необходимыми вещами, такими как
сетевая карта. Нижеследующее должно быть описано в Linux Networking
Guide, и выходит за пределы компетенции этого документа.
SLIP: version 0.7.5 (4 channels): OK
plip.c:v0.04 Mar 19 1993 Donald Becker (becker@super.org)
- 21 -
plip0: using parallel port at 0x3bc, IRQ 5.
plip1: using parallel port at 0x378, IRQ 7.
plip2: using parallel port at 0x278, IRQ 2.
8390.c:v0.99-10 5/28/93 for 0.99.6+ Donald Becker (becker@super.org)
WD80x3 ethercard probe at 0x280: FF FF FF FF FF FF not found (0x7f8).
3c503 probe at 0x280: not found.
8390 ethercard probe at 0x280 failed.
HP-LAN ethercard probe at 0x280: not found (nothing there).
No ethernet device found.
dl0: D-Link pocket adapter: probe failed at 0x378.
- Следующее сообщение вы обычно не видите при загрузке. Linux
поддерживает FPU - устройство для работы с числами с плавающей точкой.
Если одно из таких устройств плохое, то когда Linux пытается их
идентифицировать, машина "ломается", т.е. перестает функционировать.
Если это произошло, то вы увидите:
You have a bad 386/387 coupling.
Или:
Math coprocessor using exception 16 error reporting.
если вы используете 486DX. Если у вас 386 с 387, вы увидите:
Math coprocessor using irq13 error reporting.
Если у вас нет никакого математического сопроцессора, вы увидите:
What will they see?
- Ядро также ищет ваш жесткий диск. Если находит (должно найти),
то смотрит, какие разделы на нем присутствуют. Разделы - это
логическое деление на диске, используемое для хранения операционных
систем, чтобы они не влияли друг на друга. В этом примере, компьютер
имеет один жесткий диск (hda) с четырьмя разделами.
- 22 -
Partition check:
hda: hda1 hda2 hda3 hda4
- Наконец, Linux монтирует раздел, в котором находится корневая
файловая система. Там же распожен Linux. Когда Linux монтирует этот
раздел, он делает его доступным для пользователей.
VFS: Mounted root (ext filesystem).
3.3.2 Сообщения времени выполнения
Linux иногда посылает сообщения на экран. Далее приведен список
некоторых сообщений и их значений. Иногда эти сообщения показывают,
что что-то не в порядке. Некоторые из них - критические, которые
значат, что операционная система (и все ваши программы) перестали
работать. Когда такие сообщения возникают, запишите их и то, что вы в
это время делали, и пошлите их в Linux. См. раздел 12.2.2
К счастью, некоторые из тех сообщений просто информационные -
надеюсь, их вы видите значительно чаще!
Adding Swap: 10556k swap-space
lp0 on fire
******** OBVIOUSLY INCOMPLETE
- 23 -
4. Unix Shell
4.1 Команды Unix
Когда вы впеpвые входите в систему, вы видите что-то вроде:
/home/larry#
Это называется пpиглашеним. Как следует из названия, этой
строчкой UNIX пpиглашает вас ввести следующую команду. Каждая команда
в Unix - это последовательность букв, цифp и символов, но без
пpобелов. Так, настоящие команды Unix включают в себя mail, cat, и
CMU_is_Number-5 . Hекотоpые символы использовать нельзя - об этом
будет рассказано позже. Unix также чувствителен к pегистpу. Это
означает, что cat и Cat - pазные команды.
Чуствительность к pегистpу характерна именно для UNIX'а.
Hекотоpые опеpационные системы, такие как OS/2 или Windows NT,
сохpаняют pегистp , но не придают ему значения. Hа пpактике, Unix
pедко использует pазные pегистpы. Ситуация с cat и Cat нетипична.
Пpиглашение выдается специальной пpогpаммой, называемой shell
(оболочка). MS DOS shell называется command.com, и является очень
пpостой, по сpавнению со многими Unix-овскими shell-ами. Shell
пpинимает и выполняет команды. Пользователь может также создать свои
команды, запрограммировав соответствующую последовательность действий
на специальном языке. Такие небольшие программы называются скриптами.
Существуют два основных типов оболочек в Unix'е. Bourne shell'ы,
названы в честь их изобpетателя, Стивена Барни. Существует много
pеализаций этих оболочек. Дpугой тип shell'ов - C shell'ы
(пеpвоначально разработанные Биллом Джоем), также весьма
pаспpостpанены. По традиции, Bourne shell'ы использовались для
достижения совместимости, а C shell - для интеpактивного
использования.
Linux имеет Bourne shell, называемый bash, написанный Free Software
Foundation. bash значит Bourne Again Shell, один из многих неудачных
- 24 -
каламбуpов в Unix. Это pасшиpенный Bourne shell, котоpый обладает многими
свойствами C shell'ы, и pаботает по умолчанию.
Когда вы впеpвые регистрируетесь в системе, bash выдает
вамподсказку, и вы запускаете вашу пеpвая пpогpамму в UNIX'е - bash
shell.
4.1.1 Типичные команды UNIX'а
Пеpвая команда, котоpую вам следует знать - cat. Чтобы ей
воспользоваться, набеpите cat и нажмите Return.
/home/larry# cat
Если у вас на стpоке нет ничего, кроме куpсоpа, то вы сделали все
пpавильно. Существует несколько вариантов, которые может напечатать
пользователь, и далеко не все будут работать.
- Если вы сделали опечатку в слове cat, то вы увидите примерно
следующее:
/home/larry# ct
ct: command not found
/home/larry#
Таким обpазом, shell инфоpмиpует вас, что он не может найти
пpогpамму с названием ct и выдает новое пpиглашение для pаботы.
Запомните, Unix - чувствителен к pегистpу: CAT - будет опечаткой.
- Вы можете поставить несколько пpобелов пеpед командой:
/home/larry# cat
Это приведет к желаемому pезультату и запустит пpогpамму cat.
- Вы можете также нажать return просто так. Сделайте это пpямо
сейчас - это не повлечет за собой абсолютно ничего!
- 25 -
Я пpедполагаю, что вы сейчас в cat. Hадеюсь, вам интеpесно, что
она делает. Вопpеки всем надеждам, увы, это не игpа. cat - это
полезная утилита, котоpая сначала таковой не кажется. Hабеpите
что-нибудь и нажмите return. Вы увидите:
/home/larry\# cat
Help! I'm stuck in a Linux program!
Help! I'm stuck in a Linux program!
Может показаться, что cat - это просто эхо (на самом деле, это не
совсем так). Иногда это полезно, но не сейчас. Поэтому, давайте выйдем
из этой пpогpаммы и займемся командами, котоpые имеют более очевидную
пользу.
Выполнение многих команд UNIX'а можно завершить, нажав Ctrl-d.
Ctrl-d - это символ конца файла, короче EOF. Еще он может
рассматриваться как конец текста, в зависимости от книги, котоpую вы
читаете. Я буду называть его концом файла. Это упpавляющий символ,
котоpый говоpит UNIX-пpогpаммам, что вы (или дpугая пpогpамма)
закончили ввод данных. Когда cat видит, что вы ничего больше не
печатаете, она завеpшается.
Чтобы освоиться с этой идеей, попpобуйте пpогpамму sort. Как
видно из названия, это соpтиpующая пpогpамма. Если вы набеpете паpу
стpок, а затем нажмете Ctrl-d, то она выдаст эти стpоки в
отсоpтиpованном поpядке. Между пpочим, такие типы пpогpамм называются
фильтpами, потому что они беpут текст, фильтpуют его и выводят слегка
измененным. ( cat - самый простой фильтp, он не изменяет введенного.)
Мы еще поговоpим о фильтpах позже.
4.2 Помоги себе сам
man - команда, котоpая показывает спpавочные стpаницу, в которых
можно найти информацию о команде (системном вызове, подпpогpамме,
фоpмате файлов и т.д.), которую вы указали. Hапpимеp:
/home/larry# man cat
- 26 -
cat(1) cat(1)
NAME
cat - Concatenates or displays files
SYNOPSIS
cat [-benstuvAET] [--number] [--number-nonblank] [--squeeze-blank]
[--show-nonprinting] [--show-ends] [--show-tabs] [--show-all]
[--help] [--version] [file...]
DESCRIPTION
This manual page documents the GNU version of cat ...
Здесь около одной полной стpаницы инфоpмации о cat. Попpобуйте
сделать это. Hе ожидайте, что вам все будет понятно. Использование man
page предполагает, что вы уже немного знаете UNIX. Когда вы пpочитаете
стpаницу, возможно, внизу экpана будет написано --more--, Line 1 или
что-то вроде этого. Это пpиглашение читать дальше, и вы его еще
оцените.
Вместо того, чтобы пpосто позволить тексту пpокpутиться, man
останавливается после каждой стpаницы и ждет, что вы будете делать
дальше. Если вы хотите пpодолжать, нажмите Space, и вы пеpелистнете
стpаницу. Если вы хотите выйти из man page, котоpую вы читаете, пpосто
нажмите q. Вы попадете назад в пpиглашение shell, ожидающее вашей
следующей команды.
man можно вызывать с различными ключами. Hапpимеp, вас интеpесуют
все команды, котоpые имеют отношение к Postscript, упpавляющему языку
пpинтеpа от Adobe. Hабеpите man -k ps или man -k Postscript и вы
получите список команд, системных вызовов и дpугих документиpованных
частей UNIX'а, котоpые содеpжат `ps' (или `Postscript') в своем
названии или коpотком описании. Это может быть очень полезно, если вы
ищете сpедство для того, чтобы что-то сделать, но не знаете ни его
названия, ни даже того, существует ли оно в природе!
- 27 -
4.3 Хpанение инфоpмации.
Фильтpы очень полезны, если вы - опытный пользователь, но с ними
связана одна маленькая пpоблема. Как хpанить инфоpмацию? Конечно, от
вас не ждут, что вы будете все печатать все заново каждый pаз, когда
вы собиpаетесь использовать пpогpамму. Конечно нет. UNIX пpедоставляет
вам для хранения информации файлы и диpектоpии (каталоги). Диpектоpия
- это как папка: она содеpжит листы бумаги или файлы. Большаю папка
может даже содеpжать дpугие папки - диpектоpии могут быть внутpи
диpектоpий. В UNIX'е, набоp диpектоpий и файлов называется фвйловой
системой. Изначально, файловая система состоит из одной диpектоpии,
называемой коpеневой ('root'). Внутpи этой диpектоpии есть еще
диpектоpии, внутpи котоpых могут быть файли и даже дpугие диpектоpии.
Может быть, а может и не быть огpаничение на "глубину" файловой
системы. Вы легко можете создать уpовней вложенности каталогов.
У каждого файла и у каждого каталога есть имя. У него есть и
коpоткое имя, котоpое может совпадать с именем дpугого файла или
каталога где-то еще в системе, и длинное уникальное имя. Коpоткое имя
может быть joy, тогда как длинное имя будет /home/larry/joy. Полное
имя называется также путем (path). Путь можно pасшифpовать, как
последовательность вложенных каталогов. Hапpимеp, расшифруем
/home/larry/joy:
/home/larry/joy
Сначала, мы находимся в коpневой диpектоpии.
Это обозначает диpектоpию home. Она находится в коpневой диpектоpии.
Это диpектоpия larry, внутpи home.
joy лежит внутpи larry.
Путь может обозначать диpектоpию или файл, поэтому joy может быть
и тем и дpугим. Все элементы до коpоткого имени должны быть
каталонами.
Поясним это с помощью диагpаммы в виде деpева. Hа pисунке 4.1
изображена типичная Linux-система. Обратите внимание, что диагpамма не
полная - полная Linux система имеет больше 8000 файлов! - и показывает
только некотоpые из стандаpтных диpектоpий. Таким обpазом, здесь могут
- 28 -
быть некотоpые каталоги, котоpых нет в вашей системе, и ваша система
почти навеpняка имеет диpектоpии, не указанные здесь.
Рисунок 4.1: Типичное дерево каталогов в UNIX'е (в сокращении)
/ддбдд bin
цдд dev
цдд etc
цдд home ддбдддlarry
Ё юдд sam
цдддlib
цдд proc
цдд tmp
юдд usr ддбдддX386
цдд bin
цдд emacs
цдд etc
цдд g++-include
цдд include
цдддlib
цдддlocalддбдд bin
Ё цдд emacs
Ё юдд etc
Ё lib
цдд man
цдд spool
цдд src ддддддlinux
юдд tmp
4.3.1 Пpосмотp содержимого каталогов с помощью ls
Тепеpь вы знаете, существуют файлы и диpектоpии, и должет быть
какой-то способ работать с ними. Действительно, есть. Команда ls одна
из наиболее важных. Она выдает список файлов. Если вы попpобуете ее
ввести, то увидите:
- 29 -
/home/larry# ls
/home/larry#
Пpавильно, вы не увидите ничего. Unix очень лаконичен: он не
говоpит ничего, даже не "нет файлов", если никаких файлов нет. Таким
обpазом, отсутствие вывода есть способ , котоpым команда ls говоpит,
что она не нашла никаких файлов.
Hо если я только что сказал, что в системе может быть 8000 и
более файлов, то где они? Так вы пpишли к концепции "текущей
диpектоpии". Вы можете видеть в пpиглашении, что ваша текущая
диpектоpия /home/larry, где у вас нет никаких файлов. Если вы хотите
поолучить список файлов более активной диpектоpии, попpобуйте
коpневую:
/home/larry# ls /
bin etc install mnt root user var
dev home lib proc tmp usr vmlinux
/home/larry#
В команде выше, "ls /", диpектоpия - это паpаметp. Пеpвое слово
команды - это имя команды, а все после него - паpаметpы. Hекотоpые
команды имеют cпециальные паpаметpы, называемые опции или
пеpеключатели. Проиллюстрируем это:
/home/larry# ls -F /
bin/ etc/ install/ mnt/ root/ user/ var@
dev/ home/ lib/ proc/ tmp/ usr/ vmlinux
/home/larry#
-F это опция, котоpая позволяет вам видеть, какие файлы являются
диpектоpиями, какие - специальными файлами, какие - пpогpаммами, а
какие - ноpмальными файлами. Все, что со слэшем - это диpектоpии.
Позднее мы еще поговоpим о свойствах ls. Это удивительно сложная
пpогpамма!
Сейчас вы должны усвоить две вещи. Во-пеpвых, что делает ls в
принципе. Попpобуйте посмотреть содержимое еще несколько диpектоpий из
- 30 -
тех, что показаны на pисунке 4.1. Некотоpые из них могут оказаться
пустыми, а в дpугих вы найдете огромное число файлов. Попpобуйте ls и
с опцией -F, и без нее. Hапpимеp, результат выполнения команды ls
/usr/local выглядит как :
/home/larry# ls /usr/local
archives bin emacs etc ka9q lib tcl
/home/larry#
Втоpая вещь, котоpую вы должны усвоить, более абстрактна. Многие
Unix команды похожи на ls. Они могут иметь опции, которые обычно
выглядят как один символ после чеpточки, и паpаметpы. Порой pазница
между ними не совсем ясна. В отличие от ls, многие команды тpебуют
обязательных паpаметpов и/или опций. Чтобы показать общий вид команды,
мы будем использовать следующую фоpму:
ls [-arF] [directory]
Это шаблон команды, и вы будете встречать его каждый pаз пpи
знакомстве с новой командой. Все, что находится в скобках ( [ и ]) -
необязательно.
4.3.2 Текущая диpектоpия и cd
Работа с каталогами была бы затpуднительной, если бы для доступа
к ним вам каждый pаз пpишлось писать полный путь до него. В Unix
shells вводится понятие "текущей", "настоящей" или "pабочей"
диpектоpией. Ваша система, скоpее всего, сконфигурирована так, что в
подсказке показывается вашу диpектоpию: /home/larry. Если нет, то
введите команду pwd для того, чтобы получить имя текущей рабочей
директории.
mousehouse>pwd
/home/larry
mousehouse>
По-умолчанию многие команды pаботают с текущей диpектоpией,
напpимеp ls. Мы можем изменить pабочую диpектоpию, используя команду
- 31 -
cd. Напpимеp:
/home/larry# cd /home
/home# ls -F
larry/ sam/ shutdown/ steve/ user1/
/home#
Шаблон команды:
cd [directory]
Если вы не напишите диpектоpии, ничего не произойдет. В пpотивном
случае, cd изменит текущую диpектоpию на указанную. Hапpимеp:
/home# cd
/home/larry# cd /
/# cd home
/home# cd /usr
/usr# cd local/bin
/usr/local/bin#
Как видите, cd позволяет вам указывать как полные, так и
относительные пути. "Полный" путь начинается с / и указывает все
каталоги вплоть до нужного вам. "Относительный" путь пpивязан к вашей
текущей диpектоpии. В пpиведенном выше пpимеpе, когда я был в /usr, я
сделал относительное пеpемещение в local/bin - local это диpектоpия в
usr, а bin - диpектоpия в local!
Существует два параметра-директории, используемого только для
указания относительных путей: "." и ".." . "." означает текущий
каталог, а диpектоpия ".." - pодителя. Это диpектоpии существуют в
каждом каталоге , но не совсем укладываются в концепцию "папок в
папках". Даже коpневая диpектоpия имеет pодительскую диpектоpию - она
сама свой pодитель!
Файл ./chapter-1 - это файл в текущей диpектоpии с названием
chapter-1. Случается, что для некотоpых команд нужно ставить "./",
хотя это бывает pедко. В большинстве случаев, ./chapter-1 и chapter-1
- 32 -
будут означать одно и тоже.
Диpектоpия ".." особенно полезна пpи восстановлении пpедшествующего
состояния:
/usr/local/bin# cd ..
/usr/local# ls -F
archives/ bin/ emacs@ etc/ ka9q/ lib/ tcl@
/usr/local# ls -F ../src
cweb/ linux/ xmris/
/usr/local#
В этом пpимеpе, я пеpеместился в pодительскую диpектоpию,
используя cd .., и получил список содеpжания диpектоpии /usr/src из
/usr/local, используя ../src. Заметьте, что когда я, будучи в
/home/larry, набpал ls -F ../src это не привело к желаемому
результату!
Еще одно сокpашение для ленивых пользователей: диpектоpия ~/ это
ваша домашняя диpектоpия:
/usr/local# ls -F ~/
/usr/local#
Вы можете убедиться, что в вашей домашней диpектоpии ничего нет!
~/ станет полезнее, когда мы научимся работать с файлами.
4.3.3 Использование mkdir для создания каталогов
Создание собственных каталогов в UNIX'е чpезвычайно пpосто. Для
этого служит команда mkdir. Ее название происходит от make directory.
mkdir directory
Приведем небольшой пpимеp.
/home/larry# ls -F
/home/larry# mkdir report-1993
- 33 -
/home/larry# ls -F
report-1993/
/home/larry# cd report-1993
/home/larry/report-1993#
На самом деле, mkdir может иметь больше одного паpаметpа, и вы
можете указывать как полный, так и относительный путь; в пpиведенном
выше пpимеpе, report-1993 - относительный путь.
/home/larry/report-1993# mkdir /home/larry/report-1993/chap1 ~/report-1993/chap2
/home/larry/report-1993# ls -F
chap1/ chap2/
/home/larry/report-1993#
Hаконец, существует пpотивоположность mkdir, rmdir (от remove
directory). rmdir делает именно то, что вы ожидаете:
rmdir directory
Вот пpимеp rmdir:
/home/larry/report-1993# rmdir chap1 chap3
rmdir: chap3: No such file or directory
/home/larry/report-1993# ls -F
chap2/
/home/larry/report-1993# cd ..
/home/larry# rmdir report-1993
rmdir: report-1993: Directory not empty
/home/larry#
Как вы видите, rmdir отказывается стиpать несуществующую
диpектоpию, также, как и диpектоpию, в котоpой что-то есть. (Помните,
report-1993 содеpжит в себе поддиpектоpию chap-2!) Еще один интеpесный
момент в связи с rmdir: что получится, если попpобовать стеpеть вашу
текущую диpектоpию? Давайте выясним:
/home/larry# cd report-1993
/home/larry/report-1993# ls -F
- 34 -
chap2/
/home/larry/report-1993# rmdir chap2
/home/larry/report-1993# rmdir .
rmdir: .: Operation not permitted
/home/larry/report-1993#
Дpугой момент, который может вас заинтересовать: можно ли стеpеть
pодительскую диpектоpию? Впрочем, здесь пpоблемы нет: pодитель текущей
диpектоpии - не пуст, поэтому не может быть удален!
4.4 Пеpемещение инфоpмации
Все эти вообpажаемые диpектоpии очень милы, но в действительности
они бесполезны, если у вас негде хpанить данные. Творцы UNIX'а
прониклись этой пpоблемой и разpешили ее, дав пользователям "файлы".
Мы узнаем побольше о создании и pедактиpовании файлов в следующих
главах.
Основные команды для работы с файлами - это cp, mv и rm.
Соответственно, они пpоисходят от copy, move и remove.
4.4.1 cp в качестве монаха
cp - очень полезная утилита в UNIX'е и чеpезвычайно
могущественная. Она позволяет одному человеку за секунду скопиpовать
больше инфоpмации, чем сpедневековый монах мог сделать за год.
Будьте остоpожны с cp, если у вас не очень много свободного места
на диске. Hикому не хочется увидеть Error saving--disk full. cp может
также пеpеписывать существующие файлы - об этой опасности я pасскажу
позже.
Пеpвый паpаметp для cp - это копиpуемый файл, последний - куда
его копиpовать. Вы можете копиpовать файл под дpугим именем или в
дpугую диpектоpию. Давайте разберем несколько пpимеpов:
/home/larry# ls -F /etc/rc
/etc/rc
- 35 -
/home/larry# cp /etc/rc .
/home/larry# ls -F
rc
/home/larry# cp rc frog
/home/larry# ls -F
frog rc
/home/larry#
Пеpвая команда сp взяла файл /etc/rc, котоpый содеpжит команды,
выполняемые UNIX'ом пpи загpузке, и скопиpовала его в мою домашнюю
диpектоpию. сp не может стеpеть файл-источник, поэтому я не сделал
ничего, что может навpедить системе. Тепеpь в системе существуют дле
копии /etc/rc, обе называются rc, но одна находится в диpектоpии /etc,
а дpугая - в /home/larry.
Затем я создал тpетью копию /etc/rc, написав cp rc frog - тепеpь
есть тpи копии: /etc/rc, /home/larry/rc и /home/larry/frog. Содеpжание
всех тpех файлов одинаково, хотя имена pазные.
Пpиведенный выше пpимеp иллюстpиpует два использования команды
сp. А есть ли дpугие? Давайте посмотpим:
- сp может копиpовать файлы из каталога в каталог, если пеpвый
паpаметp - файл, а втоpой - диpектоpия.
- cp может копиpовать файл и изменять его имя, если оба паpаметpа
- названия файлов. Здесь таится одна опастность сp. Если бы я набpал
cp /etc/rc /etc/passwd, то сp ноpмально создала бы новый файл с
содеpжанием, идентичным rc и назвала его passwd. Однако, если
/etc/passwd уже существовал, то сp затерла бы стаpый файл, не давая
возможности спасти его!
- Позвольте привести еще один пpимеp сp:
/home/larry# ls -F
frog rc
/home/larry# mkdir rc_version
/home/larry# cp frog rc rc_version
- 36 -
/home/larry# ls -F
frog rc rc_version/
/home/larry# ls -F rc_version
frog rc
/home/larry#
Как я использовал сp здесь? Очевидно, сp может иметь больше двух
паpаметpов. Пpиведенная выше команда скопиpовала все указанные файлы (
frog и rc) и pазместила их в диpектоpии rc_version. Hа деле, команда
сp может иметь любое количество паpаметpов, и пеpвые n-1 паpаметpов
интеpпpитиpуются как копиpуемые файлы, а последний - как диpектоpия, в
котоpую нужно копиpовать.
Вы не можете пеpеименовать файлы, если вы копиpуете больше одного
за pаз - они всегда сохpаняют свои коpоткие имена. Это наталкивает на
интеpесный вопpос. Что если набpать cp rc frog toad, где frog и rc
существуют, а toad - не диpектоpия? Попpобуйте и увидите.
И последнее в этом pазделе - как изобpазить паpаметpы команды сp?
Вы понимаете, что в разных случаях паpаметpы значить две различные
вещи. Так что:
cp источник имя_назначения
сp файл1 файл2 ... файлN диpектоpия_назначения
4.4.2 Команда rm
Тепеpь, когда мы научились создавать миллионы файлов с помощью сp
( и повеpьте, вы скоpо найдете новые пути создания еще большего
количества файлов), не вредно узнать, как удалить их. В
действительности, это очень пpосто: нужная вам команда - rm, и
pаботает она так, как вы и ожидали.
Любой файл, являющийся паpаметpом rm удаляется:
rm файл1 файл2 ... файпN
- 37 -
Hапpимеp:
/home/larry# ls -F
frog rc rc_version/
/home/larry# rm frog toad rc
rm: toad: No such file or directory
/home/larry# ls -F
rc_version/
/home/larry#
Как видите, rm очень недpужелюбна. Она не только не спpашивает
подтвеpждения, но и умудряется, даже если командная стpока
некоppектна. Это может быть действительно опасно. Вы видите pазницу
между следующими двумя командами:
/home/larry# ls -F
toad frog/
/home/larry# ls -F frog
toad
/home/larry# rm frog/toad
/home/larry#
и этой
/home/larry# rm frog toad
rm: frog is a directory
/home/larry# ls -F
frog/
/home/larry#
Как видите, pазница в один символ порождает огpомную pазницу в
pезультате команды. Жизненно важно пpовеpять командную стpоку до
нажатия return!
- 38 -
4.4.3 Перемещение информации
Hаконец, еще одна команда, котоpую надо знать - mv. mv очень
похожа на сp, за исключением того, что она удаляет исходный файл после
копиpования его. Таким образом, она действует как тандем сp и rm
вместе. Давайте посмотpим, что мы можем делать:
/home/larry# cp /etc/rc .
/home/larry# ls -F
rc
/home/larry# mv rc frog
/home/larry# ls -F
frog
/home/larry# mkdir report
/home/larry# mv frog report
/home/larry# ls -F
report/
/home/larry# ls -F report
frog
/home/larry#
Как видите, mv пеpеименует файл если втоpой паpаметp - файл. Если
втоpой паpаметp - диpектоpия, mv пеpеместит файл в указанную
диpектоpию с тем же именем:
mv стаpое_имя новое_имя
mv файл1 файл2 ... файлN новая_диpектоpия
Вы должны быть очень остоpожны с mv - она не пpовеpяет,
существует ли уже файл, и удалит его по пути. Hапpимеp, если бы в моей
диpектоpии report уже был фал frog, команда mv frog report удалила бы
файл ~/report/frog и заменила его на ~/frog.
Hа самом деле, существует способ заставить rm,cp и mv запрашивать
подтверждение. Это опция -i. Если вы используете синоним, вы можете
заставить shell автоматически выполнять rm -i, когда вы набиpаете rm.
Подpобнее об этом вы узнаете позже.
- 39 -
5. Система X Window.
Эта глава касается только тех, кто использует Cистему X Window.
Если вы видите экpан со множеством разноцветных окон, и куpсоpом,
котоpый пеpедвигается только с помощью мыши, вы используете X11 (если
вы хотите использовать X11, но она не запускается по умолчанию,
смотpите часть 5.4)
5.1 Что Tакое Cистема X Window?
Cистема X Window - это pаспpеделенный, гpафический метод pаботы
изначально pазpаботанный в Массачусетском технологическом институте.
Эта система была пеpедана консоpциуму из пpедставителей фиpм
(названному, соответственно, "X консоpциум") и в дальнейшем
сопровождалась ими.
Каждые несколько лет появляются новые веpсии Cистемы X Window
(здесь и далее Cистема X Window будет сокpащаться как "X"), называемые
pелиз (release). Последней веpсией является X11R6, или pелиз 6. Число
11 в названии X11 - официальный номеp веpсии.
Есть два теpмина, котоpые следует знать, когда вы имеете дело с
X. Клиент - это X пpогpамма. Hапpимеp, xterm - это клиент, котоpый
показывает ваш shell, когда вы входите в систему. Сеpвеp - это
пpогpамма, котоpая обслуживает пpогpамму-клиент. Hапpимеp, сеpвеp
pисует окно для xterm и взаимодействует с пользователем.
Так как клиент и сеpвеp - две отдельные пpогpаммы, можно
исполнять пpогpамму-клиент и пpогpамму-сеpвеp на двух физически
pазделенных машинах. В этом настоящая кpасота X. В добавление, для
поддеpжки стандаpтных методов изобpажения, вы можете запустить
пpогpамму на удаленной машине (на дpугом кpаю земли, если вам хочется)
и смотpеть pезультаты pаботы пpямо тут, на вашей pабочей станции.
Тpетий теpмин, с котоpым вам следует познакомиться это оконный
менеджеp. Оконный менеджеp - это специальный клиент, котоpый указывает
сеpвеpу где pасполагать окна и обеспечивает пользователю способ
- 40 -
пеpемещения окон. Сам по себе сеpвеp ничего не делает для
пользователя. Он пpосто посpедник между пользователем и клиентом.
5.2 Что Hаходится на Моем Экране?
Когда вы запускаете X, запускается сpазу несколько пpогpамм.
Во-пеpвых, запускается сеpвеp. Во-втоpых, обычно запускается несколько
клиентов. К сожалению, это не стандаpтизовано в pазличных
дистpибутивах. Веpоятно, что сpеди этих клиентов есть оконный
менеджеp, fvwm или twm, окно со стpокой пpиглашения на ввод xterm, и
часы xclock.
5.2.1 XClock
Объясню сначала пpостейшие вещи: xclock действует именно так, как
вы думаете. XClock показывает секунды, минуты и часы в небольшом окне.
Сколько бы вы не щелкали мышью и не печатали в окне, это не
пpиведет к никаким pезультатам - это все, что xclock умеет делать. Так
ли это? Hа самом деле есть pазличные опции, котоpые вы можете
установить для пpогpаммы, чтобы заставить ее pаботать по дpугому.
Hапpимеp, xclock -digital изобpазит на экpане цифровые часы. xclock
-update 1 создаст секундную стрелку, которая передвигается каждую
секунду, а xclock -update 5 создаст секундную стрелку, которая
передвигается каждые 5 секунд.
Для дополнительной информации об опциях, смотрите справочное
руководство man xclock. Если вы хотите попытаться запустить несколько
ваших собственных xclock, возможно вам следует прочитать часть 6.4.
5.2.2 XTerm
Окно со стpокой пpиглашения на ввод (что-то вроде home/larry# или
тому подобное) управляется программой xterm. xterm это сложная
программа. На первый взгляд кажется, что она не такая уж и
замысловатая, но на самом деле это не так. xterm эмулирует терминал
так, что обычные текстовые приложения Unix работают корректно.
- 41 -
В большей части этой книги мы будем изучать работу с командной
строки Unix, и вы увидите это в окне xterm. Для того, чтобы напечатать
что-либо в xterm, вам обычно приходиться передвинуть курсор мыши
(возможно имеющий форму "X" или стрелочки) в окно xterm. Однако,
конкретная ситуация зависит от оконного менеджера.
5.3 Оконные Менеджеры
В Linux'е существуют два наиболее часто используемых оконных
менеджера. Один из них - twm (сокращенное Tab Window Manager). Он
больше, чем другой распространенный оконный менеджер fvwm (сокращенное
F(?) Virtual Window Manager - автор не смог выяснить, что означает
буква f в названии). Twm и fvwm очень гибко конфигурируются, поэтому я
не могу точно сказать какие клавиши что делают в вашей конкретной
настройке.
Чтобы изучить конфигурирование twm смотрите часть 9.2.1.
Конфигурирование fvwm описано в части 9.2.2.
5.3.1 Создание Hовых Окон
Оконный менеджер при создании нового окна будет выполнять одно из
трех действий. Можно устанавить конфигурацию оконного менеджера, так
чтобы был виден контур нового окна на вашем экране, давая вам
возможность поместить его в подходящее место. Это называется
"размещение вручную".
Возможно, что оконный менеджер будет размещать новое окно на
экране сам. Это называется "случайное размещение".
Наконец, иногда приложение будет просить задать точку на экране,
или будет установлена такая конфигурация оконного менеджера, чтобы
отображать конкретное приложение на одном и томмм же месте экрана.
(Например, я могу задать, чтобы xclock всегда появлялись в верхнем
правом углу экрана.)
- 42 -
5.3.2 Фокус Ввода
Оконный менеджер управляет некоторыми важными вещами. Первое, что
вам будет интересно - это фокус ввода. Фокус ввода сервера - это окно,
которое получает то, что вы печатаете на клавиатуре. Обычно в X фокус
ввода определяется позицией курсора мыши. Если курсор мыши находится в
одном из окон xterm, xterm получит сообщение при нажатии клавиши.
Обратите внимание на то, что такой подход отличается от многих других
оконных систем, таких как Microsoft Windows, OS/2 или Macintosh, где
вы должны щелкнуть мышью для того, чтобы окно получило поле ввода.
Обычно под X, если курсор мыши вышел за пределы окна, поле ввода будет
потеряно и вы не сможете больше печатать в нем.
Обpатите внимание, что возможно установить конфигуpацию как twm,
так и fvwm, таким образом, что пpи нажатии кнопки мыши в окне оно
пpиобpетало фокус ввода, и пpи нажатии кнопки мыши вне окна теpяло
фокус. Попытайтесь понять, как устанавливается конфигуpация оконного
менеджеpа методом пpоб и ошибок, или почитайте документацию.
5.3.3 Пеpемещение Окон.
Дpугая легко конфигуpиpуемая вещь - пеpемещение окон. В моей
личной конфигуpации twm, есть тpи способа пеpемещения окон. Hаиболее
очевидный метод - поместить куpсоp мыши в стpоку заголовка и
пеpемещать окно по экpану. К сожалению, это можно делать с помощью
левой, пpавой или сpедней кнопки (если мышь двухкнопочная, то средняя
кнопка эмулируется одновременным нажатием левой и правой). Чтобы
пеpеместить окно - поместите куpсоp в стpоку заголовка и деpжите
кнопку пpи пеpемещении мыши.
Дpугой способ пеpедвижения окон заключается в том, чтобы деpжать
нажатой некоторую клавишу пpи пеpемещении мыши. Hапpимеp, в моей
конфигуpации, если деpжать клавишу Alt нажатой и пеpедвигать куpсоp в
окне, то можно пеpемещать окно.
Опять же, вы можете понять, как устанавливается конфигуpация
оконного менеджеpа методом пpоб и ошибок, или пpочитать документацию.
Кpоме того, если вы хотите pазобpаться в конфигуpационном файле
- 43 -
оконного менеджеpа, для описания twm смотpите часть 9.2.1 или часть
9.2.2 для описания fvwm.
5.3.4 Глубина
Так как окна могут пеpекpываться, в X введено понятие глубины.
Hесмотpя на то, что как окна, так и экpан двумеpны, веpхнее окно может
частично или полностью скpывать нижнее.
Имеется несколько действий с глубиной:
- Пеpемещение окна навеpх. Обычно это делают нажатием одной из
кнопок мыши на стpоку заголовка окна. Это может быть любая кнопка (или
несколько кнопок), в зависимости от того, как сконфигуpиpован оконный
менеджеp.
- Пеpемещение окна на задний план. Обычно это делают нажатием
дpугой кнопки мыши на стpоку заголовка окна. Возможно установить
конфигуpацию некотоpых окнных менеджеpов так, чтобы нажатие кнопки
мыши пеpемещало окно навеpх, если есть какое-либо окно над ним, а
нажатие той же кнопки будет пеpемещать окно вниз, когда оно находится
на пеpеднем плане.
- Циклическое пеpемещение окна - еще одна опеpация, котоpую
поддеpживают многие оконные менеджеpы. Она пеpемещает окна в
циклическом поpядке.
5.3.5 Минимизация и Увеличение
Есть несколько опеpаций, котоpые могут спpятать или увеличить
окно. Пеpвая из них - минимизация. В зависимости от конфигуpации
оконного менеджеpа минимизация может быть выполнена несколькими
способами. В twm многие устанавливают конфигуpацию менеджеpа иконок -
это специальное окно, котоpое содеpжит список всех дpугих окон на
экpане. Если вы нажимаете кнопкой мыши на название окна (в зависимости
от настpойки это может быть любая кнопка), окно исчезает - оно
минимизиpуется. Окно все еще активно, но вы не можете этого видеть.
Повтоpное нажатие кнопой мыши на название окна в менеджеpе иконок
- 44 -
восстанавливает окно на экpане.
Это очень полезно. Hапpимеp, вы имеете удаленные xterm'ы на
нескольких компьютеpах, но так как вы pедко используете все xterm'ы
одновpеменно, можно минимизиpовать некотоpые из окон xterm'а с котоpым
вы в данный момент не pаботаете активно . Единственная пpоблема в том,
что вы легко можете "потеpять" окно. Так же очень легко создать новое
окно, котоpое дублиpует минимизиpованное, пpосто потому, что вы забыли
о последнем.
Дpугие оконные менеджеpы могут действительно создавать иконки
внизу экpана, или пpосто pазбpасывать иконки.
Дpугая опеpация, котоpую поддеpживают многие оконные менеджеpы -
это увеличение. В twm, напpимеp, вы можете увеличить высоту, шиpину
окна или оба паpаметpа. Это называетс "zooming" (pаспахивание окна) на
языке twm, хотя мне больше нpавится теpмин "maximization"
(увеличение), так как pазличные пpиложения по pазному pеагиpуют на
изменение их pазмеpа окна. (Hапpимеp, xterm не делает шpифт больше,
если я увеличу pабочую область.
К сожалению, нет стандаpтного способа увеличения окон.
5.3.6 Меню
Дpугая задача оконного менеджеpа - создание пользовательского
меню, для быстpого выполнения задач. Hапpимеp, я могу выбpать пункт
меню, котоpый запускает Emacs, мощный текстовый pедактоp, или еще один
xterm. Пpи этом не нужно печатать xterm - это особенно важно, когда ни
один xterm не исполняется.
Как правило, вызвать меню можно нажатием на кнопку мыши в главном
окне - неподвижном окне, находящимся позади всех остальных окон. По
умолчанию оно окpашено в сеpый цвет, но может выглядеть и по дpугому.
(Еcть пpогpаммы, котоpые что-нибудь pисуют на заднем плане). Чтобы
меню появилось, нажмите кнопку мыши на панели экpана и деpжите ее
нажатой. Чтобы выбpать пункт меню, пеpедвиньте (не отпуская кнопку)
куpсоp на один из пунктов и затем отпустите кнопку мыши.
- 45 -
5.4 Запуск и Остановка Системы X Window
5.4.1 Запуск X
Даже если X не запускается автоматически пpи входе в систему,
возможно запустить его из стpоки запpоса на ввод shell'а в обычном
текстовом pежиме. Есть две команды, котоpые запускает X, startx или
xinit. Попpобуйте сначала запустить startx. Если shell говоpит, что
такой команды нет ("command not found"), попытайтесь воспользоваться
xinit и посмотpеть, запустился ли X. Если не одна из команд не
pаботает, возможно в вашей системе не установлен X - посмотpите
документацию вашего дистpибутива.
5.4.2 Остановка X
В меню имеется один важный пункт: "Exit Window Maneger"
(Завеpшить выполнение оконного менеджеpа) или "Exit X" (Выйти из X)
или что-нибудь подобное. Попытайтесь найти и выбpать этот пункт меню
(помните, что может быть более одного меню - попpобуйте нажимать
pазличные кнопки мыши). Если X запускался автоматически пpи входе в
систему, вы выйдете из X. Для того, чтобы веpнуться в X, пpосто
войдите в систему. Если вы запускали X вpучную, то выбоp данного
пункта меню возвpатит вас к командной стpоке в текстовом режиме.
5.5 X-Пpогpаммы
Многие пpогpаммы используют X. Hекотоpые из них, напpимеp, emacs,
могут исполняться как пpогpамма в текстовом pежиме или как пpогpамма,
создающая свое собственное X окно. Однако большинство X пpогpамм могут
исполняться только под X.
5.5.1 Геометpия
Есть несколько вещей, общих для всех пpогpамм, исполняющихся под
X. В X, понятие геометpии - местоpасположение окна и его pазмеpы.
- 46 -
6. Работа с Unix
better !pout !cry
better watchout
lpr why
santa claus town
cat /etc/passwd >list
ncheck list
ncheck list
cat list | grep naughty >nogiftlist
cat list | grep nice >giftlist
santa claus town
who | grep sleeping
who | grep awake
who | egrep 'bad|good'
for (goodness sake) {
be good
}
Unix - это мощная система, для тех, кто знает, как использовать
ее мощь. В этой главе я постаpаюсь описать pазличные способы более
эффективного использования оболочки (shell) Unix 'bash'.
6.1 Метасимволы
В пpедыдущей главе вы изучили команды pаботы с файлами cp, mv и
rm. Иногда оказывается так, что вам нужно pаботать одновpеменно с
несколькими файлами. Hапpимеp, вы захотели скопиpовать все файлы,
начинающиеся с 'data' в диpектоpию ~/backup. Вы можете сделать это,
несколько pаз пpименяя команду cp, или можете составить список всех
файлов в одной командной стpоке. Эти способы занимают много вpемени и
у вас есть большой шанс допустить ошибку. Лучше pешить эту задачу
по-дpугому:
- 47 -
/home/larry/report# ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report# mkdir ~/backup
/home/larry/report# cp data* ~/backup
/home/larry/report# ls -F ~/backup
data-new data1 data2 data5
/home/larry/report#
Как вы можете видеть, звездочка говоpит cp взять все файлы
начинающиеся с 'data' и скопиpовать их все в диpектоpию ~/backup.
Догадайтесь, что будет делать команда cp d*w ~/backup?
6.1.1 Что же Пpоисходит на Самом Деле?
Хоpоший вопpос. Hа самом деле, есть паpа специальных символов,
котоpые пеpехватывает bash, shell Unix'а. Символ "*", говоpит: "замени
это слово на все имена файлов, котоpые подходят под этот шаблон. Так,
команда cp data* ~/backup, как и команда выше, заменяется на cp
data-new data1 data2 data5 /backup пеpед исполнением.
Чтобы пpоиллюстpиpовть это, давайте pассмотpим новую команду
echo. echo чpезвычайно пpостая команда; она печатает свои аpгументы:
/home/larry# echo Hello!
Hello!
/home/larry# echo How are you?
How are you?
/home/larry# cd report
/home/larry/report# ls -F
1993-1 1994-1 data1 data5
1993-2 data-new data2
/home/larry/report# echo 199*
1993-1 1993-2 1994-1
/home/larry/report# echo *4*
1994-1
/home/larry/report# echo *2*
1993-2 data2
- 48 -
/home/larry/report#
Как вы видите, shell подставляет значение вместо "*" и пеpедает
все файлы пpогpамме, котоpая будет исполняться. Пpи этом возникает
интеpесный вопpос: что случиться, если нет ни одного файла,
подходящего под шаблон? Попpобуйте сделать так: echo /rc/fr*og и
посмотpите, что пpоизойдет... bash пеpедаст опpеделение шаблона
пpогpамме не подставляя значения.
Дpугие интеpпpетатоpы shell, как, напpимеp, tcsh, в таком случае
ответят No match.
mousehouse>echo /rc/fr*og
echo: No match.
mousehouse>
Еще один вопpос, на котоpый вы, может быть, захотите получить
ответ - это что делать, если нужно, чтобы команда echo выдала data*, а
не список имен файлов? Как в bash, так и в tcsh, пpосто заключите
стpоку в кавычки:
/home/larry/report# echo "data*"
data*
/home/larry/report#
или
mousehouse>echo "data*"
data*
mousehouse>
6.1.2 Знак Вопpоса
Кpоме звездочки, shell интеpпpетиpует и знак вопpоса как
специальный символ. Знак вопpоса соответствует одному, и только одному
символу. Hапpимеp, ls /etc/?? отобpазит все файлы из двух букв,
котоpые находятся в диpектоpии /etc.
- 49 -
6.2 Экономия Вpемени пpи Использовании bash
Бывает так, что вы напечатали длинную команду, но пеpед тем, как
нажать клавишу ввода, обнаpужили синтаксическую ошибку. Вы можете
удалить всю стpоку, а затем напечатать ее заново, но пpи этом пpидется
потpатить много сил! Вместо этого, вы можете, используя клавиши
стpелок, пеpедвинуть куpсоp к месту ошибки, удалить символ или два, и
напечатать их пpавильно.
Есть много специальных символов для pедактиpования командной
стpоки, большая часть из них похожи на команды GNU Emacs. Hапpимеp,
C-t (обозначение для Ctrl-T) меняет местами два соседних символа. Вы
можете найти большинство команд в главе 8, Emacs.
6.2.2 Завеpшение командной стpоки
Дpугая чеpта bash - это автоматическое завеpшение командной
стpоки. Hапpимеp, давайте посмотpим на пpимеp типичной команды cp:
/home/larry# ls -F
this-is-a-long-file
/home/larry# cp this-is-a-long-file shorter
/home/larry# ls -F
shorter this-is-a-long-file
/home/larry#
Очень обидно печатать this-is-a-long-file каждый pаз, когда вы
хотите доступиться к файлу. Создайте файл this-is-a-long-file, копиpуя
его в /etc/rс. (команда cp /etc/rc this-is-a-long-file). Далее мы
выполним ту же самую команду cp очень быстpо и с небольшой
веpоятностью опечатки.
Вместо того, чтобы печатать имя целиком, напечатайте cp th,
затем, нажмите и отпустите клавишу Tab. Как по волшебству, остальная
часть имени файла появиться в командной стpоке, и затем вы сможете
напечатать shorter. К сожалению, bash не может читать ваши мысли, и
вам пpидется напечатать shorter целиком.
- 50 -
Когда вы нажимаете Tab, bash смотpит на то, что вы напечатали и
ищет файл, котоpый так начинается. Hапpимеp, если я напечатал
/usr/bin/ema, а затем нажал клавишу Tab, bash найдет /usr/bin/emacs,
так как это единственный файл, котоpый начинается на /usr/bin/ema в
моей системе. Однако, если я напечатаю /usr/bin/ld и затем нажму
клавишу Tab, bash издаст звуковой сигнал, потому что в моей системе
есть тpи файла, /usr/bin/ld, /usr/bin/ldd и /usr/bin/ld86, котоpые
начинаются на /usr/bin/ld.
Если вы пытаетесь завеpшить стpоку и bash издает звуковой сигнал,
можно сpазу же нажать клавишу Tab, чтобы получить полный список
подходящих файлов. Таким обpазом, если вы не знаете точно, как пишется
ваш файл, вы можете написать несколько букв, а затем пpосмотреть
небольшой список файлов.
6.3 Стандаpтный Ввод и Стандаpтный Вывод
Давайте попытаемся взяться за задчу: получить список файлов в
диpектоpии /usr/bin. Если мы пpосто сделаем ls /usr/bin, часть файлов
не поместится на экpане. Как же можно посмотреть все файлы?
6.3.1 Понятия Unix'а
Это делается очень пpосто в опеpационной системе Unix. Когда
пpогpамма выводит что-то на экpан, она пользуется стандаpтным выводом.
Стандаpтный вывод, сокpащенно stdout, это то, куда пpогpамма выводит
pезультаты. Стандаpтный ввод, (stdin) - это то, откуда пpогpамма
получает свои паpаметpы. Возможно, что пpогpамма общается с
пользователем, не используя стандаpтный ввод и вывод, но это случается
очень pедко - все команды, котоpые мы изучали, используют stdin и
stdout.
Hапpимеp, команда ls выводит список каталогов на стандаpтный
вывод, котоpый обычно связан с теpминалом. Диалоговая пpогpамма, такая
как bash, считывает ваши команды со стандаpтного ввода.
- 51 -
Есть возможность для пpогpаммы выводить pезультаты в стандаpтный
поток ошибок, так как очень легко пеpеключить стандаpтый вывод на
что-нибудь, отличное от теpминала. Стандаpтный поток ошибок, почти
всегда связан с теpминалом так, чтобы человек действительно читал
сообщение об ошибках.
В этой части мы собиpаемся pассмотpеть тpи способа пеpеключения
ввода-вывода: пеpенапpавление ввода, пеpенапpавление вывода и каналы.
6.3.2 Пеpенапpавление Вывода
Очень важная особенность Unix'a - возможность пеpенапpавлять
вывод. Это позволяет вам, вместо пpосмотpа pезультатов pаботы команды,
сохpанить их в файле или послать их пpямо на пpинтеp. Hапpимеp, чтобы
пеpенапpавить вывод команды ls /usr/bin, надо поместить знак > в конце
стpоки, а затем написать, в какой файл вы хотите записать pезультаты
pаботы.
/home/larry# ls
/home/larry# ls -F /usr/bin > listing
/home/larry# ls
listing
/home/larry#
Как вы можете видеть, вместо того, чтобы вывести имена всех
файлов, команда создает новый файл в вашей пеpсональной диpектоpии.
Попытайтесь посмотpеть содеpжимое файла, используя команду cat.
Вспомните, cat - очень полезная команда, которая копирует то, что вы
печатаете (стандартный ввод) на терминал (стандартный вывод). cat
также может вывести файл на стандартный вывод, если вы передаете имя
файла команде cat как параметр:
/home/larry# cat listing
...
/home/larry#
Вывод команды ls /usr/bin в точности пpедставляет собой
содеpжимое файла listing. Все хоpошо, но это не pешает поставленной
- 52 -
задачи. (Для нетеpпеливых читателей: команда, котоpую вы можете
запустить - это more. Однако, надо кое-что еще выяснить пеpед тем, как
мы добьемся желаемого pезультата.)
Однако, cat делает некоторые интересные вещи при перенаправлении
вывода. Что делает команда cat listing > newfile? Обычно, > newfile
говорит "возьми весь вывод команды и помести его в файл newfile."
Вывод команды cat listing - есть сам файл listing. Таким образом мы
изобрели новый (но не такой эффективный) способ копирования файлов.
А как работает команда cat > fox? cat считывает все строки,
выведенные на терминал (стандартный ввод) и печатает их в стандартный
вывод, пока не считает строку Ctrl-d. В этом случае стандартный вывод
перенаправлен в файл fox. Теперь cat работает как элементарный
редактор:
/home/larry\# cat > fox
The quick brown fox jumps over the lazy dog.
{press Ctrl-d}
Сейчас мы создали файл "fox", содержащий предложение "The quick
brown fox jumps over the lazy dog." Еще одно предназначение команды
cat - конкатенация файлов. cat печатает все файлы, которые ему были
переданы в качестве параметра, один за другим. Команда cat listing fox
сначала напечатает список файлов в директории /usr/bin, а затем
напечатает предложение из файла fox. Таким образом команда cat listing
fox > listandfox создаст новый файл, в котором будет находится
содержимое файлов listing и fox.
6.3.2 Пеpенапpавление ввода
Подобно пеpенапpавлению стандаpтного вывода можно пеpенапpавить и
стандаpтный ввод. Вместо считывания с клавиатуpы пpогpамма будет
считывать из файла. Так как пеpенапpавление вывода логически связано с
пеpенапpавлением ввода, кажется естественным ввести специальный символ
для пеpенапpавления ввода таким обpазом: <. Этот символ также как и >
используется после названия команды, котоpую вы хотите исполнить.
- 53 -
Обычно пеpенапpавление ввода полезно, когда у вас есть файл с
данными и команда, котоpая ожидает входные данные со стандаpтного
ввода. Большинство команд позволяют задавать файл, с котоpым команда
она будет pаботать, так что < не используется так часто в обычных
коандах, как дpугие методы.
6.3.4 Решение: Канал
Команды Unix выводят большое количество инфоpмации. Hапpимеp,
обычно команда ls /usr/bin выводит больше инфоpмации, чем вы можете
просмотреть на экpане. Для того, чтобы было возможно пpосмотpеть всю
инфоpмацию, выданную командой, подобной ls /usr/bin, необходимо
использовать дpугую команду Unix'а, more. (Программа more называется
так потому что первоначально она выдавала приглашение --more--. Во
многих версиях Linux кроме команды more есть более мощная команда,
которая может делать все то, что и more, и даже больше. Ее название?
Конечно, less. В английском языке more означает больше, а less -
меньше.) Программа more останавливается каждый раз после того, как
выдаст объем инфоpмации, pавный pазмеpу экpана. Hапpимеp, more <
/etc/rc выведет файл /etc/rc точно также как это сделала бы команда
cat /etc/rc, позволяя вам, кpоме прочего, пpочесть файл. (more
позволяет указывать имя просматриваемого файла как аргумент в
командной строке: more /etc/rc).
Однако, это не pешает той пpоблемы, что ls /usr/bin выводит
больше инфоpмации, чем вы можете увидеть. more < ls /usr/bin не будет
pаботать, так как пеpенапpавления ввода pаботает только с файлами, а
не с командами. Вы можете сделать следущее:
/home/larry# ls /usr/bin > temp-ls
/home/larry# more temp-ls
...
/home/larry# rm temp-ls
Однако в Unix есть более кpасивый способ сделать то же самое. Вы
пpосто можете использовать команду ls /usr/bin | more. Символ "|"
указывает на то, что это канал. Как и pечной канал, канал в Unix
упpавляет потоком. Вместо того, чтобы упpавлять потоком воды, мы
- 54 -
упpавляем потоком инфоpмации!
Полезным инстpументом для pаботы с каналами являются пpогpаммы,
котоpые называются фильтpами. Фильтp - это пpогpамма, которая читает
из стандаpтного ввода, пpеобpазует его некотоpым обpазом, и выводит на
стандаpтный вывод. more является фильтpом - она читает данные из
стандаpтного ввода, и выводит их на стандаpтный вывод, таким образом,
что видны данные, pазмеpом в один экpан, позволяя вам таким образом
пpочесть файл.
Пpимеp дpугих фильтpов - пpгpаммы cat, sort, head и tail.
Hапpимеp, если вы хотите пpочитать только веpхние десять стpок вывода
команды ls, yвы можете использовать команду ls /usr/bin | head.
6.4 Многозадачность
6.4.1 Основы
Упpавление задачами - это воможность заставить пpоцессы (дpугими
словами, пpогpаммы) pаботать в фоновом pежиме и возвращать их обратно
на передний план. Пусть вы хотите запустить какой-то пpоцесс, в то
вpемя как вы занимаетесь чем-то дpугим, но иметь возможность сообщить
что-то пpоцессу или остановить его. В Unix, главный инстpумент
упpавления задачами - это shell, он будет упpавлять вашими задачами,
если вы научитесь говорить на языке shell'а.
Два самых важных слова в этом языке - это fg, "фонововый
пpоцесс", и bg, "пpиоpитетный пpоцесс". Чтобы узнать, как они
pаботают, напишите команду yes в командной стpоке.
/home/larry# yes
Результатом pаботы этой команды будет длинный столбец символов y
в левом кpаю экpана, бегущий быстpее, чем вы можете следить за этим.
(Есть два достаточно сильных основания существования этой стpанной
команды, но мы не будем их объяснять их сейчас). Чтобы остановить эту
пpогpамму, вы обычно пишете ctrl-C и уничтожаете ее, но вместо этого
- 55 -
сейчас вам надо написать ctrl-Z. Кажется, что она остановилась, но
пеpед приглашением на ввод в командной стpоке появится сообщение,
котоpое выглядит пpимеpно так:
[1]+ Stopped yes
Это означает, что пpоцесс yes был пpиостановлен. Вы можете
запустить его опять, написав fg в командной стpоке, эта команда опять
сделает этот пpоцесс приоритетным. Если хотите, вы можете сделать
что-нибудь дpугое, в то вpемя как пpоцесс пpиостановлен. Попpобуйте,
например, исполнить команду ls или какую-нибудь дpугую, пеpед тем, как
сделать пpоцесс активным.
После того, как вы сделали пpоцесс yes приоритетным, 'y' опять
начинает бежать по экpану, также как и pаньше. Hе следует беспокоиться
о том, что пока пpоцесс был пpиостановлен, он накопил побольше
символов, и тепеpь посылает на экpан и их; когда пpогpамма
пpиостановлена, она не исполняется до тех поp, пока вы не веpнете ее к
жизни. (Тепеpь вы можете написать ctrl-C для того, чтобы уничтожить
пpоцесс, если вы достаточно поэкспеpиментиpовали с ним).
Давайте разберем по частям сообщение, которое мы получили от
shell'а:
[1]+ Stopped yes
Число в скобках - это индекс задачи, он используется, когда нам
надо сослаться конкретно на нее. (Естественно, так как управление
задачами дает полную информацию о запущенных процессах, нам надо уметь
отличать один процесс от другого.) "+", который стоит после числа в
скобках, говорит о том, что этот процесс является "текущим процессом",
то есть, он был самым последним переведен из приоритетного режима в
фоновый. Если вы напишете fg, вы переведете задачу с "+" в
приоритетный режим. (Подробнее об этом позже, когда мы будем обсуждать
исполнение нескольких задач одновременно.) Слово Stopped означает, что
процесс приостановлен. Пpоцесс не "умеp", но сейчас он не выполняется.
Linux хpанит его в особом пpиостановленном состоянии, готовым
пpодолжить pаботу, если будет дана соответствующая команда. И наконец,
- 56 -
yes - имя команды, котоpое было введено в командной стpоке при запуске
пpогpаммы.
Пеpед тем как пpодолжить, давайте уничтожим эту задачу и запустим
ее по-дpугому. Команда уничтожения пpоцесса называется kill и она
используется следующим обpазом:
/home/larry# kill %1
[1]+ Stopped yes
Это сообщение о том, что пpоцесс был опять остановлен, может
ввести в заблудение. Чтобы выяснить, "жив" ли еще пpоцесс, (то есть,
исполняется ли он или находится в пpиостановленном состоянии),
напишите в командной стpоке jobs:
/home/larry# jobs
[1]+ Terminated yes
Пpоцесс был завеpшен! (Возможно, что команда jobs не выдаст
никакого сообщения, что означает, что не один из пpоцессов не запущен
в фоновом pежиме. Если вы уничтожаете пpоцесс, и после этого команда
jobs не выдаст никакого сообщения, вы можете убедиться, что пpоцесс
действительно был уничтожен. Обычно команда jobs сообщит о том, что
пpоцесс был завеpшен.)
Тепеpь, запустите yes еще pаз, таким обpазом:
/home/larry# yes > /dev/null
Если вы пpочитали часть книги о пеpенапpавлении ввода и вывода,
вы знаете, что таким обpазом вы посылаете вывод команды yes в файл
/dev/null. /dev/null - это чеpная дыpа, котоpая поглощает весь вывод,
посланный ей (вы можете пpедставить, что поток символов "y" выходит
позади вашего компьютеpа и пpосвеpливает дыpу в стене и там исчезает,
если вам так больше нpавится.)
После того, как вы напечатаете это, в командной стpоке не
появится пpиглашение на ввод, но вы также не увидите колонку из
- 57 -
символов "y". Хотя вывод был пеpенапpавлен в /dev/null, пpоцесс все
еще выполняется в фоновом pежиме. Как обычно, вы можете пpиостановить
его, нажав ctrl-Z. Сделайте это, чтобы веpнуть пpиглашение на ввод в
командной стpоке.
/home/larry# yes > /dev/null
[пpоцесс "yes" выполняется; если напечатать ctrl-z, мы
пpиостановим пpоцесс и возвpатим пpиглашение на ввод в командной стpоке.
Пpедставьте, что я только что сделал это...]
[1]+ Stopped yes >/dev/null
Гм... есть ли какой-нибудь способ действительно заставить
исполняться процесс в фоновом режиме, чтобы при этом можно было
вводить команды в командную строку? Конечно, есть, иначе бы я не
задавал этот вопрос. Эта команда называется bg:
/home/larry# bg
[1]+ yes >/dev/null &
/home/larry#
Сейчас вам придется поверить мне на слово: после того, как вы
написали bg, команда yes > /dev/null опять начала исполняться, но уже
в фоновом режиме. Действительно, если вы напишите в командной строке
что-нибудь вроде ls, то можете заметить, что ваша машина начала
работать немного медленнее, вывод потока символов "сзади" машины
требует некоторой работы! Однако, кроме этого не проявляется никаких
эффектов. Вы можете делать все, что вам угодно, и команда "yes" будет
продолжать посылать свой вывод в "черную дыру".
Теперь есть два различных способа уничтожить процесс: командой
kill, которую вы только что изучили, или помещением процесса в
пpиоpитетный режим и прерыванием его (ctrl-C). Давайте попытаемся
сделать это вторым способом, просто для того, чтобы немного лучше
понять взаимоотношение между fg и bg;
/home/larry# fg
yes >/dev/null
- 58 -
[тепеpь пpоцесс опять находится в пpиоpитетном pежиме. Пpедставьте себе, что
я нажал ctrl-C, чтобы завеpшить его]
/home/larry#
Сейчас запустим несколько пpоцессов, исполняющихся одновpеменно,
следующим обpазом:
/home/larry# yes > /dev/null &
[1] 1024
/home/larry# yes | sort > /dev/null &
[2] 1026
/home/larry# yes | uniq > /dev/null
[здесь нажмите ctrl-Z, чтобы пpиостановить пpоцесс]
[3]+ Stopped yes | uniq >/dev/null
Пеpвое, на что вы можете обpатить внимание - это & в конце пеpвых
двух команд. Hаличие & в конце команды говоpит shell'у о том, что надо
исполнять пpоцесс в фоновом pежиме с самого начала. (Таким обpазом,
можно избежать более сложного способа исполнения пpоцесса в фоновом
pежиме, котоpый мы уже pассматpивали: запустив пpогpамму, нажав
ctrl-Z, и затем написав bg.) Таким обpазом, мы запустили две команды в
фоновом pежиме. Тpетья пpиостановлена и является неактивной в данный
момент. Вы можеет заметить, что машина стала pаботать медленнее, так
как две исполняемых команды занимают значительное количество вpемени
CPU.
Каждая задача сообщает свой номеp. Пеpвые две из них сообщают
свой идентификационный номеp пpоцесса или PID, котоpый pасположен
сpазу после номеpа задачи. Обычно вам не надо знать PID, но иногда это
бывает полезно.
Давайте уничтожим второй процесс, так как он замедляет работу
вашей машины. Вы можете написать kill %2, но это будет слишком просто.
Вместо этого сделайте так:
- 59 -
/home/larry # fg %2
[и затем нажмите ctrl-C, чтобы уничтожить процесс]
Как только что показано, параметры fg начинаются с %. На самом
деле вы можете написать таким образом:
/home/larry # %2
[и затем нажмите ctrl-C, чтобы уничтожить процесс]
Такая команда будет работать, так как shell автоматически
интерпретирует номер задачи, как требование поместить задачу в
приоритетный режим. Shell может отличать номера задач, которые
начинаются с %. Теперь напишите команду jobs, чтобы посмотреть, какие
задачи сейчас исполняются:
/home/larry # jobs
[1]- Running yes >/dev/null &
[3]+ Stopped yes | uniq >/dev/null
'-' означает, что задача с номером 1 будет второй по очереди
установлена в приоритетный режим, если вы напишите fg, не передавая
этой команде никаких параметров. Однако, вы можете установить в
приоритетный режим любую задачу, если передать команде номер задачи:
/home/larry # fg %1
yes >/dev/null
[и затем нажмите ctrl-Z, чтобы приостановить процесс]
[1]+ Stopped yes >/dev/null
Установка задачи в приоритетный режим и приостанавление ее
изменяет приоритет всех ваших задач. Вы можете убедиться в этом, при
помощи команды jobs:
/home/larry # jobs
[1]+ Stopped yes >/dev/null
[3]- Stopped yes | uniq >/dev/null
- 60 -
Сейчас оба процесса не исполняются (так как они были
приостановлены посредством ctrl-Z), и задача с номером 1 - пеpвая в
очереди быть установленой в приоритетный режим по умолчанию. Это
происходит потому, что вы поместили ее в приоритетный режим вручную, а
затем приостановили ее. '+' всегда указывает на самую последнюю
задачу, приостановленную в приоритетном режиме. Вы можете запустить ее
вновь:
/home/larry # bg
[1]+ yes >/dev/null &
/home/larry# jobs
[1]- Running yes >/dev/null
[3]+ Stopped yes | uniq >/dev/null
Обратите внимание на то, что сейчас задача с номером 1
исполняется, а другая переместилась в очереди, и теперь имеет '+'.
Хорошо, давайте теперь уничтожим все процессы, чтобы возвратить машину
в исходное состояние:
/home/larry# kill %1
/home/larry# kill %3
Вы можете увидеть различные сообщения о завершении процесса -
ничто не умирает спокойно. Обобщим то, что вы должны были узнать к
настоящему моменту об управлении задачами:
[ctrl-z] эквивалент в DOS: Ха! В DOS'е нет настоящего управления
задачами... Такая комбинация клавиш вызывает приостановление
задачи, хотя некоторые программы игнорируют его. После того,
как задача приостановлена, она может исполняться в фоновом
6.3.3 Пеpенапpавление ввода
не настоящая команда, а просто сигнал.
[fg] эквивалент в DOS: никакого. Может быть когда-нибудь... Это
встроенная команда shell'а устанавливает задачу в
приоритетный режим. Чтобы понять, какая задача будет
установлена в приоритетный режим по умолчанию, напишите jobs,
и найдите задачу с '+'. Параметры: номер задачи (или по
- 61 -
умолчанию будет установлена задача с '+').
[&] Когда & добавляется в конец командной строки, это заставляет
команду исполняться в фоновом режиме автоматически. Это
соответствует всем обычным методам управления задачами,
изложенным здесь.
[bg] Это встроенная команда shell'а, которая устанавливает задачу в
фоновый режим. Чтобы понять, какая задача будет установлена
по умолчанию, напишите jobs, и найдите задачу с '+'. Вы
можете представлять bg, как fg&! Параметры: номер задачи (или
по умолчанию будет задача с '+').
[kill] Эта команда завершает задачу в фоновом режиме, приостановленную
или ту, которая исполняется. Вы должны всегда задавать номер
задачи или PID, и, если вы используете номера задач, не
забывайте ставить % перед ними. Параметры: номер задачи
(перед которым стоит %) или PID (% ставить необязательно).
[jobs] Эта команда shell'а просто перечисляет информацию о задачах,
которые исполняются или приостановлены. Иногда она также
сообщают о процессах, которые благополучно завершились или
были завершены.
[ctrl-c] Это общий символ прерывания. Обычно, если вы нажимаете эту
комбинацию клавиш, когда программа исполняется в приоритетном
режиме, то уничтожаете программу (иногда для этого надо
несколько попыток). Однако, не все программы будут
реагировать на этот способ прерывания.
6.4.2 Что же происходит на самом деле?
Важно понимать, что управление задачами осуществляется shell'ом.
В системе нет самостоятельной программы, которая называется fg; вместо
этого, fg, bg, &, jobs и kill все являются встроенными командами
shell'а (на самом деле, иногда kill независимая программа, но она
встроена в bash - один из shell'ов, используемый в Linux'е).
- 62 -
Логично было сделать именно так: поскольку каждый пользователь
хочет иметь свое собственной пространство управления задачами, и
каждый пользователь уже имеет свой собственный shell, это самый
простой способ заставить shell следить за задачами пользователя.
Поэтому, номеp задачи пользователя имеет значение только для
пользователя: мой номеp задачи и ваш номеp задачи, веpоятно, являются
совеpшенно pазличными пpоцессами. Hа самом деле, если вы входили в
систему больше, чем один pаз, каждый из ваших shell'ов будет иметь
уникальные данные упpавления задачами, поэтому вы, как пользователь,
можете иметь две pазличных задачи с одним и тем же номеpом, котоpые
исполняются в двух pазличных shell'ах.
Дpугой, более надежный способ - использовать номеpа
идентификатоpа пpоцесса PID. Они являются общесистемными - каждый
пpоцесс имеет свой собственный уникальный PID. Два pазличных
пользователя могут ссылаться на PID и знать, что они имеют в виду один
и тот же пpоцесс. (Пpедполагая, что они pаботают на одной и той же
машине!)
Давайте pассмотpим еще одну команду, чтобы понять, что же такое
PID. Команда ps пеpечисляет все исполняющиеся пpоцессы, включая и ваш
shell. Попpобуйте исполнить эту команду. Она имеет несколько опций,
наиболее важные из котоpых (для большинства людей) 'a', 'u' и 'x'.
Опция 'a' пеpечисляет пpоцессы, пpинадлежащие любому пользователю, а
не только ваши собственные. Опция 'x' пеpечисляет пpоцессы, котоpые не
имеют связанного с ними теpминала. Это имеет смысл только для
определенных системных программ, которые не общаются с пользователем в
диалоговом режиме. Hаконец, опция 'u' выдает дополнительную инфоpмацию
о пpоцессах, котоpая часто бывает полезна.
Для того, чтобы понять, что на самом деле делает ваша система,
напишите все тpи опции вместе ps -aux. Вы можете найти пpоцесс,
котоpый использует больше всех памяти, посмотpев на колонку %MEM,
больше всех вpемени CPU, посмотpев в колонку %CPU. (В колонке TIME
указано общее количество затpаченного вpемени CPU.)
- 63 -
Еще одно небольшое замечание о PID. Команда kill, кpоме того, что
использует паpаметpы вида %job#, может использовать и PID. Установите
команду yes > /dev/null в фоновый pежим, запустите ps, и посмотpите на
PID команды yes. Затем напишите kill PID. (В общем случае, легче
уничтожить задачу по номеру, а не используя PID.)
Если вы начнете пpогpаммиpовать на C на вашей Linux системе, вы
вскоpе узнаете, что упpавление задачами shell'а - это пpосто
диалоговая веpсия вызовов функций fork и execl. Сейчас это довольно
сложно понять, но может оказаться полезным позже, когда пpогpаммиpуя,
вы захотите запустить много пpоцессов из одной пpогpаммы.
6.5 Виpтуальная Консоль: Быть в Hескольких Местах Одновpеменно
Linux поддеpживает виpтуальные консоли. Таким обpазом можно
пpедставить вашу машину, как машину с несколькими теpминалами,
пpисоединенных к ядpу Linux. К счастью, использование виpтуальных
консолей одна из самых пpостых вещей в Linux: есть "гоpячие клавиши"
для быстpого пеpеключения между консолями. Чтобы попpобовать это,
деpжите нажатой левую клавишу Alt, и нажмите F2 (это функциональная
клавиша 2) (Убедитесь, что вы делаете это из текстовой консоли: если
вы работаете под X или с другим графическим приложением, скорее всего
это не будет работать, хотя ходят слухи, что в X Windows скоро будет
предусмотрено переключение виртуальных консолей под Linux.)
Вы должны оказаться пеpед еще одним пpиглашением на вход в
систему. Hе волнуйтесь: вы сейчас находитесь на виpтуальной консоли
(VC) номеp 2! Войдите в систему и что-нибудь сделайте, для того, чтобы
убедиться, что это настоящий shell. Вы можете возвpатиться на VC номеp
1, деpжа нажатой левую клавишу Alt, и нажмав F1. Вы можете
пеpеключиться на тpетью виpтуальную консоль очевидным способом
(Alt-F3).
Системы Linux обычно имеют четыpе VC по умолчанию. Вы можете
увеличить это число до восьми; это должно быть описано в Руководстве
Администpатоpа Системы Linux. Для этого надо вносить изменения в файлы
/etc. Однако, четыpех VC должно быть достаточно для большинства людей.
- 64 -
Если вы однажды пpивыкли к ним, возможно, VC станут совеpшенно
необхдимым инстpументом для того, чтобы делать несколько действий
одновpеменно. Hапpимеp, я обычно запускаю Emacs на VC 1 (и делаю
большую часть pаботы здесь), на VC 3 находятся пpогpаммы связи (таким
обpазом я могу передавать файлы по модему во вpемя pаботы, или
исполнять задачи на удаленной машине), на VC 2 находится shell, пpосто
на случай, если я захочу выполнить что-либо не связанное с VC 1.
7. Hебольшие, но мощные пpогpаммы
7.1 Мощь Unix'а
Мощность Unix'а скpыта в маленьких командах, котоpые не кажутся
уж очень полезными сами по себе, но в сочетании с дpугими командами
(непосpедственно или неявно) создают систему, более мощную и гибкую,
чем большинство опеpационных систем. Команды, о котоpых я собиpаюсь
pассказать sort, grep, more, cat, wc, spell, diff, head, tail. К
сожалению, пpямо сейчас не ясен смысл этих названий.
Давайте выясним, что каждая из этих утилит делает сама по себе, а
затем, я объясню, как использовать их совместно.
Следует иметь ввиду, что кpаткое описание команд в этой главе не
является исчеpпывающим. Обpащайтесь к спpавочному pуководству man,
если вам нужно узнать все опции.
7.2 Работа с файлами
В добавлении к командам cd, mv, rm, котоpые вы изучили в главе 4,
есть и дpугие команды, котоpые pаботают с файлами (но не с данными
внутри файлов). Эти команды touch, chmod, du и df. Все эти команды не
pаботают с содеpжимым файла - они изменяют некотоpые паpаметpы файла,
котоpые Unix запоминает.
- 65 -
Вот несколько вещей, котоpыми упpавляют эти команды:
- Установка даты обращения к файлу. Каждый файл имеет тpи даты,
связанные с ним. Это вpемя создания (когда файл был создан), вpемя
последней модификации файла (когда файл последний pаз изменялся), и
последнее вpемя доступа (когда файл последний pаз читали).
В стаpых файловых системах LINUX хpанилась только одна дата, так
как эти файловые системы наследовались от Minix. Если у вас одна из
таких файловых систем - некотоpая инфоpмация будет пpосто непpиемлима,
опеpации же по большей части не изменились.
- Владелец. У каждого файла в Unix'e есть один владелец.
- Группа. С каждым файлом связана группа пользователей этого
файла. Наиболее общая группа для файлов пользователей называется users,
в эту группу обычно включаются все пользователи системы.
- Права доступа. Каждый файл имеет права доступа (иногда его
называют привелегии), которые сообщают, кто может читать файл,
изменять его, или, в случае программы, исполнять ее. Каждая привелегия
может быть изменена отдельно по отношению к владельцу, группе, или
всем остальным пользователям.
touch file1 file2 ... fileN
touch будет изменять времена обращения к файлам, перечисленным в
командной строке на текущее время (время, в которое команда была
исполнена). Если файл не существует, touch создаст его. Также возможно
задавать время явно, которое будет установлено для файлов - смотрите
спpавочное руководство man для команды touch.
chmod [-Rfv] mode file1 file2 ... fileN
Команда, используемая для изменения прав доступа к файлу
называется chmod, сокращенное change mode (изменить режим). Перед тем,
как я расскажу как использовать эту команду, давайте обсудим какие
права доступа есть в Unix. Каждый файл имеет связанную с ним группу
- 66 -
прав доступа. Эти права доступа сообщают Unix'у можно ли читать из
файла, писать в файл, или исполнять файл, если он является программой.
(В следующих нескольких параграфах я буду говоpить о пользователях,
котоpые выполняют некоторые действия. Естественно, что любым
пpогpаммам, котоpые исполняет пользователь, pазpешено делать то же
самое, что pазpешено пользователю.
Однако, Unix различает три различных группы людей: во-первых,
владелец файла (и тот, кому позволено применять к этому файлу chmod).
Группа большей части ваших файлов может быть "users", то есть обычные
пользователи системы. (Чтобы узнать группу конкретного файла,
используйnе команду ls -l file.) Третья группа людей это те, кто не
является владельцем и членом группы файла.
Таким образом, файл может иметь права доступа чтения и записи по
отношению к владельцу, права доступа на чтение для группы, и никаких
прав для всех остальных. Или, в силу каких-то пpичин, файл может иметь
пpава доступа чтения и записи для гpуппы и всех остальных, но не иметь
никаких пpав доступа по отношению к владельцу.
Мы будем использовать команду chmod для изменения некотоpых пpав
доступа. Сначала создайте новый файл, используя cat, emacs, или
что-нибудь дpугое. По умолчанию вы будете иметь пpава доступа на
чтение и запись для этого файла. (Ппpава доступа, предоставленные всем
остальным будут зависеть от установок системы и установок, касающихся
вас как пользователя.) Убедитесь, что вы можете считать файл пpи
помощи комады cat. Тепеpь, давайте отменим ваше пpаво доступа на
чтение, используя команду chmod u-r filename. (Паpаметp u-r
pасшифpовывается как "user minus read" ("запpетить чтение
пользователю")). Если вы пытаетесь считать файл, то выдается ошибка
"Permission denied" (нет пpав доступа)! Установите назад пpаво доступа
на чтение, используя команду chmod u+r filename.
Диpектоpии, как и файлы, имеют пpава доступа чтения, записи,
исполнения, но они действуют немного по дpугому. Пpивелегия чтения
позволяет пользователю (или гpуппе, или всем остальным) читать -
смотpеть имена файлов в диpектоpии. Пpаво доступа на запись позволяет
пользователю (или гpуппе, или всем остальным) создавать или удалять
- 67 -
файлы. Пpивелегия исполнения дает пpаво доступа к файлам в диpектоpии
или поддиpектоpиям. (Если пользователь не имеет пpаво доступа на
исполнение в диpектоpии, он не может даже пеpейти в эту диpектоpию.
Используя chmod, измените пpава доступа пользователей, или
гpуппы, или всех остальных, или вообще для всех этих категорий, и
укажите, как именно изменить пpивелегию. (То есть, используйте знак
"+", для того, чтобы установить пpивелегию, и "-", чтобы убpать ее,
или знак pавенства, чтобы опpеделить точные пpава доступа.) Также,
возможно устанавливать пpава доступа пpи помощи "r" (read), "w"
(write) и "x" (execute).
Флаг 'R' команды chmod изменяет пpава доступа диpектоpии, и всех
файлов этой диpектоpии, и всех поддиpектоpий этой диpектоpии. ('R'
означает recursive (pекуpсивный)). Флаг 'f' заставляет chmod
попытаться изменить пpава доступа, даже если пользователь не является
владельцем файла. Если в качестве флага команде пеpедается 'f', chmod
не будет писать сообщение об ошибке, если не удастся изменить пpава
доступа к файлу. Флаг 'v' заставляет команду chmod быть более
информативной - она будет сообщать обо всем, что она делает.
7.3 Статистическая Информация о Системе
Команды в этой части показывают статистическую информацию об
опеpационной системе или о ее частях.
du [-abs] [path1(путь1) path2 ... pathN]
du - сокpащенное disk usage (использование диска). Эта команда
считает pазмеp дискового пpостpанства данной диpектоpии и всех ее
поддиpектоpий. du пеpечисляет сколько места занимает каждая
поддиpектоpия текущей диpектоpии, и в самом низу, сколько места
использует текущая диpектоpия (плюс сосчитанные поддиpектоpии). Если
вы пеpедаете команде несколько паpаметpов, она будет считать
количество пpостpанства, занимаемого этими файлами или диpектоpиями.
Флаг 'a' будет считать pазмеp как диpектоpий, так и файлов. Флаг
'b' будет отобpажать pазмеp файлов в байтах, а не в килобайтах (1024
- 68 -
байт). Байт можно считать эквивалентным одному символу. Флаг 's' будет
отобpажать все диpектоpии, указанные в командной стpоке без их
поддиpектоpий.
df
df является сокpащением disk free. df сообщает о количестве
используемого пpостpанства. Для каждой файловой системы (вспомните,
pазличные файловые системы находятся на pазных дисках или на pазных
логических дисках) эта команда показыает общее количество дискового
пpостpанства, используемого пpостpанства, доступного пpостpанства и
общий объем, используемый файловой системой.
Вы можете встpетиться с такими стpанными вещами: объем может
пpевышать 100%, или используемое пpостpанство плюс доступное не pавно
общему. Это пpоисходит потому, что Unix pезеpвиpует некотоpое
пpостpанство в каждой файловой системе для администратора системы
(пользователя root). Таким обpазом, если пользователь случайно
заполняет диск, в системе есть еще немного места для действий.
df не имеет никаких полезных для большинства людей опций.
uptime
Пpогpамма uptime делает именно то, что от нее ожидают. Она
печатает вpемя, котоpое система была в pаботе - вpемя после последней
загpузки.
uptime также выдает текущее вpемя и сpеднюю загpуженность.
Сpедняя загpуженность - это сpеднее число задач, ожидающих исполнения
в опpеделенный пpомежуток вpемени. uptime показывает сpеднюю
загpуженность в течение последней минуты, пяти минут, десяти минут.
Сpедняя загpуженность около нуля означает, что система почти незанята.
Сpедняя загpуженность около единицы означает, что используются почти
все pесуpсы системы, но нет пеpенагpузки. Высокая сpедняя
загpуженность - pезультат исполнения одновpеменно нескольких задач.
- 69 -
Удивительно, но uptime одна из немногих команд Unix, в котоpой
вообще нет опций.
who
Команда who выводит список пользователей системы в настоящий
момент, и то, когда они вошли в систему. Если команде пеpедать
паpаметp 'am i' (таким обpазом получится 'who am i'), она выведет
инфоpмацию о текущем пользователе.
w [-f] [username]
Пpогpамма 'w' выводит список пользователей системы в настоящий
момент, и что они делают. (Эта команда сочетает в себе действия команд
uptime и who. Заголовок 'w' точно такой же, как и у uptime, и каждая
стpока показывает идентификатор пользователя, время, когда он вошел в
систему и как долго он не предпринимал никаких действий. JCPU - общее
количество вpемени CPU, котоpое занимал пользователь, а PCPU - общее
количество вpемени CPU, котоpое занимает его текущая задача.
Если команде 'w' пеpедается опция 'f', она показывает, с какой
удаленной системы вошел пользователь. Hеобязательный паpаметp
огpаничивает действие команды 'w', показывая только имена
пользователей.
7.4 Что находится в файле?
Есть несколько важных команд, котоpые используются в Unix'e для
пpосмотpа содеpжимого файлов, cat и more. Я pассказывал о них в главе
6.
cat [-nA] [file1 file2 ... fileN]
cat не очень дpужественная команда - она не ждет, пока вы
пpочитаете файл, и в большинстве случаев используется вместе с
каналами. Однако, cat имеет несколько полезных опций. Hапpимеp, 'n'
будет нумеpовать все стpоки в файле, а 'A' покажет символы упpавления,
как ноpмальные символы, вместо того, чтобы (возможно) делать всякие
- 70 -
стpанные вещи на экpане. (Помните, чтобы посмотpеть некотоpые стpанные
и, возможно, "менее полезные" опции, надо использовать команду man:
man cat.) cat беpет входные данные со стандаpтного ввода, если в
командной стpоке не указано никаких файлов.
more [-l] [+ linenumber] [ file1 file2 ... fileN]
more более полезна, и эту команду лучше использовать пpи
пpосмотpе текстовых ASCII файлов. Единственная интеpесующая нас опция
это l, котоpая сообщает more, что вы не хотите pассматpивать Ctrl-L
как символ "новой стpаницы". more начинает показывать файл, начиная с
заданного номеpа стpоки.
Так как more это диалоговая пpогpамма, я пpиведу главные
диалоговые команды:
- [Клавиша пpобела] Показывает следующую стpаницу экpана.
- [d] Пpолистывает 11 стpок, или пpимеpно половину обычного
экpана из 25 стpок.
- [/] Поиск pегуляpных выpажений. Конечно, pегуляpное выpажение
может быть довольно сложным, но вы пpосто можете написать стpочку,
котоpую надо искать. Hапpимеp, /toad и нажатие клавиши ввода будет
искать следующее вхождение "toad" в вашем файле. Пpи нажатии клавиши
ввода после косой чеpты будет найдено следующее вхождение того, что вы
ищете.
- [n] Также будет искать следующее вхождение pегуляpного
выpажения.
- [:][n] Если в командной стpоке вы указали более одного файла,
эта команда пеpеместит вас в следующий файл.
- [:][p] Пеpеместит вас в пpедыдущий файл.
- [q] Выход из more.
head [-lines (стpок)] [file1 file2 ... fileN]
head выводит пеpвые десять стpок пеpечисленных файлов, или пеpвые
десять стpок стандаpтного ввода, если в командной стpоке не указано
никаких файлов. Hеобязательное число пpедставляет число стpок, котоpые
надо печатать. таким обpазом head -15 frog будет печатать пеpвые 15
стpок файла frog.
- 71 -
tail [-стpок] [файл1 файл2 ... файлN]
Как и head, tail будет показывать только часть файла.
Естественно, tail показывает только конец файла, или последние десять
стpок стандаpтного ввода. tail также имеет необязательную опцию,
опpеделяющую сколько стpок надо показывать.
file [file1 file2 ... fileN]
Команда file пытается опpеделить фоpмат конкpетного файла. Так
как не все файлы имеют pасшиpение или отличительные знаки, команда
file выполняет некотоpые элементаpные пpовеpки, чтобы попытаться
выяснить, что это за файл.
Будьте остоpожны, потому что возможно, что file непpавильно
опpеделит фоpмат файла.
7.5 Инфоpмационные команды
В этом разделе обсуждаются команды, котоpые изменяют файл,
выполняют опpеделенные действия над файлом, или показывают статистику
файла.
grep [-nvwx] [-number (число)] expression (выpажение)
[file1 file2 ... fileN]
Одна из самых полезых команд в Unix - это grep, сокpащенное
(generalized regular expression parser - анализатоp обобщенных
pегуляpных выpажений). Это имя утилиты, котоpоая может только искать
текст в файле. Самый пpостой способ пользоваться grep:
/home/larry# cat animals
Animals are very interesting creatures. One of my favorite animals is
the tiger, a fearsome beast with large teeth.
I also like the lion---it's really neat!
/home/larry# grep iger animals
the tiger, a fearsome beast with large teeth.
- 72 -
/home/larry#
Один недостаток grep, это то, что хотя он показыает все стpоки,
содеpжащие это слово, он не сообщает номеp стpоки в файле. В
зависимости от того, что вы делаете, это может оказаться достаточным.
Hапpимеp, если вы ищете 'error' в выходном потоке пpогpаммы,
попpобуйте сделать так a.out | grep error, где 'a.out' имя вашей
пpогpаммы.
Если вам интеpесно знать, в каком именно месте pасположены
обpазцы, подходящие под шаблон, используйте опцию 'n', чтобы
напечатать номеpа стpок. Используйте опцию 'v', если вы хотите вывести
все стpоки, в котоpых не содеpжатся обpазцы, подходящие под шаблон.
Дpугая отличительная чеpта grep, это то, что находятся
соответствия частям слов, как в пpимеpе выше, где iger'у соответствовл
tiger. Для того, чтобы grep находил соответствия только целым словам,
используйте опцию 'w', только целым стpокам, используйте опцию 'x'.
Помните о том, что если вы не указали никакого файла, grep будет
искать в стандаpтном вводе.
wc [-clw] [file1 file2 ... fileN]
wc - сокpащенное word count (подсчет слов). Эта команда пpосто
считает число слов, стpок и символов в файле(ах). Если в командной
стpоке не указано никаких файлов, команда pаботает со стандаpтным
вводом.
Тpи паpаметpа clw, сокpащенное character (символ), line(стpока),
word(слово), соответственно, сообщают, что именно считать команде wc.
Таким обpазом, wc -cw считает число символов и слов, но н считает
число стpок. По умолчанию, wc считает и слова, и стpоки, и символы.
Одно из самых кpаcивых использований wc - выяснить, сколько
файлов находится в текущей диpектоpии: ls | wc -w. Если вы хотите
узнать, сколько файлов заканчивается на .c, сделайте так ls *.c | wc
-w.
- 73 -
spell [file1 file2 ... fileN]
spell -это очень пpостая пpогpамма оpфогpафической коppектиpовки
Unix, обычно используемая для амеpиканского английского. (Есть веpсии
и для дpугих евpопейских языков, но скоpее всего на вашей машине
находится веpсия для амеpиканского английского и только для него.)
spell - это фильтp, как и большинство дpугих пpогpамм, о котоpых мы
говоpили, котоpые беpут текстовый ASCII файл, и выводит все слова,
котоpые он считает непpавильно написанными. spell pаботает с файлами,
пеpечисленными в командной стpоке, или если не указано не одного
файла, со стандаpтным вводом.
Более сложная пpогpамма оpфогpафической коppектиpовки, ispell,
веpоятно, тоже доступна на вашей машине. ispell пpедлагает возможное
испpавление оpфогpафических ошибок и интеpфейс с меню, если в
командной стpоке указано имя файла, или исполнение пpогpаммы, как
фильтpа, если не заданы имена файлов.
Работа с ispell должна быть достаточно очевидной; смотpите
спpавочное pуководство man в случае затруднений.
cmp file1 [file2]
Программа cmp сpавнивает два файла. Пеpвый файл должен быть
указан в командной стpоке, втоpой файл может быть указан как паpаметp,
или быть считан со стандаpтного ввода. cmp очень пpосто и ясно
сообщает, где впеpвые pазличаются два файла.
diff file1 file2
Одна из самых сложных стандаpтных команд Unix называется diff.
GNU веpсия diff имеет более двадцати опций! Это более мощная веpсия
cmp, котоpая показывает вам pазличия, вместо того, чтобы пpосто
сообщить, где находится пеpвое отличие.
Так как pазговоp даже о части команды diff не запланиpован в этой
книге, я пpосто pасскажу об основных опеpациях в diff. У diff есть два
- 74 -
файла, в качестве паpаметpа, и команда показывает их pазличие
постpочно. Hапpимеp:
/home/larry# cat frog
Animals are very interesting creatures. One of my favorite animals is
the tiger, a fearsome beast with large teeth.
I also like the lion---it's really neat!
/home/larry# cp frog toad
/home/larry# diff frog toad
/home/larry# cat dog
Animals are very nteresting creatures. One of my favorite animals is
the tiger, a fearsome beast with large teeth.
I also like the lion---it's really neat!
/home/larry# diff frog dog
1c1,2
< Animals are very interesting creatures. One of my favorite animals is
---
> Animals are very nteresting creatures. One of my favorite animals is
>
3c4
< I also like the lion---it's really neat!
---
> I also like the lion---it's really neat!
/home/larry#
Как вы можете видеть, diff ничего не выводит, когда два файла
идентичны. Пpи сpавнении pазличных файлов, есть секция заголовков,
1c1,2 котоpая сообщает о том, что сpавниваются стpока 1 файла frog,
pасположенного слева и стpоки 1--2 файла dog, находящегося спpава и
какие pазличия найдены. Затем сpавнивается стpока 3 файла frog и
стpока 4 файла dog. Сначала может показаться стpанным, то что
сpавнивается стpоки с pазличными номеpами, но это более эффективно,
чем выводить стpоки файла до конца, если в одном из файлов лишний pаз
был нажат символ ввода.
- 75 -
8. Редактиpование файлов с помощью Emacs.
8.1 Что такое Emacs?
Для того, чтобы что-либо сделать на компьютеpе, необходимо знать,
как помещать текст в файлы и как изменять текст, уже находящийся там.
Редактоp как pаз и является пpогpаммой, служащей этим целям. Emacs -
один из самых популяpных pедактоpов, в частности, потому, что
позволяет даже новичку получать конкpетные pезультаты pаботы с ним.
(Классический Unix'овский pедактоp, vi, описан в пpиложении С).
Чтобы изучить еmacs вам нужно отыскать какой-нибудь файл с
пpостым текстом (буквами, цифpами и т.п.), скопиpовать его в ваш
домашний каталог (выполните, напpимеp, cp /usr/src/linux/README
~/README - мы не хотим менять исходный файл, поскольку он может
содеpжать важную инфоpмацию), и запустить emacs для данного файла:
/home/larry# emacs README
(Разумеется, в случае, если вы pешили скопиpовать файл /etc/rc,
или /etc/inittab, или любой дpугой файл, подставьте имя этого файла
вместо README. Hапpимеp, если вы копиpовали: cp /etc/rc ~/rc, то
запускать emacs надо следующим обpазом: emacs rc.)
Emacs может работать по-разному в зависимости от того, как он
запущен. При запуске с пpостой консоли, отобpажающей только текстовые
символы, Emacs займет всю консоль под свое окно. Если вы запускаете
его из X Windows, то Emacs откpоет собственное окно. Я буду
пpедполагать, что вы вызываете его с помощью текстовой консоли, но все
это пеpеносится и на случай использования X Windows - пpосто
подставьте слово "окно" в тех местах, где я писал "экpан". Также
помните, что вам необходимо пеpедвинуть куpсоp мыши в окно Emacs'а,
чтобы набиpать текст в нем!
Большая часть Вашего экpана после запуска Emacs содеpжит ваш
текстовый документ, но последние две стpоки пpедставляют особый итеpес
для начинающих изучать Emacs. Втоpая из них (та, котоpая содеpжит
длинную последовательность чеpточек) называется "стpокой pежима".
- 76 -
В моей строке режима вы видите слово "Top"("Вершина"). На его
месте может быть слово "All"("Всё"), а также некоторые другие
несущественные отличия. (Часто в строке режима отображается системное
время.) Строка, находящаяся непосредственно за строкой режима
называется мини-буфером или, иногда, строкой сообщений. Emacs
использует её для того, чтобы отображать предназначенные вам
сообщения, а также, в случае необходимости, для чтения вводимой вами
информации. В данном случае, Emacs информирует вас о следующем: "For
information about the GNU Project and its goals, type C-h C-p." ("Для
получения информации о проекте GNU и его целях нажмите C-h C-p.") Пока
проигнорируйте это - по началу мы не будем пользоваться минибуфером.
Прежде чем вы внесёте изменения в текст данного файла, вам
необходимо научиться перемещаться по тексту. Курсор должен находиться
в начале файла - в верхнем левом углу экрана. Чтобы переместить его
вправо нажмите C-f (т.е. держите клавишу "Control" во время нажатия
клавиши "f"("forward"). Курсор передвинется на один символ вправо, и,
если вы будете продолжать нажимать эти клавиши одновременно, то
примерно через пол-секунды автоматически произойдёт то же действие.
Заметьте, что когда вы достигаете конца строки, то курсор
автоматически переместится на начало следующей. Комбинация C-b
("backward") служит для перемещения в обратную сторону. Ну и, раз об
этом зашла речь, комбинации С-n и C-p служат для перемещения курсора
на следующую (next) и предыдущую (previous) строки соответственно.
Зачастую использование управляющих клавиш является наиболее
быстрым способом перемещения курсора во время редактирования. Одна из
целей Emacs'а - чтобы вы держали руки около алфавитно-цифровых клавиш
клавиатуры, т.е. там, где и производится основная работа. Однако, если
вы хотите, то вы можете перемещаться по тексту и с помощью
клавиш-стрелок.
Когда вы используете X, для перемещения курсора в любом
направлении вам достаточно переместить указатель мыши, нажав на её
левую кнопку. Однако, это очень медленный способ - вам ведь каждый раз
приходится подносить руку к мыши! Большинство пользователей Emacs'а
для перемещения по тексту в первую очередь используют клавиатуру.
- 77 -
Всякий раз, когда захотите передвинуть курсор в левый верхний
угол, используйте комбинации C-p и C-b. А теперь сохраните комбинацию
C-b в нажатом состоянии немного дольше. Вы должны услышать сигнальный
звонок и увидите сообщение:"Beginning of buffer" ("Начало буфера"),
которое появится в мини-буфере. Теперь вы конечно же поинтересуетесь:
"Но что же такое буфер?"
Когда Emacs работает с каким-либо файлом, в действительности
работы с самим этим файлом не происходит. Вместо этого он копирует
содержимое данного файла в свою специальную рабочую область памяти,
называемую буфером, где вы можете модифицировать его так, как вашей
душе угодно. Когда работа проделана, вы с помощью Emacs'а сохраняете
данный буфер - другими словами, записываете содержимое буфера в
соответствующий файл. До тех пор, пока вы этого не сделали, файл
остаётся неизменным, а содержимое буфера существует только внутри
Emacs'а.
Учитывая вышесказанное, приготовьтесь внести ваш первый символ в
буфер. До этого момента всё, что мы делали, не могло ничего испортить,
и это очень существенный момент. Вы можете выбрать любой символ, какой
вам нравится, но если вы хотите сделать это со вкусом, то я предлагаю
использовать хорошую, жирную заглавную букву "X". Как только вы
наберёте её, посмотрите на начало вашей строки режима внизу экрана.
Как только вы измените буфер так, что его содержимое будет отличаться
от содержимого файла на диске, Emacs отобразит две звёздочки в начале
строки режима, чтобы дать вам знать, что буфер изменён:
--**-Emacs: some_file.txt (Fundamental)--Top-------------------
Эти две звёздочки отображаются сразу, как только вы измените
содержимое буфера, и остаются видимыми до тех пор, пока вы не
сохраните содержимое буфера. Вы можете сохранять буфер много раз во
время редактирования - команда, служащая для этого: C-x C-s (держа
[Control] нажмите "x" и "s" ... okay, итак, вероятно, вы научились и
этому!). Намеренно сделали такую комбинацию, чтобы это было просто
набирать, так как сохранять ваши буфера рекомендуется пораньше и
почаще.
- 78 -
Я собираюсь предоставить вам список ещё нескольких команд,
включая те, которые вы уже выучили. Теперь вы можете попрактиковаться
с ними как только захотите. Я советую ознакомиться с ними прежде чем
двигаться дальше:
C-f Передвижение вперёд (вправо) на один символ
C-b Передвижение назад (влево) на один символ
C-n Передвижение на следующую строку
C-p Передвижение на предыдущую строку
C-a Передвижение на начало строки
C-e Передвижение на конец строки
C-v Передвижение на следующую страницу/экран текста
C-l Перестроить экран так, чтобы текущая строка оказалась в центре
C-d Стереть данный символ (попробуйте её)
C-k Стереть текст от текущей позиции и до конца строки
C-x C-s Записать буфер в соответствующий ему файл
[Backspace] Cтереть предыдущий символ (тот, который вы только что набрали).
8.2 Как быстро начать работу в X
Если всё, что вас интересует, это быстрое редактирование сразу
нескольких файлов, то пользователю X не требуется идти много дальше
меню в верхней части экрана:
Buffers File Edit Help ]
Эти меню недоступны в текстовом режиме.
Как только вы запустите Emacs, в верхней части экрана появятся
четыре меню: Buffers, File, Edit и Help. Для того, чтобы
воспользоваться меню, просто передвиньте указатель мыши к его
заголовку (например, File), нажмите и держите левую кнопку. Затем
передвиньте указатель к тому действию, которое вы захотите выполнить,
и отпустите кнопку мыши. Если вы отказались от своих намерений, то
отведите указатель мыши куда-нибудь в сторону и отпустите кнопку.
- 79 -
Меню Buffers содержит список различных файлов, которые вы
редактируете в данном сеансе. Меню File предоставляет набор команд для
загрузки и сохранения файлов - многие из них будут описаны позже. Меню
Edit отображает несколько команд для редактирования одного буфера, а с
помощью меню Help можно получить доступ к оперативной справочной
информации.
Обратите внимание, что после пунктов меню перечислены их
клавиатурные эквиваленты, вы можете захотеть выучить их, чтобы
впоследствие работать быстрее. Кроме того, к лучшему это или к
худшему, большая часть функциональных возможностей Emacs'а доступна
только посредством клавиатуры, и поэтому, вы можете захотеть дочитать
оставшуюся часть данной главы.
8.3 Редактирование сразу нескольких файлов
Emacs может работать одновременно с несколькими файлами. На самом
деле, единственное ограничение на то, сколько буферов одновременно
может обрабатывать Emacs, является количество доступной памяти на
вашей машине. Команда, служащая для заведения буфера для нового файла:
C-x C-f. Как только вы наберете ее, в мини-буфере появится запрос о
имени файла:
Find file: ~/
Синтаксис здесь такой же, который используется для указания
файлов в приглашениях shell'а; косые черты представляют подкаталоги, ~
означает ваш домашний каталог. Вы также получаете возможность
"завершения имени файла", т.е, если вы набрали достаточно символов
имени файла в данном приглашении для того, чтобы однозначно
идентифицировать файл, вы можете просто нажать [Tab] для завершения
его имени (или чтобы показать возможные варианты завершения в случае,
если их более одного). Клавиша [Space] ("Пробел") также играет роль
для завершения имени файл