Глава 2. Использование UNIX

Глава 2. использование unix

Основным интерфейсом взаимодействия пользователя с операционной
системой UNIX во всех её модификациях была и остается
командная строка. Суть этого интерфейса
состоит в обмене текстами с системой:
пользователь набирает текстовые команды, а операционная система
возвращает ему информацию также в текстовом виде.
Несмотря на то, что в современных UNIX-системах широко
используются графические пользовательские интерфейсы, командная строка остаётся
основным рабочим инструментом администратора системы. Причина
этого не в каких-то особенных вкусах администраторов, а в том,
что в UNIX-подобных системах командная строка очень хорошо
выполняет задачи интерфейса управления системой, она эффективна
и удобна — и именно поэтому всеми используется.
Этому есть разумное объяснение — командная строка позволяет администратору
управлять системой, совершая меньшее количество действий
(интерфейсных жестов), чем с помощью графического интерфейса
и мыши. Немаловажно и то, что администратор может объединять
сложные последовательности действий в сценарии.

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

Прототипом такого устройства был телетайп,
который стал использоваться
в качестве средства обмена данными с компьютером еще в 1950-е годы.
В современных компьютерах для организации интерфейса командной строки
используется клавиатура и экран монитора, работающий в текстовом режиме.
Терминалом может быть и отдельное внешнее устройство, подключаемое к
компьютеру через порт последовательной передачи данных
COM-порт»).

Современные UNIX-системы предоставляют графические пользовательские
интерфейсы (подробнее графическая подсистема UNIX рассматривается в разделе
Глава 9, Графическая подсистема UNIX), которые также дают возможность работы в
командной строке. Эта возможность достигается с помощью
графических
терминалов
 — специальных программ, которые эмулируют
текстовый терминал в графическом окне.

Роль терминала может с успехом выполнять и программа,
исполняющаяся на сколько угодно удалённом компьютере, связанным
с UNIX-системой, например, посредством сети
Интернет. В современной практике такой способ доступа очень
широко используется для удалённой работы, в особенности для
администрирования серверов, которые зачастую устанавливаются в специальных
помещениях, доступ в которые затруднен и нежелателен.

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

Часть управляющих символов вводится специальными клавишами, предусмотренными
для управления вводом текста, такими как Backspace и Enter.
Управляющих символов может быть больше, чем нетекстовых клавиш
на клавиатуре, в этом случае их необходимо извлекать с помощью
какого-либо клавиатурного модификатора, например,
Ctrl.

Количество различных управляющих символов зачастую
ограничено и оказывается меньше количества необходимых
терминалу команд. В этом случае для передачи команд используются
управляющие последовательности, которые
начинаются управляющим символом, за которым следует строго определенное число
обычных символов, в данном случае интерпретируемых терминалом
как та или иная команда.

Специальные управляющие символы могут быть также зарезервированы
для команд межпроцессного взаимодействия (передачи сигналов).
В частности, для завершения командной оболочки можно использовать
символ конца ввода
CtrlD.
Эту команду интерпретирует при вводе с терминала система. Она же
превращает некоторые другие управляющие символы
(например, CtrlC — «прерывание» или
CtrlZ — «засыпание») в
соответствующие сигналы.

Одной из полезных особенностей терминала является возможность
его «прокрутки» с помощью
клавиш ShiftPgUp
и ShiftPgDn. Это может быть
полезно, если вывод программы занимает больший объём, чем размер экрана.

Каждое устройство или программа, выполняющие функции терминала,
имеет свои возможности по вводу и
выводу информации. Примерами таких возможностей являются: число цветов
отображения, способность перемещать курсор и изменять размер экрана, набор
управляющих символов и т. п. При этом для операционной системы
важна возможность работать с любыми терминалами одинаковым способом.
Для этого в операционных системах семейства UNIX вводится понятие
тип терминала:
каждый тип сводится к набору возможностей, регламентированных в
специальном конфигурационном файле. Информация о всех существующих
типах терминалов хранится в специализированной базе данных
(terminfo или termcap). Примерами типов являются: tty (телетайп) или
xterm (графический терминал).

Презентация 4-02: одновременный доступ к системе

То, что UNIX — многопользовательская и многозадачная система,
проявляется не только в разграничении прав доступа (см. раздел
«Введение в безопасность UNIX»), но и в организации рабочего места:
ничто не препятствует подключить к операционной системе произвольное
число терминалов одновременно, в особенности, если функции терминала
выполняет программа. Благодаря этому каждый
компьютер, на котором работает UNIX, предоставляет возможность зарегистрироваться
и получить доступ к системе с нескольких терминалов одновременно. Даже если в
распоряжении всех пользователей есть только один монитор и одна системная
клавиатура, эта возможность небесполезна: одновременная регистрация в системе
на нескольких терминалах позволяет работать поочередно с несколькими
задачами без необходимости каждый раз их завершать и затем возобновлять.

Характерный для современных версий UNIX способ организации параллельной работы
пользователей — виртуальные консоли. Виртуальные консоли (virtual
console) — это несколько параллельно выполняемых операционной системой
программ, предоставляющих пользователю возможность зарегистрироваться в системе в
текстовом режиме и получить доступ к командной строке
(см. Рисунок 2.1, «Виртуальные и графические консоли»).

В операционной системе Linux переключение между виртуальными консолями в текстовом
режиме производится с помощью комбинации клавиш
AltF1,
AltF2 и т. п. При этом
каждая виртуальная консоль обозначается специальным
именем: «tty1», «tty2» и т. д. По умолчанию в Linux
доступно не менее шести виртуальных консолей, переключаться между которыми можно
при помощи сочетания клавиши Alt с одной из функциональных клавиш
(F1F6). С каждым сочетанием связана
соответствующая по номеру виртуальная консоль. Виртуальные консоли обозначаются
«ttyN», где «N» — номер виртуальной консоли.
На самом деле, каждая из таких конcолей связана с
собственным терминалом, который характеризуется файлом
устройства с соответствующим именем (например, /dev/tty1).

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

Основная среда взаимодействия с
UNIX — командная
строка
. Суть её в том, что каждая строка, передаваемая пользователем
системе, — это команда, которую та должна выполнить. Пока не нажата
клавиша
Enter, строку можно редактировать, затем она отсылается системе.

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

Здесь приглашением является строка user@desktop ~ $, которая
содержит: имя пользователя, с правами которого исполняется командная оболочка
(user), имя компьютера (desktop), имя текущего каталога (~, этим символом
в командных оболочках UNIX принято обозначать домашний каталог пользователя).
Заканчивается приглашение символом начала ввода ($), который, по существу,
является единственным обязательным элементом приглашения и показывает, собственно,
готовность командной оболочки к вводу команды.
В качестве символа начала ввода могут выступать разные символы, но чаще
всего используется именно ($) для обозначения командной строки обычного
пользователя и символ (#) для обозначения командной строки суперпользователя
(root).
Пользователь имеет возможность произвольным образом изменить оформление
приглашения командной строки.

Презентация 4-03: формат команды

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

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

user@desktop ~ $ alias
alias cp='cp -i'
alias l='ls -lapt'
alias ll='ls -laptc'
alias ls='ls --color=auto'
alias md='mkdir'
alias mv='mv -i'
alias rd='rmdir'
alias rm='rm -i'

Например, по команде ls вместо
утилиты /bin/lsbash
запускает собственную команду-сокращение, превращающуюся в команду
ls –color=auto. Повторно появившуюся в команде подстроку
“ls” интерпретатор уже не обрабатывает, во избежание вечного цикла. Например,
команда ls -al превращается в результате
в ls –color=auto -al.

Сокращения не наследуются с окружением.

Однако команды UNIX могут быть устроены и более сложным образом, когда необходимо
не только выполнить внешнюю программу, но и передать ей какую-то дополнительную
информацию, чтобы так или иначе модифицировать ее работу.
Модификаторы поведения в этом случае вводятся в командной строке после имени
команды — это параметры команды. Параметров может быть произвольное
количество (оно зависит только от смысла передаваемой внешней программе информации),
друг от друга параметры отделяются пробелами. Параметры будут переданы программе
в том порядке, в котором они указаны в командной строке.

Командная оболочка передает внешней программе ее параметры
не в виде единой строки, как их ввел пользователь, а в виде
упорядоченного списка (первый параметр, второй параметр…).
Для этого командную строку необходимо разбить на отдельные
«слова».
При разбиении на слова командная оболочка использует понятие разделитель (delimiter).
Разделитель — это символ, разделяющий слова; таким образом,
командная строка — это последовательность слов (которые имеют
значение) и разделителей (которые значения не имеют). Для командной оболочки
разделителями являются символ пробела, символ табуляции и символ перевода строки.
Количество разделителей между двумя соседними словами значения не имеет.
Если необходимо передать в качестве параметра строку, содержащую
символы-разделители, необходимо эту строку окружить одинарными или двойными
кавычками.

user@desktop ~ $ echo "Hello, world."
Hello, world.

Параметры, которые могут быть переданы команде, подразделяются на два вида: первые
— это внешние объекты, с которыми должна работать вызываемая команда
(например, имена файлов, числа), вторые — это принимаемые программой
модификаторы поведения. Последовательность в командной строке обычно такая:
имя команды — модификаторы — объект(ы), где и
модификаторы, и объекты необязательны.

:/>  Интерфейс командной строки - Основы командной строки

В программах для UNIX параметры-модификаторы принято называть ключами (а также опциями и иногда флагами).
Для формата ключей нет жёсткого стандарта, однако существуют договорённости,
нарушать которые не принято. Однобуквенные ключи должны начинаться с символа
«» (как -h), такие ключи
можно объединять: du -s -h и du -sh
эквивалентны. Другой вид ключей — полнословные — начинается
с двух символов «»
(например, --help, который чаще всего
выдаёт подсказку). Особый вид
ключей — параметрические, которые принимают
собственный параметр: например, в команде
grep -f access.log -n test имя файла
access.log — часть параметра -f.

Проблемы могут возникнуть, если с символа «»
начинается не ключ, а обычный параметр, например, имя файла. В
этом случае команда может интерпретировать этот параметр как
ключ, что повлечет ошибку. Для выхода из этой ситуации
используется специальная конструкция «»,
указывающая, что список ключей закончен, и любые последующие
строки следует интерпретировать как параметры. Например:

user@desktop ~ $ ls -l -- -test-file
-rw-r--r--   1 user  users      90 Сен 19 00:20 -test-file

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

Шаблон в командном интерпретаторе используется примерно в тех же целях, что и
регулярное выражение, которое будет описано в разделе
«Команды, использующие регулярные выражения»: для поиска строк определенной
структуры среди множества разнообразных строк. В отличие от регулярного
выражения, шаблон всегда примеряется к строке целиком, кроме того, он устроен
значительно проще (а значит, и беднее).

Символы в шаблоне разделяются на обычные и специальные. Обычные символы
соответствуют таким же символам в строке, а специальные —
обрабатываются особым образом:

  • Шаблону, состоящему только из обычных символов, соответствует единственная
    строка, состоящая из тех же символов в том же порядке. Например, шаблону
    «abc» соответствует строка abc, но
    не aBc или ABC, потому что большие и
    маленькие буквы различаются.

  • Шаблону, состоящему из единственного спецсимвола «*»,
    соответствует любая строка любой длины (в том числе и пустая).

  • Шаблону, состоящему из единственного спецсимвола «?»,
    соответствует любая строка длиной в один символ,
    например, a,
    или @, но не ab
    или 8888.

  • Шаблону, состоящему из любых символов, заключенных в квадратные
    скобки «[» и «]» соответствует строка длиной в
    один символ, причем этот символ должен встречаться среди заключенных в
    скобки. Например, шаблону «[bar]» соответствуют только строки
    a, b и r, но не
    c, B, bar или
    ab. Символы внутри скобок можно не перечислять
    полностью, а задавать диапазон, в начале которого стоит символ с
    наименьшим ASCII-кодом, затем следует «», а
    затем — символ с наибольшим ASCII-кодом. Например, шаблону
    «[0-9a-fA-F]» соответствует одна шестнадцатеричная цифра
    (скажем, 5, e
    или C). Если после «[» в шаблоне
    следует «!», то ему соответствует строка из одного символа,
    не перечисленного между скобками.

  • Шаблону, состоящему из нескольких частей, соответствует строка, которую
    можно разбить на столько же подстрок (возможно, пустых), причем первая
    подстрока будет отвечать первой части шаблона, вторая — второй
    и т. д. Например, шаблону «a*b?c» будут соответствовать
    строки ab@c*» соответствует пустая
    подстрока), a b=c и aaabbc, но не
    будут соответствовать abc?»
    соответствует подстрока c, а для «c»
    соответствия не находится), @ab@c (нет соответствия для
    «a») или aaabbbc (из
    трех b первое соответствует «b»,
    второе — «?», а вот третье приходится
    на «c»).

Шаблоны используются в нескольких конструкциях shell. Главное место их
применения — командная строка. Если оболочка «видит» в
командной строке шаблон, она немедленно заменяет его списком файлов, имена
которых ему соответствуют. Команда, которая затем вызывается, получает в
качестве параметров список файлов уже без всяких шаблонов, как если бы этот
список пользователь ввел вручную.

По умолчанию, ввод и вывод каждой команды, выполняемой в
командной строке, связан с терминалом, за которым работает
пользователь. Однако командная оболочка предусматривает
средства перенаправления ввода и вывода команд. Один из самых
важных случаев — перенаправление ввода/вывода в
файл и из файла. Для этого в командной строке используются
специальные символы >, >> и <. Символы
перенаправления указываются в командной строке после всех
параметров команды, за символом перенаправления должно
следовать имя файла, в который или из которого следует
передать данные.

user@desktop ~ $ date > /tmp/date
user@desktop ~ $ cat < /tmp/date
Втр Окт  4 23:15:37 MSD 2005
user@desktop ~ $

В данном примере вывод команды date перенаправляется в файл
/tmp/date (при этом если такой файл
существовал, то он будет уничтожен и создан заново с нуля), а затем команде cat
перенаправляется на ввод содержимое этого файла. Обратите
внимание, здесь команда cat выполняется без
параметров
, она получает содержимое файла
/tmp/date непосредственно со стандартного
ввода, как если бы пользователь ввел его прямо с
терминала. Обращение к файлу и передачу данных выполняет в
этом случае командная оболочка.

Современные оболочки, в том числе и bash, предусматривают
также специальные символы для особых случаев перенаправления,
в частности, >> служит для недеструктивного
перенаправления в файл (данные не заместят содержимое файла, а
будут дописаны в конец) или &> для направления в один
файл двух потоков: стандартного ввода и стандартного вывода ошибок.

Презентация 4-04: программное окружение

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

user@desktop ~ $ date
Птн Ноя 5 16:20:16 MSK 2004
user@desktop ~ $ LC_TIME=C date
Fri Nov 5 16:20:23 MSK 2004

В последнем примере пользователь присвоил некоторое значение переменной окружения
в командной строке перед именем команды. Командный интерпретатор,
увидев «=» внутри первого слова командной строки, приходит к выводу,
что это — операция присваивания, а не имя команды, и запоминает, как
надо изменить окружение команды, которая последует далее. Переменная окружения
LC_TIME предписывает использовать определенный язык при выводе даты
и времени, а значение "C" соответствует стандартному
системному языку (чаще всего — английскому).

Для получения значения переменной окружения необходимо воспользоваться
символом «$»:

user@desktop ~ $ echo $PWD
/home/user

В большинстве UNIX-систем существует набор переменных окружения, сопровождающих
все процессы системы. При старте командной оболочки, инициализируется это
множество системных переменных. Их можно посмотреть с помощью
команды env. Некоторые из них представляют особый интерес для
пользователя системы:

DISPLAY

Переменная используется графической подсистемой X11 и указывает на адрес
X-сервера и номер используемого экрана (подробнее об этом будет сказано
в разделе Глава 9, Графическая подсистема UNIX).

EDITOR

Если какая-то утилита требует редактирования файла, то вместо
написания и использования встроенного редактора, этот файл можно
передать на редактирование программе, путь к которой хранится в
переменной EDITOR.

HOME

Переменная содержит имя домашней директории текущего пользователя.

LANG и LC_...

Переменные, задающие язык интерфейса и другие параметры локализации программы.

PATH

Переменная окружения содержит список директорий, разделённый
символом «:». Этот список просматривается при каждом
запуске команды — в нём производится поиск исполняемых файлов
с соответствующим команде именем. Примером значения переменной окружения
может быть «/bin:/usr/bin:/usr/local/bin».

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

SHELL

Имя текущей программы оболочки.

TERM

Тип терминала, используемого в настоящий момент. Эта переменная
анализируется программами для того, чтобы варьировать свой интерфейс в
зависимости от возможностей терминала.

USER

Имя текущего пользователя.

_ (одиночный символ подчёркивания)

В точности последняя команда, выполненная в командной оболочке.

Презентация 4-05: служебные символы

Из предыдущих разделов видно, что некоторые символы
используются в качестве команд самой командной оболочке,
например, символы перенаправления ввода/вывода —
служебные
символы
. Поскольку служебные символы адресованы
самой командной оболочке, то при обработке командной строки
они из нее «изымаются» и не передаются
выполняющейся команде. Чтобы передать команде параметр,
содержащий служебные символы, необходимо их тем или иным
способом экранировать. С одним из
способов экранирования — заключением параметра
в одинарные или двойные кавычки — мы уже
сталкивались раньше, когда говорили о параметрах, содержащих
символы-разделители. Другой распространённый
способ — постановка символа обратной косой черты
() непосредственно перед служебным символом.

Рассмотрим основные группы служебных символов командной оболочки:

Символы-разделители

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

Символы пути

Используются для разделения элементов пути. Сюда можно отнести символ
корня («/») и символ домашней директории
~») — в командной строке он автоматически
заменяется на полный путь к домашней директории.

Символы команд

Применяются в аргументах команд, для отделения нескольких команд, для
запуска процессов на заднем фоне и т.п. К таким символам можно отнести:
«*», «&», «<»,
«>», «;», «(»,
«)», «|», «».

Символы управления переменными

Используются для задания («=») и подстановки
$») значений переменных среды. При этих символах в именах
файлов, необходимо предварять их знаком обратной косой
»).

ESC-символы

Для использования перечисленных выше специальных символов в именах
файлов, необходимо перед ними использовать знак обратной косой:
«&», «;» и т. п. К этой же группе
относятся специальные ASCII-символы, зарезервированные для команд вывода
текста, например, символ возврата каретки или табуляции
n» и «t» соответственно).

Презентация 4-08: возможности командной оболочки

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

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

:/>  NETSH и удаленные компьютеры

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

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

Программирование на shell выходит за рамки данного курса, однако
ниже будут рассмотрены основные средства связывания команд,
необходимые любому пользователю.

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

Чтобы история команд могла сохраняться между сеансами
работы пользователя, bash записывает ее в файл
.bash_history, находящийся в домашнем каталоге
пользователя. Делается это в момент завершения оболочки: накопленная за время
работы история дописывается в конец этого файла. При следующем запуске командной
оболочки считывает .bash_history целиком. История хранится
не вечно, количество запоминаемых команд в .bash_history
ограничено (обычно сохраняется 500 команд, но это можно и перенастроить).

Презентация 4-09: средства объединения команд

Существует возможность объединять несколько команд в одной командной строке. Это
можно делать несколькими способами:

Последовательное выполнение

Команды выполняются одна за другой, независимо от результата их
исполнения. В качестве разделителя выступает символ точки с запятой
;»).

В качестве примера можно рассмотреть составную команду
mkdir /tmp/test; cd /tmp/test,
которая сначала создает каталог
/tmp/test, а затем делает его
текущим.

Условное выполнение (И)

Проверяется код завершения первой программы, если он
равен , производится выполнение второй программы, и
так далее. Таким образом, последняя команда выполнится только при
успешном завершении всех предыдущих. В качестве разделителя выступают
два амперсанда
&&»).

Например, команда
mkdir /tmp/test && cd /tmp/test
создает каталог /tmp/test, но
переход в этот каталог будет выполнен только в том
случае, если при выполнении первой части не возникло ошибки
(например, каталог может уже существовать, и создать его невозможно).

Условное выполнение (ИЛИ)

Проверяется код завершения первой программы, если он
не равен , производится
выполнение второй программы, и так далее. Последняя команда будет
запущена, только если ни одна из предыдущих не закончилась успешно. В
качестве разделителя выступают две вертикальные черты
||»).

В качестве примера можно рассмотреть составную команду
test -d /tmp/test || mkdir /tmp/test, которая
проверяет существование директории /tmp/test и, если
её нет, создаёт её.

Конвейер

При выполнении списка команд,
объединённых в конвейер, стандартный вывод команды
направляется на стандартный ввод следующей за ней
команды в конвейере напрямую. Передаваемые данные
рассматриваются как текстовые, передача производится
построчно. Таким образом возникает поток данных,
проходящих через несколько команд последовательно,
как по конвейеру. Этот механизм является одной из самых фундаментальных
особенностей UNIX и широко используется при работе в командной стоке.

Все программы могут быть запущены одновременно, так чтобы обеспечить
интерактивность вывода при прохождении данных через цепочку
программ. Если одна из программ в цепочке конвейера завершится
(например, в случае ошибки), остальным будет отправлен специальный
сигнал (SIGPIPE).

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

Рассмотрим пример команды cat file.txt | uniq | sort,
которая читает содержимое файла file.txt, удаляет
из него повторяющиеся строки и сортирует оставшиеся строки по
алфавиту. Результат выводится на экран.

Современные командные оболочки позволяют строить более гибкие условные выражения
(с использованием скобок и знака отрицания) из выполняющихся команд.

Презентация 4-10: справочная подсистема

Работать с операционной системой, не заглядывая в документацию, довольно сложно. В
UNIX это не вызывает проблем, потому что документированы практически все области
операционной системы. Всем пользователям настоятельно рекомендуется, приступая к
работе, а тем более — к изучению UNIX, пользоваться всеми доступными
руководствами. Исторически первым и основным средством документации во всех
версиях являются страницы руководства (manual pages), которые
будут подробно рассмотрены далее.

Документация в подавляющем большинстве случаев пишется на простом английском
языке. Если английский — не родной язык для автора документации, она
будет только проще. Традиция писать по-английски идет от немалого вклада США в
развитие компьютерной науки вообще и UNIX в частности. Кроме того, английский
становится языком международного общения во всех областях, не только в
компьютерной. Необходимость писать на языке, который будет более или менее понятен
большинству пользователей, объясняется постоянным развитием UNIX. Дело не в том,
что страницу руководства нельзя перевести, а в том, что ее придется переводить
всякий раз, когда изменится описываемый ею объект! Например, выход новой версии
программного продукта сопровождается изменением его возможностей и особенностей
работы, а следовательно, и новой версией документации.

Документация в UNIX играет важнейшую роль. Решение любой задачи должно начинаться
с изучения руководств. Не стоит жалеть на это времени. Даже если рядом есть
опытный пользователь UNIX, который, возможно, знает ответ, не стоит беспокоить его
сразу же. Возможно, даже зная, что нужно сделать, он не помнит как
именно — и поэтому (а также потому, что он — опытный
пользователь) начнет с изучения руководства. Это — закон, у которого
даже собственное название: RTFM, что означает «Read That
Fine Manual
».

Современные свободные UNIX-системы обладают большим сообществом пользователей и
разработчиков, объединённых через Интернет. В этих сообществах является нормальной
практикой взаимопомощь и ответы на вопросы по системе. Однако здесь необходимо
следовать описанному выше принципу RTFM.

Презентация 4-11: страницы руководств (man)

Больше всего полезной информации содержится в страницах руководства, для краткости мы
будем называть их просто «руководство». Каждая страница посвящена
какому-нибудь одному объекту системы. Для того чтобы посмотреть страницу
руководства, нужно дать команду системе man объект:

user@desktop ~ $ man cal
CAL(1)       BSD General Commands Manual   CAL(1)
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). Для поиска и подсветки интересующего понятия
можно воспользоваться командой /, после которой необходимо
ввести интересующий Вас термин — по нажатию
клавиши Enter, курсор перейдёт к первому упоминанию термина,
который будет выделен серым цветом. Последующие нажатия /
и Enter приведут к продолжению поиска слова по документу.

Страница руководства состоит из полей — стандартных разделов, с
разных сторон описывающих заинтересовавший объект — например, команду
cal. В поле NAME содержится краткое описание объекта (такое,
чтобы его назначение было понятно с первого взгляда). В поле SYNOPSIS дается
формализованное описание способов использования объекта (в данном
случае — того, как и с какими параметрами запускать
команду cal). Как правило, в квадратные скобки в этом поле
заключены необязательные параметры команды, которые можно ей передать, а можно и
опустить. Например, строка «[[month] year]» означает, что в этом
месте командной строки параметров у команды может не быть вообще, может быть
указан год или пара — месяц и год. Наконец, текст в поле
DESCRIPTION — это развернутое описание объекта, достаточное для того,
чтобы им воспользоваться.

Одно из самых важных полей руководства находится в конце текста. Если в процессе
чтения NAME или DESCRIPTION пользователь понимает, что не нашел в руководстве
того, что искал, он может захотеть посмотреть, а есть ли другие руководства или
иные источники информации по той же теме. Список таких источников содержится в
поле SEE ALSO:

user@desktop ~ $ man man
...
SEE ALSO
    apropos(1), whatis(1), less(1), groff(1), man.conf(5).

Справочные руководства делятся на разделы — в зависимости от типа
описываемых объектов. Если один и тот же термин описывается в нескольких
разделах, необходимо явно указать, какой из них использовать,
например, man 3 printf для 3-го раздела руководств.

Всего существует 8 разделов руководств:

В примере выше в поле SEE ALSO обнаружились ссылки на руководства
по less, groff (программе форматирования
страницы руководства), структуре конфигурационного файла для man, а также по
двум сопутствующим командам с такими говорящими
названиями «apropos» и «whatis». Как и
команда apropos, whatis ищет подстроку в
некоторой базе данных, состоящей из полей NAME всех страниц помощи в
системе. Различие между ними в том, что whatis —
только среди имен объектов (в левых частях полей NAME), а apropos —
по всей базе. В результате у whatis получается список кратких
описаний объектов с именами, включающими искомое слово, а
у apropos — список, в котором это слово
упоминается. Для того чтобы это узнать, все равно пришлось один раз прочесть
документацию.

Описания объектов, выводимые whatis
или apropos, отличаются числом в скобках — номером
раздела:

user@desktop ~ $ whatis passwd
passwd (1) - update a user's authentication tokens(s)
passwd (5) - password file
passwd (8) - manual page for passwd wrapper version 1.0.5

Другой источник информации о UNIX (а точнее, в UNIX-подобных системах,
базирующихся на программном обеспечении от GNU) и составляющих ее
программах — справочная подсистема info. Страница
руководства, несмотря на обилие ссылок различного типа,
остается «линейным» текстом, структурированным только
логически. Документ info структурирован прежде всего
топологически — это настоящий гипертекст, в котором множество
небольших страниц объединены в дерево. В каждом разделе документа info всегда
есть оглавление, из которого можно перейти сразу к нужному подразделу, откуда
всегда можно вернуться обратно. Кроме того, info-документ можно читать и как
непрерывный текст, поэтому в каждом подразделе есть ссылки на предыдущий и
последующий подразделы.

:/>  Способы устранения ошибки запуска cmd.exe

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

Одна или несколько страниц, которые можно перелистывать
клавишей Пробел или Page Up/Page
Down
 — это узел (node). Узел содержит обычный текст и меню
(menu) — список ссылок на другие узлы, лежащие в дереве на более
низком уровне. Ссылки внутри документа имеют вид «* имя_узла::» и
перемещать по ним курсор можно клавишей Tab, а переходить к
просмотру выбранного узла —
клавишей Enter. Вернуться к предыдущему просмотренному узлу
можно клавишей l (oт «Last»). И, главное, выйти из
программы info можно, нажав qQuit»). Более
подробную справку об управлении программой info можно в любой момент получить у
самой info, нажав ?.

Некоторые объекты системы не имеют документации ни в формате man, ни в формате
info. В этом случае можно надеяться, что при них есть сопроводительная
документация, не имеющая, увы, ни стандартного формата, ни тем более ссылок на
руководства по другим объектам системы. Такая документация (равно как и примеры
использования объекта), обычно помещается в
каталог /usr/share/doc/имя_объекта. Как правило, имя
объекта
здесь — это имя программы и её текущая версия.

Существует ещё одна довольно распространённая ситуация, в которой обширная
документация по продукту, расположенная в
директории /usr/share/doc/ выходит далеко за рамки man или
info — если продукт достаточно сложен и имеет собственную
структурированную и очень объёмную документацию. Примерами могут служить
веб-сервер Apache или почтовый
сервер Postfix.

Широко распространённым видом тематической документации являются
HOWTO — статьи, часто объёмом не уступающие книгам, которые посвящены
решению какой-либо практической задачи, например Настройка
печати
или Создание загрузочного диска. Подборки
HOWTO могут распространяться вместе с программами, но их также можно найти в
Internet. HOWTO могут служить хорошим вводным материалом в
целые большие разделы работы с операционной системой и её
компонентами. Однако в частностях, которые не относятся
к традиционным и устоявшимся основам UNIX, они быстро
устаревают и не могут отразить всей специфики разных
реализаций UNIX-систем — при чтении HOWTO всегда
следует делать на это поправку.

В современных свободных версиях UNIX существуют проекты,
целью которых является унификация и систематизация
документации на основе XML. Наиболее известный из них —
проект Scrollkeeper, который объединяет всю документацию (в первую очередь в
современных оконных средах GNOME и KDE) и позволяет просматривать её с помощью
простого браузера, предоставляет средства поиска, построения
оглавления и указателей, и т. п.

Однако подобные средства документации используются очень
ограниченно, а роль основного источника документации в
UNIX-системах по-прежнему сохраняют страницы
руководства. Возможно, причина этого в
«распределённой» природе руководств: нет общего
места, где сложены все руководства системы. Напротив, каждое
руководство посвящено определённому объекту системы, дает
конкретные сведения, необходимые в конкретной ситуации и
доступно в любой командной строке, то есть всегда находится
«под рукой».

Презентация 4-12: резюме

Командная строка UNIX является основным средством интерфейса
взаимодействия с системой, как для администратора, так и для пользователя
системы. Это происходит еще и потому, что в настоящее время широко распространены
средства удалённой работы с системой через сетевые терминалы.

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

Команда строится по стандартной схеме: имя
команды — модификаторы (ключи) — прочие
параметры
. В качестве имени команды может выступать
название внешней программы, встроенной функции или сокращение (alias).

При обработке командной строки служебные символы
интерпретируются самой командной оболочкой и не передаются в
качестве параметров командам. Чтобы включить служебные символы в
состав параметра, их необходимо экранировать.

Документация — необходимый инструмент при работе в
UNIX. Основной вид документации — страницы руководств
(man). Также следует обращаться к расширенной обучающей
документации (info) и к документации, поставляемой вместе с
программой (которую можно найти в каталоге /usr/share/doc).

Ключевые термины: терминал, графический терминал, управляющие символы, управляющая последовательность, тип терминала, виртуальная консоль, командная
строка
, командная оболочка, приглашение, имя команды, встроенная команда, псевдоним, параметры команды, ключ, шаблон, служебные символы, код завершения, сценарий, история команд, конвейер, страница руководства

Синтаксис команд командной строки. файловая структура. групповые символы.

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

Синтаксис команд командной строки.

Каждая команда имеет определенную синтаксическую структуру, согласно которой пользователь вводит команду в командной строке. Для примера, возьмем команду CD, которая используется для изменения текущего каталога. Она имеет следующий синтаксис cd [/d] [диск:][путь] [..]. Большинство команд командной строки имеет различные параметры и ключи. Как правило, ключ обозначается буквой латинского алфавита с предшествующей вертикальной косой чертой «/» (в некоторых командах ключи могут начинаться со знака минус «-»). В нашем случае команда CD имеет один ключ [/D]. [диск:][путь] и [..] являются параметрами команды CD. Если какие-нибудь ключи и параметры записываются в квадратных скобках, то применение их в команде необязательно. Например, в нашем случае у команды CD ключ и параметры являются необязательными, т.е. команда CD может употребляться без них. Для примера, возьмем другую команду XCOPY, которая позволяет копировать файлы и папки. Она имеет следующий синтаксис: xcopy источник [результат] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:мм-дд-гггг]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:файл1[ [файл2]][ [файл3]] [{/y|/-y}] [/z]. Как видите, команда имеет много различных ключей и параметров. Однако только один параметр является обязательным: «источник». При вводе той или иной команды в командной строке необходимо придерживаться синтаксиса, т.е. вводить ключи и параметры (если они необходимы) в том порядке, в котором они представлены в синтаксической структуре команды.

