Книга посвящена дистрибутиву Linux Mint и одной из его главных



Скачать 21.34 Mb.
Pdf просмотр
страница9/30
Дата22.11.2016
Размер21.34 Mb.
Просмотров2664
Скачиваний0
1   ...   5   6   7   8   9   10   11   12   ...   30
Вводные слова о командных конструкциях
Надеюсь, из того, что было рассказано на предшествующих страницах,
посвящённых CLI, читателю стало ясно, что подавляющее большинство команд в системах очень просты по сути и предназначены для выполнения какого-либо одного элементарного действия.
То есть команда cp умеет только копировать файлы, команда rm — только удалять их, но зато делают они это хорошо. Подчас — через чур хорошо, что мог ощутить на себе каждый, кому посчастливилось по ошибке выдать директиву вроде rm -Rf * Для тех, кто не испытал этого волнительного ощущения, поясню:
результатом будет полное и безвозвратное уничтожение всех файлов от текущего каталога вниз (включая подкаталоги любой степени вложенности).
А если задать туже команду от лица администратора, тов зависимости от текущего положения на файловом древе, можно нечувствительно удалить что угодно, вплоть до системы целиком одна из причине, почему повседневные действия не следует выполнять под root'ом.
Собственно, разделение любой задачи на серию элементарных операций это и есть основной принцип работы в системах, тот самый пресловутый, о котором столько говорят его приверженцы.
Однако вслед за этапом решительного размежевания (эх, неистребимы в памяти нашего поколения слова товарища Ленина) должен наступить этап объединения, как за анализом явления следует синтез эмпирических данных он м. И целям такого объединения служат командные конструкции.
Командные конструкции — очень важный компонент интерфейса командной строки. Они позволяют объединять несколько команд воедино и выполнять различные команды последовательно или параллельно. Для этого служат специальные символы — операторы фонового режима, объединения,
перенаправления и конвейеризации.
Совместное выполнение команд
Простейшая командная конструкция — это выполнение команды в фоновом режиме, что вызывается вводом символа амперсанда после списка опций и
или аргументов command [options] [arguments] & В Bash и Zsh пробел перед символом амперсанда необязателен, нов некоторых шеллах он требуется, и потому лучше возвести его ввод (как и во всех аналогичных случаях) в ранг привычки. После этого возвращается приглашение командной строки и возможен ввод любых других команд (в том числе и фоновых. Команды для параллельного исполнения можно задать ив той же строке command1 & command2 & ... & commandN В результате все команды, перечисленные в строке, кроме той, что указана последней, будут выполняться в фоновом режиме.
Существуют и конструкции для последовательного выполнения команд.
Так, если ряд команд разделен в строке символом точки с запятой (;)
$ command1 ; command2 ; ... ; commandN то сначала будет выполнена команда command1, затем — command1 итак далее. Молчаливо предполагается, что каждая из этих команд может иметь любое количество опций и аргументов. И, опять-таки, обрамление ; пробелами необязательно во многих командных оболочках. Сами по себе команды не обязаны быть связанными между собой каким-либо образом — в сущности, это просто эквивалент последовательного их ввода в командной строке command1
$ command2 итак далее. При этом первая команда может, например, копировать файлы,
вторая — осуществлять поиск, третья — выполнять сортировку, или другие действия. Очевидно, что в общем случае выполнение последующей команды не зависит от результатов работы предшествующей.
Однако возможна ситуация, когда результаты предыдущей команды из такой конструкции используются в команде последующей. В этом случае ошибка исполнения любой составляющей команды, кроме последней, делает невозможным продолжение работы всей конструкции. Что само по себе было бы ещё полбеды — однако в некоторых ситуациях исполнение последующей команды возможно только при условии успешного завершения предыдущей.
Характерный пример — сборка программы из ее исходных текстов,
включающая три стадии — конфигурирование, собственно компиляцию и установку собранных компонентов. Что обычно выполняется последовательностью из трёх команд ./configure
$ make
$ make install
Ясно, что если конфигурирование завершилось ошибкой, то компиляция начаться не сможет и, соответственно, потом нечего будет устанавливать. И
потому объединение их в последовательную конструкцию вида ./configure ; make ; make install может оказаться нецелесообразным.
Однако для предотвращения таких ситуаций в конструкции из взаимосвязанных команд существует другой оператор, обозначаемый удвоенным символом амперсанда — &&. Он указывает, что последующая команда конструкции должна исполняться только в том случае, если предыдущая завершилась успешно ./configure && make && make install На практике обе приведённые в качестве примера конструкции дадут один и тот же результат — разумеется, если все составляющие их команды будут выполнены без ошибок. Однако в ряде иных случаев различие между этими конструкциями может быть существенным.
Впрочем, предусмотрена и командная конструкция, в которой последующей команде предписано исполняться в томи только в том случае, если предыдущая команда завершилась неудачно. Она имеет вид command1 || command2 и может служить, в частности, для вывода сообщений об ошибках.
Перенаправление
Следующая командная конструкция — это так называемое перенаправление ввода/вывода. Чтобы понять,что это такое, нужно помнить две вещи. любая команда получает данные для своей работы (например, список опций и аргументов) со стандартного устройства ввода (которым в первом приближении будем считать клавиатуру, а результаты своей работы представляет на стандартном устройстве вывода (коим договоримся считать экран монитора
2. системах любое устройство — не более чем имя специального файла, именуемого файлом устройства. Таким образом, ничто не запрещает нам подменить специальный файл устройства ввода или устройства вывода любым иным файлом (например,
обычным текстовым. Откуда и будут в этом случае браться входные данные или куда будет записываться вывод команды.
Перенаправление вывода команды обозначается следующим образом command > filename или command >> filename
В первом случае (одиночный символ >) вывод команды command образует содержимое нового файла с именем filename, не появляясь на экране. Или,
если файл с этим именем существовал ранее, то его содержимое подменяется выходным потоком команды (точно также, как при копировании одного файла в другой, уже существующий. Почему такое перенаправление называется замещающим (или перенаправлением в режиме замещёния).
Во втором же случае (двойной символ >>) происходит добавление вывода команды command вконец существующего файла filename (при отсутствии же его в большинстве случаев просто образуется новый файл. И потому это называется присоединяющим перенаправлением, или перенаправлением в режиме присоединения.
Перенаправление ввода выглядит так command < filename
Простейший случай перенаправления вывода — сохранение результата исполнения команды в обычном текстовом файле. Например, конструкция
$ ls dir1 > list создаст файл, содержанием которого будет список файлов каталога dir1. А
в результате выполнения конструкции ls dir2 >> list к этому списку добавится и содержимое каталога При перенаправлении ввода команда получает данные для своей работы из входящего в командную конструкцию файла. Например, конструкция sort < list выведет на экран строки файла list, отсортированных в порядке возрастания значения ASCII-кода первого символа, а конструкция
$ sort -r < list осуществит сортировку строк того же файла в порядке, обратном алфавитному (вернее, обратном порядку кодов символов, но это нас в данном случае не волнует).
В одной конструкции могут сочетаться перенаправления ввода и вывода,
как в режиме замещёния, так и в режиме присоединения. Так, конструкция
$ sort -r < list > list_r не только выполнит сортировку строк файла list (это — назначение команды sort) в обратном алфавитному порядке (что предписывается опцией -происходящей в данном случае от reverce), но и запишет ее результаты в новый файла конструкция sort -r < list >> list добавит по-новому отсортированный список вконец существующего файла
list.
Конвейеры
Возможности построения командных конструкций не ограничиваются перенаправлением ввода/вывода: результаты работы одной команды могут быть переданы для обработки другой команде. Это достигается благодаря механизму программных каналов (pipe) или конвейеров — последний термин лучше отражает существо дела.
При конвейеризации команд стандартный вывод первой команды передается не в файла на стандартный ввод следующей команды. Простой пример такой операции — просмотр списка файлов ls -l | less
Перенаправление вывода команды ls, то есть списка файлов, который при использовании полного формата записи (опция -l) может занимать многие экраны, на ввод команды less позволяет просматривать результат с ее помощью постранично или построчно в обоих направлениях.
Конвейеризация команд может быть сколь угодно длинной. Возможно также объединение конвейеризации команд и перенаправления водной конструкции. Кроме того, команды в конструкции могут быть сгруппированы стем, чтобы они выполнялись как единое целое. Для этого группа команд разделяется символами ; и пробелами, как при последовательном выполнении команд, и заключается в фигурные скобки. Так, если нам требуется перенаправить вывод нескольких команд в один и тот же файл, вместо неуклюжей последовательности типа command1 > file ; command2 >> file ; ... ; commandN >> file можно прибегнут к более изящной конструкции { command1 ; command2 ; ... ; commandN } > file Как и многие из ранее приведённых примеров, этот может показаться надуманным. Однако представьте, что вам нужно создать полный список файлов вашего домашнего каталога, разбитый по подкаталогам, да ещё и с комментариями, в каком подкаталоге что находится. Конечно, можно вывести состав каждого подкаталога командой ls, слить их воедино командой cat (она предназначена, в частности, и для объединения — конкатенации, — файлов, и речь о ней будет позже, загрузить получившееся хозяйство в текстовый редактор или ворд-процессор, где добавить необходимые словеса. А можно обойтись единой конструкцией { echo "List of my files" ; > echo "My text" ; ls text/* ; > echo "My images" ; ls images/* ; > echo "My audio" ; ls audio/* ; > echo "My video" ; ls video/* } > my-filelist
Ив результате получить файл такого (условно) содержания, которое мы для разнообразия просмотрим с помощью только что упомянутой команды благо и для просмотра содержимого файлов она также пригодна cat my-filelist
List of my files
My text text/text1.txt text/text2.txt
My images images/img1.tif images/img2.tif
My audio audio/sing1.mp3 audio/sing2.mp3
My video video/film1.avi video/film2.avi
Понятие о фильтрах
С понятием командных конструкций тесно связано понятие программ- фильтров. Это — команды, способные принимать на свой ввод данные с вывода других команд, производить над ними некоторые действия и перенаправлять свой вывод (то есть результат модификации полученных данных) в файлы или далее по конвейеру — другой команде.
Программы-фильтры — очень эффективное средство обработки текстов, ив своё время мы к ним вернемся для подробного изучения. Пока же важно отметить, что в качестве фильтров могут работать не все команды. Например,
команды find или grep фильтруют имена файлов или фрагменты их содержимого, а команда ls фильтром не является.
Сценарии оболочки
Наш затянувшийся разговор о командах и командном интерфейсе подходит к концу. Ив заключение этого раздела — ещё немного терпения. Потому что было бы несправедливо не уделить чуть-чуть места тому, что придает командному интерфейсу систем его несравненную гибкость и универсальность. Заодно способствуя закоснению пользователя в смертном грехе лености. Итак — слово о сценариях оболочки.
В самом начале я обмолвился, что шелл — это непросто среда для ввода единичных команд и командных конструкций, но и ещё интерпретатор собственного языка программирования. Так вот, сценарии оболочки,
именуемые также скриптами, — это и есть программы, написанные на этом языке.
Только не заподозрите меня в гнусном намерении учить вас программерству. Господь борони, ив мыслях не держал (тем паче, что и сам- то этим ремеслом не владею в должной для обучения других степени. Нет,
просто на последующих страницах нам то и дело придётся рассматривать кое-какие примеры готовых сценариев, а подчас и пытаться создавать их собственноручно. Ибо занятие это в элементарном исполнении навыков программирования не требует вообще.
В самом простом случае сценарий — это просто одна или несколько команд или (и) командных конструкций с необходимыми опциями и аргументами,
сохраненные в виде обычного именованного текстового файла. И
предназначены они в первую очередь для автоматизации часто исполняемых рутинных операций, в частности, ввода длинных последовательностей в командной строке.
Создание пользовательского сценария — просто, как правда. Для этого всего и нужно:

создать командную конструкцию, достойную увековечивания поместить ее в простой текстовый файл по потребности и желанию снабдить комментариями тем или иным способом запустить файл на исполнение. С принципами создания команд и командных конструкций мы в первом приближении разобрались раньше. А вот способов помещёния их в файл существует множество. Можно просто ввести (или вызвать из буфера истории) нужную команду и оформить ее как аргумент команды echo, вывод которой перенаправить в файл echo "cp -rf workdir backupdir" > mybackup Таким образом мы получили простейший скрипт для копирования файлов из рабочего каталога в каталог для резервного хранения данных, что впредь и будем проделывать регулярно (не так ли?).
Аналогичную процедуру можно выполнить с помощью команды cat — она,
оказывается, способна не только к объединению файлов и выводу их содержимого, но и к вводу в файл каких-либо данных. Делается это так.
Вызываем cat с перенаправлением ее вывода в файл cat > myarchive и нажимаем Enter. После этого команда остается в ожидании ввода данных для помещёния их в новообразованный файл. Не обманем ее ожиданий и проделаем это. причём можно не жаться и выполнить ввод в несколько строк,
например:
cd $HOME/archivedir tar cf archive.tar
../workdir gzip archive.tar Завершив ввод тела скрипта, все той же клавишей Enter открываем новую строку и набираем комбинацию Control+D, выдающую символ окончания файла.
В результате получаем сценарий для архивирования в специально предназначенном для этого каталоге archivedir наших рабочих данных
(командой tar), а заодно и их компрессии (командой gzip) — в Unix, в отличие от DOS/Windows, архивирование и компрессия обычно рассматриваются как разные процедуры.
Наконец, сценарий можно создать в любом текстовом редакторе. но это не так интересно — по крайней мере, пока. Да и стоит ли вызывать редактор ради двух-трёх строк?
Комментариями в шелл-сценариях считаются любые строки, начинающиеся с символа решетки (#) — они не учитываются интерпретатором и не принимаются к исполнению. Хотя комментарий может быть начат и внутри строки — важно только, что между символом # и концом её больше ничего не было бы. Ясно, что комментарии — элемент для скрипта необязательный, но очень желательный. Хотя бы для того, чтобы не забыть, ради чего этот сценарий создавался.
Но одна строка, начинающаяся символом решётки, в сценарии практически обязательна. И должна она быть первой и выглядеть следующим образом В данном случае восклицательный знак подчеркивает, что предваряющий его символ решетки (#) — не комментарий, а указание (т.н. sha-bang) на точный абсолютный путь к исполняемому файлу оболочки, для которой наш сценарий предназначен, например для POSIX-шелла, или для оболочки Bash. Здесь следует подчеркнуть, что шелл, для которого предназначается сценарий, отнюдь не обязан совпадать с командной оболочкой пользователя. И полноты картины для замечу, что указание точного имени интерпретатора требуется не только для шелл-скриптов, но и для программ на любых языках сценариев (типа Perl или Так что по хорошему в обоих приведенных выше примерах ввод команд сценария следовало бы предварить строкой sha-bang. Конечно, отсутствие имени командной оболочки в явном виде обычно не помешает исполнению шелл-сценария: для этого будет вызван системный командный интерпретатор по умолчанию — в Mint /bin/dash. Однако если сценарий предназначен для другой командной оболочки, то без sha-bang он может исполняться неправильно (или не исполняться вообще).
Теперь остается только выполнить наш сценарий. Сделать это можно разными способами. Самый напрашивающийся — непосредственно вызвать требуемый шелл как обычную команду, снабдив его аргументом — именем сценария (предположим, что он находится в текущем каталоге bash scriptname Далее, для вызова скриптов существует специальная встроенная команда
оболочки, обозначаемая символом точки. Используется она аналогично . ./scriptname стем только исключением, что тут требуется указание текущего каталога в явном виде (что и символизируется Однако наиболее употребимый способ запуска сценариев — это присвоение его файлу так называемого атрибута исполнения. Эта процедура волшебным образом превращает невзрачный текстовый файлишко во всамделишную
(хотя и очень простую) программу.
Так вот, после присвоения нашему сценарию бита исполнения запустить его можно точно также, как любую другую команду — просто из командной строки ./scriptname Опять же — в предположении, что сценарий находится в текущем каталоге, иначе потребуется указание полного пути к нему. Что, понятно, лениво, но решается рази навсегда все сценарии помещаются в специально отведенный для этого каталог (например, $HOME/bin), который и добавляется в качестве ещё одного значения переменной PATH данного пользователя.
Понятие о функциях
И уж совсем в заключение этого раздела осталось сказать пару слово функциях командной оболочки. Это — такая же последовательность команд
(или даже просто одиночная команда, как и сценарий, ноне вынесенная в отдельный исполняемый файла помещённая в тело другого скрипта. В коем она опознаётся по имении может быть выполнена неоднократно входе работы этого скрипта.
Главное отличие функции от сценария — в том, что она выполняется в том же процессе (и, соответственно, экземпляре шелла), что и заключающий её
сценарий. Тогда как для каждого скрипта, вызываемого из другого сценария,
создаётся отдельный процесс, порождающий собственный экземпляр шелла.
Это может быть важным, если в сценарии определяются некоторые переменные, которые имеют силу только в нём самом.
Функции необязательно помещаются внутрь сценария — их можно собрать в некоторые отдельные файлы, которые именуются библиотеками функций и могут быть использованы по мере надобности.
Ранее на протяжении всего повествования неоднократно упоминались (и будут упоминаться впредь) системные библиотеки, в частности, главная библиотека glibc. Так вот, это — точно такие же сборники функций, правда, не командной оболочки, а языка Сии, соответственно, хранящиеся не в виде текстовых файлов, а в бинарном, откомпилированном, виде.
Настройка шелла
Во всех дистрибутивах Linux в качестве пользовательской командной оболочки по умолчанию выступает Bash, и Mint здесь не исключение. Так что,
хотя автор этих строк не является ни её любителем, ни, тем более, знатоком,
совсем обойти её вниманиемне мог. Так что ниже даётся мини-очерк
настройки этого шелла.
Оболочка Bash поддерживает все интерактивные возможности, столь важные для пользователя, как то автодополнение для команд и путей к файлам, историю оных (включая средства инкрементного поиска, мощные возможности навигации и редактирования командной строки.
Важно, что существует дополнительный пакет bash-completion: установка его обогащает базовую оболочку множеством опциональных средств настройки автодополнения (в том числе и для командных аргументов).
Правда, чтобы эта дополненная оболочка была по настоящему удобной и функциональной, нужно приложить некоторые усилия по её настройке, чем мы сейчас и займёмся.
Схема настройки bash предусматривает наличие пары файлов /etc/profile и /etc/bashrc (для логин-шелла и просто интерактивного его экземпляра, а также соответствующих им пользовательских конфигов —
/.bash_profile и. При авторизации первым в любом случае считывается общесистемный профильный файл /etc/profile, вслед за ним пользовательский профильный файл
/.bash_profile, после чего происходит обращение к
/.bashrc. Файл /etc/profile может занимать особое положение в него часто помещают переменные окружения (например, локально- зависимые, которые должны быть общими для всех пользователей данной системы. Пользовательские же настройки определяются в файлах и
/.bashrc. Обычно в
/.bash_profile определяются переменные окружения, которые должны действовать для всех дочерних процессов, а в — параметры, всегда требуемые в интерактивном режиме
(например, псевдонимы).
Редактирование командной строки в bash обеспечивается отдельным пакетом — библиотекой функций readline. Она имеет собственные конфигурационные файлы, общесистемный /etc/inputrc и пользовательский
/.inputrc.
Впрочем, в большинстве современных дистрибутивов ориентированных на графический режим и, следовательно, использование эмулятора терминала с интерактивным шеллом, не являющимся, тем не менее, шеллом пользовательским (login shell),
/.bash_profile играет сугубо служебную роль, и содержимое его сводится к отработке файла
/.bashrc:
# include .bashrc if it existsif [ -f
/.bashrc ]; then
/.bashrc fi# set PATH so it includes user's private bin if it existsif [ -d
/bin ] ; then
PATH=
/bin:"${PATH}"
fi Именно в
/.bashrc и выполняются при этом все пользовательские настройки.
Большинство настроек Bash по умолчанию разумны, и потому наличные в данном дистрибутиве файлы вполне могут быть взяты за основу. Однако путём некоторых несложных действий их можно дополнить, увеличив удобство интерактивного использования командной оболочки.
По умолчанию в Bash автодополнение клавишей табулятора не работает,
например, в аргументах многих команд, таких, как sudo или Решается эта задача очень просто достаточно файл
/.bashrc внести следующие строки enable bash completion in interactive shells if [ -f /etc/bash_completion ]; then
. /etc/bash_completion fi После этого автодополнение будет работать буквально везде, где только можно себе представить, например, после набора dpkg --sea и нажатия табулятора получится dpkg -Если в файл /etc/inpurc (или в
/inpurc) добавить такие строки history-search-backward
"e[B": history-search-forward то набор части команды, например, cd /, и последующий перебор стрелками
и истории команд повлечёт извеление из буфера истории только тех из них, которые начинаются на cd /.
Утилиты CLI
В этом очерке будут рассмотрены утилиты командной строки разного назначения — комплекс так называемых классических утилит в их современных свободных реализациях, используемых в дистрибутивах Linux, в том числе ив Mint.
Самая главная команда
Эта рубрика посвящена самой главной команде — man, а также сопутствующим ей материям. Содержание её — не информация о тех или иных командах, или свойствах системы, а метаинформация: информация о том, как получить нужную информацию. То есть выработке некоторых навыков, которые у применителя Linux должны быть доведены до уровня рефлексов.
Команд в свежеустановленной системе — немерянное количество,
только консольных утилит под тысячу. Да ещё почти каждая команда имеет
опции, подчас также в немалом числе. И возникает естественный вопрос как нормальный человек все это может запомнить Да никак — последует ответ.
Потому что запоминать все это изобилие команд нет не только возможности но и ни малейшей необходимости гораздо важнее понимать, каким образом соответствующую информацию можно получить в нужный момент. И
тут нам на помощь приходит самая главная команда — команда Команда man предназначена для вызова экранной документации в одноименном формате (Manual Pages, что на Руси ласково переводится как
«тетя Маня. А такая документация почти обязательно сопровождает любую уважающую себя программу для систем. И устанавливается в принудительном порядке при инсталляции соответствующей программы в любом случае — разворачивается ли она из бинарного тарбалла или собирается из исходников.
Для файлов документации предназначен специальный каталог. Обычно это /usr/share/man, разделяемый на подкаталоги, соответствующие восьми нумерованным группам. Назначение этих групп следующее. man1 — команды и прикладные программы пользователя
2. man2 — системные вызовы
3. man3 — библиотечные функции
4. man4 — драйверы устройств
5. man5 — форматы файлов
6. man6 — игры
7. man7 — различные документы, не попадающие в другие группы (в том числе относящиеся к национальной поддержке
8. man8 — команды администрирования системы. Кроме того, имеется несколько подкаталогов с локализованными man- страницами, в том числе и русскоязычными, имеющими туже структуру, хотя и обычно неполную. Так, подкаталог с русскоязычными страницами, включает в себя только группы man1, man5, man7 и Нас, применителей, в первую очередь интересуют команды из й и,
поскольку на персоналке каждый юзер — сам себе админ, из й групп, хотя и об остальных категориях забывать не следует, иногда позарез нужные сведения отыскиваются в самой неожиданной из них.
Внутри групповых подкаталогов можно увидеть многочисленные файлы вида filename.#.gz. Последний суффикс свидетельствует о том, что man- страница упакована компрессором gzip. Цифра после имени соответствует номеру группы (то есть в подкаталоге man1 это всегда будет единица. Ну а имя страницы совпадает с именем команды, которую она описывает.
Если, конечно, речь идет о команде — в разделе 2 оно будет образовано от соответствующего системного вызова, в разделе 2 — от имени функции, итак далее. Но пока нас интересует только информация о командах, так что дальше я этого оговаривать не буду.
Для вызова интересующей документации требуется дать команду man с аргументами — номером группы и именем страницы, например man 1 ls
Причём номер группы необходим только в том случае, если одноимённые документы имеются в разных группах. Для пользовательских команд он обычно ненужен, так как все равно просмотр групповых каталогов идёт сначала в man1, затем — в man8, и только потом — во всех остальных (в порядке возрастания номеров. Так что для получения информации, например,
по команде ls достаточно ввести следующее man ls после чего можно будет лицезреть примерно такую картину) FSF LS(1)
NAME ls — list directory contents
SYNOPSIS ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuSUX nor --sort. То есть вначале страницы даются имя команды, которую она описывает (ls), ее групповая принадлежность (1 — пользовательские команды) и авторство (в данном случае — FSF, Free Software Foundations), или название системы. После чего обычно дается обобщенный формат вызова) и краткое описание.
Следующая, основная, часть страницы — описание опций команды, и условия их применения. Далее иногда (но, к сожалению, не всегда) следуют примеры использования команды (Examples) в разных типичных ситуациях. В
заключении, как правило, даются сведения о найденных ошибках (Bug и приведен список страниц, тематически связанных сданной, с указанием номера группы, к которой они принадлежат, иногда историческая справка, а также указываются данные об авторе.
Большинство страниц занимают более одного экрана. В этом случае возникает необходимость перемещёния по экранами строкам — т.е.
некоторая навигация. Сама по себе команда man не отвечает не только за навигацию по странице. но даже за ее просмотр. Для этой цели она неявным образом вызывает специальную программу постраничного просмотре — т.н.
pager (это — совсем не то, чем дети лохов в песочнице ковыряются. В Linux
таковым по умолчанию выступает уже известная нам команда less, нона эту роль можно назначить также more или most — это делается указанием значения соответствующей переменной, например PAGER=most в конфигурациооном файле пользователя.
Обращение к страницам позволяет получить практически исчерпывающую информацию по любым командам, но только в том случае,
если пользователь знает название той команды, которая требуется в данном случае. А если он только в общих чертах представляет, что это команда должна делать?
Что ж, тогда можно прибегнуть к поиску страниц по ключевым словам,
отражающим требуемые функции. Чему призвана служить опция -k команды man. Например, директива man -k print выведет на экран список всех страниц, описывающих команды,
имеющие отношение к печати (причём не только на принтере, но и к выводу на экран — по английски подчас это тоже будет обозначаться как Исчерпывающим руководством по использованию системы Manual Pages является ее собственная страница. Доступ к ней осуществляется по команде man man которая выводит на экран страницу, содержащую описание команды man (эко загнула
[-p string] [-M path] [-P pager]
[-S list] [section] name ...
DESCRIPTION

Man formats and displays the on-line manual pages. С навигационными возможностями команды less можно ознакомиться,
нажав клавишу h — вызов встроенной её помощи. Из которой мы и узнаем, что перемещаться по странице можно с помощью управляющих последовательностей.
Управляющие последовательности команды less для большинства навигационных действий весьма разнообразны, нов принципе разделяются на две группы чисто буквенные и состоящие из комбинаций Control+литера.
Так, переместиться на одну строку вперед можно просто нажатием клавиши на одну строку назад — клавиши k, сместиться на экранную страницу — с помощью клавиш f впереди (назад. Однако того же результата можно доиться комбинациями клавиши для построчного перемещёния и Control+v и и — для постраничного (впереди назад,
соответственно).
Аналогично и для большинства других действий (смещёние наполовину экранной страницы, например Control+D и d — впереди назад)
можно обнаружить минимум одну альтернативную пару управляющих последовательностей. Регистр символов обычно значения не имеет. Одно из исключений — нажатие клавиши g перемещает к первой строке man- страницы, клавиши G — к последней.
Наличие двух типов управляющих последовательностей может показаться излишним усложнением, однако имеет глубокое внутреннее обоснование. За исключением некоторых отщепенцев (в числе коих и автор этих строк),
подавляющее большинство записных юниксоидов пользуются одним из двух редакторов — Vim или Оба эти редактора относятся к категории командных. То есть все действия по редактированию осуществляются в них обычно не выбором пунктов изменю, а прямыми командными директивами, примерно как в командной строке оболочки. Так вот, одно из кардинальных различий между Vim и emacs
— различие управляющих последовательностей для навигации по тексту и его редактированию. образный стиль навигации основан на однобуквенных командных аббревиатурах (команды типа j или k пришли в less именно оттуда. Стиль emacs же подразумевает последовательности, образованные сочетанием клавиши Control и различных алфавитно-цифровых комбинаций.
Поскольку эффективное использование любого редактора командного стиля подразумевает доведенное до автоматизма использование управляющих последовательностей, переключение с стиля на стиль emacs в этом деле может быть просто мучительным. Вот и предусмотрели разработчики pager'ов, в своей заботе о человеке, возможность использования итого, и другого стиля — кто к чему привык.
Раз уж зашла речь о стилях управляющих последовательностей. В
большинстве командных оболочек такое переключение между стилями управления также возможно. Только не параллельное, а альтернативное. И
устанавливается оно в конфигурационных файлах пользовательского шелла.
Возвратимся, однако, к нашей документации. Для навигации по странице можно использовать и обычные клавиши управления курсором,
клавиши PgUp/PgDown, а также некоторые другие. Например, нажатие Enter приводит к смещёнию на одну строку вперед (аналогично клавише Down, а клавиши Spacebar — на один экран вперед (подобно Однако это — не лучший способ навигации. Потому что управляющие последовательности (независимо, в стиле ли vi, или в стиле emacs) обладают дополнительной полезной возможностью они понимают числовые аргументы.
То есть если мы нажмем клавишу с цифрой 5, а вслед за ней — клавишу J, то мы сместимся на пять строк вперед, комбинация 3+K — натри страницы назад, итак далее.
Есть и возможность поиска внутри страницы. Для этого нажимается клавиша прямого слэша (/), после чего вводится искомое слово
(последовательность символов. Для выхода из просмотра страницы предусмотрена клавиша q. Кроме того, можно использовать и почти универсальную комбинацию для прекращения выполнения программ —
Control+C. Заканчивая разговор об управляющих последовательностях, ещё
раз подчеркну все они относятся не к самой команде man, а к той программе- пейджеру, которая ею вызывается для просмотра.


Поделитесь с Вашими друзьями:
1   ...   5   6   7   8   9   10   11   12   ...   30


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал