«Георгий Курячий Кирилл Маслинский Операционная система Linux Курс лекций. Учебное пособие Москва, 2010 УДК ББК Операционная система Linux: Курс лекций. Учебное пособие / Г. В.Курячий, К. А. Маслинский М. : ALT Linux; ...»
В серии: Библиотека ALT Linux
Георгий Курячий
Кирилл Маслинский
Операционная система Linux
Курс лекций. Учебное пособие
Москва, 2010
УДК
ББК
Операционная система Linux: Курс лекций. Учебное пособие / Г. В.Курячий, К. А. Маслинский М. : ALT Linux;
Издательство ДМК Пресс, 2010. 348 с. : ил. ; 2-е изд.,
исправленное. (Библиотека ALT Linux).
ISBN В курсе даются основные понятия операционной системы Linux и важнейшие навыки работы в ней. Изложение сопровождается большим количеством практических примеров. Данный курс может рассматриваться как учебник для студентов, начинающих обучение по специальностям в области информатики и ещё не знакомых с ОС Linux.
Сайт книги: http://books.altlinux.ru/altlibrary/ Книга адресована студентам, начинающим обучение по специальностям в области информационных технологий, а также всем любознательным пользователям, желающим научиться грамотно и эффективно работать в Linux.
УДК ББК Книгу можно приобрести:
В компании Альт Линукс : (495) 662-3883. E-mail: [email protected] Internet-магазин: http://shop.altlinux.ru В торгово-издательском холдинге Альянс-книга :
Оптовые покупки: (495) 258-91-94, 258-91-95. E-mail:
[email protected] Заказ книг наложенным платежом:
123242, Москва а/я 20 или по электронному адресу [email protected] Internet-магазин: http://www.alians-kniga.ru/ Материалы, составляющие данную книгу, распространяются на условиях лицензии GNU FDL. Книга содержит следующий текст, помещаемый на первую страницу обложки: В серии “Библиотека ALT Linux”. Название: Операционная система Linux: Курс лекций. Учебное пособие. Книга не содержит неизменяемых разделов. Авторы разделов указаны в заголовках соответствующих разделов. ALT Linux торговая марка компании ALT Linux. Linux торговая марка Линуса Торвальдса. Прочие встречающиеся названия могут являться торговыми марками соответствующих владельцев.
c Курячий Г. В., Маслинский К. А., ISBN c Оформление, ALT Linux, c Издание, ДМК Пресс, Оглавление Предисловие Лекция 1. Сеанс работы в Linux 1.1 Пользователи системы........................ 1.2 Регистрация в системе........................ 1.3 Одновременный доступ к системе.................. 1.4 Простейшие команды......................... 1.5 Выход из системы........................... Лекция 2. Терминал и командная строка 2.1 Терминал................................ 2.2 Командная строка........................... 2.3 Подсистема помощи......................... 2.4 Ключи................................. 2.5 Интерпретатор командной строки (shell).............. Лекция 3. Структура файловой системы 3.1 Организация файловой системы................... 3.2 Размещение компонентов системы: Стандарт FHS......... Лекция 4. Работа с файловой системой 4.1 Текущий каталог........................... 4.2 Домашний каталог.......................... 4.3 Информация о каталоге....................... 4.4 Перемещение по дереву каталогов.................. 4.5 Создание каталогов.......................... 4.6 Копирование и перемещение файлов................ 4.7 Файл и его имена: ссылки...................... 4.8 Удаление файлов и каталогов.................... Лекция 5. Доступ процессов к файлам и каталогам 5.1 Процессы................................ 5.2 Доступ к файлу и каталогу...................... Лекция 6. Права доступа 6.1 Права доступа............................. 4 Оглавление Лекция 7. Работа с текстовыми данными Лекция 18. Политика свободного лицензирования. История Предисловие Структура курса В курсе даются основные понятия операционной системы Linux и важнейшие навыки работы в ней. Изложение сопровождается большим количеством практических примеров. Данный курс может рассматриваться как учебник для студентов, начинающих обучение по специальностям в области информатики и ещё не знакомых с ОС Linux. Он состоит из двух основных частей:
1. В первой части вводятся основные понятия и навыки, необходимые пользователю для того, чтобы начать грамотно работать в Linux. Здесь рассмотрены: пользователи с точки зрения системы, понятие терминал и работа с командной строкой, устройства файловой системы и работа с ней, права доступа в Linux, возможности командной оболочки, текстовые редакторы.
2. Вторая часть посвящена тем понятиям и навыкам, которые требуются для администрирования ОС Linux. Сюда входит обсуждение этапов загрузки системы, технологий работы с внешними устройствами, файловыми системами и сетью в Linux, администрирование системы посредством конфигурационных файлов, управление пакетами.
В завершающей лекции курса даётся обзор истории возникновения и развития Linux. Здесь же приведён обзор социального контекста, существенного для понимания ОС Linux и работы в ней: сообщество пользователей, лицензирование свободного программного обеспечения, место свободного ПО на современном рынке, дистрибутивы Linux и решения на базе Linux.
Примеры Теоретическое изложение материала перемежается практическими примерами: показаны конкретные действия пользователя и их результат. Наиболее эффективный способ освоить материал курса по ходу чтения лекций выполнять все примеры самостоятельно. Для этого потребуется доступ к установленному дистрибутиву Linux. Примеры подобраны с таким расчётом, чтобы результат был одинаковым в любом современном дистрибутиве.
В примерах действует один условный пользователь, работающий в одном и том же месте : все созданные им файлы сохраняются и используются в последующих лекциях. Он совершает типичные ошибки или, наоборот, делает всё правильно.
Примеры набраны моноширинным шрифтом (типа пишущая машинка ) и по возможности точно воспроизводят то, что пользователь видит на экране монитора (иногда с некоторыми купюрами). Команды, которые должен вводить пользователь, в примерах следуют за приглашением (оно завершается знаком $): все символы от $ до конца строки и есть ввод пользователя.
Названия объектов системы (имена файлов, программ и т. п.), встречающиеся в тексте, также набраны моноширинным шрифтом, их можно в неизменном виде вводить в качестве команд и т. п. Однако иногда такие строки для удобства чтения заключены в кавычки в этом случае вводить кавычки не нужно.
Цель Курс адресован студентам, начинающим обучение по специальностям в области информационных технологий, а также всем любознательным пользователям, желающим научиться грамотно и эффективно работать в Linux. Изучение курса не требует специальных знаний в области программирования.
Предварительные знания Рекомендуемый уровень предварительной подготовки:
1. знакомство с устройством компьютера на уровне пользователя;
2. знакомство с устройством и принципом работы TCP/IP-сетей.
Лекция Сеанс работы в Linux 1.1 Пользователи системы Между включением питания компьютера и моментом, когда система готова к работе с пользователем, происходит процедура загрузки системы. В процессе загрузки будет запущена основная управляющая программа (ядро), определено и инициализировано имеющееся оборудование, активизированы сетевые соединения, запущены системные службы. В Linux во время загрузки на экран выводятся диагностические сообщения о происходящих событиях, и если всё в порядке и не возникло никаких ошибок, загрузка завершится выводом на экран приглашения login:. Оно может быть оформлено по-разному, в зависимости от настройки системы оно может отображаться в красиво оформленном окне или в виде простой текстовой строки вверху экрана. Это приглашение к регистрации в системе: система ожидает, что в ответ на это приглашение будет введено входное имя пользователя, который начинает работу. Естественно, имеет смысл вводить такое имя, которое уже известно системе, чтобы она могла узнать, с кем предстоит работать, выполнять команды незнакомого Linux откажется.
1.1.1 Многопользовательская модель разграничения доступа Процедура регистрации в системе обязательна для Linux, работать в системе, не зарегистрировавшись под тем или иным именем пользователя, просто невозможно 1. Для каждого пользователя определена сфера его полномочий в системе: программы, которые он может запускать, файлы, которые он имеет право просматривать, изменять, удалять. При попытке сделать что-то, выходящее за рамки полномочий, пользователь получит сообщение об ошибке. Такая строгость 1 Вместо формального зарегистрироваться в системе обычно используют выражение войти в систему. Операционная система представляется чем-то вроде замкнутого помещения, внутри которого можно оказаться, только успешно проникнув через дверь пройдя процедуру регистрации.
может показаться необязательной, если пользователи компьютера доверяют друг другу, и особенно если у компьютера только один пользователь. Такая ситуация очень распространена на сегодняшний день, когда слово компьютер означает в первую очередь персональный компьютер.
Однако персональный компьютер довольно-таки позднее явление в мире вычислительной техники, получившее широкое распространение только в последние два десятилетия. Несколько раньше компьютер ассоциировался с огромным и дорогостоящим (занимавшем целые залы) вычислительным центром, предназначенным в первую очередь для решения разного рода научных задач.
Машинное время такого центра стоит очень недёшево, и при этом его возможности необходимы одновременно многим сотрудникам, которые могут ничего не знать о работе друг друга. Требуется следить за тем, чтобы не произошло случайного вмешательства пользователей в чужую работу и повреждения чужих данных (файлов), выделять каждому машинное время (по возможности избежав простаивания), пространство на диске и при этом не допустить узурпирования всех ресурсов одним пользователем и его задачей, а равномерно делить ресурсы между всеми. Для такой системы принципиально важно знать, кому принадлежат задачи и файлы, поэтому и возникла необходимость выдавать доступ к ресурсам системы только после того, как пользователь зарегистрируется в системе под тем или иным именем.
Такая модель была реализована в многопользовательской операционной системе UNIX. Именно от неё Linux также многопользовательская система унаследовал принципы работы с пользователями. Но это не просто дань традиции или стремление к универсальности: многопользовательская модель позволяет решить ряд задач, весьма актуальных и для современных персональных компьютеров, и для серверов, работающих в локальных и глобальных сетях, и вообще в любых системах, одновременно выполняющих разные задачи, отвечают за которые разные люди.
Компьютер это всего лишь инструмент для решения разного рода прикладных задач: от набора и распечатывания текста до вычислений. Сложность состоит в том, что для изменения этого инструмента и для работы с его помощью используются одни и те же операции: изменение файлов, выполнение программ.
Получается, что, если не соблюдать осторожности, побочным результатом работы может стать выход из строя самой системы. Поэтому первоочередная задача для систем любого масштаба разделять повседневную работу и изменение самой системы. В многопользовательской модели эта задача решается очень просто: разделяются обычные пользователи и администратор (ы). В полномочия обычного пользователя входит все необходимое для выполнения прикладных задач, попросту говоря, для работы, однако ему запрещено выполнение действий, изменяющих саму систему. Таким образом можно избежать повреждения системы в результате ошибки пользователя (нажал не ту кнопку) или ошибки в программе, или даже по злому умыслу (например, вредительской программойвирусом). Полномочия администратора обычно не ограничены.
Для персонального компьютера, с которым работают несколько человек, довольно важно обеспечить каждому независимую рабочую среду. Это снижает вероятность случайного повреждения чужих данных, а также позволяет каждому пользователю настроить внешний вид рабочей среды по своему вкусу и, например, сохранить расположение открытых окон между сеансами работы. Эта задача очевидным образом решается в многопользовательской модели: организуется домашний каталог, где хранятся данные пользователя, настройки внешнего вида и поведения его системы и т. п., доступ остальных пользователей к этому каталогу ограничивается.
Если компьютер подключён к глобальной или локальной сети, то вполне вероятно, что какую-то часть хранящихся на нем ресурсов имеет смысл сделать публичной и доступной по сети. Напротив, часть данных, скорее всего, делать публичными не следует (например, личную переписку). Ограничив публичный доступ пользователей к персональным данным друг друга, мы решим и эту задачу.
Именно благодаря гибкости многопользовательской модели разграничения доступа она используется сегодня не только на серверах, но и на домашних персональных компьютерах. В самом простом варианте для персонального компьютера, на котором работает только один человек эта модель сводится к двум пользователям: обычному пользователю для повседневной работы и администратору для настройки, обновления, дополнения системы и исправления неполадок. Но даже в таком сокращённом варианте это даёт целый ряд названных выше преимуществ.
1.1.2 Учётные записи Конечно, система может быть знакома с человеком только в переносном смысле: в ней должна храниться запись о пользователе с таким именем и о связанной с ним системной информации учётная запись. Английский эквивалент термина учётная запись account, счёт. Именно с учётными записями, а не с самими пользователями, и работает система. В действительности, соотношение учётных записей и пользователей-людей в Linux обычно не является однозначным: несколько человек могут использовать одну учётную запись система не может их различить. И в то же время в Linux имеются учётные записи для системных пользователей, от имени которых работают некоторые программы и которые не предназначены для работы людей.
Объект системы, при помощи которого Linux ведёт учёт работы пользователя в системе. Учётная запись содержит данные о пользователе, необходимые для регистрации в системе и дальнейшей работы с ней.
Учётные записи могут быть созданы во время установки системы или после установки. Подробно процедура создания учётных записей (добавления пользователей) описана в лекции Конфигурационные файлы (12).
Главное для человека в учётной записи её название, входное имя пользователя. Именно о нём спрашивает система, выводя приглашение login:.
Помимо входного имени в учётной записи содержатся некоторые сведения о пользователе, необходимые системе для работы с ним. Ниже приведён список этих сведений.
Название учётной записи пользователя, которое нужно вводить при регистрации пользователя в системе.
1.1.2.1 Идентификатор пользователя Linux связывает входное имя c идентификатором пользователя в системе UID (User ID). UID это положительное целое число, по которому система и отслеживает пользователей2. Обычно это число выбирается автоматически при регистрации учётной записи, однако оно не может быть совершенно произвольным. В Linux есть некоторые соглашения относительно того, каким типам пользователей могут быть выданы идентификаторы из того или иного диапазона. В частности, UID от 0 до 100 зарезервированы для псевдопользователей3.
идентификатор пользователя Уникальное число, однозначно идентифицирующее учётную запись пользователя в Linux. Таким числом снабжены все процессы Linux и все объекты файловой системы. Используется для персонального учёта действий пользователя и определения прав доступа к другим объектам системы.
1.1.2.2 Идентификатор группы Кроме идентификационного номера пользователя с учётной записью связан идентификатор группы. Группы пользователей применяются для организации доступа нескольких пользователей к некоторым ресурсам. У группы, так же, как и у пользователя, есть имя и идентификационный номер GID (Group ID). В Linux пользователь должен принадлежать как минимум к одной группе группе по умолчанию. При создании учётной записи пользователя обычно создаётся и группа, имя которой совпадает с входным именем4, именно эта группа будет использоваться как группа по умолчанию для этого пользователя. Пользователь может входить более чем в одну группу, но в учётной записи указывается только номер группы по умолчанию.
2 Это может оказаться важным, например, в такой ситуации: учётную запись пользователя с именем test удалили из системы, а потом добавили снова. Однако с точки зрения системы это уже другой пользователь, потому что у него другой UID.
3 Обычно Linux выдаёт нормальным пользователям UID, начиная с 500 или 1000.
4 Как правило, численное значение GID в этом случае совпадает со значением UID.
1.1.2.3 Полное имя Помимо входного имени в учётной записи содержится и полное имя (имя и фамилия) использующего данную учётную запись человека. Конечно, пользователь может указать что угодно в качестве своего имени и фамилии. Полное имя необходимо не столько системе, сколько людям чтобы иметь возможность определить, кому принадлежит учётная запись.
1.1.2.4 Домашний каталог Файлы всех пользователей в Linux хранятся раздельно, у каждого пользователя есть собственный домашний каталог, в котором он может хранить свои данные. Доступ других пользователей к домашнему каталогу пользователя может быть ограничен. Информация о домашнем каталоге обязательно должна присутствовать в учётной записи, потому что именно с него начинает работу пользователь, зарегистрировавшийся в системе.
1.1.2.5 Командная оболочка Каждому пользователю нужно предоставить способ взаимодействовать с системой: передавать ей команды и получать её ответы. Для этой цели служит специальная программа командная оболочка (или интерпретатор командной строки), она должна быть запущена для каждого пользователя, зарегистрировавшегося в системе. Поскольку в Linux доступно несколько разных командных оболочек, в учётной записи указано, какую из командных оболочек нужно запустить для данного пользователя. Если специально не указывать командную оболочку при создании учётной записи, она будет назначена по умолчанию, вероятнее всего это будет bash.
интерпретатор командной строки Программа, используемая в Linux для организации диалога человека и системы. Командный интерпретатор имеет три основных ипостаси: (1) редактор и анализатор команд в командной строке, (2) высокоуровневый системно-ориентированный язык программирования, (3) средство организации взаимодействия команд друг с другом и с системой.
1.1.3 Понятие администратор В Linux есть ровно один пользователь, полномочия которого в системе принципиально отличаются от полномочий остальных пользователей это пользователь с идентификатором 0. Обычно учётная запись пользователя с UID= называется root (англ. корень ). Пользователь root это администратор системы Linux, учётная запись для root обязательно присутствует в любой системе Linux, даже если в ней нет никаких других учётных записей. Пользователю с таким UID разрешено выполнять любые действия в системе, а значит, любая ошибка или неправильное действие может повредить систему, уничтожить данные и привести к другим печальным последствиям. Поэтому категорически не рекомендуется регистрироваться в системе под именем root для повседневной работы. Работать в root следует только тогда, когда это действительно необходимо:
при настройке и обновлении системы, восстановлении после сбоев.
Именно root обладает достаточными полномочиями для создания новых учётных записей.
1.2 Регистрация в системе Вернёмся теперь к нашей загруженной операционной системе Linux, которая по-прежнему ожидает ответа на своё приглашение login:. Если Ваша система настроена таким образом, что это приглашение оформлено в виде графического окна в центре экрана, нажмите комбинацию клавиш Ctrl+Alt+F1 произойдёт переключение видеорежима и Вы увидите перед собой чёрный экран с примерно следующим текстом:
Пример 1.1. Начальное приглашение к регистрации Welcome to Some Linux / tty localhost login:
Мы переключились в так называемый текстовый режим, в котором нам недоступны возможности графических интерфейсов: рисование окон произвольной формы и размера, поддержка миллионов цветов, отрисовка изображений.
Все возможности текстового режима ограничены набором текстовых и псевдографических символов и несколькими десятками базовых цветов. Однако в Linux в текстовом режиме можно выполнять практически любые действия в системе (кроме тех, которые требуют непосредственного просмотра изображений). Текстовый режим в Linux это полнофункциональный способ управления системой.
В различных реализациях Linux работа в графическом режиме может выглядеть очень по-разному5, более того, графический режим может быть даже недоступен после установки системы без специальной настройки. Текстовый режим, напротив, доступен в любой реализации Linux и всегда выглядит практически одинаково. Именно поэтому все дальнейшие примеры и упражнения мы будем проделывать в текстовом режиме, возможностей которого будет достаточно для освоения всего излагаемого в курсе материала.
Первая строка в примере это просто приглашение, она носит информационный характер. Существует очень много различных реализаций Linux (существующие реализации будут обсуждаться в лекции Политика свободного лицензирования. История Linux: от ядра к дистрибутивам (18)), и в каждом из 5 Разнообразие графических интерфейсов Linux гораздо выше, чем, например, в win, поэтому составить учебный курс, не ориентируясь специально на ту или иную версию, просто невозможно.
них принят свой формат первой пригласительной строки, хотя почти наверняка там будет указано, с какой именно версией Linux Вы имеете дело, и, возможно, будут присутствовать ещё некоторые параметры. В наших примерах мы будем использовать условную реализацию Linux Some Linux.
Вторая строка начинается с имени хоста собственного имени системы, установленной на данном компьютере. Это имя существенно в том случае, если компьютер подключён к локальной или глобальной сети, если же он ни с кем более не связан, это имя может быть любым. Обычно имя хоста определяется уже при установке системы, однако в нашем случае этого сделано не было, и используется вариант по умолчанию localhost. Заканчивается эта строка собственно приглашением к регистрации в системе словом login:.
Теперь понятно, что в ответ на это приглашение мы должны ввести входное имя, для которого есть соответствующая учётная запись в системе. В правильно установленной операционной системе Linux должна существовать как минимум одна учётная запись для обычного пользователя. Во всех дальнейших примерах у нас будет участвовать Мефодий Кашин, владелец учётной записи methody в системе Some Linux. Вы можете пользоваться для выполнения примеров любой учётной записью, которая создана в Вашей системе (естественно, кроме root).
Итак, Мефодий вводит своё входное имя в ответ на приглашение системы:
Welcome to Some Linux / tty localhost login: Methody Password:
Login incorrect login:
В ответ на это система запрашивает пароль. Пароль Мефодия нам неизвестен, поскольку он его никому не говорит. Когда Мефодий вводил свой пароль, на экране монитора он не отображался (это сделано, чтобы пароль нельзя было подсмотреть), однако Мефодий точно знает, что не сделал опечатки. Тем не менее система отказала ему в регистрации, выдав сообщение об ошибке (Login incorrect). Если же внимательно посмотреть на введённое им имя пользователя, можно заметить, что оно начинается с заглавной буквы, в то время как учётная запись называется methody. Linux всегда делает различие между заглавными и строчными буквами, поэтому Methody для него уже другое имя.
Теперь Мефодий повторит попытку:
login: methody Password:
[methody@localhost methody]$ В этот раз регистрация прошла успешно, о чём свидетельствует последняя строка примера приглашение командной строки. Приглашение это подсказка, выводимая командной оболочкой и свидетельствующая о том, что система готова принимать команды пользователя. Приглашение может быть оформлено по-разному, более того, пользователь может сам управлять видом приглашения (подробнее это будет рассмотрено в лекции Возможности командной оболочки (8)), но почти наверняка в приглашении содержатся входное имя и имя хоста в нашем примере это methody и localhost соответственно.
Заканчивается приглашение чаще всего символом $. Это командная строка, в которой будут отображаться все введённые пользователем с клавиатуры команды, а при нажатии на клавишу Enter содержимое командной строки будет передано для исполнения системе.
1.2.1 Идентификация (authentication) Когда система выводит на экран приглашение командной строки после того, как правильно введены имя пользователя и пароль, это означает, что произошла идентификация пользователя (authentication, проверка подлинности ). Пароль может показаться излишней сложностью, но у системы нет другого способа удостовериться, что за монитором находится именно тот человек, который имеет право на использование данной учётной записи.
Конечно, процедура идентификации имеет очевидное значение для систем, к которым имеют непосредственный или сетевой доступ многие не связанные друг с другом пользователи. Процедура идентификации даёт уверенность, что к такой системе не получит доступ случайный человек, не имеющий права использовать её ресурсы и хранящуюся там информацию. Одновременно она даёт определённую гарантию безопасности от злонамеренного вмешательства: даже если навредить попытается пользователь, имеющий учётную запись, его действия будут зарегистрированы в системе (поскольку системе всегда известно, от имени какой учётной записи выполняются те или иные действия), и злоумышленника можно будет найти и остановить.
Для тех пользователей, кому процедура идентификации кажется утомительной и необязательной (например, единственным пользователям персональных компьютеров), существует возможность получить доступ к системе, минуя процедуру идентификации. Для этой цели служит программа autologin. Она предоставляет доступ к работе с графическим интерфейсом сразу после загрузки системы, не запрашивая имя пользователя и пароль. В действительности, autologin запускает все программы от имени одного пользователя, зарегистрированного в системе. Например, Мефодий мог бы использовать свою учётную запись methody для автоматического входа в систему. Однако у этого подхода есть свои минусы:
• Теряется возможность определить, кто, что и когда делал в системе, потому что все реальные пользователи работают с одной учётной записью, с точки зрения системы все они один и тот же пользователь.
• Вся личная информация этого пользователя становится общественной.
• Пароль легко забывается (пароль всё равно есть у любого пользователя), потому что его не нужно вводить каждый день. При этом autologin даёт доступ только человеку, сидящему перед монитором и только к работе с графическим интерфейсом. Если же потребуется, например, скопировать файлы с Вашего компьютера по сети, пароль всё равно нужно будет вводить.
Учитывая все перечисленные минусы, можно заключить, что использовать autologin разумно только в тех системах, которые не подключены к локальной или глобальной сети, и к которым при этом открыт публичный доступ (например, в библиотеке).
1.2.2 Смена пароля Если учётная запись была создана не самим пользователем, а администратором многопользовательской системы (скажем, администратором компьютерного класса), скорее всего был выбран тривиальный пароль с тем расчётом, что пользователь его изменит при первом же входе в систему. Распространены тривиальные пароли 123456, empty и т. п. Поскольку пароль это единственная гарантия, что Вашей учётной записью не воспользуется никто, кроме Вас, есть смысл выбирать в качестве пароля неочевидные последовательности символов.
В Linux нет серьёзных ограничений на длину пароля или входящие в него символы (в частности, использовать пробел можно), но нет смысла делать пароль слишком длинным сразу возрастает опасность его забыть. Надёжность паролю придаёт его непредсказуемость, а не длина. Например, пароль, представляющий собой Ваше имя или повторяющий название учётной записи, очень предсказуем.
Наименее предсказуемы пароли, представляющие собой случайную комбинацию прописных и строчных букв, цифр, знаков препинания, но их и труднее всего запомнить.
Пользователь может в любой момент поменять свой пароль. Единственное, что требуется для смены пароля знать текущий пароль. Допустим, Мефодий придумал более удачный пароль и решил его поменять. Он уже зарегистрирован в системе, поэтому ему нужно только набрать в командной строке команду passwd и нажать Enter.
[methody@localhost methody]$ passwd Changing password for methody.
Enter current password:
You can now choose the new password or passphrase.
A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use an 8 character long password with characters from at least 3 of these 4 classes, or a 7 character long password containing characters from all the classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used.
A passphrase should be of at least 3 words, 12 to 40 characters long and contain enough different characters.
Alternatively, if noone else can see your terminal now, you can pick this as your password: "spinal&state:buy".
Enter new password:
Набрав в командной строке passwd, Мефодий запустил программу passwd, которая предназначена именно для замены информации о пароле в учётной записи пользователя. Она вывела приглашение ввести текущий пароль (Enter current password), а затем, в ответ на правильно введённый пароль, предложила подсказку про грамотное составление пароля и даже вариант надёжного пароля, который Мефодий вполне может использовать, если никто в данный момент не видит его монитора. При каждом запуске passwd генерирует новый случайный пароль и предлагает его пользователю. Однако Мефодий не воспользовался подсказкой и придумал пароль сам.
Enter new password:
Weak password: not enough different characters or classes for this length.
Try again.
...
Enter new password:
В данном случае операция не удалась, поскольку с точки зрения passwd пароль, придуманный Мефодием, оказался слишком простым6. В следующий раз ему придётся ввести более сложный пароль. passwd запрашивает новый пароль 6 В разных дистрибутивах Linux используется разные версии программы passwd, поэтому не всегда она будет столь придирчива, как в дистрибутиве Мефодия.
дважды, чтобы удостовериться, что в первый раз не было сделано опечатки, если же всё в порядке, она выведет сообщение о том, что операция смены пароля прошла успешно, и завершит работу, вернув Мефодию приглашение командной строки.
Enter new password:
Re-type new password:
passwd: All authentication tokens updated successfully [methody@localhost methody]$ Придирчивость, с которой passwd относится к паролю пользователя, не случайна. Пароль пользователя одно из самых важных и зачастую одно из самых слабых мест безопасности системы. Отгадавший Ваш пароль (причём не имеет значение, человек это сделал или злонамеренная программа) получит доступ к ресурсам системы ровно в том объёме, в котором он предоставляется Вам, сможет читать и удалять Ваши файлы и т. п. Особенно это важно в случае пароля администратора, потому что его полномочия в системе гораздо шире, а действия от его имени могут повредить и саму систему. Обычному пользователю в некоторых обстоятельствах также могут быть переданы полномочия администратора (этот вопрос будет подробно обсуждаться в лекции Права доступа (6)), в таком случае не менее важно, чтобы и его пароль был надёжным.
Пароль пользователя root изначально назначается при установке системы, однако он может быть изменён в любой момент впоследствии точно так же, как и пароль обычного пользователя.
1.3 Одновременный доступ к системе То, что Linux многопользовательская и многозадачная система, проявляется не только в разграничении прав доступа, но и в организации рабочего места.
Каждый компьютер, на котором работает Linux, предоставляет возможность зарегистрироваться и получить доступ к системе одновременно нескольким пользователям. Даже если в распоряжении всех пользователей есть только один монитор и одна системная клавиатура, эта возможность небесполезна: одновременная регистрация в системе нескольких пользователей позволяет работать по очереди без необходимости каждый раз завершать все начатые задачи (закрывать все окна, прерывать исполнение всех программ) и затем возобновлять их. Более того, ничто не препятствует зарегистрироваться в системе несколько раз под одним и тем же входным именем. Таким образом, можно получить доступ к одним и тем же ресурсам (своим файлам) и организовать параллельную работу над несколькими задачами.
1.3.1 Виртуальные консоли Характерный для Linux способ организации параллельной работы пользователей виртуальные консоли.
Допустим, что Мефодий хочет зарегистрироваться в системе ещё раз, чтобы иметь возможность следить за выполнением двух программ одновременно. Он может сделать это, не покидая текстового режима: достаточно нажать комбинацию клавиш Alt+F2, и на экране появится новое приглашение к регистрации в системе.
Welcome to Some Linux / tty localhost login: methody Password:
[methody@localhost methody]$ Мефодий ввёл свой новый пароль и получил приглашение командной строки, аналогичное тому, которое мы уже видели в предыдущих примерах. Нажав комбинацию клавиш Alt+F1, Мефодий вернётся к только что покинутой им командной строке, в которой он выполнял команду passwd для смены пароля. Приглашение в обоих случаях выглядит одинаково, и это не случайно обе командные строки предоставляют совершенно эквивалентный доступ к системе, в любой из них можно выполнять любые доступные команды.
Наблюдательный Мефодий обратил внимание, что в последнем примерепервая строка приглашения оканчивается словом tty2. tty2 это обозначение второй виртуальной консоли. Можно переключаться между виртуальными консолями так, как если бы Вы переходили от одного монитора с клавиатурой к другому, подавая время от времени команды и следя за выполняющимися там программами. По умолчанию в Linux доступно не менее 6-ти виртуальных консолей, переключаться между которыми можно при помощи сочетания клавиши Alt с одной из функциональных клавиш (F1 F6 ), с каждым сочетанием связана соответствующая по номеру виртуальная консоль. Виртуальные консоли обозначаются ttyN, где N номер виртуальной консоли.
виртуальная консоль Виртуальные консоли это несколько параллельно выполняемых операционной системой программ, предоставляющих пользователю возможность зарегистрироваться в системе в текстовом режиме и получить доступ к командной строке.
Во многих дистрибутивах Linux одна из виртуальных консолей по умолчанию не может быть использована для регистрации пользователя, однако она не менее, если не более полезна. Если Мефодий нажмёт Alt+F12, он увидит консоль, заполненную множеством сообщений системы о происходящих событиях. В частности, там он может обнаружить две записи о том, что в системе зарегистрирован пользователь methody. На эту консоль выводятся сообщения обо всех важных событиях в системе: регистрации пользователей, выполнении действий от имени администратора (root), подключении устройств и подгрузке драйверов к ним и многое другое.
Пример двенадцатой виртуальной консоли показывает, что виртуальные консоли довольно гибкий механизм, поддерживаемый Linux, при помощи которого можно решать разные задачи, а не только организацию одновременного доступа к системе. Для того, чтобы на виртуальной консоли появилось приглашение login: после загрузки системы, для каждой такой консоли должна быть запущена программа getty. Попробуйте нажать Alt+F10 с большой вероятностью Вы увидите просто чёрный экран. Десятая виртуальная консоль поддерживается системой, однако чёрный экран означает, что для этой консоли не запущена никакая программа, поэтому воспользоваться её существованием не получится. Для каких именно консолей будет запущена программа getty определяется настройкой конкретной системы. Впоследствии эта настройка может быть изменена пользователем. О том, как это может быть сделано, речь пойдёт в лекции Этапы загрузки системы (10).
1.3.2 Графические консоли Впрочем, как ни широки возможности текстового режима, Linux ими не ограничен. Подробно работа в графическом режиме будет разбираться в последующих лекциях (см. лекцию Графический интерфейс (X11) (16)). Сейчас важно заметить, что если при загрузке системы приглашение login: было представлено в виде графического окна, можно вернуться к этому приглашению, нажав комбинацию клавиш Ctrl+Alt+F7. Процедура регистрации здесь будет совершенно аналогична регистрации в текстовом режиме. С той разницей, что после идентификации пользователя (правильно введённого имени пользователя и пароля) Вы увидите не приглашение командной строки, а графическую рабочую среду. Как именно она будет выглядеть зависит от того, какую систему Вы используете, и как она настроена.
Кроме того, что несколько пользователей (или несколько копий одного и того же пользователя) могут работать параллельно на разных виртуальных консолях, они могут параллельно зарегистрироваться и работать параллельно в разных графических средах. Обычно в стандартно настроенной Linux-системе можно организовать не менее трёх графических консолей, работающих одновременно. Переключаться между ними можно при помощи сочетаний клавиш Ctrl+Alt+F7 Ctrl+Alt+F9.
Чтобы переключиться из графического режима в одну из текстовых виртуальных консолей, достаточно нажать комбинацию клавиш Ctrl+Alt+FN, где N номер необходимой виртуальной консоли.
1.4 Простейшие команды Работа в Linux при помощи командной строки напоминает диалог с системой:
пользователь вводит команды (реплики), получая от системы ответные реплики, содержащие сведения о произведённых операциях, дополнительные вопросы к пользователю, сообщения об ошибках или просто молчаливое согласие выполнить следующую команду7.
Простейшая команда в Linux состоит из одного слова названия программы, которую необходимо выполнить. Одну такую команду (passwd) Мефодий уже использовал для того, чтобы изменить свой пароль. Теперь Мефодий решил вернуться на одну из виртуальных консолей, на которой он зарегистрировался, и попробовать выполнить несколько простых команд.
[methody@localhost methody]$ whoami methody [methody@localhost methody]$ Название этой команды происходит от английского выражения Who am I?
( Кто я? ). В ответ на эту команду система вывела только одно слово: methody и завершила свою работу, о чём свидетельствует вновь появившееся приглашение командной строки. Программа whoami возвращает название учётной записи того пользователя, от имени которого она была выполнена. Эта команда полезна в системах, в которых работает много разных пользователей, чтобы не воспользоваться по ошибке чужой учётной записью. Однако, в приглашении командной строки зачастую указывается имя пользователя (как и в наших примерах), поэтому без команды whoami можно обойтись. Следующий пример демонстрирует программу, которая выдаст Мефодию уже больше полезной информации: who ( Кто ).
[methody@localhost methody]$ who [methody@localhost methody]$ [methody@localhost methody]$ who am i [methody@localhost methody]$ 7 Реплики в таком диалоге строго чередуются, а собеседники не могут говорить одновременно в естественном диалоге так никогда не происходит. Скорее это напоминает диалог в учебнике иностранного языка. Однако и в диалоге с Linux у собеседников есть возможность перебить друг друга об этом речь пойдёт в последующих лекциях.
who выводит список пользователей, которые в настоящий момент зарегистрированы в системе (вошли в систему). Данная программа выводит по одной строке на каждого зарегистрированного пользователя: в первой колонке указывается имя пользователя, во второй точка входа в систему, далее следует дата и время регистрации и имя хоста. Из выведенной who информации можно заключить, что в системе дважды зарегистрирован пользователь methody, который сначала зарегистрировался на первой виртуальной консоли (tty1), а примерно через сорок минут на второй (tty2). Конечно, Мефодий и так это знает, однако администратору больших систем, когда пользователи могут зарегистрироваться со многих компьютеров и даже по Сети, программа who может быть очень полезна. Могло создаться впечатление, что who очень умная программа, понимающая английский, но это не так. Из всех английских слов она понимает только сочетание am i таким способом Мефодий узнал, за какой консолью он сейчас работает.
Ещё одна программа, выдающая информацию о пользователях, работавших в системе в последнее время last8. Выводимые этой программой строки напоминают вывод программы who, с той разницей, что здесь перечислены и те пользователи, которые уже завершили работу.
[methody@localhost methody]$ last В этом примере Мефодий неожиданно обнаружил кроме себя самого неизвестных ему пользователей cacheman и cyrus он совершенно точно знает, что не создавал учётных записей с такими именами. Это псевдопользователи (или системные пользователи) специальные учётные записи, которые используются для работы некоторыми программами. Поскольку эти пользователи регистрируются в системе без помощи монитора и клавиатуры, их точка входа в систему не определена (во второй колонке записано ???). В выводе программы last появляется даже пользователь reboot (перезагрузка). В действительности такой учётной записи нет, программа last таким способом выводит информацию о том, когда была загружена система.
некоторых Linux-системах эта программа может называться lastlog.
1.5 Выход из системы В строках, выведенных программой last, указан не только момент регистрации пользователя в системе, но и момент завершения работы. Можно представлять Linux как закрытое помещение: чтобы начать работать нужно сначала войти в систему (зарегистрироваться, пройти процедуру идентификации), а после того, как работа закончена, нужно из системы выйти. В том случае, если в систему вошло несколько пользователей, каждый из них должен выйти, завершив работу, причём совершенно не имеет значения, разные это пользователи или копии одного и того же.
Вход пользователя в систему означает, что нужно принимать и выполнять его команды и возвращать ему отчёты о выполненных действиях, например, предоставив ему интерфейс командной строки. Выход означает, что работа от имени данного пользователя завершена и более не следует принимать от него команды.
Весь процесс взаимодействия пользователя с системой с момента регистрации до выхода называется сеансом работы. Причём если пользователь входит в систему несколько раз под одним и тем же именем, ему будут доступны несколько разных сеансов работы, не связанных между собой.
В наших примерах Мефодий зарегистрирован в системе дважды: на первой и второй виртуальных консолях. Чтобы завершить работу на любой из них, ему достаточно в соответствующей командной строке набрать команду logout.
[methody@localhost methody]$ logout Welcome to Some Linux / tty localhost login:
В ответ на эту команду вместо очередного приглашения командной строки возобновляется приглашение к регистрации в системе. На данной виртуальной консоли работа с Мефодием завершена, и теперь здесь снова может зарегистрироваться любой пользователь.
Есть и другой, ещё более немногословный способ сообщить системе, что пользователь хочет завершить текущий сеанс работы. Нажав Alt+F2 Мефодий попадёт на вторую виртуальную консоль, где всё ещё открыт сеанс для пользователя methody и нажмёт сочетание клавиш Ctrl+D, чтобы прекратить и этот сеанс. Комбинация клавиш Ctrl+D приводит не к передаче компьютеру очередного символа, а к закрытию текущего входного потока данных. Грубо говоря, командная оболочка вводит команды пользователя с консоли, как если бы она читала их построчно из файла. Нажатие Ctrl+D сигнализирует ей о том, что этот файл закончился, и теперь ей неоткуда больше считывать команды. Такой способ завершения совершенно аналогичен явному завершению командной оболочки командой logout.
Лекция Терминал и командная строка 2.1 Терминал Как стало понятно из предыдущей лекции ( Сеанс работы в Linux (1)), основное средство общения с Linux системная клавиатура и экран монитора, работающий в текстовом режиме. Вводимый пользователем текст немедленно отображается на мониторе соответствующими буквами, однако может и не отображаться, как в случае ввода пароля. Для управления вводом используются некоторые нетекстовые клавиши на клавиатуре: Backspace (он же Забой ) для удаления последнего введённого символа или Enter для передачи команды системе. Нажатие на эти клавиши не приводит к отображению символа, вместо этого вводимый текст обрабатывается системой тем или иным способом.
[methody@localhost methody]$ data -bash: data: command not found [methody@localhost methody]$ date Вск Сен 12 13:59:36 MSD Вначале Мефодий ошибся, и вместо команды date написал data. В ответ он получил сообщение об ошибке, поскольку такой команды система не понимает. Затем (этого не видно в примере, но случилось именно так!) он снова набрал data, но вовремя одумался и, нажав клавишу Backspace, удалил последнее a, вместо которого ввёл e, превратив data в date. Такая команда в системе есть, и на экране возникла текущая дата.
Диалог машины и пользователя неспроста выглядит как обмен текстами.
Именно письменную речь используют люди для постановки и описания решения задач в заранее определённом, формализованном виде. Поэтому и задача ного исполнителя этой программы, а человеку роль автора. Кроме того, человек анализирует текст, получаемый от системы: запрошенную им информацию и т. н. сообщения текст, описывающий состояние системы в процессе решения задачи (например, сообщение об ошибке command not found ).
Текстовый принцип работы с машиной позволяет отвлечься от конкретных частей компьютера, вроде системной клавиатуры и видеокарты с монитором, рассматривая единое оконечное устройство, посредством которого пользователь вводит текст и передаёт его системе, а система выводит необходимые пользователю данные и сообщения. Такое устройство называется терминалом. В общем случае терминал это точка входа пользователя в систему, обладающая способностью передавать текстовую информацию. Терминалом может быть отдельное внешнее устройство, подключаемое к компьютеру через порт последовательной передачи данных (в персональном компьютере он называется COM port ).
В роли терминала может работать (с некоторой поддержкой со стороны системы) и программа (например, xterm или ssh). Наконец, виртуальные консоли Linux тоже терминалы, только организованные программно с помощью подходящих устройств современного компьютера.
терминал Устройство последовательного ввода и вывода символьной информации, способное воспринимать часть символов как управляющие для редактирования ввода, посылки сигналов и т. п. Используется для взаимодействия пользователя и системы.
Для приёма и передачи текста терминалу достаточно уметь принимать и передавать символы, из которых этот текст состоит. Более того, желательно чтобы единицей обмена с компьютером был именно один байт (один acsii-символ). Тогда каждая буква, набранная на клавиатуре, может быть передана системе для обработки, если это понадобится. С другой стороны, типичный способ управления системой в Linux работа в командной строке требует построчного режима работы, когда набранный текст передаётся компьютеру только после нажатия клавиши Enter (что соответствует символу конца строки). Размер такой строки в байтах предугадать, конечно, нельзя, поэтому терминал, работающий в построчном режиме, ничем, по сути, не отличается от терминала, работающего в посимвольном режиме за исключением того, что активность системы по обработке приходящих с этого терминала данных падает в несколько раз (обмен ведётся не байтами, а целыми строками).
Свойство терминала передавать только символьную информацию приводит к тому, что некоторые из передаваемых символов должны восприниматься не как текстовые, а как управляющие (например, символы, возвращаемые клавишами Backspace и Enter ). На самом деле управляющих символов больше: часть из них предназначены для экстренной передачи команд системе, часть для редактирования вводимого текста. Многие из этих символов не имеют специальной клавиши на клавиатуре, поэтому их необходимо извлекать с помощью клавиатурного модификатора Ctrl.
Внимание Команды, подаваемые с клавиатуры с помощью Ctrl, как и символы, передаваемые при этом системе, принято обозначать знаком ^, после которого следует имя клавиши, нажимаемой вместе с Ctrl: например, одновременное нажатие Ctrl и a обозначается ^A.
Так, для завершения работы программы cat, которая считывает построчно данные с клавиатуры и выводит их на терминал, можно воспользоваться командой ^C или ^D:
[methody@localhost methody]$ cat Any Text Any Text [methody@localhost methody]$ cat Any Text agaim^[[Dn Any Text again [methody@localhost methody]$ Одну строчку вида Any Text... Мефодий вводит с клавиатуры (что отображается на экране), и после того, как Мефодий нажмёт Enter, она немедленно выводится программой cat (что тоже отображается на экране). С каждой последующей строкой программа cat поступила бы аналогично, но в примере Мефодий оба раза завершил работу программы, в первом случае нажав ^C, а во втором ^D. Эффект команды оказали одинаковый, а работают они по-разному:
^C посылает программе, которая считывает с клавиатуры, сигнал аварийного прекращения работы, а ^D сообщает ей, что ввод данных с клавиатуры закончен, можно продолжать работу дальше (поскольку программа cat больше ничего не делает, она завершается самостоятельно естественным путём). Можно считать, что ^C это сокращение от Cancel, а ^D от Done.
В пример не попало, как, набирая первый cat, Мефодий вновь ошибся и написал ccat вместо cat. Чтобы исправить положение, он воспользовался клавишами со стрелочками: с помощью клавиши Клавиша влево подвёл курсор к одному из c и нажал Backspace, а затем Enter. В режиме ввода команды это ему удалось, а при передаче данных программе cat клавиша Клавиша влево не сдвинула курсор, а передала целую последовательность символов: ^[, [ и D. Дело в том, что на клавиатуре терминала может быть так много разных нетекстовых клавиш, что на всех них не хватает ограниченного количества разных управляющих символов. Поэтому большинство нетекстовых клавиш возвращают т. н.
управляющую последовательность, которая начинается управляющим символом (как правило Escape, т. е. ^[), за которым следует строго определённое число обычных (для клавиши Клавиша влево [ и D).
Рис. 2.1. Интерфейс командной строки. Взаимодействие пользователя с компьютером посредством терминала То же самое можно сказать и о выводе управляющих последовательностей на терминал. Современный терминал умеет довольно много помимо простого вывода текста: перемещать курсор по всему экрану (чтобы вывести текст там), удалять и вставлять строки на экране, использовать цвет и т. п. Всем этим заведуют управляющие последовательности, которые при выводе на экран терминала не отображаются как текст, а выполняются заранее заданным способом. В некоторых случаях управляющие последовательности, возвращаемые клавишами, совпадают с теми, что управляют поведением терминала. Поэтомуто Мефодий и не увидел Any Text agaim^[[Dn в выдаче cat: ^[[D при выводе на терминал перемещает курсор на одну позицию влево, так что было выведено Any Text agaim, затем курсор встал прямо над m и поверх него было выведено n. Если бы терминал имел вместо дисплея печатающее устройство, в этом месте обнаружилось бы нечто, состоящее из начертаний m и n1.
Требования к терминалу как к точке входа пользователя в систему получаются весьма невысокими. Формально говоря, терминал должен удовлетворять трём обязательным требованиям и одному необязательному. Терминал должен уметь:
1. передавать текстовые данные от пользователя системе;
2. передавать от пользователя системе немногочисленные управляющие команды;
3. передавать текстовые данные от системы пользователю;
4. (необязательно) интерпретировать некоторые данные, передаваемые от системы пользователю, как управляющие последовательности и соответственно обрабатывать их.
1 Некоторые терминалы умеют и так. Следует ещё иметь в виду, что терминалы разных типов имеют разные управляющие последовательности.
Ограничения на интерфейс напрямую не сказываются на эффективности работы пользователя в системе. Однако чем меньше требований к интерфейсу, тем важнее разумно его организовать. Любое взаимодействие может быть описано с трёх точек зрения: во-первых, какую задачу решает пользователь (что он хочет от системы); во-вторых, как он формулирует задачу в доступном пониманию системы виде; и, в-третьих, какими средствами он пользуется при взаимодействии с системой. В частности, текстовый интерфейс удобно рассматривать с точки зрения предоставляемого им языка общения с машиной: во-первых, описанием этого языка задаётся диапазон решаемых с его помощью задач, а во-вторых, слова этого компьютерного языка (называемые в программировании операторами) предоставляют способ решения пользовательских задач (в виде небольших программ-сценариев). Команды, помогающие пользователю быстро и эффективно обмениваться с машиной предложениями на этом языке, и будут третьей составляющей интерфейса командной строки.
2.2 Командная строка Основная среда взаимодействия с Linux командная строка. Суть её в том, что каждая строка, передаваемая пользователем системе, это команда, которую та должна выполнить. Пока не нажат Enter, строку можно редактировать, затем она отсылается системе.
[methody@localhost methody]$ cal Сентября 26 27 28 [methody@localhost methody]$ echo Hello, world!
Hello, world!
Команда cal выводит календарь на текущий месяц, а команда echo просто выводит на терминал всё, что следовало в командной строке после неё. Получается, что одну и ту же команду можно использовать с разными параметрами (или аргументами), причём параметры эти изменяют поведение команды. Здесь Мефодий захотел посмотреть календарь за март 2005-го года, для чего и передал команде cal два параметра 3 и 2005:
[methody@localhost methody]$ cal 27 28 29 В большинстве случаев при разборе командной строки первое слово считается именем команды, а остальные её параметрами. Более подробно о разборе командной строки и работе с ней рассказано в разделе Интерпретатор командной строки (shell) (2.5) и в лекции Возможности командной оболочки (8).
2.3 Подсистема помощи Пока же Мефодий решил, что узнал о командной строке достаточно для того, чтобы воспользоваться главными командами Linux (по частоте их употребления при изучении системы) man и info.
Работать с Linux, не заглядывая в документацию, практически невозможно.
На это способны только седые аксакалы, у которых все нужные знания не то что в голове в кончиках пальцев, и предубеждённые новички. Всем прочим настоятельно рекомендуется, приступая к работе, а тем более к изучению Linux, пользоваться всеми доступными руководствами.
Все утилиты, все демоны Linux, все функции ядра и библиотек, структура большинства конфигурационных файлов, наконец, многие умозрительные, но важные понятия системы описаны либо в руководствах, либо в infoстраницах, либо, на худой конец, в несистематизированной сопроводительной документации. Поэтому от пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию. Эйнштейн говорил на этот счёт так: Зачем запоминать то, что всегда можно посмотреть в справочнике?.
2.3.1 Страницы руководства (man) Больше всего различной полезной информации содержится в страницах руководства (manpages). Каждая страница руководства (для краткости просто руководство ) посвящена какому-нибудь одному объекту системы. Для того, чтобы посмотреть страницу руководства, нужно дать команду системе man объект :
Пример 2.5. Просмотр страницы руководства [methody@localhost methody]$ man cal NAME cal - displays a calendar
SYNOPSIS
cal [-smjy13] [[month] year]DESCRIPTION
Cal displays a simple calendar. If arguments are not specified, the current month is displayed. The options are as follows:Страница руководства занимает, как правило, больше одной страницы экрана. Для того чтобы читать было удобнее, man запускает программу постраничного просмотра текстов less. Управлять программой less просто: страницы перелистываются пробелом, а когда читать надоест, надо нажать q (Quit).
Перелистывать страницы можно и клавишами Page Up/Page Down, для сдвига на одну строку вперёд можно применять Enter или стрелку вниз, а на одну строку назад стрелку вверх. Переход на начало и конец текста выполняется по командам g и G соответственно (Go). Полный список того, что можно делать с текстом в less, выводится по команде H (Help).
Страница руководства состоит из полей стандартных разделов, с разных сторон описывающих заинтересовавший Мефодия объект команду cal. В поле NAME содержится краткое описание объекта (такое, чтобы его назначение было понятно с первого взгляда). В поле SYNOPSIS даётся формализованное описание способов использования объекта (с данном случае того, как и с какими параметрами запускать команду cal). Как правило, в квадратные скобки в этом поле заключены необязательные параметры команды, которые можно ей передать, а можно и опустить. Например, строка [[month] year] означает, что в это месте командной строки параметров у команды может не быть вообще, может быть указан год или пара месяц и год. Наконец, текст в поле DESCRIPTION это развёрнутое описание объекта, достаточное для того, чтобы им воспользоваться.
Одно из самых важных полей руководства находится в конце текста. Если в процессе чтения NAME или DESCRIPTION пользователь понимает, что не нашёл в руководстве того, что искал, он может захотеть посмотреть, а есть ли другие руководства или иные источники информации по той же теме. Список таких источников содержится в поле SEE ALSO:
[methody@localhost methody]$ man man
SEE ALSO
apropos(1), whatis(1), less(1), groff(1), man.conf(5).До этого поля Мефодий добрался с помощью уже известной команды G.
Не то, чтобы ему неинтересно было читать руководство по man, скорее наоборот: им двигала любознательность. В Поле SEE ALSO обнаружились ссылки на руководства по less, groff (программе форматирования страницы руководства), структуре конфигурационного файла для man, а также по двум сопутствующим командам с такими говорящими названиями2, что Мефодий немедленно применяет одну команду к имени другой, не заглядывая даже в документацию.
Так ни в коем случае не следует делать! А что если запущенная Вами программа начнёт с того, что сотрёт все файлы в Вашем каталоге?
[methody@localhost methody]$ whatis apropos apropos (1) - search the whatis database for strings [methody@localhost methody]$ man apropos NAME apropos - search the whatis database for strings На этот раз Мефодию повезло: команда whatis не делает ничего разрушительного. Как и команда apropos, whatis ищет подстроку в некоторой базе данных, состоящей из полей NAME всех страниц помощи в системе. Различие между ними в том, что whatis ищет только среди имён объектов (в левых частях полей NAME), а apropos по всей базе. В результате у whatis получается список кратких описаний объектов с именами, включающими в себя искомое слово, а у apropos список, в котором это слово упоминается. Для того, чтобы это узнать, всё равно пришлось один раз прочесть документацию.
В системе может встретиться несколько объектов разного типа, но с одинаковым названием. Часто совпадают, например, имена системных вызовов (функций ядра) и программ, которые позволяют пользоваться этими функциями из командной строки (т. н. утилит).
2 Apropos по-французски означает кстати, а whatis по-английски чтотакое.
Пример 2.8. Руководства с одинаковыми именами [methody@localhost methody]$ whatis passwd passwd (1) - update a user’s authentication tokens(s) passwd (8) - manual page for passwd wrapper version 1.0. Описания объектов, выводимые whatis, отличаются числом в скобках номером раздела. В системе руководств Linux девять разделов, каждый из которых содержит страницы руководства к объектам определённого типа. Все разделы содержат по одному руководству с именем intro, в котором в общем виде и на примерах рассказано, что за объекты имеют отношение к данному разделу:
george@localhost:~> whatis intro
intro (1) - Introduction to user commands
intro (2) - Introduction to system calls
intro (3) - Introduction to library functions
intro (4) - Introduction to special files
intro (5) - Introduction to file formats
intro (6) - Introduction to games
intro (7) - Introduction to conventions and miscellany section intro (8) - Introduction to administration and privileged commandsintro (9) - Introduction to kernel interface
Вот названия разделов в переводе на русский:1. Команды пользователя.
2. Системные вызовы (пользовательские функции ядра Linux; руководства рассчитаны на программиста, знающего язык Си).
3. Библиотечные функции (функции, принадлежащие всевозможным библиотекам подпрограмм; руководства рассчитаны на программиста, знающего 4. Внешние устройства и работа с ними (в Linux они называются специальными файлами, см. лекцию Работа с внешними устройствами (11)).
5. Форматы различных стандартных файлов системы (например конфигурационных).
6. Игры, безделушки и прочие вещи, не имеющие системной ценности.
7. Теоретические положения, договорённости и всё, что не может быть классифицировано.
8. Инструменты администратора (часто недоступные обычному пользователю).
9. Интерфейс ядра (внутренние функции и структуры данных ядра Linux, необходимы только системному программисту, исправляющему или дополняющему ядро).
В частности, пример с passwd показывает, что в системе Some Linux, которую использует Мефодий, есть программа passwd (именно с её помощью Мефодий поменял себе пароль на прошлой лекции), файл passwd, содержащий информацию о пользователях и администраторская программа passwd, обладающая более широкими возможностями. По умолчанию man просматривает все разделы и показывает первое найденное руководство с заданным именем. Чтобы посмотреть руководство по объекту из определённого раздела, необходимо в качестве первого параметра команды man указать номер раздела:
Пример 2.10. Выбор среди страниц руководства с одинаковым именем [methody@localhost methody]$ man 8 passwd [methody@localhost methody]$ man -a passwd Если в качестве первого параметра man использовать -a, будут последовательно выданы все руководства с заданным именем. Внутри страниц руководства принято непосредственно после имени объекта ставить в круглых скобках номер раздела, в котором содержится руководство по этому объекту: man(1), less(1), passwd(5) и т. д.
2.3.2 Info Другой источник информации о Linux и составляющих его программах справочная подсистема info. Страница руководства, несмотря на обилие ссылок различного типа, остаётся линейным текстом, структурированным только логически. Документ info структурирован прежде всего топологически это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info всегда есть оглавление, из которого можно перейти сразу к нужному подразделу, откуда всегда можно вернуться обратно. Кроме того, info-документ можно читать и как непрерывный текст, поэтому в каждом подразделе есть ссылки на предыдущий и последующий подразделы.
[methody@localhost methody]$ info info File: info.info, Node: Top, Next: Getting Started, Up: (dir) Info: An Introduction...
* Menu:
* Getting Started:: Getting started using an Info reader.
* Creating an Info File:: How to make your own Info file.
...
--zz-Info: (info.info.bz2)Top, строк: 24 --All-----------------------------Welcome to Info version 4.6. Type ? for help, m for menu item.
Программа info использует весь экран: на большей его части она показывает текст документа, а первая и две последних строки отведены для ориентации в его структуре.
Одна или несколько страниц, которые можно перелистывать клавишей Пробел или Page Up/Page Down это узел (node). Узел содержит обычный текст и меню (menu) список ссылок на другие узлы, лежащие в дереве на более низком уровне. Ссылки внутри документа имеют вид * имя_узла :: и перемещать по ним курсор можно клавишей Tab, а переходить к просмотру выбранного узла клавишей Enter. Вернуться к предыдущему просмотренному узлу можно клавишей l (oт Last ). И, главное, выйти из программы info можно, нажав q (Quit). Более подробную справку об управлении программой info можно в любой момент получить у самой info, нажав ?.
Узлы, составляющие документ info, можно просматривать и подряд, один за другим (с помощью команд n, Next, и p, Previous), однако это бывает нужно нечасто. В верхней строке экрана info показывает имя текущего узла, имя следующего узла и имя родительского (или верхнего) узла, в котором находится ссылка на текущий. Показанные Мефодию имя узла Top и имя верхнего узла (dir) означают, что просматривается корневой узел документа, выше которого только каталог со списком всех info-деревьев. В нижней части экрана расположена строка с информацией о текущем узле, а за ней строка для ввода длинных команд (например, для поиска текста с помощью команды /).
Команде info можно указывать в параметрах всю цепочку узлов, приводящую к тому или иному разделу документации, однако это бывает нужно довольно редко:
Пример 2.12. Просмотр определённого узла info-документа [methody@localhost methody]$ info info "Getting Started" Help-Q File: info.info, Node: Help-Q, Prev: Help-Int, Up: Getting Started Quitting Info...
Сам ли Мефодий это придумал, или подсказал кто, но совершенно правильв этом случае info но было заключить в кавычки имя узла Getting Started искала узел по адресу info -> Getting Started -> Help-Q. Если бы команда имела вид info info Getting Started Help-Q, то адрес получился бы неправильный: info -> Getting -> Started -> Help-Q. Ничего таинственного в этом нет, и уже к концу лекции станет понятно, в чём здесь дело ( Слова и разделители (2.5.2)).
2.3.3 RTFM Оказывается, использование кавычек Мефодий придумал не сам: спросил у товарища, опытного пользователя Linux по фамилии Гуревич. Гуревич охотно показал, где ставить кавычки, а вот объяснять, что они делают, отказался, и заявил: Там отличное руководство! Читай!. Документация в Linux играет важнейшую роль. Решение любой задачи должно начинаться с изучения руководств. Не стоит жалеть на это времени. Даже если рядом есть опытный пользователь Linux, который, возможно, знает ответ, не стоит беспокоить его сразу же. Вполне возможно, что, даже зная, что нужно сделать, он не помнит как именно и поэтому (а также потому, что он опытный пользователь) начнёт с изучения руководства. Это закон, у которого есть даже собственное название:
RTFM, что означает Read That Fine Manual.
Правило, согласно которому решение любой задачи надо начинать с изучения документации.
Слова Гуревича практически дословный перевод этой фразы, так что её смысл и происхождение очевидны. Linux рассчитан в основном на тех, кто хочет знать, как им пользоваться.
Руководство это совсем не учебник, это справочник. В нём содержится информация, достаточная для освоения описываемого объекта, но никаких обучающих приёмов, никаких определений, повторений и выделения главного в нём обычно нет. Тем более не допускается усечение руководства с целью представить небольшие по объёму, но наиболее важные сведения. Так принято в учебниках, причём главные сведения раскрываются и объясняются очень подробно, а остальные присутствуют в виде ссылки на документацию для профессионалов.
Страницы руководств и есть эта самая документация для профессионалов. Руководство чаще всего читает человек, который уже знает, о чём оно.
Это не значит, что из руководства нельзя понять, как, например, пользоваться командой в простейших случаях. Напротив, часто встречается поле EXAMPLES, которое как раз и содержит примеры использования команды в разных условиях. Однако всё это преследует цель не научить, а раскрыть смысл, пояснить сказанное в других полях. Мефодий нашёл описание работы двойных кавычек в руководстве по sh, однако понял из него далеко не всё главным образом, потому, что встретил слишком много незнакомых терминов.
Система info может содержать больше, чем man, поэтому в неё часто включают и учебники (принято называть учебник термином tutorial ), и т. н. howto (примеры постановки и решения типовых задач), и даже статьи по теме. Таким образом info-документ может стать, в отличие от страницы руководства, полным сводом сведений. Разработка такого документа дело трудоёмкое, поэтому далеко не все объекты системы им сопровождаются. Кроме того, и прочесть большой info-документ целиком зачастую невозможно. Поэтому имеет смысл начинать именно и руководства, а если его недостаточно изучать info.
Если некоторый объект системы не имеет документации ни в формате man, ни в формате info, это нехорошо. В этом случае можно надеяться, что при нём есть сопроводительная документация, не имеющая, увы, ни стандартного формата, ни тем более ссылок на руководства по другим объектам системы. Такая документация (равно как и примеры использования объекта), обычно помещается в каталог /usr/share/doc/имя_объекта.
Документация в подавляющем большинстве случаев пишется на простом английском языке. Если английский не родной язык для автора документации, она будет только проще. Традиция писать по-английски идёт от немалого вклада США в развитие компьютерной науки вообще и Linux в частности. Кроме того, английский становится языком международного общения во всех областях, не только в компьютерной. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект!
Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации. Тогда перевод этой документации превращается в moving target, сизифов труд.
2.4 Ключи Работая в системе и изучая руководства, Мефодий заметил, что параметры команд можно отнести к двум различным категориям. Некоторые параметры имеют собственный смысл: это имена файлов, названия разделов и объектов в man и info, числа и т. п. Другие параметры собственного смысла не имеют, их значение можно истолковать, лишь зная, к какой команде они относятся.
Например, параметр -a можно передать не только команде man, но и команде who, и команде last, при этом значить для них он будет разное. Такого рода параметры называются модификаторами выполнения или ключами (options).
[methody@localhost methody]$ date Вск Сен 19 23:01:17 MSD [methody@localhost methody]$ date -u Вск Сен 19 19:01:19 UTC Для решения разных задач одни и те же действия необходимо выполнять слегка по-разному. Например, для синхронизации работ в разных точках земного шара лучше использовать единое для всех время (по Гринвичу), а для организации собственного рабочего дня местное время (с учётом сдвига по часовому поясу и разницы зимнего и летнего времени). И то, и другое время показывает команда date, только для работы по Гринвичу ей нужен дополнительный параметр-ключ -u (он же --universal).
2.4.1 Однобуквенные ключи Для формата ключей нет жёсткого стандарта, однако существуют договорённости, нарушать которые в наше время уже неприлично. Во-первых, если параметр начинается на -, это однобуквенный ключ. За -, как правило, следует один символ, чаще всего буква, обозначающая действие или свойство, которое этот ключ придаёт команде. Так проще отличать ключи от других параметров и пользователю при наборе командной строки, и программисту, автору команды.
Во-вторых, желательно, чтобы имя ключа было значащим как правило, это первая буква названия пресловутого действия или свойства. Например, ключ -a в man и who происходит от слова All (всё), и изменяет работу этих команд так, что они начинают показывать информацию, о которой они обычно умалчивают. А в командах cal и who смысл ключа -m разный:
[methody@localhost methody]$ who -m methody tty1 Sep 20 13:56 (localhost) [methody@localhost methody]$ cal -m Сентября 27 28 Для who ключ -m означает Me, то есть Я, и в результате who работает похоже на whoami3. А для cal ключ -m это команда выдать календарь, считая первым днём понедельник ( Monday ), как это принято в России.
Свойство ключа быть, с одной стороны, предельно коротким, а с другой стороны информативным, называется аббревиативностью. Не только ключи, но и имена наиболее распространённых команд Linux обладают этим свойством.
В-третьих, иногда ключ изменяет поведение команды таким образом, что меняется и толкование параметра, следующего в командной строке за этим ключом.
Выглядит это так, будто ключ сам получает параметр, поэтому ключи такого вида называются параметрическими. Как правило, их параметры имена файлов различного применения, числовые характеристики и прочие значения, которые нужно передать команде.
[methody@localhost methody]$ info info "Expert info" Cross-refs Help-Cross -o text info: Запись ноды (info.info.bz2)Help-Cross...
info: Завершено.
[methody@localhost methody]$ cat text -n 1 File: info.info, Node: Help-Cross, Up: Cross-refs 3 The node reached by the cross reference in Info 4 ----------------------------------------------Здесь info запустилась не в качестве интерактивной программы, а как обработчик info-документа. Результат работы текст узла info -> Expert info -> Cross-refs -> Help-Cross4, программа поместила в файл text. А программа cat вывела содержимое этого файла на терминал, пронумеровав все строки (по просьбе ключа -n, number ).
Теперь стало более-менее понятно, что означают неудобочитаемые строки в поле SYNOPSIS руководства. Например [-smjy13] из руководства по cal (cal(1)) говорит о том, что команду можно запускать с необязательными ключами -s, -m, -j, -y, -1 и -3.
В-четвёртых, есть некоторые менее жёсткие, но популярные договорённости о значении ключей. Ключ -h ( Help ) обычно (но, увы, не всегда) заставляет команды выдать краткую справку (нечто похожее на SYNOPSIS, иногда с короткими пояснениями). Если указать - вместо имени выходного файла в 3 Кстати, с незапамятных времён who поддерживает один нестандартный набор параметров: who am i делает то же, что и who -m.
4 Странное слово нода Мефодий решил оставить на совести неизвестного переводчика сообщений info.
соответствующем параметрическом ключе (нередко это ключ -o), вывод будет производиться на терминал5. Наконец, бывает необходимо передать команде параметр, а не ключ, начинающийся с -. Для этого нужно использовать ключ --:
[methody@localhost methody]$ info -o -filename-withinfo: Запись ноды (dir)Top...
info: Завершено.
[methody@localhost methody]$ head -1 -filename-withhead: invalid option -- f Попробуйте ‘head --help’ для получения более подробного описания.
[methody@localhost methody]$ head -1 -- -filename-withFile: dir Node: Top This is the top of the INFO tree Здесь Мефодий сначала создал файл -filename-with-, а потом пытался посмотреть его первую строку (команда head -количество_строк имя_файла выводит первые количество_строк из указанного файла). Ключ -- (первый признак ключа, второй сам ключ) обычно запрещает команде интерпретировать все последующие параметры командной строки как ключи, независимо от того, начинаются ли они на - или нет. Только после -- head согласилась с тем, что -filename-with- это имя файла.
2.4.2 Полнословные ключи Аббревиативность ключей трудно соблюсти, когда их у команды слишком много. Некоторые буквы латинского алфавита (например, s или o) используются очень часто, и могли бы служить сокращением сразу нескольких команд, а некоторые (например, z) редко, под них и название-то осмысленное трудно придумать. На такой случай существует другой, полнословный формат: ключ начинается на два знака -, за которыми следует полное имя обозначаемой им сущности. Таков, например, ключ --help (аналог -h):
[methody@localhost methody]$ head --help Использование: head [КЛЮЧ]... [ФАЙЛ]...
Print the first 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.
With no FILE, or when FILE is -, read standard input.
5 Точнее, на стандартный вывод, см. лекцию Работа с текстовыми данными (7).
Аргументы, обязательные для длинных ключей, обязательны и для коротких.
-c, --bytes=[-]N print the first N bytes of each file;
-n, --lines=[-]N print the first N lines instead of the first 10;
-q, --quiet, --silent не печатать заголовки с именами файлов -v, --verbose всегда печатать заголовки с именами файлов --help показать эту справку и выйти --version показать информацию о версии и выйти N may have a multiplier suffix: b 512, k 1024, m 1024*1024.
Об ошибках сообщайте по адресу.
Мефодий сделал то, о чём просила его утилита head. Видно, что некоторые ключи head имеют и однобуквенный, и полнословный формат, а некоторые только полнословный. Так обычно и бывает: часто используемые ключи имеют аббревиатуру, а редкие нет. Значения параметрических полнословных ключей принято передавать не следующим параметром командной строки, а с помощью конструкции =значение непосредственно после ключа.
2.5 Интерпретатор командной строки (shell) В Linux нет отдельного объекта под именем система. Система она на то и система, чтобы состоять из многочисленных компонентов, взаимодействующих друг с другом. Главный из системных компонентов пользователь. Это он командует машиной, а та его команды выполняет. В руководствах второго и третьего разделов описаны системные вызовы (функции ядра) и библиотечные функции. Они-то и есть непосредственные команды системе. Правда, воспользоваться ими можно только написав программу (чаще всего на языке Си), нередко программу довольно сложную. Дело в том, что функции ядра реализуют низкоуровневые операции, и для решения даже самой простой задачи пользователя необходимо выполнить несколько таких операций, преобразуя результат работы одной для нужд другой. Возникает необходимость выдумать для пользователя другой более высокоуровневый и более удобный в использовании язык управления системой. Все команды, которые использовал Мефодий в работе, были частью именно этого языка.
Из чего несложно было заключить, что обрабатывать эти команды, превращать их в последовательность системных и библиотечных вызовов должна тоже какая-нибудь специальная программа, и именно с ней непрерывно ведёт диалог пользователь сразу после входа в систему. Так оно и оказалось: программа эта называется интерпретатор командной строки или командная оболочка ( shell ). Оболочкой она названа как раз потому, что всё управление системой идёт как бы изнутри неё: пользователь общается с нею на удобном ему языке (с помощью текстовой командной строки), а она общается с другими частями системы на удобном им языке (вызывая запрограммированные функции).
Таким образом, упомянутые выше правила разбора командной строки это правила, действующие именно в командном интерпретаторе: пользователь вводит с терминала строку, shell считывает её, иногда преобразует по определённым правилам, получившуюся строку разбивает на команду и параметры, а затем выполняет команду, передавая ей эти параметры. Команда, в свою очередь, анализирует параметры, выделяет среди них ключи, и делает что попросили, попутно выводя на терминал данные для пользователя, после чего завершается.
По завершении команды возобновляется работа отступившего на задний план командного интерпретатора, он снова считывает командную строку, разбирает её, вызывает команду... Так продолжается до тех пор, пока пользователь не скомандует оболочке завершиться самой (с помощью logout или управляющего символа ^D, который для shell значит то же, что и для других программ:
больше с терминала ввода не будет).
Конечно, командных интерпретаторов в Linux несколько. Самый простой из них, появившийся в ранних версиях UNIX, назывался sh, или Bourne Shell по имени автора, Стивена Борна (Stephen Bourne). Со временем его везде, где только можно заменили на более мощный, bash, Bourne Again Shell 6. bash превосходит sh во всём, особенно в возможностях редактирования командной строки. Помимо sh и bash в системе может быть установлен The Z Shell, zsh, самый мощный на сегодняшний день командный интерпретатор (шутка ли, тысячи строк документации), или tcsh, обновлённая и тоже очень мощная версия старой оболочки C Shell, синтаксис команд которой похож на язык программирования Си.
Когда Гуревич добавлял учётную запись Мефодия в систему, он не стал спрашивать того, какой командный интерпретатор ему нужен, потому что знал: для новичка имя командного интерпретатора пустой звук. Тем не менее имя оболочки, запускаемой для пользователя сразу после входа в систему т. н. стартовый командный интерпретатор (login shell), это часть пользовательской учётной записи, которую пользователь может изменить командой chsh (change shell).
Какая бы задача, связанная с управлением системой, ни встала перед пользователем Linux, она должна иметь решение в терминах командного интерпретатора. Фактически, решение пользовательской задачи это описание её на языке shell. Язык общения пользователя и командного интерпретатора это высокоуровневый язык программирования, дополненный, с одной стороны, средствами организации взаимодействия команд и системы, а с другой стороны средствами взаимодействия с пользователем, облегчающими и ускоряющими работу с командной строкой.
6 Игра слов: Bourne Again вслух читается как born again, т. е. возрождённый.
Рис. 2.2. Интерфейс командной строки. Издание второе, переработанное и дополненное. Взаимодействие пользователя с компьютером посредством терминала и 2.5.1 Команды и утилиты [methody@localhost methody]$ apropos s... (четыре с половиной тысячи строк!) Одного неудачного запуска apropos Мефодию было достаточно для того, чтобы понять: команд в Linux очень много. Ему пришло в голову, что никакая программа пусть даже и оболочка не может самостоятельно разбираться во всех задокументированных командах. Кроме того, Гуревич называл большинство команд утилитами, то есть полезными программами. Стало быть, командный интерпретатор не обязан уметь выполнять всё, что вводит пользователь.
Ему достаточно разобрать командную строку, выделить из неё команду и параметры, а затем запустить утилиту программу, имя которой совпадает с именем команды.
В действительности собственных команд в командном интерпретаторе немного. В основном это операторы языка программирования и прочие средства управления самим интерпретатором. Все знакомые Мефодию команды, даже echo, существуют в Linux в виде отдельных утилит. shell занимается только тем, что подготавливает набор параметров в командной строке (например, раскрывая шаблоны), запускает программы и обрабатывает результаты их работы.
[methody@localhost methody]$ type info info is /usr/bin/info [methody@localhost methody]$ type echo echo is a shell builtin [methody@localhost methody]$ type -a echo echo is a shell builtin echo is /bin/echo [methody@localhost methody]$ type -a -t echo builtin file [methody@localhost methody]$ type -a -t date file [methody@localhost methody]$ type -at cat file В bash тип команды можно определить с помощью команды type. Собственные команды bash называются builtin (встроенная команда), а для утилит выводится путь, содержащий название каталога, в котором лежит файл с соответствующей программой, и имя этой программы. Некоторые самые нужные команды встроены в bash, даже несмотря на то, что они имеются в виде утилит (например, echo). Работает встроенная команда так же, но так как времени на её выполнение уходит существенно меньше, командный интерпретатор выберет именно её, если будет такая возможность. Ключ -a ( all, конечно), заставляет type вывести все возможные варианты интерпретации команды, а ключ -t вывести тип команды вместо пути.
По совету Гуревича Мефодий сгруппировал ключи, написав -at вместо -a -t. Многие утилиты позволяют так делать, уменьшая длину командной строки.
Если встречается параметрический ключ, он должен быть последним в группе, а его значение следовать, как и полагается, после. Группировать можно только однобуквенные ключи.
2.5.2 Слова и разделители При разборе командной строки shell использует понятие разделитель (delimiter). Разделитель это символ, разделяющий слова; таким образом командная строка это последовательность слов (которые имеют значение) и разделителей (которые значения не имеют). Для shell разделителями являются символ пробела, символ табуляции и символ перевода строки (который всё-таки может попасть между словами способом, описанным в лекциях Работа с текстовыми данными (7) и Возможности командной оболочки (8)). Количество разделителей между двумя соседними словами значения не имеет.
Первое слово в тройке передаётся команде как первый параметр, второе как второй и т. д. Для того, чтобы разделитель попал внутрь слова (и получившаяся строка с разделителем передалась как один параметр), всю нужную подстроку надо окружить одинарными или двойными кавычками:
Пример 2.20. Закавычивание в командной строке [methody@localhost methody]$ echo One Two Three One Two Three [methody@localhost methody]$ echo One "Two Three" [methody@localhost methody]$ echo ’One > Ой. И что дальше?
> А, кавычки забыл!’ Ой. И что дальше?
А, кавычки забыл!
[methody@localhost methody]$ В первом случае команде echo было передано три параметра One, Two и Three. Она их и вывела, разделяя пробелом. Во втором случае параметров было два: One и Two Three. В результате эти два параметра были также выведены через пробел. В третьем случае параметр был всего один от открывающего апострофа ’One до закрывающего...забыл!’. Всё время ввода bash услужливо выдавал Мефодию подсказку > в знак того, что набор командной строки продолжается, но в режиме ввода содержимого кавычек.
Лекция Структура файловой системы 3.1 Организация файловой системы 3.1.1 Файл Файл это понятие, привычное любому пользователю компьютера. Для пользователя каждый файл это отдельный предмет, у которого есть начало и конец и который отличается от всех остальных файлов именем и расположением ( как называется и где лежит ). Как и любой предмет, файл можно создать, переместить и уничтожить, однако без внешнего вмешательства он будет сохраняться неизменным неопределенно долгое время. Файл предназначен для хранения данных любого типа текстовых, графических, звуковых, исполняемых программ и многого другого. Аналогия файла с предметом позволяет пользователю быстро освоиться при работе с данными в операционной системе.
Для операционной системы Linux файл не менее важное понятие, чем для её пользователя: все данные, хранящиеся на любых носителях, обязательно находятся внутри какого-нибудь файла, в противном случае они просто недоступны ни для операционной системы, ни для её пользователей. Более того, все устройства, подключённые к компьютеру (начиная клавиатурой и заканчивая любыми внешними устройствами, например, принтерами и сканерами) Linux представляет как файлы (так называемые файлы-дырки). Конечно, файл, содержащий обычные данные, сильно отличается от файла, предназначенного для обращения к устройству, поэтому в Linux определены несколько различных типов файлов. В основном пользователь имеет дело с файлами трёх типов: обычными файлами, предназначенными для хранения данных, каталогами и файламиссылками, именно о них и пойдёт речь в данной лекции, о файлах других типов см. лекцию Работа с внешними устройствами (11).
Отдельная область данных на одном из носителей информации, у которой есть собственное имя.
3.1.2 Система файлов: каталоги Файловая система с точки зрения пользователя это пространство, в котором размещаются файлы, наличие файловой системы позволяет определить не только как называется файл, но и где он находится. Различать файлы только по имени было бы слишком неэффективным: про каждый файл приходилось бы помнить, как он называется и при этом заботиться о том, чтобы имена никогда не повторялись. Более того, необходим механизм, позволяющий работать с группами тематически связанных между собой файлов (например, компонентов одной и той же программы или разных главы одной диссертации). Иначе говоря, файлы нужно систематизировать.
Способ хранения и организации доступа к данным на информационном носителе или его разделе. Классическая файловая система имеет иерархическую структуру, в которой файл однозначно определяется полным Linux может работать с различными типами файловых систем, которые различаются списком поддерживаемых возможностей, производительностью в разных ситуациях, надёжностью и другими признаками. Подробнее о работе Linux с разными файловыми системами речь пойдёт в лекции Работа с внешними устройствами (11). В этой лекции будут описаны возможности файловой системы Ext2/Ext3, на сегодня de facto стандартной файловой системы для Linux.
Большинство современных файловых систем (но не все!) используют в качестве основного организационного принципа каталоги. Каталог это список ссылок на файлы или другие каталоги. Принято говорить, что каталог содержит в себе файлы или другие каталоги, хотя в действительности он только ссылается на них, физическое размещение данных на диске обычно никак не связано с размещением каталога. Каталог, на который есть ссылка в данном каталоге, называется подкаталогом или вложенным каталогом. Каталог в файловой системе более всего напоминает библиотечный каталог, содержащий ссылки на объединённые по каким-то признакам книги и другие разделы каталога (файлы и подкаталоги). Ссылка на один и тот же файл может содержаться в нескольких каталогах одновременно, это может сделать доступ к файлу более удобным.
В файловой системе Ext2 каждый каталог это отдельный файл особого типа (d, от англ. directory ), отличающийся от обычного файла с данными: в нём могут содержаться только ссылки на другие файлы и каталоги.
В файловой системе Linux нет папок и документов. Есть каталоги и файлы, возможности которых куда шире.
Довольно часто вместо термина каталог можно встретить папка (англ. folder). Этот термин хорошо вписывается в представление о файлах как о предмеОрганизация файловой системы тах, которые можно раскладывать по папкам, однако часть возможностей файловой системы, которая противоречит этому представлению, таким образом затемняется. В частности, с термином папка плохо согласуется то, что ссылка на файл может присутствовать одновременно в нескольких каталогах, файл может быть ссылкой на другой файл и т. д. В Linux эти возможности файловой системы весьма важны для эффективной работы, поэтому будем всюду использовать более подходящий термин каталог.
В файловой системе, организованной при помощи каталогов, на любой файл должна быть ссылка как минимум из одного каталога, в противном случае файл просто не будет доступен внутри этой файловой системы, иначе говоря, не будет существовать.
3.1.3 Имена файлов и каталогов 3.1.3.1 Допустимые имена Главные отличительные признаки файлов и каталогов их имена. В Linux имена файлов и каталогов могут быть длиной не более 256 символов, и могут содержать любые символы, кроме /. Причина этого ограничения очевидна:
этот символ используется как разделитель имён в составе пути, поэтому не должен встречаться в самих именах. Причём Linux всегда различает прописные и строчные буквы в именах файлов и каталогов, поэтому methody, Methody и METHODY будут тремя разными именами.
Есть несколько символов, допустимых в именах файлов и каталогов, которые, при этом, нужно использовать с осторожностью. Это так называемые спецсимволы *, \, &,, ;, (, ), |, а также пробелы и табуляции. Дело в том, что эти символы имеют особое значение для любой командной оболочки, поэтому нужно будет специально позаботиться о том, чтобы командная оболочка воспринимала эти символы как часть имени файла или каталога. О специальном значении символа - для команд Linux уже шла речь в лекции Терминал и командная строка (2), там же обсуждалось, как изменить его интерпретацию1. О том, зачем командной оболочке нужны спецсимволы, речь пойдёт в лекции Возможности командной оболочки (8).