Регистр при наборе команд.

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

Работа с файловой системой.

Первые уроки по командной строке будут посвящены работе с файловой системой Windows, т.е. работе с файлами и папками. Поэтому следует сказать несколько слов об особенностях определения путей к файлам и папкам. Путь к файлу записывается следующим образом: [диск][путь]имя_файла. Таким образом, получается что обязательным параметром является только «имя_файла». При этом, если перед именем файла стоит знак «», то маршрут к этому файлу вычисляется от корневого каталога, если имя файла употребляется без знака «», то маршрут к нему вычисляется от текущего каталога. Для примера, создадим на диске «С» файл «text.txt». Запустим командную строку. По умолчанию, текущим каталогом является «С:Usersимя_пользователя». Для того чтобы открыть какой-нибудь файл с помощью командной строки, необходимо просто записать название этого файла. Однако, здесь следует правильно отобразить маршрут к этому файлу. Если мы просто наберем text.txt, то на экране появится сообщение “«text.txt» не является внутренней или внешней командной, исполняемой программой или пакетным файлом”. Дело в том, что файл «text.txt» находится в корне диска «С», а у нас текущим каталогом является папка «имя_пользователя» (в моем случае “вадим”), находящаяся в папке «Users» на диске «С». Если нам необходимо, чтобы маршрут к файлу отсчитывался от корня диска, перед файлом необходимо поставить знак «»: text.txt

puti

Теперь перейдем в корень диска «С» (это можно сделать с помощью команды CD). Сейчас для открытия файла «text.txt» достаточно написать в командной строке text.txt без использования знака «», поскольку текущим каталогом является диск «С», а файл как-раз расположен в корне диска «С»

puti.

Теперь создадим в папке «Users» файл «file.txt» и изменим текущий каталог на «С:Usersимя_пользователя» (в моем случае «имя_пользователя» – «вадим»). Сделать это можно с помощью команды: cd usersимя_пользователя. Файл «file.txt» находится ни в корне диска «С», ни в текущем каталоге, поэтому для его  открытия необходимо указать не только название файла, но и каталог, в котором он находится (в нашем случае «Users»). Если мы запишем просто usersfile.txt, то на экран будет выведено сообщение «Системе не удается найти указанный путь», поскольку эта самая «система» пытается найти файл «file.txt» в папке «Users», начиная от текущего каталога, т.е. по маршруту C:UsersвадимUsersfile.txt. Если же мы запишем в командной строке usersfile.txt, то система будет искать файл «file.txt» в папке «Users», начиная от корня диска «С», т.е. по маршруту «C:Usersfile.txt», который является правильным.

puti..

Если файл расположен на другом диске, то для доступа к нему необходимо указывать полный путь с указанием имени диска. Например, создадим на диске «D» папку «FOLDER», а в ней файл «f1.txt». Тогда команда для открытия файла «f1.txt» будет выглядеть так: d:folderf1.txt

puti...

Для обозначения текущего каталога и 3-х его верхних уровней используются особые обозначения. Так текущий каталог обозначается символом «.» (точка), его родительский каталог – символом «..», каталог 2-го уровня – символом «…», каталог 3-го уровня – символом «….». Эти обозначения используются в некоторых командах. Например, команда CD.. осуществляет переход в родительский каталог.

puti....

Использование групповых символов.

При работе в командной строке имена файлов можно заменять групповыми символами, «*» (звездочкой) и «?» (вопросительным знаком). Символ «*» заменяет любое количество символов в названии файла, а символ «?» обозначает присутствие или отсутствие одного символа в названии файла. Например, запись «*.txt» обозначает все текстовые файлы. Запись «file.*» обозначает файлы с именем «file» и любым расширением. Запись «*.*» обозначает все файлы. Запись «fi?e.txt» может обозначать любой текстовый файл, с названием file.txt, fie.txt, fife.txt, fi4e.txt и т.д.

При использовании имен файлов, состоящих из более чем одного слова, необходимо заключать их в двойные кавычки. Например, создадим на диске «С» папку «новая папка», а в ней файл «новый документ». Тогда для открытия этого файла, путь к нему необходимо заключить в двойные кавычки.

puti.....


Предыдущая статья: Запуск командной строки.
Оглавление: Командная строка.
Следующая статья: Перенаправление ввода-вывода и конвейеризация.


Оставьте комментарий

Adblock
detector