KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программное обеспечение » Денис Колисниченко - Linux-сервер своими руками

Денис Колисниченко - Linux-сервер своими руками

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Денис Колисниченко, "Linux-сервер своими руками" бесплатно, без регистрации.
Перейти на страницу:

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 наблюдается нечто подобное. Этот блок называется подоболочкой. Если список команд заключен в фигурные скобки, то он выполняется в текущей оболочке, а если в обыкновенные, то в подоболочке. Итак, рассмотрим выполнение почти аналогичных сценариев:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*