• 19.1. Общие команды
  • 19.2. Команды для работы с файлами
  • 19.3. Команды для работы с Интернет
  • 19.4. Обработка текста
  • 19.5. Создание RPM-пакетов
  • 19.6. Использование редактора vi
  • 19.7. Интерпретатор команд bash
  • 19.7.1. Каналы и списки
  • 19.7.2. Перенаправление ввода/вывода
  • 19.7.3. Подоболочки
  • 19.7.4. Переменные и массивы
  • 19.7.5. Подстановка команд и арифметических выражений
  • 19.7.6. Управляющие структуры и циклы
  • 19.7.7. Подстановка переменных
  • 19.7.8. Функции
  • 19.7.9. Обработка сигналов и протоколирование
  • 19

    Полезные команды и программы.

    Создание RPM-пакетов

    19.1. Общие команды

    Цель данной главы — вспомнить «хорошо забытое старое». Из современных пользователей ОС Linux мало кто пользовался или вообще знает о существовании таких программ как mail, fastmail, locate, which. Эти небольшие программы позволяют сделать многие операции намного быстрее, чем программы, обладающие графическим интерфейсом и предназначенные для работы в графической системе X Window. К тому же эти программы не так чувствительны к системным ресурсам компьютера. Если у вас, например, Intel Pentium 166 и 32 Мб ОЗУ, то после того, как вы раз попробуете поработать с программой pine, вам уже никогда не захочется запускать программу netscape с параметром «-mail» для чтения почты.

    Возможно, некоторые из команд, которые я здесь опишу, у вас работать не будут, потому что не установлены соответствующие им пакеты. Здесь я не буду подробно описывать все параметры программ, а только опишу, для чего предназначена та или иная программа. Чтобы не возникало вопросов, напомню, что с точки зрения Linux нет разницы между понятиями «программа» и «команда».

    appres класс библиотека

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

    Например:

    $ appres xterm

    arch

    Выводит тип аппаратной платформы компьютера. Пример использования:

    $ arch

    Пример результата:

    i686

    banner параметры строка

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

    bc [параметры] [сценарии]

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

    Пример использования:

    bc

    scale=3

    sqrt(4)+2

    4.000

    quit

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

    Калькулятором поддерживаются циклы for, while, операторы continue, break. Функция s вычисляет синус аргумента, с — косинус, а — арктангенс, е — экспоненту, l — натуральный логарифм.

    bdftopcf [параметры] файл.bdf

    Программа bdftopcf предназначена для преобразования шрифтов в формате BDF в формат PCF. Формат PCF обычно используется сервером X. Программа bdftopcf имеет девять параметров, указанных в табл. 19.1.

    Параметры программы bdftopcf Таблица 19.1

    Параметр Описание
    -I He вычисляет метрику шрифтов
    -l Устанавливает биты в шрифте: младший бит — первый
    -L Установка порядка байтов: младший байт будет первым
    -m То же, что и –l, но первым будет старший бит
    То же, что и –l, но первым будет старший байт
    -о file Записать результат в указанный файл
    -pn Устанавливает размер строки развертки для каждой строки в n байт. Допустимые значения: 1, 2, 4
    -t Преобразование шрифта в терминальный
    -un Определяет положение строки развертки. Допустимые значения: 1, 2, 4

    bmtoa [параметры] файл

    Программа bmtoa преобразует растровый рисунок в текстовый файл. Существует также обратная программа — atobm.

    cal [параметры] месяц год

    Программа саl выводит календарь на заданный месяц.

    cksum файлы

    Программа cksum вычисляет контрольную сумму (CRC) для группы файлов. Эту программу можно использовать и для одного файла.

    cpio [параметры] файл

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

    date

    Программа date используется для отображения даты и времени. Пользователь root может использовать ее для установки времени и даты. Для подробного описания форматов отображения даты и времени, введите команду man date. Дата устанавливается в формате MMddhhmmyy — месяц, число, час, минуты, год соответственно. Например, для установки даты 14 января 2002 года и времени 16:35 введите команду:

    date 0114163502

    df [параметры] устройство

    Выводит информацию о свободном месте на указанном устройстве. Если устройство не указано, выводится информация о свободном месте для каждой смонтированной файловой системы.

    free [параметры]

    Команда free выводит информацию об использовании оперативной и виртуальной памяти. По умолчанию информация выводится в килобайтах. Если вы хотите вывести информацию в байтах или в мегабайтах, используйте параметры –b и –m соответственно.

    dumpkeys

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

    echo [параметры] строка

    Команда echo выводит текст или значения переменных окружения. Если задан параметр –n, команда не будет выводить в конце строки символ новый строки, то есть не будет перевода строки.

    fsinfo

    Выводит информацию о запущенном сервере шрифтов системы X Windows.

    id имя_пользователя

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

    info тема

    Программа info подобна команде man. Иногда программа info сообщает дополнительные сведения или даже содержит темы, которых нет в справочной системе man.

    insmod [параметры] модуль

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

    kill [параметры] PID

    Отправляет процессу указанный сигнал. Программа kill подробно рассмотрена в гл. 5.

    killall [параметры] имя

    Отправляет указанный сигнал группе процессов с указанным именем.

    login пользователь [параметры]

    Идентифицирует пользователя. Можно использовать для регистрации под другим именем. Для регистрации как суперпользователь используйте команду su.

    lsmod

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

    md5sum [параметры] файл

    Эта программа подсчитывает и проверяет контрольный код с использованием алгоритма MD5. Параметр –b позволяет трактовать любой файл как двоичный, а параметр –t как текстовый. С помощью параметра –с файл можно проверить целостность файла, а параметр –s строка вычисляет хэш-код указанной строки.

    minicom [параметры]

    Minicom — терминальная многофункциональная программа. Данная программа обладает таким количеством функций, что для их описания можно было бы написать еще одну главу. Обратитесь к справочному руководству по программе minicom.

    nice [параметры] команда [аргументы]

    Устанавливает приоритет запускаемой программы. Команда nice уже рассматривалась в гл. 5.

    passwd [пользователь] [пароль]

    Изменяет пароль пользователя. Пользователь root может изменить пароль любого пользователя системы. Обыкновенный пользователь может изменить только свой пароль. Новый пароль не должен быть словарным словом и содержать не менее шести символов. Суперпользователь имеет право установить любой пароль, то есть новый пароль может быть словарным словом и содержать менее шести символов, например, list.

    pathchk

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

    printenv переменная

    Выводит значение переменной окружения. Однако обычно удобнее для этой цели использовать команду echo $имя_переменной

    ps параметры

    Выводит список процессов (см. гл. 5).

    renice приоритет процесс [параметры]

    Изменяет приоритет заданного процесса. В отличие от команды nice, renice задает приоритет для уже запущенного процесса.

    reset

    Выполняет начальную инициализацию (сброс) терминала.

    rmmod [параметры] модуль

    Удаляет загружаемый модуль из ядра. Данную команду имеет право выполнять только пользователь root.

    rx [параметры] файл

    Позволяет получить файл по протоколу XModem. Эта программа входит в пакет minicom.

    rxvt

    Программа rxvt представляет собой упрощенный вариант программы xterm.

    rz [параметры] файл

    Позволяет получить файл по протоколу ZModem. Эта программа входит в пакет minicom.

    sb [параметры] файл

    Позволяет отправить файл по протоколу YModem. Эта программа входит в пакет minicom.

    setterm параметры

    Данная программа позволяет установить параметры терминала. Более подробную информацию вы получите в справочной системе.

    sleep число

    Данная программа приостанавливает выполнение дальнейших операций на указанное время. Число задается в секундах. Обычно используется при написании сценариев.

    startx

    Запускает систему X Window, если она у вас не запускается автоматически. Программа startx обычно является сценарием запуска программы xinit.

    strace [параметры] программа

    Используется для трассировки системных вызовов и сигналов. Очень полезная программа при отладке программного обеспечения.

    stty настройки параметры

    Программа stty позволяет просматривать и устанавливать параметры терминала. Без параметров она выводит установки для текущего терминала.

    sx [параметры] файлы

    Позволяет отправить файл по протоколу XModem. Эта программа входит в пакет minicom.

    systat параметры система

    Программа systat опрашивает указанную систему, используя службу systat. Данная служба должна быть доступной на опрашиваемой машине. Если служба systat недоступна, опрашиваются службы daytime и netstat. При вызове программы systat можно использовать параметры, указанные в табл. 19.2.

    Параметры команды systat Таблица 19.2

    Параметр Описание
    -n Опрос службы netstat
    -р порт Используется указанный порт
    -s Опрос службы systat
    -t Опрос службы daytime

    sz [параметры] файлы

    Позволяет отправить файл по протоколу ZModem. Эта программа входит в пакет minicom.

    tee [параметры] файлы

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

    $ some_program | tee file

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

    tload [параметры]

    Выводит график загрузки системы.

    top [параметры]

    Этой программой вы, скорее всего, уже пользовались. Данная программа выводит список процессов, отсортированный по занимаемому процессорному времени. Можно использовать параметры, представленные в табл. 19.3.

    Параметры программы top Таблица 19.3

    Параметр Описание
    D секунды Задержка между обновлением списка процессов
    Q Обновление без задержек
    s Информация о процессорном времени, занимаемом завершенными процессами-потомками
    S Программа не будет работать в интерактивном режиме
    I Программа будет игнорировать неактивные процессы

    true

    Программа ничего не делает, но код ее завершения равен нулю. Это означает успешное завершение. Данная программа часто используется в сценариях.

    ul [параметры] терминал

    Программа ul заменяет весь текст, имеющий атрибут подчеркивания, на подчеркнутый. Используется пользователями терминалов, подключенных к ОС Linux.

    users

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

    w

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

    which программа

    Сообщает имя каталога, в котором располагается указанная программа.

    who

    Выводит список пользователей, зарегистрированных в системе.

    whoami

    Выводит информацию о текущем пользователе. Данная команда является сокращением команды who am i.

    write пользователь

    Читает со стандартного ввода сообщение и выводит его на консоль указанного пользователя. Данный пользователь должен быть зарегистрирован в системе.

    xclipboard

    Выводит содержимое буфера обмена системы X Window.

    xcmap

    Выводит текущую цветовую палитру в виде таблицы.

    xconsole [параметры]

    Выводит в окне X сообщения, которые отправляются на устройство /dev/console. Параметры программы приведены в табл. 19.4.

    Параметры программы xconsole Таблица 19.4

    Параметр Описание
    -daemon Режим демона (фонового процесса)
    -file файл Использовать указанный файл вместо устройства /dev/console
    -notify Отображение имени приложения, которое отправило сообщение на консоль
    -nonotify Параметр, обратный параметру notify
    -verbose Вывод дополнительной информации
    -exitOnFail Завершение работы при ошибке

    xcpustate

    Выводит информацию о состоянии процессора.

    xdpyinfo [параметры]

    Выводит различную информацию о сервере X.

    xeyes [параметры]

    Рисует два глаза, следящих за указателем мыши.

    xf86config

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

    xfd [параметры]

    Выводит в окне все символы указанного шрифта в виде таблицы. Указать шрифт можно с помощью параметра –fa font_name.

    xfontsel

    Очень удобная программа для выбора шрифтов. Можно просматривать все шрифты, а можно только те, которые соответствуют определенному шаблону. Шаблон создается пользователем.

    xfractint

    Небольшой генератор фракталов. В состав оконной среды КОЕ входит собственный генератор фракталов — kfract.

    xgc

    Данная программа демонстрирует графические возможности системы X Window.

    xhost [параметры]

    Управляет доступом пользователей различных систем к серверу X. Параметр +система разрешает доступ данной системы к серверу X, а параметр –система — запрещает. Если не указывать параметры, вы получите текущие установки доступа.

    xkill

    Программа xkill принудительно завершает любую Х-программу. Фактически эта программа разрывает соединение между сервером X и выбранным клиентом. Приложения для системы X Window (Х-программы) являются клиентами сервера X. Для завершения работы той или иной программы достаточно щелкнуть на ее окне после запуска программы xkill. Очень полезная программа!

    xlock

    Программа xlock блокирует – сервер X. Для снятия блокировки нужно ввести пароль пользователя. Программа xlock аналогична программе vlock, которая «запирает» консоль.

    xlogo

    Выводит логотип сервера X.

    xman

    Графический аналог программы man.

    xmessage [параметры] сообщение

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

    Параметры программы xmessage Таблица 19.5

    Параметр Описание
    -buttons кнопки Определяет кнопки, которые должны быть отображены в окне диалога. Список состоит из пар имя_кнопки:код_возврата, разделенных запятыми
    -default имя_кнопки Имя кнопки по умолчанию
    -file файл Вывод содержимого указанного файла
    -print Вывод имени нажатой кнопки на стандартный вывод

    xon [параметры] программа

    Позволяет запускать указанную программу на удаленном сервере X. За более подробным описанием обратитесь к справочной системе.

    xpaint

    Простейший графический редактор. Поддерживаются форматы TIFF, PPM, ХВМ.

    xrefresh

    Обновляет (перерисовывает) весь экран.

    xsetroot [параметры]

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

    xterm

    Запускает самый обычный терминал, предназначенный для работы в системе X Window.

    xv [параметры] файл

    Программа xv позволяет просматривать и редактировать изображения в форматах GIF, JPEG, TIFF, PGM, PPM, PBM, BMP, PCX, IRIS RGB и во многих других. Эту программу удобно использовать для просмотра изображений. Для редактирования лучше использовать программу gimp.

    xvidtune [параметры]

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

    xwd [параметры]

    Программа xwd предназначена для захвата изображения окна или его части и сохранения этого изображения в файле.

    yes строка

    Данная команда непрерывно выводит указанную строку. Если строка не указана, выводится символ «у». Обычно используется для написания сценариев.

    19.2. Команды для работы с файлами

    Некоторые команды из этой группы уже были подробно рассмотрены в гл. 4, поэтому здесь они рассматриваться не будут.

    basename файл расширение

    Удаляет из имени файла путь и расширение, если оно задано. Используется при написании сценариев.

    chgrp [параметры] группа файлы/каталоги

    Команда chgrp предназначена для изменения группы, которой принадлежат указанные файлы или каталоги. Использует несколько параметров, позволяющих автоматизировать операции по изменению группы (см. табл. 19.6).

    Параметры команды chgrp Таблица 19.6

    Параметр Описание
    -R Рекурсивный режим
    -v Вывод более подробной информации
    -f Не выводит сообщения о файлах и каталогах, группа которых не может быть изменена
    Вывод сообщений о сделанных изменениях

    chown [параметры] владелец файлы

    Команда chown предназначена для изменения владельца указанных файлов или каталогов. Для того, чтобы сменить владельца файла, вы должны сами быть владельцем этого файла или пользователем root. Параметры этой команды аналогичны параметрам команды chgrp (см. табл. 19.6).

    chroot каталог

    Данная команда изменяет корневой каталог системы на указанный. Эту команду может выполнять только пользователь root.

    file [параметр] файл

    Определяет тип указанного файла.

    find путь условия

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

    Условия поиска программы find Таблица 19.7

    Параметр Описание
    -amin выражение Поиск файлов, доступ к которым производился в зависимости от выражения: +m — более m минут назад; m — минут назад; –m — менее m минут назад
    -anewer файл Поиск файлов, доступ к которым производился после даты последнего изменения указанного файла
    -atime выражение Поиск файлов, доступ к которым производился в зависимости от выражения: +d — более d дней назад; d — дней назад; –d — менее d дней назад
    -cmin выражение Поиск файлов, изменение которых произошло: +m — более m минут назад; m — минут назад; –m — менее m минут назад
    -cnewer файл Поиск файлов, которые были изменены после даты последнего изменения указанного файла
    -ctime выражение Поиск файлов, которые были изменены: +d — более d дней назад; d — дней назад; –d — менее d дней назад
    -daystart Считать время от начала дня, а не от текущего момента
    -empty Поиск пустых файлов и каталогов
    -exec команда Выполнение указанной команды для каждого из найденных файлов
    -follow Следовать ссылкам (как на файл, так и на каталог)
    -fstype тип Поиск файлов только на файловых системах указанного типа
    -gid номер Поиск файлов, принадлежащих указанной группе
    -iname файл Поиск указанного файла. В выражении «файл» могут использоваться символы подстановки (маски файла), регистр букв игнорируется
    -inum номер Поиск файла с указанным номером информационного узла (i-node)
    -ipath путь Поиск файла по указанному пути, регистр букв игнорируется
    -links n Поиск файлов, имеющих n ссылок
    -lname файл Поиск символических ссылок на указанный файл
    -maxdepth уровень Поиск в дереве каталогов не глубже указанного уровня
    -mindepth уровень Поиск в дереве каталогов на указанном уровне и глубже
    -name имя Поиск файла с указанным именем
    -nogroup Поиск файлов, которые не принадлежат ни одной из групп, указанных в файле /etc/group
    -nouser Поиск файлов, владельцы которых не перечислены в файле /etc/passwd, то есть не являются пользователями системы
    -ok команда Аналогично параметру –exec, но перед выполнением команды запрашивается подтверждение у пользователя
    -path путь Поиск файлов по указанному пути
    -perm режим_доступа Поиск файлов с указанным режимом доступа
    -size n Поиск файлов размером n блоков
    -type тип_файла Поиск файла указанного типа: b — блочное устройство, с — символьное устройство, d — каталог, f — обычный файл, l — ссылка, р — поток
    -user пользователь Поиск файлов, принадлежащих указанному пользователю

    gzip [параметры] файлы

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

    Параметры  программы gzip Таблица 19.8

    Параметр Описание
    Архивация производится на стандартный вывод, исходный файл не удаляется
    -d Распаковка (то же, что и gunzip)
    -f Архивация производится даже в тех случаях, когда исходный файл уже является сжатым, имя создаваемого файла совпадает с уже существующим файлом, на исходный файл установлено несколько ссылок
    -l Сжатие файла уже сжатого другими программами (pack, deflate, Izh, compress)
    -q Быстрый режим работы: не выводятся информационные сообщения
    -r Работа в рекурсивном режиме
    -t Проверка целостности архива после сжатия
    -v Вывод дополнительных сообщений

    gzexe [параметры] программа

    Программа gzexe сжимает указанную программу. При запуске сжатого файла программа распаковывается и запускается. Это увеличивает время запуска, но позволяет сэкономить место на жестком диске. По сути, программа gzexe является самораспаковывающимся архивом (SFX). Опция –d позволяет разархивировать сжатую программу.

    locate [параметры] шаблон

    Производит поиск файла в базе данных файлов. Поиск производится по шаблону.

    mkfifo [параметры] имя

    Создает именованный поток FIFO (First In First Out). Права доступа по умолчанию 0666 минус значение, выдаваемое командой umask. С помощью параметра –m права_доступа можно задать права доступа для создаваемого потока.

    mkfontdir каталог

    Используется для создания списка шрифтов, находящихся в указанном каталоге. Список (или индекс) шрифтов будет помещен в файл fonts.dir в этом же каталоге. Список шрифтов необходим для сервера X.

    mknod [параметры] имя тип номер дополнительный_номер

    Программа mknod используется для создания потоков FIFO, блочных, символьных устройств. Права доступа, как и в случае с программой mkfifo, равны 0666 минус значение umask. Тип создаваемого устройства задается при помощи параметра тип, указанного в командной строке (см. табл. 19.9).

    Типы специальных файлов Таблица 19.9

    Тип Описание
    Р Поток (FIFO)
    Блочное устройство
    С Символьное устройство
    U Символьное устройство

    Можно также использовать параметр –m права_доступа. Этот параметр определяет права доступа для только что созданного устройства.

    pwd

    Выводит имя текущего каталога.

    size [параметры] программа

    Программа size выводит размеры сегментов и общий размер программы. Можно использовать параметры, представленные в табл. 19.10.

    Параметры программы size Таблица 19.10

    Параметр Описание
    Вывод в формате программы size UNIX SysV
    Вывод в формате программы size BSD
    -d Вывод в десятичной системе счисления
    Вывод в восьмеричной системе счисления
    -X Вывод в шестнадцатиричной системе счисления
    --target имя Использование другого формата объектных файлов

    sq исходный_файл файл_результата

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

    umask маска

    Устанавливает маску для создания файлов. Каждый новый файл или каталог будет иметь маску прав доступа, равную 0777 минус значение umask. Значение umask по умолчанию равно 022.

    updatedb [параметры]

    Программа updatedb обновляет базу данных, которую использует программа locate для поиска файлов. Эта база данных содержит список всех файлов, которые содержатся в указанных в конфигурационном файле каталогах. С помощью параметров программы можно изменить настройки базы данных (см. табл. 19.11).

    Параметры программы updatedb Таблица 19.11

    Параметр Описание
    --localpaths=dir1 dir2… Помещает в базу данных сведения о файлах, которые находятся в указанных каталогах
    --netpaths=dir1 dir2 … Помещает в базу данных сведения о файлах, которые находятся в указанных каталогах на удаленной системе
    --netuser=username От имени этого пользователя будет производиться поиск файлов на удаленной машине
    --old-format Создание базы данных будет произведено в старом формате
    --output=файл Использовать указанный файл в качестве базы данных
    --prunepaths=dir1 dir2 … Не помещать в базу данных сведения о файлах в указанных каталогах

    xfilemanager или xfm

    Запускает графический менеджер файлов. Настоятельно советую использовать вместо него программу Midnight Commander (mc), которая обладает большими возможностями и более удобна.

    zcat архив

    Распаковывает архив на стандартный вывод.

    znew [параметры] архив.Z архив.gz

    Программа znew преобразует архивы, созданные программой compress, в новый формат — grip. Можно использовать параметры, представленные в табл. 19.12.

    Параметры программы znew Таблица 19.12

    Параметр Описание
    -9 Наибольшее сжатие
    -f Разрешение перезаписи существующих файлов
    -K Формат архива будет изменен, если это приведет к уменьшению его размера
    Использование потока для передачи файла
    -t Проверка целостности нового архива перед удалением старого
    -v Вывод дополнительных сведений

    zoo [параметры] архив

    Еще одна программа-архиватор. Для более подробного описания обратитесь к справочной системе.

    19.3. Команды для работы с Интернет

    audiocompose файл

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

    audiosend адрес

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

    biff

    Данная программа уведомляет вас о приходе новой почты. Для работы этой программы нужна программа sendmail.

    chfn [параметры]

    Данная программа изменяет информацию о пользователе, которую можно получить с помощью программы finger.

    dnshostname [параметры] система

    Выводит текущее имя системы. Пользователь root может использовать ее для изменения имени системы.

    dnsquery [параметры]

    Опрашивает серверы DNS. Установить параметры запроса можно с помощью параметров программы (см. табл. 19.13).

    Параметры программы dnsquery Таблица 19.13

    Параметр Описание
    -n сервер Использовать указанный сервер DNS
    -t тип Установка типа записи: A, ANY, HINFO, NS, CNAME, PTR, SOA, WKS, MX и другие
    -с класс Установка классов записи: IN, CHAOS, HS, ANY.
    -р n Установка тайм-аута
    -r n Установка количества попыток, если сервер не отвечает
    -s Использование потока

    elm [параметры]

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

    fastmail [параметры] файл список_адресов

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

    Параметры программы fastmail Таблица 19.14

    Параметры Описание
    -b список Отправка слепых копий по указанному списку адресов
    -с список Отправка копий по указанному списку адресов
    -С комментарий Установка поля Comments заголовка сообщения
    -d Режим отладки
    -f from Установка поля from (от) заголовка сообщения
    -i ID Установка поля Message-ID (идентификатор сообщения) заголовка сообщения
    -r reply-to Установка поля reply-to (ответ) заголовка сообщения
    -R описание Установка описания для данного сообщения
    -s subject Тема сообщения (поле subject)

    faucet [параметры] порт

    С помощью программы faucet можно организовать сетевой поток через сеть. Обычно faucet используется в качестве сервера, a hose (см. ниже) в качестве клиента.

    finger [параметры] пользователь

    Программа finger получает информацию о пользователе, которую можно изменить с помощью программы chfh. Для работы службы finger необходимо, чтобы было разрешено использование порта 79 в файле /etc/services на указанной системе. В противном случае вы получите сообщение Connection refused. Обычно порт 79 запрещают только на маршрутизаторе, чтобы никто извне не мог получить доступ к этой службе. В локальной сети, как правило, эта служба используется.

    frm

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

    ftp [параметры] система

    Программа ftp представляет собой обычный клиент FTP, который присутствует практически в каждой операционной системе. Параметры программы описаны в табл. 19.15, а команды ftp — в табл. 19.16.

    Параметры программы ftp Таблица 19.15

    Параметр Описание
    -d Режим отладки
    -g He разрешает использовать символы подстановки в именах файлов
    -I Запрет интерактивного режима
    -n Не регистрироваться на удаленной системе после установления соединения. Для регистрации вручную введите команду user
    -v Отображает всю информацию, полученную с удаленной системы

    Команды для работы с клиентом FTP Таблица 19.16

    Команда Описание
    account пароль Устанавливает пароль для входа в систему
    append файл1 файл2 Присоединить файл «файл1» на локальной машине к файлу «файл2» на удаленной
    Ascii Включение режима ASCII для передачи файлов. Данный режим включен по умолчанию
    Bell Подача звукового сигнала по окончании передачи файлов
    Binary Включение двоичного режима передачи файлов
    Bye Закрытие текущего соединения и завершение работы с ftp
    Case Изменяет все прописные буквы в названиях принимаемых файлов на строчные
    cd каталог Изменяет текущий каталог на удаленной машине
    Cdup Переходит в родительский каталог
    Chmod Изменяет права доступа к файлам на удаленной машине. Вы должны иметь соответствующие права на выполнение этой операции
    Close Закрытие текущего соединения
    Cr Фильтрация символов возврата каретки в текстовых файлах
    delete файл Удаляет файл на удаленной машине
    dir каталог файл Вывод содержимого заданного каталога на удаленной машине в указанный файл. Если файл не указан, то на стандартный вывод
    Disconnect Аналогична команде close
    get файл1 файл2 Копирует файл «файл1», который находится на удаленной машине, в файл «файл2» на локальной. Если параметр «файл2» не указан, то исходное имя файла не изменяется
    Glob Разрешение символом подстановки в командах mget, mdelete, mput
    Hash Выводит индикатор передачи файлов. Индикатор состоит из меток #. Каждая метка выводится после окончания передачи каждого блока файла
    help команда Вывод справки по указанной команде
    idle n Установка времени простоя на удаленной системе в n секунд
    Image Установка двоичного режима передачи и приема файлов
    lcd каталог Изменяет каталог на локальной машине
    Is каталог файл Аналогична команде dir
    macdef файл Определяет макрос. Определение должно заканчиваться пустой строкой и будет сохранено в указанном файле
    mdelete файлы Удаление нескольких файлов на удаленной машине
    mdir шаблон Вывод списка файлов в текущем каталоге, содержащих шаблон
    mget файлы Копирует несколько файлов с удаленной машины
    mkdir каталог Создает каталог на удаленной машине
    mls каталог файл Аналогична команде dir
    mode режим Установка режима. Режим по умолчанию — stream (поток)
    modtime файл Выводит дату и время последней модификации файла
    mput файлы Копирует указанные файлы на удаленную машину
    newer файл Копирует файл с удаленной системы, если он новее, чем соответствующий файл на локальной машине
    open система [порт] Устанавливает соединение с указанной машиной. Если параметр «порт» не задан, используется порт по умолчанию
    Prompt Запрещает или разрешает интерактивные приглашения
    proxy команда Выполнение команды на другом соединении
    put файл1 файл2 Копирует файл «файл1» с локальной машины в файл «файл2» на удаленную машину. Если второй параметр не задан, исходное имя файла не изменяется
    Pwd Выводит текущий каталог на удаленной машине
    Quit Аналогична команде bye
    recv файл1 файл2 Копирует файл «файл1», который находится на удаленной машине, в файл «файл2» на локальной. Если параметр «файл2» не указан, то исходное имя файла не изменяется
    reget файл1 файл2 Копирует файл «файл1», который находится на удаленной машине, в файл «файл2» на локальной. Если параметр «файл2» не указан, то исходное имя файла не изменяется. Возобновляет копирование, если во время предыдущего копирования произошел сбой, но часть файла уже скопирована на локальную машину
    remotestatus файл Запрос у удаленной системы состояния указанного файла. Если файл не указан, запрашивается состояние удаленной системы
    rename файл1 файл2 Переименование файла удаленной машине
    Reset Сброс буфера передачи
    restart позиция Повтор передачи, начиная с заданной позиции. Позиция определяет байтовое смещение
    rmdir каталог Удаление каталога на удаленной системе. Вы должны иметь соответствующие права доступа
    Runique Включает режим уникальных имен. Если вы копируете файл, который уже существует, его имени будет назначен суффикс . 1, .2 и так далее
    send файл1 файл2 Копирует файл «файл1» с локальной машины в файл «файл2» на удаленную машину. Если второй параметр не задан, исходное имя файла не изменяется
    size файл Вывод информации о размере указанного файла
    Status Вывод информации о текущем соединении
    struct имя Изменение структуры передачи файлов. По умолчанию используется stream
    sunique Включение режима уникальных имен на удаленной машине
    system Вывод имени операционной системы удаленной машины
    trace Трассировка пакетов
    type режим Установка режима передачи файлов. По умолчанию используется текстовый режим
    umask маска Установка маски создания файлов
    user имя пароль номер Установка имени и пароля пользователя, а также номера подключения
    verbose Вывод подробных информационных сообщений
    ! команда параметры Выполняет указанную команду на локальной машине с передачей ей указанных параметров
    $ макрос аргументы Запуск макроса на локальной машине
    ? команда

    Вывод справки

    fuser [параметры] файлы

    Выводит список процессов, которые используют данный файл.

    getpeername [параметры]

    Выводит информацию о соединении, использующем гнезда.

    hose [параметры]

    С помощью программы hose можно организовать сетевой поток через сеть. Обычно faucet используется в качестве сервера, a hose (см. ниже) в качестве клиента. Для более подробной информации обратитесь к справочной системе.

    host [параметры] система [сервер]

    Программа host используется для преобразования имени системы в IP-адрес. Вы также можете ввести IP-адрес для его преобразования в имя системы. Параметр «сервер» задает сервер DNS, который вы хотите опросить. Данная программа имеет много параметров, описание которых вы найдете в справочной системе.

    hostname [параметры] система

    Выводит текущее имя системы. Пользователь root может использовать ее для изменения имени системы.

    lynx [параметры] URL

    Программа lynx является текстовым браузером. Эта программа не выводит рисунков, различных шрифтов. Благодаря этому значительно повышается скорость доступа к Web. Кроме самого URL-адреса, можно указать и некоторые параметры (см. табл. 19.17). Ограничения, используемые в работе lynx, приведены в табл. 19.18.

    Параметры программы lynx Таблица 19.17

    Параметр Описание
    -anonymous Использовать анонимную регистрацию
    -ascii Не переводить символы японского алфавита в латинские символы, если включена поддержка японского языка
    -auth=имя пароль Использовать указанную информацию для аутентификации
    -book Загрузить страницу с избранными ссылками
    -cache n Установить количество кэшируемых документов
    -case Учитывать регистр букв при поиске
    -cfg=файл Использовать указанный файл в качестве файла конфигурации
    -crawl Выводить каждую страницу в файл, если указан параметр –traversal, или на экран, если указан параметр –dump
    -display=cepsep Использовать указанный сервер X для запуска программы rexeced
    -dump Преобразовать страницу в текстовый вид и отправить результат на стандартный вывод
    -editor=программа Использовать указанную программу в качестве редактора
    -emacskeys Раскладка клавиатуры как в редакторе emacs
    -force_html Считает первый документ документом HTML
    -ftp Запрещает соединения FTP
    -get_data Использование метода GET для отправления данных
    -head Отправляет запрос HEAD для заголовков MIME
    -homepage= URL Устанавливает домашнюю страницу
    -image_links Включает ссылки на все изображения
    -index=URL Устанавливает индексный файл
    -localhost Запрещает доступ к локальной машине
    -loexec Запрещает выполнение программ на локальной машине, исполнимые файлы которых находятся на удаленной машине
    -mime_header Вывод заголовка MIME полученного документа при просмотре исходного текста документов
    -nobrowse Не просматривать каталоги
    -noexec Не выполнять программы на локальной машине
    -nolist Не выводить список ссылок при указании параметра –dump
    -nolog Не отправлять сообщения об ошибках авторам документов
    -noprint Запрет функции печати
    -noredir Запрещает автоматическое перенаправление и выводит сообщение с указанием нового URL
    -nostatus Не выводить информацию о процессе получения документа
    -numbers_links Нумерация ссылок
    -post_data Отправка данных с помощью метода POST
    -realm Запрещает указывать URL при запуске
    -reload Сброс кэша прокси-сервера
    -restrictions=ограничения Устанавливает определенные ограничения (см. табл. 19.18)
    -rlogin Не распознавать команды rlogin
    -selective Просматривать только каталоги, которые содержат файл .www_browsable
    -show_cursor Вывод курсора в начале выбранной ссылки
    -source Отображает страницы Web в виде исходного текста HTML
    -telnet Не распознавать команды TELNET
    -term=терминал Устанавливает тип терминала
    -trace Режим трассировки
    -traversal Обход всех ссылок на стартовой странице
    -underscore Переключает формат вывода подчеркивания при использовании параметра –dump
    -validate Разрешает использовать URL только с указанием протокола, например, http://www.linux.ru
    -vikeys Раскладка клавиатуры как в редакторе vi

    Ограничения Таблица 19.18

    Ограничение Описание
    All Используются все ограничения, перечисленные ниже
    Bookmark Запрещает изменение расположения файла избранных ссылок
    bookmark_exec Запрещает переходы по ссылкам из файла избранных ссылок
    change_exec_perms Запрещает изменение режима доступа для файлов
    Default Запрещает использовать службы по умолчанию для анонимных пользователей
    dired_support Запрещает управление файлами на локальной системе
    disk_save Запрещает сохранение двоичных файлов на диске
    Download Запрещает загрузку файлов
    Editor Запрещает режим редактирования
    Exec Запрещает выполнение сценариев
    exec_frozen Не разрешает редактировать сценарии на локальной системе
    file_url Запрещает использование URL вида file://
    goto Запрещает команду goto
    inside_ftp Запрещает использование ftp для систем вне домена
    inside_news Запрещает отправление новостей Usenet для систем внутри домена
    inside_rlogin Запрещает использование rlogin для систем вне домена
    inside_telnet Запрещает использование telnet для систем внутри домена
    jump Запрещает команду jump
    mail Запрещает исходящую почту
    options_save Запрещает сохранение настроек в файле .lynxrc
    outside_ftp Запрещает использование ftp для систем вне домена
    outside_news Запрещает отправление новостей Usenet для систем вне домена
    outside_rlogin Запрещает использование rlogin для систем вне домена
    outside_telnet Запрещает использование telnet для систем вне домена
    print Запрещает печать
    shell Запрещает выполнение интерпретатора командной строки
    suspend Запрещает переходить в фоновый режим при нажатии Ctrl+Z
    telnet_port Запрещает указывать номер порта для соединения telnet

    mail [параметры] пользователи

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

    metamail [параметры]

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

    mimeencode [параметры]

    Программа mimeencode предназначена для кодировки формата MIME. Системы на базе DOS/Windows/Windows NT не поддерживают кодирование UU (Unix to Unix), для обмена информацией с этими системами используется кодирование MIME. Поддержку кодирования UU в системах DOS/Windows можно организовать с помощью программ сторонних разработчиков. При добавлении какого-нибудь файла в качестве вложения электронного письма предпочтительнее использовать кодирование MIME. Параметры программы представлены в табл. 19.19.

    Параметры программы mimeencode Таблица 19.19

    Параметр Описание
    -b Использование кодирования Base64 (по умолчанию)
    -q Использование кодирования quotes-printable
    -u Декодирование
    Замена символов CR/LF на символ новой строки
    -о файл Запись результата в файл

    Иногда вместо программы mimeencode используется программа mmencode с аналогичными параметрами.

    pine [параметры] адрес

    Один из самых удобных почтовых клиентов. Программа обладает достаточно удобным интерфейсом и поддерживает MIME-кодирование.

    ping система

    Программа ping позволяет «пропинговать» указанную систему. Данная программа отправляет пакеты ICMP ECHO_REQUEST (код 3) на указанную систему. Эта программа используется для определения пропускной способности сети. Для завершения работы программы нажмите Ctrl+C.

    popclient [параметры] система

    Позволяет получать почту, используя протоколы РОР2 или POP3. Обычно данная программа практически не используется, так как все почтовые клиенты имеют свои РОР-клиенты.

    rusers [параметры] система

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

    showaudio файлы

    Программа showaudio позволяет прослушать сообщения, записанные с помощью программы audiocompose.

    sliplogin имя

    Позволяет установить соединение, используя протокол SLIP (Serial Line Internet Protocol). Нужная информация хранится в файле /etc/slip.hosts. Скорее всего, у вас не будет данной программы, так как протокол SLIP считается устаревшим и вместо него используется протокол РРР.

    talk пользователь [терминал]

    Позволяет двум пользователям вести диалог. Если вы хотите пообщаться с пользователем другой системы, используйте следующую форму указания имени пользователя: имя_пользователя@имя_системы.

    telnet [параметры] система [порт]

    Устанавливает соединение с помощью протокола Telnet.

    tftp система

    Программа tftp представляет собой тривиальный клиент FTP (отсюда буква «t» в ее названии). Обычно данная программа предназначена для обмена данными по протоколу TFTP. Данный протокол используется для обмена информацией с интеллектуальными маршрутизаторами и не используется никакой аутентификации. Программа tftp поддерживает следующие команды: ascii, binary, connect, get, put, quit, status, timeout, verbose.

    uudecode файл

    Программа uudecode предназначена для UU-декодирования указанного файла.

    uuencode файл

    Программа uuencode предназначена для UU-кодирования указанного файла.

    xbiff

    Программа xbiff является графическим аналогом программы biff, но предназначена для работы в системе X Window.

    19.4. Обработка текста

    bpe файл

    Программа bpe — это редактор двоичных файлов. Данная программа позволяет редактировать файл в двоичном или шестнадцатиричном режиме. После запуска программы вы можете использовать множество команд редактирования. Некоторые из них представлены в табл. 19.20.

    Команды программы bpe Таблица 19.20

    Команда Описание
    + Прокрутка вперед на две строки
    - Прокрутка назад на две строки
    / Поиск строки, начиная с текущей позиции
    9 Справочная информация
    D Вывод одной страницы
    Е Редактирование в текстовом режиме
    Е Редактирование в шестнадцатиричном режиме
    F Поиск строки, начиная с текущей позиции
    Н Поиск последовательности байтов, начиная с текущей позиции
    N Переход к следующему сектору
    Р Переход к предыдущему сектору
    Q Выход без сохранения
    S Установить позицию в файле
    W Запись изменений на диск

    cat [параметр] файл

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

    Параметры команды cat Таблица 19.21

    Параметр Описание
    Вывод всех непечатаемых символов. Не выводятся символы перевода строки и символы табуляции. В конце каждой строки выводится символ «$». Символ табуляции заменяется на последовательность символов «^I»
    В конце каждой строки выводится символ «$»
    -n Вывод нумерации строк
    -S Не выводит пустые строки
    -t Заменяет символ табуляции на последовательность символов «^I» Символы протяжки страницы заменяются на «^L»
    Заменяет символ табуляции на последовательность символов «^I»
    -v Вывод всех непечатаемых символов. Не выводятся символы перевода строки и символы табуляции

    cmp [параметры] файл1 файл2

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

    Параметры программы cmp Таблица 19.22

    Параметр Описание
    Программа выведет отличающиеся символы
    -i n Программа будет игнорировать первые n байтов обоих файлов
    -l Выведет позиции всех различий
    -s Программа не будет выводить информацию на экран. Код возврата программы cmp будет равен: 0 — если файлы не отличаются; 1 — если файлы отличаются; 2 — если произошла ошибка

    column [параметры] файл

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

    Параметры программы column Таблица 19.23

    Параметр Описание
    -с n Задает число колонок
    -s символ Указанный символ будет использоваться в качестве разделителя колонок. Этот параметр используется вместе с параметром –t
    -t Форматирование выполняется в виде таблицы. Разделителем по умолчанию является символ пробела. Другой разделитель задается параметром –s
    -x Заполняет сначала колонки, а потом строки

    csplit [параметры] файл образец

    Данная программа позволяет разбить текстовый файл на несколько частей. Части файла определяются требуемым размером или с помощью указанного образца. Исходный файл при этом не изменяется. Имена частей файла начинаются с символов хх. Первая часть будет иметь имя хх00, вторая — xx01 и так далее. Программа csplit может разбить файл максимум на сто частей. За более подробной информацией обратитесь к справочной системе.

    diff [параметры] [расширенные_параметры] файл1 файл2

    Программа diff предназначена для сравнения файлов. Она выводит отличающиеся строки. Строка файла «файл1» помечается символом «<», а строка файла «файл2» помечается символом «>». С помощью тире разделяется содержимое файлов. Описание основных параметров данной программы сведено в табл. 19.24. Программу diff можно использовать для сравнения файлов из разных каталогов. Для этого используются расширенные параметры (см. табл. 19.25).

    Основные параметры программы diff Таблица 19.24

    Параметр Описание
    Сравнение всех файлов, в том числе и двоичных
    -b Игнорируются символы пробела в конце строки
    Игнорируются пустые строки в файлах
    Вывод контекста для каждого найденного различия
    -d Игнорируются области со многими изменениями
    Создается сценарий редактора ed, с помощью которого можно превратить файл «файл1» в файл «файл2»
    Поиск только небольших изменений
    -i Игнорировать регистр букв
    -I шаблон Игнорировать строки, содержащие указанный шаблон
    -n Установить формат вывода RCS
    -N Несуществующие файлы считать пустыми
    -t Замена символов табуляции на восемь пробелов
    В начало выводимых строк вставить символ табуляции
    -u Вывод новой и старой версий файла в одной строке
    -w Игнорировать пробелы
    -y Вывод в две колонки

    Расширенные параметры программы diff Таблица 19.25

    Параметр Описание
    -l Постраничный вывод
    -r Рекурсивный режим. Сравниваются файлы во всех подкаталогах
    -s Выводит имена совпадающих файлов
    -S файл Начать сравнение с указанного файла
    -х шаблон Игнорировать файлы, имена которых содержат указанный шаблон
    -X шаблон Аналогичен параметру –х

    diff3 [параметры] файл! файл2 файл3

    Сравнение трех файлов. Программа diff3 не выводит отличающиеся строки. Вместо этого она выводит следующие сообщения:

    1. = = = =, если все три файла отличаются;

    2. = = = 1, если первый файл отличается от второго и третьего;

    3. = = = 2, если второй файл отличается от первого и третьего;

    4. = = = 3, если третий файл отличается от первого и второго.

    emacs [параметры] файл

    Программа emacs — это мощный и довольно сложный текстовый редактор. Этот редактор входит в состав большинства дистрибутивов ОС Linux. Полное описание редактора вы сможете найти в документации, поставляемой вместе с самим редактором.

    expand [параметр] файл

    Программа expand заменяет символы табуляции на определенное количество пробелов. Обычно один символ табуляции заменяется на восемь пробелов. Вы можете использовать параметр –i для замены символов табуляции только в начале строки.

    fmt [параметры] файл

    Программа fmt форматирует текст в файле, выравнивая его по правому краю. При этом удаляются символы новой строки. Параметры программы рассмотрены в табл. 19.26.

    Параметры программы fmt Таблица 19.26

    Параметр Описание
    Две первые строки не будут форматироваться
    -р образец Будут форматироваться строки, которые начинаются с указанного образца
    -s Строки не будут объединяться
    -t Делать отступ в начале нового абзаца
    -u Установить один пробел между словами и два — между предложениями
    -w n Устанавливает длину строки. По умолчанию длина равна 72 символам

    fold [параметры] файл

    Данная программа выравнивает текст по правому краю. Ширина строки по умолчанию — 80 символов. Необходимую ширину строки вы можете задать с помощью параметра –w n.

    ghostview [параметры] файлы

    Программа ghostview позволяет просматривать файлы в формате PostScript. Для своей работы эта программа использует интерпретатор ghostscript.

    grep [параметры] образец файлы

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

    Параметры программы grep Таблица 19.27

    Параметр Описание
    -A n Выводит n строк после строки, которая содержит образец
    -B n Выводит n строк перед строкой, которая содержит образец
    -b Выводит для каждой строки, которая содержит образец, ее номер в файле
    Выводит только количество совпадений
    Выводит две строки перед строкой, содержащей образец, и две строки после нее
    образец Определяет образец
    -f файл Поиск образцов, которые находятся в файле
    -h Выводит строки, содержащие образец, но не выводит имена файлов
    -i Игнорируется регистр букв
    -l Выводит только имена файлов, строки которых содержат образец
    -L Выводит имена файлов, строки которых не содержат образец
    -n Вывод строк, которые содержат образец, и их номеров в файле
    -S Не выводит сообщение об ошибке, если один из указанных файлов невозможно открыть
    -v Вывод строк, которые не содержат образец
    -w Поиск совпадения целого слова с образцом
    -x Поиск совпадения целой строки с образцом
    -число Выводит указанное число строк до и после строки с образцом

    grodvi [параметры] файл

    Данная программа преобразует файл в формате groff в файл в формате DVI.

    groff [параметры] файл

    Данная программа обеспечивает работу пользователя и других программ с документами в формате groff. Для более подробного описания обратитесь к справочной системе.

    head [параметры] файлы

    Программа head выводит начало файла. По умолчанию выводятся первые десять строк файла. Однако число строк можно задать с помощью параметра –n число.

    ispell [параметры] файлы

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

    join [параметры] файл1 файл2

    Программа join позволяет объединить два файла по общему полю. Описание программы и ее параметров вы найдете в справочной системе.

    less [параметры] файлы

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

    При просмотре файла можно использовать пробел для прокрутки вперед на один экран, клавишу «Enter» для прокрутки вперед на одну строку, клавишу «b» для возврата назад на один экран, а клавишу «/» для поиска образца. За более подробным описанием комбинаций клавиш обратитесь к документации.

    Параметры программы less Таблица 19.28

    Параметр Описание
    --help Выводит краткое описание параметров и другую справочную информацию
    Начинать поиск с первой строки. По умолчанию поиск начинается со второй строки
    -bчисло Определяет число буферов для каждого файла. Размер буфера равен 1024 байт
    Не выделять буферы при чтении данных из потока
    Перерисовка экрана сверху вниз
    То же, что и параметр –с, но перед перерисовкой будет выполнена очистка экрана
    -d Не выводить предупреждения при недостаточных возможностях терминала
    Завершение работы при втором достижении конца файла
    Завершение работы при достижении конца файла
    -f Может использоваться для открытия файлов или файлов устройств
    -m Запуск в режиме программы more — внизу экрана будет отображаться процентное положение в файле
    То же, что и –m, но внизу экрана будет отображаться номер строки в файле
    -n Не выводить номера строк в файле
    -N Выводить номера строк в файле
    -Офайл Копирование информации в файл при чтении из потока. Если файл существует, он будет перезаписан без предупреждения
    -q Запрет звуковых сигналов
    -r Вывод всех символов. По умолчанию управляющие символы выводятся как «^»
    -s Замена нескольких пустых строк на одну пустую строку
    -u Символы табуляции и возврата каретки будут считаться печатаемыми
    -U Символы табуляции и возврата каретки будут считаться управляющими
    -V Вывод версии
    -хшаг Установка шага табуляции
    -yчисло Устанавливает максимальную прокрутку вперед

    look [параметры] образец файл

    Программа look производит поиск указанного образца в файлах. Если файл не указан, поиск производится в системном словаре. Обычно это файл /usr/dict/words.

    lpq [параметры] пользователь

    Проверяет очередь печати указанного пользователя. Данная программа используется вместе с демоном печати lpd. Если пользователь не задан, то используется имя пользователя, запустившего программу. С помощью параметра –Pпринтер можно указать принтер.

    lpr [параметры] файлы

    Данная программа предназначена для постановки в очередь печати указанных файлов. Можно использовать параметр –Рпринтер для указания принтера. Параметр –s позволяет сэкономить дисковое пространство, так как с помощью этого параметра можно создать символическую ссылку вместо копирования файла в каталог для спула. Однако при этом вы не должны изменять файл до окончания печати. Описание других параметров вы найдете в справочной системе.

    lprm [параметры] номер_задания пользователь

    Данная программа позволяет удалить указанное задание из очереди печати. Вы не можете удалить задание другого пользователя, а другие пользователи не могут удалить ваше задание. Это ограничение, конечно, не распространяется на пользователя root. Номер задания можно узнать, используя программу lpq. Как обычно, имя принтера можно задать с помощью параметра –Рпринтер. Если использовать параметр «-», то можно удалить все задания.

    more [параметры] файлы

    Как и программа less, программа more управляет просмотром файла. Вместо нее предпочтительнее использовать программу less, обладающую большими возможностями. Единственное преимущество данной программы состоит в том, что она присутствует в составе даже самых старых дистрибутивов UNIX и Linux.

    paste [параметры] файлы

    Программа paste объединяет строки двух файлов.

    pico [параметры] файлы

    Программа pico является текстовым редактором. Данная программа входит в состав пакета pine и вызывается программой pine для редактирования сообщений. Параметры редактора pico представлены в табл. 19.29.

    Параметры программы pico Таблица 19.29

    Параметр Описание
    +число Позиционирование на указанном номере строки
    -d Клавиша «Delete» будет использоваться для удаления символа под курсором
    Автоматическое завершение имен файлов
    -Q Выводит курсор перед текущим выделенным блоком
    -k Удаление от курсора до конца строки вместо удаления всей строки
    -m Поддержка мыши. Только при работе в системе X Window
    -n секунды Уведомляет о прибытии новой почты. Наличие новой почты проверяется через указанное время
    -о каталог Устанавливает рабочий каталог
    -r число Определяет положение правой границы
    -t Обычно используется при вызове редактора из других программ, например, из программы pine
    -v Просмотр файла
    -w Не переносить строки
    -x Не выводить строку подсказок в нижней части экрана
    -z Разрешает перевод редактора в фоновый режим при нажатии

    pr [параметры] файл

    Программа pr предназначена для подготовки файла для печати. Эта программа не печатает файл. Распечатать вы его должны самостоятельно. Для подготовки файла к печати можно использовать параметры, приведенные в табл. 19.30.

    Параметры программы pr Таблица 19.30

    Параметр Описание
    +страница Начало печати с указанной страницы
    -колонки Вывод в несколько колонок
    -а Печать колонок «поперек»
    -b Выравнивание колонок на последней странице
    Вывод управляющих символов при помощи символа «^»
    -d Установить двойной интервал между строками
    -e n Замена символов табуляции на n пробелов. По умолчанию параметр n равен 1
    -F Использовать символы протяжки страницы вместо символов новой строки для разделения страниц
    -h заголовок Установить заголовок
    -I Заменить последовательность пробелов на символы табуляции
    -l длина Установить длину строки (по умолчанию — 66 символов)
    -m Вывести несколько файлов одновременно. Вывод каждого файла будет производиться в отдельной колонке
    -n символ число Перед каждой строкой будет выведен ее номер, состоящий из указанного числа цифр. Если задан символ, то он будет использоваться для отделения номера от строки
    -о ширина Устанавливает ширину левого поля
    -r Не выводить сообщения об ошибке, если невозможно открыть файл
    -s символ Устанавливает разделитель для колонок
    -t Не выводить верхний и нижний колонтитул
    -v Вместо непечатаемых символов выводить их номер в восьмеричной системе
    -w ширина Устанавливает ширину страницы в символах

    printf параметр

    Выводит строку, используя синтаксис языка С.

    sed [параметры] файл

    Программа sed модифицирует файл согласно списку команд. Результат отправляется на стандартный вывод, исходный файл не изменяется. Список команд можно задать с помощью параметра –fимя_файла. Более подробное описание вы найдете в справочной системе.

    sort [параметры] файл

    Программа sort используется для сортировки, объединения и сравнения текстовых файлов. Выбрать режим работы вы можете с помощью параметров программы (см. табл. 19.31).

    Параметры программы sort Таблица 19.31

    Параметр Описание
    +число1[-число2] Устанавливает поля сортировки. Сортировка выполняется от позиции строки «число1» до позиции «число2». Если аргумент «число2» не задан, то до конца строки
    -b Пробелы в начале строки игнорируются
    Если файлы не отсортированные, выводит сообщение об ошибке
    -d При сортировке игнорируются все символы, кроме букв, цифр и пробелов
    -f Преобразовать при сортировке строчные буквы в прописные
    -I Символы, не входящие в таблицу ASCII, будет проигнорированы
    Сокращенные англоязычные названия месяцев (Jan, Feb и так далее) преобразуются в сокращения, написанные прописными буквами, и сортируются в календарном порядке
    -n Сортировка по числовым значениям
    файл Определяет файл результата
    -r Обратный порядок сортировки
    -tсимвол Использовать указанный символ в качестве разделителя полей

    split [параметры] файл1 файл2

    Используется для разбиения файла на две или более частей. Установить размер каждой части можно с помощью параметра –С. Если вам нужно разбить файл на определенное количество строк, используйте параметр -число.

    tac [параметры] файл

    Выводит содержимое файла в обратном порядке — от последней строки до первой. Данная программа противоположна программе cat.

    tail [параметры] файл

    Данная программа противоположна программе head. Другими словами, программа tail выводит последние 10 строк файла. Указать другое число можно с помощью параметра –1 число.

    tr [параметры] строка1 строка2

    Программа tr заменяет строку строка1 на строку строка2. Обычно используется для поиска и замены символов в указанных строках. За более подробной информацией обратитесь к справочной системе.

    unexpand [параметры] файл

    Программа unexpand заменяет в текстовом файле последовательность пробелов на символы табуляции. С помощью параметра –а можно заменить все последовательные пробелы на символы табуляции. По умолчанию замена производится только в начале строки. Параметр –t n определяет, сколько пробелов будут заменены на один символ табуляции. По умолчанию аргумент n равен 8.

    uniq [параметр] файл1 файл2

    Программа uniq удаляет повторяющиеся строки из файла файл1 и записывает в файл файл2. Если параметр файл2 не указан, то программа выводит результат на стандартный вывод. Параметры данной программы представлены в табл. 19.32.

    Параметры программы uniq Таблица 19.32

    Параметр Описание
    Подсчитывает количество повторяющихся строк
    -d Выводит только повторяющиеся строки
    -f n Пропускает указанное число полей строки
    -sчисло Пропускает указанное число символов поля
    -r Выводит только неповторяющиеся строки
    -wn Сравнивает первые n символов строк
    -число Пропуск указанного числа полей в строке
    +ЧИСЛО Пропуск указанного числа символов в строке
    --check-chars=n Сравнивает первые n символов строк
    --skip-chars=n Пропускает первые n символов в строке
    --skip-fields=n Пропускает первые n полей в строке. Поля разделяются пробелами или символами табуляции

    vi [параметры] файл

    Программа vi — это текстовый редактор. Более подробную информацию вы сможете получить в справочной системе.

    wc [параметры] файл

    Эта программа подсчитывает количество строк, символов или слов в текстовом файле. Если файл не указан, используется стандартный ввод. Данную программу удобно использовать при написании сценариев обработки текста. Параметры программы рассмотрены в табл. 19.33.

    Параметры программы wc Таблица 19.33

    Параметр Описание
    --bytes Подсчет количества байтов
    Подсчет количества символов
    --chars Подсчет количества символов
    -l Подсчет количества строк
    --lines Подсчет количества строк
    -w Подсчет количества слов. Данный параметр используется по умолчанию
    --words Подсчет количества слов. Данный параметр используется по умолчанию

    xedit файл

    Программа xedit является простейшим текстовым редактором, предназначенным для работы в системе X Window. Вместо него обычно удобнее использовать редакторы kedit или gedit. Первый из них является стандартным редактором оконной среды KDE, а второй — оконной среды Gnome.

    zdiff файлы

    Данная программа распаковывает архивы gzip и выполняет программу diff.

    19.5. Создание RPM-пакетов

    Программа RPM предназначена для произведения всех видов операций с программным обеспечением, в том числе и для создания пакетов для установки (RPM-пакетов).

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

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

    port — откомпилированный бинарный файл.

    README — файл, который будет помещен в каталог /usr/doc/port-1.0-99.

    port.1 — файл для справочной системы man.

    Все эти файлы я поместил в каталог /root/port. Конечно, это не совсем корректно, но об этом будет сказано немного позже.

    Для создания пакета нужно создать файл спецификаций. В файле спецификаций указывается вся информация о создаваемом пакете: название, версия, файлы программ, файлы документации, действия, выполняемые при установке пакета и при его удалении. Мой файл спецификаций для программы port представлен в листинге 19.1

    Листинг 19.1. Файл спецификации для программы port

    Summary: Program to control your serial device

    Name: port

    Version: 1.0

    Release: 101

    Group: Monitoring

    License:GPL

    Packager: Denis Kolisnichenko [dhsilabs@mail.ru]

    URL: http://dkws.narod.ru

    %description

    Программа port предназначена для мониторинга состояния последовательного

    порта. При получении сигнала (1) на какой-нибудь контакт указанного порта,

    port отправляет сообщение запустившему ее пользователю на указанный email

    %files

    %doc /root/port/README

    /root/port/port

    /root/port/port.1

    Для построения пакета нужно ввести команду:

    # rpm –bb /root/port/port.spec

    Если вы не допустили никаких ошибок при создании файла спецификаций, на экране вы увидите примерно такое сообщение:

    Executing(%install): /bin/sh –e /var/tmp/rpm-tmp.33439

    Processing files: port-1.0-99

    Finding Provides: (using /usr/lib/rpm/find-provides)…

    Finding Requires: (using /usr/lib/rpm/find-requires)…

    Requires: ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0)

    Записан: /usr/src/RPM/RPMS/i686/port-1.0-99.i686.rpm

    При этом будет создан пакет port-1.0-99.i686.rpm. Этот пакет будет помещен в каталог /usr/src/RPM/RPMS/i686.

    При удалении такого пакета он будет удален из базы RPM, но удаления самих файлов не произойдет. Действия, которые нужно выполнить до и после удаления пакета из базы RPM, вы можете определить в макрокомандах %preun и %postun соответственно. Например

    %preun

    rm –f /usr/bin/port

    rm –f /usr/man/man1/port.1

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

    А сейчас проведем небольшой эксперимент. Запустите Midnight Commander (mc), перейдите в каталог /usr/src/RPM/RPMS/i686/ и «войдите» в пакет port-1.0-99.i686.rpm как в обычный каталог. В нем будет «подкаталог» INFO, в котором и содержится вся информация о пакете.

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

    1. Извлечения исходных текстов программы из архива.

    2. Компилирование программы из исходных текстов.

    3. Создание RPM-пакета.

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

    Программа RPM использует файл конфигурации rpmrc. Поиск этого файла производится в каталогах /usr/lib/rpm, /etc, $HOME. Просмотреть этот файл можно с помощью команды:

    # rpm --showrc

    Запись topdir файла конфигурации rpmrc содержит название каталога, в котором находится дерево подкаталогов, которое используется менеджером RPM для построения пакетов. Введите команду:

    # rpm –-showrc | grep topdir

    -14 _builddir %{_topdir}/BUILD

    -14 _rpmdir %{_topdir}/RPMS

    -14 _sourcedir %{_topdir}/SOURCES

    –14 _specdir %{_topdir}/SPECS

    –14 _srcrpmdir %{_topdir}/SRPMS

    –14 _topdir %{usrsrc}/RPM

    У меня эти подкаталоги находятся в каталоге /usr/src/RPM. Как вы видите, в этом каталоге находятся подкаталоги BUILD, RPMS, SOURCES, SPECS, SRPMS.

    В каталоге BUILD создается RPM-пакет. В каталоге SOURCES находятся сжатые исходные тексты программы. В каталог RPMS помещаются созданные пакеты. Точнее, они помещаются в один из его подкаталогов, в какой именно — это зависит от архитектуры. В каталог SRPMS помещаются пакеты, содержащие исходные тексты программы. В каталоге SPECS находятся файлы спецификаций. Обычно файл спецификации называется назва-ние_программы-версия-релиз.8рес.

    Например, если у вас есть исходный текст программы в архиве, из которого вы хотите создать пакет RPM, скопируйте его в каталог SOURCES:

    # ср source_code-1.0.tar.gz /usr/src/RPM/SOURCES.

    По умолчанию менеджер RPM работает с пакетами, расположенными в каталоге с именем, совпадающим с названием пакета и его версией. Для нашего пакета port это будет каталог port-1.0-99. Менеджер пакетов будет компилировать наш пакет в каталог /usr/src/RPM/port-1.0-99.

    Думаю, уже достаточно информации о каталогах RPM. Теперь перейдем к файлу спецификаций. Файл спецификаций состоит из четырех сегментов: заголовка, подготовительного, файлового, установочного. В заголовке указывается общая информация о пакете. В листинге 19.1 к сегменту заголовка относятся тэги Summary, Name, Version, Release, Group и License. На них мы останавливаться не будем, так как их назначение понятно из листинга 19.1.

    Есть еще очень полезный тэг: BuildRoot. Он изменяет расположение дерева BUILD. Значением по умолчанию является /usr/src/RPM или другой каталог, задаваемый переменной окружения $RPM_BUILD_ROOT. В целях экономии дискового пространства полезно после установки удалить дерево %RPM_BUILD_ROOT. Но это дерево по умолчанию может содержать другие файлы, относящиеся к другим пакетам. Поэтому сначала с помощью тэга BuildRoot нужно задать какой-нибудь временный каталог, а после установки удалить его.

    В каждом сегменте находятся макрокоманды. С некоторыми мы уже знакомы — это %description, %files, %doc, %install. В табл. 19.34 приведено полное описание макрокоманд.

    Макрокоманды Таблица 19.34

    Макрокоманда Описание
    %description Полное описание пакета
    %prep Подготовка архива. Здесь задаются команды для извлечения исходного текста программы и его распаковки, дополнительная подготовка исходного текста. После макрокоманды %prep задаются обычные команды shell
    %setup Макрокоманда извлечения файлов из архивов. Опция –n позволяет указать каталог, в котором будет создаваться новый пакет. Обычно распаковывается архив, расположенный в каталоге SOURCES, в каталог BUILD
    %build Макрокоманда компилирования. Обычно здесь запускается программа make с необходимыми параметрами
    %files Задает список файлов, входящих в состав пакета. При указании имен файлов должен быть указан полный, а не относительный путь. Для указания полного пути можно использовать переменную окружения $RPM_BUILD_ROOT. Необходимые файлы уже должны быть помещены в каталог BUILD. Этого можно достичь с помощью макрокоманды %setup или с помощью макрокоманды %pre (см. ниже)
    %config список Задает список файлов, которые будут помещены в каталог /etc
    %doc список Задает список файлов, которые будут помещены в каталог /usr/doc/[package]–[ver]–[release]
    %install Этап установки программного обеспечения. Здесь нужно записать команды, которые будут устанавливать файлы, входящие в состав пакета. Удобнее использовать команду install которую я использовал в листинге 19.1
    %pre Действия, которые будут выполнены до инсталляции пакета
    %post Действия, которые будут выполнены после инсталляции пакета
    %preun Действия, которые будут выполнены перед удалением пакета
    %postun Действия, которые будут выполнены после удаления пакета
    %clean Удаление дерева BUILD. Используется вместо опции — clean программы rpm. Обычно содержит одну команду: rm –rf $RPM_BUILD_ROOT

    Нужно сделать небольшое замечание относительно макрокоманд %config и %doc. В этом случае список задается не так, как в макрокоманде %files. Если после макрокоманды %files можно было просто указать по одному файлу в каждой строке, то в макрокоманде %doc каждому файлу (или каждому списку) должна предшествовать команда %doc. Например:

    %doc README TODO Changes

    %doc Install

    а не

    %doc

    README TODO

    Changes Install

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

    При создании пакета мы использовали опцию –bb программы rpm. При указании этой опции создается только двоичный RPM-пакет, если вы хотите создать также пакет, содержащий исходный текст программы, используйте опцию –ba. Созданный пакет помещается в каталог SRPMS и будет иметь имя port-1.0-99.src.rpm. To есть вместо названия архитектуры будет указано, что данный пакет содержит исходный текст программы. Для создания такого пакета в каталоге SOURCES должны находиться исходные тексты программы.

    Для полноты картины осталось рассмотреть опции менеджера rpm, которые используются для создания пакетов (см. табл. 19.35).

    Опции менеджера пакетов rpm Таблица 19.35

    Опция Описание
    -ba Создаются два пакета: двоичный и содержащий исходный текст. При этом не пропускается ни один этап установки, указанный в файле спецификаций
    -bb Создается только двоичный пакет. Не пропускается ни один этап установки, указанный в файле спецификаций
    -be Выполняются этапы %pre и %build. При этом пакет распаковывается и компилируется
    -bi Выполняются этапы %pre, %build, %install
    -bl Выполняется проверка списка файлов, указанных в макрокоманде
    -bp Выполняется только этап %pre, то есть распаковывается архив
    --recompile package.src.rpm Указанный пакет, содержащий исходные тексты, сначала устанавливается, а потом компилируется
    --rebuild package.src.rpm Устанавливается и компилируется пакет исходных текстов, а затем создается новый двоичный пакет
    --test Проверка файла спецификаций
    --clean Удаление дерева каталогов BUILD после создания пакета
    --showrc Выводит файл конфигурации

    19.6. Использование редактора vi

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

    Несмотря на свое название (vi — visual editor), vi является далеко не самым простым в использовании редактором. При работе в vi вы можете находиться в одном из трех режимов:

    1. Командный режим.

    2. Режим вставки.

    3. Режим последней строки.

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

    В режиме вставки вы можете редактировать текст файла. Переход в режим вставки происходит при введении команды i (от insert) в командном режиме. Для возврата из режима вставки в режим командной строки нажмите клавишу «Esc».

    Режим последней строки является расширением командного режима. Команды, которые вы будете вводить в этом режиме, будут отображаться в последней строке экрана. Находясь в этом режиме, вы можете сохранить файл, выйти из vi или выйти без сохранения. Например, для сохранения файла используется команда w, а для выхода — команда q, если вы хотите выйти с сохранением файла, введите команду wq, а без сохранения — команду q!. Войти в режим последней строки можно, нажав ":".

    Запустите редактор vi командой:

    vi some_file.txt

    Так как файла some_file.txt не существует, vi создаст новый файл с таким именем. В левой части экрана вы увидите столбец, состоящий из символов тильды «~». Этот столбец сообщает о том, что вы находитесь в конце файла: и это не удивительно, поскольку только что созданный файл пуст. Курсор отображается в верхнем левом углу как символ подчеркивания «_».

    Нажмите i для перехода в режим вставки и начинайте печатать. Перейти на новую строку вы можете с помощью клавиши «Enter», корректировать ввод можно клавишами «Backspace» и «Del». Для возврата в командный режим нажмите клавишу «Esc». В командном режиме вы можете использовать стрелки для перемещения по тексту.

    Кроме команды i, для вставки текста вы можете использовать команду а. Эта команда вставляет текст после текущего положения курсора. Например, используя команду а, вы можете вставить текст между словами first и second:

    first_second third

    Команда о вставляет текст в строку, которая находится ниже текущей. Для удаления текста в режиме команд используются команды: х, dd, dw. Первая удаляет символ перед курсором, вторая удаляет целые строки, а dw — слово, на котором находится курсор.

    Для замены текста используется команда R. Это не автоматическая замена одного фрагмента текста на другой, как в других текстовых редакторах. Имеется в виду режим замены, который в обыкновенных редакторах включается с помощью клавиши «Insert».

    Редактор vi разрабатывался таким образом, чтобы его можно было использовать на алфавитно-цифровых терминалах, на клавиатуре которых были только алфавитно-цифровые клавиши. На таких терминалах для перемещения по тексту используются клавиши h, j, k, и l для перемещения влево, вниз, вверх и вправо соответственно. Команда w переместит курсор на начало следующего слова, a b — на начало предыдущего. Команды 0 (ноль) и $ используются для перемещения в начало и конец текущей строки. Комбинация клавиш Ctrl+F переместит вас на один экран вперед, a Ctrl+B — на один экран назад. Для перемещения на определенную строку используйте номер этой строки и символ G. Например, команда 1G переместит вас на первую строку файла, а команда G (без номера) — в конец файла.

    Для выхода из редактора vi без сохранения изменений, перейдите в режим последней строки, введя символ ":", а затем введите команду q!. Для записи изменений введите команду w, для выхода и сохранения — команду wq.

    Если вы хотите редактировать другой файл без выхода из vi, введите команду е filename в режиме последней строки. Перед этим нужно сохранить текущий файл или использовать команду е! filename для загрузки нового файла без сохранения изменений в текущем файле.

    Добавить к редактируемому файлу другой файл позволяет команда r filename в режиме последней строки. Выполнить команду интерпретатора команд операционной системы можно с помощью команды :r! команда, например, :r! Is /etc. Тогда результат выполнения этой команды будет добавлен к текущему файлу.

    19.7. Интерпретатор команд bash

    Интерпретатор команд — это программа, выполняющая команды пользователя. Стандартным интерпретатором (или оболочкой) является bash (Bourne Again Shell). Достаточно распространенными также являются следующие интерпретаторы: sh, ash, bsh, tcsh, csh, zsh. Список установленных в вашей системе оболочек находится в файле /etc/shells. Команды оболочки можно вводить в командной строке, а можно оформить в виде сценария. Сценарий — это файл, содержащий команды оболочки. Создайте обыкновенный текстовый файл и сделайте его исполнимым. Система выполнит указанную последовательность команд. Для того, чтобы система узнала, какую оболочку нужно использовать, первая строка сценарий должна содержать полное имя сценария.

    Например:

    #!/bin/bash

    Между символами # и ! не должно быть пробелов. Для обработки сценария вы можете использовать любую программу (естественно, она должна понимать синтаксис файла), а не только указанную в файле /etc/shells. Например, вы можете написать:

    #!/usr/bin/my_proga

    Оболочка при этом запустит программу /usr/bin/my_proga и передает имя файла сценария в качестве параметра. Если вы напишете:

    #!/usr/bin/my_proga -f

    то оболочка выполнит команду:

    #!/usr/bin/my_proga -f <имя_сценария>

    Создадим небольшой сценарий, который будет очищать экран и выводить на него ваше имя. Имя можно передать как параметр. Назовем наш сценарий test:

    #!/bin/bash

    # Это комментарий

    clear

    echo $1

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

    ./test Vasya Pupkin

    На экране будет напечатан первый параметр, то есть слово Vasya. Вы можете немного изменить сценарий, чтобы он выводил оба параметра:

    echo $1 $2

    Если вы хотите передать фамилию, имя и отчество, то нужно использовать следующую команду:

    echo "$1"

    При этом не нужно явно указывать три параметра, просто интерпретатор не будет использовать пропуск для разделения параметров и все, что вы передадите ему, будет считаться одним параметром. При этом, если вы запустите сценарий с параметром Vasya Pupkin, на экране увидите Vasya Pupkin. А если укажете параметр Ivanov Ivan Ivanovich, сценарий так и напечатает Ivanov Ivan Ivanovich.

    19.7.1. Каналы и списки

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

    С помощью каналов вы можете перенаправить стандартный вывод одной программы на стандартный ввод другой. Например:

    cat /var/log/secure | less

    ps –ax | grep "$UID" | less

    В первом случае стандартный вывод команды cat (содержимое файла /var/log/secure) перенаправляется на стандартный ввод программы less, которая обеспечивает поэкранный вывод информации. Вторая строка выводит список всех процессов, принадлежащих данному пользователю. Первая команда ps-ax выводит список всех запущенных в системе процессов, вторая (grep "$UID") ищет фрагмент текста, содержащий идентификатор пользователя (UID) и выводит результат на стандартный вывод, то есть на стандартный ввод команды less. $UID является переменной окружения, которая содержит идентификатор пользователя. О переменных окружения поговорим немного позже.

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

    lpr file.txt; lpq

    При этом сначала выполняется команда постановки задания в очередь печати, а потом проверяется состояние принтера. Теперь более сложный пример:

    ps –ax | head –n 1; ps –ax | grep httpd

    Сначала выполняется команда ps для печати заголовка таблицы, а потом — для вывода информации о демоне httpd.

    Можно использовать операции конъюнкции и дизъюнкции, например:

    command1 && comand2

    command3 || command4

    Команда command1 будет выполнена в случае успешного завершения команды command1 (возвратный код равен 0). Команда command4 будет выполнена, если код возврата команды command3 не равен 0. Самый простой пример — создание и изменение каталога:

    mkdir mydir && cd mydir

    Обычно интерпретатор bash выполняет команды в синхронном режиме, то есть после запуска программы ожидает ее завершения. Однако можно запустить программу и в асинхронном режиме, то есть без ожидания ее завершения. Для этого нужно использовать символ «&» в конце команды, например:

    program &

    19.7.2. Перенаправление ввода/вывода

    Перенаправление ввода/вывода уже рассматривалось в гл. 5, поэтому я лишь напомню общий формат команд:

    команда > (>>) файл

    список > (>>) файл

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

    {date; free; who; } > logfile

    Перенаправление ввода/вывода может быть использовано и в обратном направлении. Например, для печати списка URL достаточно выполнить команды:

    lpr << URL

    http://www.linux.ru

    http://linux.ru.net

    http://www.linux.org

    URL

    19.7.3. Подоболочки

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

    Program Test;

     Var A : integer; {глобальная переменная}


    procedure GetLocal ;

     var A: integer; {локальная переменная)

    begin

     А:= 10;

     writeln(A);

    end;


    begin

     А:=7;

     writeln(A);

     GetLocal(A);

     writeln(A);

    end;

    При запуске программа выведет на экран:

    7

    10

    7

    В bash наблюдается нечто подобное. Этот блок называется подоболочкой. Если список команд заключен в фигурные скобки, то он выполняется в текущей оболочке, а если в обыкновенные, то в подоболочке. Итак, рассмотрим выполнение почти аналогичных сценариев:

    #!/bin/bash

    # Сценарий 1

    NUM="one"; (NUM="two"; echo $NUM;);

    echo $NUM


    #!/bin/bash

    # Сценарий 2

    NUM="one"; {NUM="two"; echo $NUM;};

    echo $NUM

    Сценарий 1 выведет на экран следующую информацию:

    two

    one

    а сценарий 2:

    two

    two

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

    pwd; (cd /tmp; pwd;); pwd

    Сценарий выведет на экран:

    /home/user

    /tmp

    /home/user

    19.7.4. Переменные и массивы

    Пример простейшей переменной мы уже рассмотрели выше. Переменные в bash не нуждаются в предварительном описании, как в других языках, например, в том же Pascal. Все переменные в bash — текстовые. Имя переменной должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания. Нельзя определять функцию и переменную с одинаковыми именами. Чтобы воспользоваться значением переменной, нужно использовать символ доллара перед именем переменной:

    VAR="my var"

    echo $VAR

    Как я уже говорил, все переменные текстовые. Например, когда вы присваиваете переменной значение VAR=13, то это будет не числовое значение, а строка из двух символов. Если присваиваемое значение имеет пробелы, его нужно взять в кавычки:

    VAR="value 1"

    Присвоить значение переменной можно с помощью встроенной команды read:

    echo –n "Enter value: "

    read x

    echo $x

    Параметр –n команды echo не выводит символ новой строки в конце сообщения «Enter value:», то есть не переводит строку. Команда read читает значение, введенное пользователем с клавиатуры, и записывает его в переменную х. Последняя команда выводит только что введенное значение. При использовании команды read можно указывать несколько переменных:

    read a b с

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

    Интерпретатор bash использует следующие метасимволы, имеющие для него особое значение:

    * ? ; & ( )  | < > <возврат_каретки> <табуляция> <пробел>

    Для того, чтобы использовать эти символы как они есть, нужно их цитировать с помощью символа \. Например, символ перевода строки можно цитировать как \n, символ табуляции как \t, а символ вопроса как \?

    Особое значение при присваивании переменным значений имеют кавычки. Все символы, заключенные в одинарные кавычки ' ' представляют самих себя. Между двойными кавычками " " выполняются команды и подстановки значений. Символы "\", ",", " ' ", "$" могут цитироваться с помощью обратной наклонной черты: \\, \$, \'

    Для обозначения параметров командной строки используются специальные переменные, указанные в табл. 19.36.

    Специальные переменные Таблица 19.36

    Название переменной Значение
    $0 Имя выполняемой команды. Для сценария — путь, указанный при его вызове. Если вы знакомы с языком программирования Pascal, эта переменная должна вам напоминать вызов функции ParamStr(0)
    $n (где n – номер параметра, $1, $2, …) Обращение к параметру с номеров n. Для Pascal — это вызов функции ParamStr(n)
    $# Число параметров, которые были указаны при вызове сценария. Аналогична вызову функции ParamCount в Pascal
    $* Все параметры, заключенные в кавычки: "$1 $2 …"
    $@ Все параметры, каждый из которых заключен в кавычки "$1" "$2" …
    $? Код завершения последней команды
    $$ Номер текущего процесса (PID)
    $! Номер(PID) последнего асинхронного процесса (команды, выполненной в фоновом режиме)

    Пример.

    echo "Все параметры: "

    echo $*

    Интерпретатор bash поддерживает одномерные массивы с неограниченным числом элементов. В других оболочках существуют определенные ограничения на массивы, например, в ksh максимальное число элементов массива ограничено 1024-мя элементами.

    Присвоить значение элементу массива можно с помощью такой конструкции:

    Имя_массива[индекс]=значение

    Например:

    А[1]=23

    А[3]=54

    А[0]=77

    Нумерация элементов начинается с ноля. Тип элементов массива, как и тип переменных, текстовый. Присвоить значение элементам массива можно также с помощью инструкции set. Например, выражение:

    set –A array 3 56 77 12

    аналогично выражениям:

    array[0]=3

    array[1]=56

    array[2]=77

    array[3]=12

    Вышеприведенные способы инициализации массивов могут применяться как в bash, так и в ksh, а также и в других оболочках. Но, тем не менее, существует еще один способ, который работает только в bash:

    array = ([0]=3 [3]=12 [2]=77 [1]=5б)

    Обратиться к значению элемента можно следующим образом:

    ${имя_массива[индекс]}

    Например, вывести значение первого (нулевого) элемента массива можно так:

    echo {$array[0]}

    Обратиться ко всем элементам массива сразу можно с помощью одного из выражений:

    ${имя_массива[*]}
    или
    ${имя_массива[@]}

    Если значение хотя бы одного элемента массива может содержать пробелы, используйте второе выражение:

    echo ${array[@]}

    Особое значение имеют переменные окружения. У каждого процесса есть своя среда — множество доступных ему переменных. Обыкновенные переменные доступны только из локального процесса. Чтобы использовать их значения в порождаемых процессах, нужно использовать встроенную команду export. После того, как вы экспортируете переменные, они будут доступны всем порожденным процессам.

    Выражение export:

    export имя

    export имя=значение

    export имя имя имя …

    export имя=значение имя имя=значение…

    Как видите, можно экспортировать уже инициализированную переменную (которой уже присвоено значение), а можно выполнить инициализацию переменной непосредственно при экспорте. Экспортировать можно как одну переменную, так и целый список.

    Для деактивизации переменной используется команда unset: unset имя

    Каждому процессу доступны переменные оболочки, приведенные в табл. 19.37.

    Переменные оболочки Таблица 19.37

    Название переменной Значение
    PWD Текущий каталог
    UID Идентификатор пользователя, запустившего сценарий
    REPLY Последняя строка, введенная с помощью команды read
    RANDOM Случайное число в диапазоне от 0 до 32767
    SECONDS Число секунд, прошедшее с момента запуска оболочки
    IPS (Internal Filed Separator) Внутренний разделитель полей. Используется синтаксическим анализатором и командой read для разделения строчки на слова. По умолчанию его значение равно " \t\n", где: « » — пробел; «\t» — символ табуляции; ,«\n» — символ новой строки
    HOME Домашний каталог
    PATH Путь вызова
    LOGNAME Имя пользователя, которое использовалось для входа в систему
    MAIL Имя файла, в который поступает электронная почта
    SHELL Имя интерпретатора команд
    TERM Тип терминала пользователя

    Пример.

    echo "$НОМЕ"

    19.7.5. Подстановка команд и арифметических выражений

    В гл. 13 (п. 13.5) мы уже сталкивались с подстановкой команд. Тогда переменной DT присваивался результат выполнения команды date:

    DT=`date`

    Как я уже писал, при подстановке команд нужно использовать обратные одинарные кавычки (они расположены под символом тильды на клавиатуре). Подставлять можно не только одну команду, а целые списки команд:

    USERS=`who | wd –l`

    UP=`date; uptime`

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

    Подставлять результаты выполнения можно не только в переменные, а и в другие команды, например:

    grep `id –un` /etc/passwd

    Данная команда ищет в файле /etc/passwd вхождение результата выполнения команды id –un

    Подстановка арифметических выражений осуществляется с помощью конструкции $(( выражение )) Например:

    А = $(( (10+51/2 ))

    echo $A

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

    hrs = $(( $SECONDS/3600 ))

    19.7.6. Управляющие структуры и циклы

    К управляющим структурам относятся:

    • Конструкция if-fi.

    • Конструкция case-esac.

    Конструкция if-fi

    Общий синтаксис конструкции if-fi:

    if список1 then

     список2

    elif

     список3

    then

     список4

    else

     список3

    fi

    Конструкция if-fi работает так же, как и в других языках программирования. Если список1 (условие) истинный, выполняется список1, иначе выполняется список3 и проверяется его истинность и т.д. Допускается неограниченная вложенность операторов if. Например:

    if uuencode myfile myfile > myfile.uu; then

     echo "Успешное конвертирование";

    else

     echo "Ошибка";

    fi

    Можно использовать сокращенный вариант:

    if список1 then

     список2

    fi

    Например:

    if [ $? –ne 0 ]; then echo "Ошибка. См. файл протокола"; fi;

    Вместо списка команд удобно использовать команду test или выражение [условие]. Например, следующие выражения аналогичны:

    test –e /etc/passwd

    [-е /etc/passwd]

    И первое, и второе выражение проверяют существование файла /etc/passwd. Другие опции команды test представлены в табл. 19.38.

    Опции команды test Таблица 19.38

    Опция Возвращаемое значение и описание
    -d файл Истина, если файл существует и является каталогом
    -е файл Истина, если файл существует
    -f файл Истина, если файл существует и является простым файлом
    -k файл Истина, если файл существует и для него установлен бит односторонней операции
    -L файл Истина, если файл существует и является ссылкой
    -r файл Истина, если файл существует и доступен для чтения
    -s файл Истина, если файл существует и его размер больше 0
    -х файл Истина, если файл существует и является исполнимым
    -w файл Истина, если файл существует и доступен для записи
    -о файл Истина, если файл существует и принадлежит данному пользователю
    -z строка Истина, если длина строки равна 0
    -n строка Истина, если длина строки не равна 0

    Команда test, в случае успешного завершения, возвращает значение истина, то есть 0 — успешное завершение. Если в скобках стоит непустое слово, test возвратит тоже 0, например:

    [ word ]; echo $?

    0

    []; echo $?

    1

    В первом случае возвращается истина (true), на экран выводится ноль — код удачного (безошибочного) завершения программы. Во втором случае на экран выводится единица — команда test возвратила значение ложь (false). Сравнение строк осуществляется следующим образом: выражения str1 = str2 или str1 == str2 истинны, когда строки str1 и str2 равны. Обратите внимание: между двумя символами равно не должно быть пропуска!

    Символ ! инвертирует любое условие команды test, например, выражение str1 != str2 будет истинным, когда строки str1 и str2 не равны между собой. Символ ! является символом логической операции NOT (отрицание). Кроме этого символа, можно использовать опции команды –о и –а, которые обозначают логические операции ИЛИ (OR) и И (AND). Например:

    str="word"; export str; ["$str" –a –f /etc/passwd]; echo $?

    0

    str=""; export str; ["$str" –a –f /etc/passwd]; echo $?

    1

    В первом случае непустая строка str возвращает истину, опция —f возвращает также истину, потому что файл /etc/passwd существует всегда. Результат операции И: истина И истина = истина, поэтому на экране вы увидите 0.

    Во втором случае пустая строка str возвратит ложь, а опция –f возвращает истину. Результат операции И: ложь И истина = ложь. Если вы забыли законы логики, освежите свои знания с помощью табл. 19.39.

    Логические операции Таблица 19.39

    AND True False OR True False  XOR True False
    True True False  True True True  True False True
    False False False False True False False True False

    Операция XOR — это исключающее ИЛИ. Данная операция не используется при создании сценариев с помощью интерпретатора bash.

    Для сравнения целых чисел используются опции команды test,приведенные в табл. 19.40.

    Сравнение целых чисел Таблица 19.40

    Опция Описание
    -eq Равно
    -ne Не равно
    -It Меньше
    -gt Больше
    -le Меньше или равно
    -ge Больше или равно

    Интерпретатор bash воспринимает строки, как целые числа. Если нужно обнулить строку, то это достигается таким присваиванием: х=0.

    Пример.

    х=124 ; export х ; [ 111 –It "$х" ] ; echo $?

    0

    Поскольку 111 меньше, чем 124, на экране вы увидите 0 (истина).

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

    Теперь, когда мы уже знакомы с конструкциями test и if, рассмотрим небольшой пример, демонстрирующий вложенность операторов if и использование команды test. Пример приведен в листинге 19.2.

    Листинг 19.2. Пример вложенности операторов

    echo –n "Какую оценку ты получил сегодня по программированию? "

    read x

    if [ $х = 5 ]

     then echo "Отлично !"

    elif [ $х = 4 ]

     then echo "Хорошо"

    elif [ $x = 3 ]

     then echo "Удовлетворительно"

    elif [ $x = 2 ]

     then echo "Надо бы пересдать"

    else

     echo "Как вообще можно было получить такую оценку???"

    fi

    Если вы введете 5, сценарий отобразит на экране слово «Отлично», при вводе 4 вы увидите слово «Хорошо» и так далее. Если вы введете 0, 1 или число больше пяти, вы увидите на экране последнюю фразу: «Как вообще можно было получить такую оценку???».

    Конструкция case-esac

    Конструкция выбора (case — выбор) имеет следующий синтаксис:

    case значение in

    шаблон1) список1 ;;

    шаблонN) списокN ;;

    esac

    Рассмотрим сценарий (см. листинг 19.3), аналогичный сценарию 19.2, но использующий конструкцию case вместо if.

    Листинг 19.3. Пример использования оператора case

    echo –n " Какую оценку ты получил сегодня по программированию? "

    read x

    case $x in

    5) echo "Отлично !" ;;

    4) echo "Хорошо" ;;

    3) echo "Удовлетворительно" ;;

    2) echo "Надо бы пересдать" ;;

    *) echo "Как вообще можно было получить такую оценку???" ;;

    esac

    Работа сценария аналогична первому сценарию: при вводе оценок 2, 3, 4, 5 будут отображены соответствующие сообщения, а во всех остальных случаях — последнее сообщение.

    Примечание. Структура оператора case больше напоминает структуру оператора case в языке Pascal, чем в языке С. Последняя строка выбора с шаблоном *) будет выбрана, когда не произойдет ни одного совпадения с ранее указанными шаблонами. Если же произошло совпадение с шаблоном шаблонN, то будет выполнен список списокN. После выполнения списка команд списокN будет произведен выход из структуры case —так же как и в Pascal. В языке С наблюдается нечто другое: если будет обнаружено совпадение, скажем с шаблоном3, то будут выполнены последовательности операторов 3, 4, 5, … N. Чтобы прервать выполнение блока case в языке С нужно использовать оператор break. В bash же такого нет.

    Если для одного списка команд нужно описать два или более шаблонов, используется символ | (OR).

    case num in

    1|2|3) echo "1 or 2 or 3" ;;

    4|5) echo "4 or 5" ;;

    *) echo "other num" ;;

    esac

    Циклы

    Интерпретаторы bash и ksh поддерживают циклы for, while, until, select, a интерпретатор sh только for и while.

    Синтаксис цикла for:

    for имя_переменной in список1 do

     список2

    done

    Простой пример:

    for i in 1 2 3 4 5; do echo $i; done

    На экране вы увидите:

    1 2 3 4 5

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

    for str in `cat /etc/passwd` do

     echo "$str";

    done

    Цикл for закончит свою работу, когда будет обработан последний элемент списка, в данном случае, когда на экран будет выведена последняя строка файла /etc/passwd.

    Синтаксис цикла while:

    while список1 do

     список2

    done

    Цикл while будет выполняться, пока условие, заданное в списке список!,

    будет истинным. Поэтому цикл while иногда называют циклом с истинным условием. Например,

    х=1

    while [$х –It 10]

    do

     echo $х

     X = $(( $Х + 1 ))

    done

    На экране вы увидите:

    1 2 3 4 5 6 7 8 9

    Когда переменная х примет значение 10, цикл завершит свою работу, так как программа test вернет значение false (x уже не меньше, а равен 10). Цикл until (до) имеет похожую структуру, но выполняется несколько иначе:

    until список1 do

     список2

    done

    Цикл until прекратит работу, когда условие, указанное в списке список1, станет истинным. Другими словами, он будет выполняться пока это условие ложно. Цикл while, наоборот, выполняется пока условие истинно. Лучше всего разница между этими циклами видна на примере (сравните листинги 19.4 и 19.5)

    Листинг 19.4. Цикл while

    х=1;

    while ! [$х –ge 10]

    do echo $x echo $x

     X = $ (($Х + 1))

    done

    Листинг 19.5. Цикл until

    х=1;

    until [$x –ge 10]

    do

     X=$(($Х + 1))

    done

    Циклы, приведенные в листингах 19.4 и 19.5, выведут одинаковую последовательность цифр на экран:

    1 2 3 4 5 6 7 8 9 10

    Рассмотрим еще один полезный цикл select, который позволяет создавать нумерованные пункты меню. Его конструкция такова:

    select имя in список1

    do

     список2

    done

    Пример:

    echo "Выберите файл для просмотра

    select file in /home/den/temp/* QUIT

    do

     if [-e $file]; then less $file

     else

      break

    done;

    В моем временном каталоге /home/den/temp находится всего два файла — file.txt, proto.txt, поэтому на экране монитора будет отображено следующее:

    Выберите файл для просмотра:

    /home/den/temp/.

    /home/den/temp/..

    /home/den/temp/file.txt

    /home/den/temp/proto.txt

    QUIT

    Первые два файла — это ссылки на текущий и родительский каталоги. Пункты меню 3 и 4 — это файлы, которые можно выбрать для просмотра. QUIT — это последний элемент списка. При его выборе сработает оператор break и цикл завершится.

    19.7.7. Подстановка переменных

    Мы уже рассмотрели подстановку команд, сейчас рассмотрим подстановку переменных (см. табл. 19.41).

    Подстановка переменных Таблица 19.41

    Конструкция Описание
    ${переменная:-значение} Если переменная определена и не является пустой строкой, подставляется ее значение, иначе подставляется значение, указанное в конструкции. Реальное значение переменной при этом не изменяется
    ${переменна:=значение} Значение присваивается переменной, если она не определена или является пустой строкой
    ${переменная:?сообщение} Если переменная не определена или является пустой строкой, выводится указанное сообщение
    ${переменная:+значение} Если переменная инициализирована (определена), вместо нее используется указанное в конструкции значение. Реальное значение переменной не изменяется
    ${переменная} Если переменная определена, то подставляется ее значение. Скобки используются лишь тогда, если после переменной стоит символ, который может «приклеиться» к имени переменной

    Пример.

    ${1 :? "Не хватает параметра"}

    Данное сообщение будет выведено, если сценарий будет запущен без параметров. Если указать хотя бы один параметр, сообщение не будет отображаться на экране.

    19.7.8. Функции

    Описание функции выглядит так:

    имя() { список; }

    Пример:

    cdir()

    {

     # изменяем каталог

     cd /

    }

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

    #!/bin/bash

    # файл fn

    echo $$

    cdir()

    {

     # изменяем каталог

     echo "Х=$Х"

     Х=2

     echo "Params $0 $# $1 $2"

     echo "PID = $$"

     return 0

     cd $1

    }

    X=1

    echo "X=$X"

    cdir /etc

    # вызов функции "cd" с параметрами

    echo $?

    echo "X=$X"

    На экране вы увидите примерно следующую информацию:

    788

    Х=1

    Х=1

    Params fn l /etc

    788

    0

    Х=2

    Проанализируем полученную информацию. Как уже отмечалось, функция не порождает нового процесса, поэтому PID остался равным 788 как до вызова функции, так и во время ее выполнения. Переменная X доступна нашей функции, потому что описана до вызова функции. Функция «видит» значение переменной X, установленное в основном блоке сценария. Затем функция изменяет значение переменной X и передает его в основной блок (Х=2). Функции был передан только один параметр — /etc, вместо второго параметра была отображена пустая строка. Имя файла осталось прежним — fn. Обратите внимание на важный момент: функция сообщила нам много полезной информации об устройстве функций в bash, но не оправдала своего названия — cdir (change dir). Реально изменения каталога не произошло, потому что перед выполнением команды cd была выполнена команда return с кодом завершения 0, которая прервала выполнение функции.

    19.7.9. Обработка сигналов и протоколирование

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

    trap имя сигналы

    где: имя — это имя функции или набор команд, которые должны быть выполнены при получении сигнала;

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

     Сигналы Таблица 19.42

    Номер Название Описание 
    01 SIGHUP Освобождение линии (hangup)
    02 SIGINT Прерывание (interrupt)
    03 SIGQUIT Выход (quit)
    09 SIGKILL Уничтожение процесса (kill). He перехватывается и не игнорируется
    15 SIGTERM Программный сигнал завершения

    Пример. Игнорирование сигналов 1, 2, 3, 15

    trap : 1 2 3 15

    : — это пустой оператор, не выполняющий никаких действий.

    Рассмотрим, как можно протоколировать работу собственного сценария. Для этого существуют два способа – с помощью команды tee и команды script.

    Способ 1:

    $LOGFILE=my_log

    if ["$LOGGING" != "true"] then export LOGGING="true"; exec $0 I tee $LOGFILE; fi

    Способ 2:

    $LOGFILE=my_log

    if ["$LOGGING" != "true"]; then export LOGGING="true"; exec script $0 $LOGFILE; fi

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

    script program ~/program.log








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх