Вы находитесь на странице: 1из 38

UNIX – учебное пособие

Содержание
1. Изучаем UNIX 5
1.1. Начинаем сессию с UNIX сервером . . . . . . . . . . . . . . . . 5
1.2. Как зайти в систему и как выйти . . . . . . . . . . . . . . . . . 5
1.3. Что делать дальше? . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Основные команды . . . . . . . . . . . . . . . . . . . . . . . . . . 6
pwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
cd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
more, less, pg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
создать файл . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
man . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
who . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
head/tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5. UNIX – недружественная среда! . . . . . . . . . . . . . . . . . . 10
1.6. Что где лежит? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Текстовые редакторы 12
2.1. Работа с pico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2. Основы работы с vi/vim . . . . . . . . . . . . . . . . . . . . . . . 12
Режим ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Командный режим . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Команды редактора ED . . . . . . . . . . . . . . . . . . . . . . . 14

3. #!/bin/sh 15
3.1. Что такое `shell`? . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Встроенные/внешние команды, фоновый запуск . . . . . . . . . 15
3.3. Перенаправление ввода/вывода, конвейер команд . . . . . . . . 15
3.4. Подстановка значений и метасимволы . . . . . . . . . . . . . . . 16
Подстановка результатов работы команд . . . . . . . . . . . . . 16
Подстановка значений переменных . . . . . . . . . . . . . . . . 16
Переменные, автоматически устанавливаемые shell-ом . . . . . 16
Метасимволы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5. Простые команды, цепочки и списки команд . . . . . . . . . . . 17
3.6. Программирование в shell (циклы, условия) . . . . . . . . . . . 18
Цикл “для всех значений в списке” – for . . . . . . . . . . . . . 18
Оператор выбора case . . . . . . . . . . . . . . . . . . . . . . . . 18
Условный оператор if . . . . . . . . . . . . . . . . . . . . . . . . 18
Цикл “пока” – while/until . . . . . . . . . . . . . . . . . . . . . . 18

Гаспар Чилингаров Page: 1


UNIX – учебное пособие

3.7. Встроенные команды . . . . . . . . . . . . . . . . . . . . . . . . 19


3.8. Проверка условий – команда test . . . . . . . . . . . . . . . . . 19
3.9. Задания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4. Обработка текстов 21
4.1. Шаблоны (regular expressions) . . . . . . . . . . . . . . . . . . . 21
Что такое регулярное выражение? . . . . . . . . . . . . . . . . . 21
4.2. POSIX-совместимые выражения . . . . . . . . . . . . . . . . . . 21
Набор символов (character class) . . . . . . . . . . . . . . . . . . 21
Квантификатор (quantifier) . . . . . . . . . . . . . . . . . . . . . 21
Якоря (anchors, position anchors) . . . . . . . . . . . . . . . . . . 22
Структура шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3. Расширенные регулярные выражения – Perl и egrep . . . . . . . 22
“Жадные” квантификаторы . . . . . . . . . . . . . . . . . . . . . 23
Специальные символы . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4. grep/egrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.5. Потоковый редактор SED . . . . . . . . . . . . . . . . . . . . . . 24
4.6. Язык обработки данных AWK . . . . . . . . . . . . . . . . . . . 25
Вызов awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
awk-переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Типы переменных: . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Структура awk-программы . . . . . . . . . . . . . . . . . . . . . 26
Операторы управления . . . . . . . . . . . . . . . . . . . . . . . 26
Структурные операторы . . . . . . . . . . . . . . . . . . . . . . . 27
Встроенные функции . . . . . . . . . . . . . . . . . . . . . . . . 27
Задания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.7. Расширенные возможности vi/vim . . . . . . . . . . . . . . . . . 27
Использование шаблонов для поиска и замены . . . . . . . . . . 27
Использование внешних фильтров . . . . . . . . . . . . . . . . . 27
Вставка результата работы внешней программы . . . . . . . . . 28

5. Права доступа, управление процессами, файловая система 29


5.1. Файлы: владельцы файлов, типы файлов, права доступа . . . . 29
5.2. Владельцы процессов . . . . . . . . . . . . . . . . . . . . . . . . 29

6. Работа с сетью в ОС UNIX 31


6.1. Сетевые интерфейсы и их текущая конфигурация . . . . . . . . 31
Получение полной информации об интерфейсах . . . . . . . . . 31
6.2. Конфигурация интерфейсов . . . . . . . . . . . . . . . . . . . . . 32
6.3. Статистика по интерфейсам . . . . . . . . . . . . . . . . . . . . 33
6.4. Просмотр конфигурации и настройка маршрутизации . . . . . . 33
Состояние таблиц маршрутизации . . . . . . . . . . . . . . . . . 33
Данные ARP таблицы . . . . . . . . . . . . . . . . . . . . . . . . 34
Модификация таблиц маршрутизации . . . . . . . . . . . . . . . 35
6.5. Использование службы DNS . . . . . . . . . . . . . . . . . . . . 35
6.6. Фильтрация пакетов, firewall . . . . . . . . . . . . . . . . . . . . 35
6.7. tcpdump – отлаживаем сеть . . . . . . . . . . . . . . . . . . . . . 37

Гаспар Чилингаров Page: 2


UNIX – учебное пособие

Условия распространение
Модификация данного документа или использование в коммерческих целях
запрещено без письменного разрешения автора.

Гаспар Чилингаров Page: 3


UNIX – учебное пособие

Принятые обозначения
Текст, выделенный шрифтом печатающей машинки, является либо
командой UNIX , либо аргументом или опцией команды.
Текст, заключенный в [ квадратные скобки ], является опциональ-
ным – так обыкновено отмечаются опциональные ключи или параметры
команды.
Текст, заключенный в <треугольные скобки>, показывает, что в
этом месте должен стоять аргумент и дает описание этого аргумента.
Текст, после которого стоит троеточие ..., может быть повторен несколь-
ко раз подряд.

Гаспар Чилингаров Page: 4


UNIX – учебное пособие

1. Изучаем UNIX
1.1. Начинаем сессию с UNIX сервером
Начало вашей сессии зависит от того, находитесь Вы за консолью UNIX
машины или Вы подключены к сети, где находится UNIX сервер. Если Вы
находитесь за консолью UNIX машины, сразу переходите к следующему
разделу.
Если же нет – тогда вам надо узнать от администратора сети название или
адрес сервера. После этого выберете в меню Start команду Run и наберите
telnet имя_сервера
команда telnet устанавливает сетевое соединение с сервером и позволяет
эмулировать консоль UNIX машины 1 .С этого момента уже не система будет
мучать Вас, как это делает Windows, а Вы будете мучать самого себя :), но
если успешно пройдете через это – то будете знать основы работы в UNIX
shell.

1.2. Как зайти в систему и как выйти


После того, как на экране появилось приглашение UNIX системы, например:
FreeBSD/i386 (tester) (ttyp0)
login:
Вам нужно набрать имя пользователя, дождатся появления запроса о
пароле и ввести пароль (на экран набираемый пароль не выводится). После
успешного входа в систему Вы должны увидеть похожую картинку:
FreeBSD/i386 (tester) (ttyp0)
login: test
Password:
Last login: Sat Sep 15 12:21:25 from compsect1.seua.am
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994

The Regents of the University of California. All rights reserved.


FreeBSD 4.2-RELEASE (GENERIC) \#0: Mon Nov 20 13:02:55 GMT 2000
>

Значок “>”, появившийся внизу экрана – это приглашение командной


оболочки, которая ждет ввода команд. Для выхода из системы надо набрать
команду exit или logout.

1.3. Что делать дальше?


man
Если вам нужно посмотреть справку по какой-либо команде, то просто на-
берите man <имя_команды> и вы получите полную справку по данной ко-
манде – ключи запуска, параметры командной строки и так далее. Например:
1 Я бы порекомендовал использовать не стандартный telnet клиент, поставляемый с Windows,

а более продвинутый, например, telneat, который полностью эмулирует консоль FreeBSD маши-
ны.

Гаспар Чилингаров Page: 5


UNIX – учебное пособие

man man
выведет справку по самой команде man. В UNIX системе обыкновенно есть
справки по всем командам системы.

1.4. Основные команды


Некоторые наиболее употребительные команды.

Команда Описание команды


cat слить (concatenate) или вывести файлы аргументы на стан-
дартный вывод
cd изменить текущую директорию
cp копировать файлы
echo вывести аргументы командной строки на стандартный вы-
вод
head показать первые строки файла
kill ”убить” выполняемый процес по его номеру
ln создать ссылку на файл
ls распечатать информацию о файлах или директориях
man выдать справку об использовании и ключах команды
mkdir создать директорию
more постранично вывести результат команды или файл
less
mv переместить (переименовать) файлы
ps распечатать информацию и номера выполняемых процессов
pwd получить имя текущей директории
rm удалить файлы
rmdir удалить директорию
tail показать последние строки файла

pwd
pwd Выдать имя текущей директории.
pwd

cd
cd Сменить текущую директорию.
cd [директория]
cd /usr/spool/lp/adm
cd ..
Если директория не указана, вы попадаете в свой ”домашний” каталог $HOME
ls
ls Распечатать каталог. Формат команды:
ls [ключи] [имена]
имена - имена файлов или директорий; для директорий распечатывается спи-
сок входящих в нее файлов, для файлов - выводится его имя и дополнитель-
ная информация. Имена файлов сортируются по алфавиту. Без аргументов ls

Гаспар Чилингаров Page: 6


UNIX – учебное пособие

выдает содержимое текущей директории. ls -al


ls -al - вывод в длинном полном формате

nm@tester /> ls -al


total 13395
drwxr-xr-x 20 root wheel 1024 Aug 13 17:37 .
drwxr-xr-x 20 root wheel 1024 Aug 13 17:37 ..
-rw-r--r-- 1 root wheel 383 May 18 1999 .cshrc
-rw-r--r-- 1 root wheel 235 May 18 1999 .profile
-r--r--r-- 1 root wheel 4735 Apr 12 2000 COPYRIGHT
drwxr-xr-x 2 root wheel 1024 Jul 21 18:03 bin
drwxr-xr-x 3 root wheel 512 Jul 21 18:12 boot
drwxr-xr-x 2 root wheel 512 Jan 21 2000 cdrom
lrwxr-xr-x 1 root wheel 11 Jan 21 2000 compat -> /usr/compat
drwxr-xr-x 3 root wheel 16384 Sep 6 18:23 dev
drwxr-xr-x 2 root wheel 512 Jan 21 2000 dist
drwxr-xr-x 15 root wheel 2560 Aug 21 03:11 etc
drwxr-xr-x 2 root wheel 512 Jan 21 2000 flop
lrwxr-xr-x 1 root wheel 9 Jan 21 2000 home -> /usr/home
-r-xr-xr-x 1 root wheel 3424502 Jul 24 18:24 kernel
-r-xr-xr-x 1 root wheel 3302338 Feb 22 2001 kernel.old
drwxr-xr-x 2 root wheel 512 May 18 1999 lkm
drwxr-xr-x 2 root wheel 512 May 18 1999 mnt
drwxr-xr-x 2 root wheel 3072 Jul 24 18:25 modules
dr-xr-xr-x 1 root wheel 512 Sep 22 02:49 proc
drwxr-xr-x 13 root wheel 1024 Aug 17 23:30 root
drwxr-xr-x 2 root wheel 2048 Jul 21 18:09 sbin
drwxr-xr-x 4 root wheel 512 Jan 21 2000 stand
lrwxr-xr-x 1 root wheel 11 Jul 21 17:59 sys -> usr/src/sys
drwxrwxrwt 3 root wheel 2560 Sep 21 22:16 tmp
drwxr-xr-x 22 root wheel 512 Jul 24 20:51 usr
drwxr-xr-x 18 root wheel 512 Jan 21 2000 var

Первая колонка указывает на права доступа, вторая - количество имен


файла(link count), далее - имя и группа пользователя, размер файла в байтах,
время модификации файла, има файла. Первый символ в столбце ”права
доступа” указывает на тип файла – d означает директорую, а - – простой
файл. Следущие 3 поля – права доступа для владельца файла, далее – для
пользователей одной с ним группы и для всех ”других” пользователей.
Права:
r - файл доступен для чтения,
w - файл доступен для записи,
x - файл является выполнимым,
- - данное право доступа отсутствует. ключи ls
Ключи:
-a - вывести все файлы (даже если имена начинаются с точки)
-x - вывод в 4 колонки;
-t - имена файлов сортируются не по алфавиту, а по времени последнего
изменения
-R - рекурсивно пройти по всем подкаталогам
ls -CF - оглавление каталога в несколько столбиков
ls -al - оглавление в полном формате

cat Слить и вывести файлы на стандартный вывод. Формат команды: cat


cat файл1 [файл2... ]

Гаспар Чилингаров Page: 7


UNIX – учебное пособие

cat выводит содержимое перечисленных на стандартный вывод.


Пример:
cat файл
распечатывает содержимое файла, а
cat файл1 файл2 > файл3
сливает первые два файла и помещает результат в третий. Чтобы добавить
содержимое файла1 к файлу2, надо выполнить команду
cat файл1 >> файл2

more, less, pg Просмотреть файл постранично. less


more
more file_name...
pg file_name...
less file_name...
Все эти команды позволяют просматривать файл или вывод другой програм-
мы, листая его поэкранно. Просмотром можно управлять с помощью клавиш.
Самое удобное управление у команды less, самое ”примитивное” - у pg. q
- завершить просмотр
ПРОБЕЛ - показать следующую страницу
ENTER - сдвинуться на одну строку
b - показать предыдущую страницу
/ - поиск
h - Help - посмотреть список всех возможных команд
ls -al | more - просмотреть оглавление
ps --e | pg - просмотреть список работающих процессов

cp Копировать файлы. Формат команды:


cp файл1 файл2
cp файл1 [файл2...] каталог
Эта команда копирует файл1,... , в ФАЙЛ. Если ФАЙЛ – это директория, то
файл1 и др. копируются в нее под своими именами. Если ФАЙЛ не суще-
ствовал, то он создается, если существовал, его старое содержимое теряется.

mv Переместить (переименовать) файлы. Формат команды:


mv файл1 файл2
mv файл1 [файл2...] каталог
Команда аналогична команде cp, но исходный файл уничтожается. Ее основ-
ная роль - переименование файлов и перенос файлов из одной директории в
другую). Пример:
mv /dss/*/rk_*.help /dss/delo

Гаспар Чилингаров Page: 8


UNIX – учебное пособие

ln Связать файлы. Формат команды:


ln файл1 файл2 - создается ’’жесткий’’ линк
ln -s файл1 файл2 # создается ’’символический’’ линк
Эта команда создает файлу файл1 еще одно имя. В итоге файл1 и файл2 на
самом деле физически являются одним и тем же файлом. Если вы создаете
так называемый ”символический линк” (используя ключ “-s “), то файл file1
при этом не обязан существовать. Имя ”файл2” при этом все равно будет
создано.

rm Удалить файл или директорию. Формат команды:


rm [-fri] файл...
-i - просить подтверждения на каждое удаление
-r - рекурсивно удалить вместе с подкаталогами
-f - не просить подтверждения, а сразу удалять. Для удаления пустой ди-
ректории можно воспользоваться командой
rmdir директория...
Чтоб удалить непустую директорию, нужно выполнить команду
rm -r директория
ВНИМАНИЕ: Ввиду того, что под шаблон ”.*” подходит каталог ”..”
НИКОГДА НЕ ДЕЛАЙТЕ КОМАНДЫ rm -r.* (Хотя большин-

ство UNIX -ов прощают подобную ошибку, но НЕ ВСЕ – в их числе
и FreeBSD)

mkdir Создать директорию. Для создания директории применяется команда


mkdir. Формат команды:
mkdir имя_директории...

chmod Изменение прав доступа к файлам. Команда chmod меняет атрибуты


(права доступа) файла. Синтаксис команды:
chmod [u|g|o|a][+-=][r|w|x]
u,g,o – обозначают пользователя/группу/“других” пользователей
a - сокрашение для обозначения всех пользователей – эквивалент ‘ugo’
-,+,= - удалить/добавить/установить разрешение
r,w,x – разрешения на чтение, запись, выполнение
Проставить файлу право на выполнение:
chmod u+x file1
Разрешить остальным пользователям исправлять файл:
chmod a+w file1

echo Команда echo выводит на стандартный вывод свои аргументы


echo ’’\017’’
Вывести на терминал символ Ctrl-O, он же 017 восьмеричное.

Гаспар Чилингаров Page: 9


UNIX – учебное пособие

создать файл Для создания файла можно воспользоваться следующими спо-


собами:
touch primer - создает пустой файл primer
cat > primer - создает файл primer и пишет в него со стандартного ввода.
Запись в файл закончится после нажатия CTRL+D.

ps Программа ps показывает, какие именно программы выполняются в дан-


ный момент в системе. Сообщает номера процессов, которые выполняются в
системе.
ps - запущенные только с этого терминала
ps -ax - все, в ”полном” формате (в BSD* и Linux)

kill Прервать процесс. Команда kill посылает указанному процессу сигнал


немедленной остановки. Прервать процесс номер 1078 (номер можно узнать
командой ps -e)
kill -9 1078
Прервать программу на вашем терминале, запущенную НЕ в фоновом режи-
ме, можно нажатием клавиши CTRL-C, или клавиши CTRL-\

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

man -k ключевое_слово – список команд, относящихся к...


apropos ключевое_слово – эквивалент команды “man -k”

who Команда who показывает, кто в данный момент работает в системе.


who, who am i, finger, last | more, id - этими командами можно
узнать, кто вы такой и кто еще работает в системе.
man -k who - сообщит все возможные команды, которыми можно узнать,
кто и что делает в системе.
head
head/tail Команды head и tail выводят, соответственно, первые и последние tail
несколько строк файла.
head [-n кол_во_строк] [файл1...]
tail [-n кол_во_строк] [файл1...]
Если задан ключ --n, то выводится указанное количество строк. Если же
не задано имя файла, то команды обрабатывают текст, подаваемый на их
стандартный ввод (stdin).

1.5. UNIX – недружественная среда!


На первых порах система UNIX кажется довольно-таки недружелюбной и,
тем более, не интуитивно понятной, в отличии от других систем, скажем,
Windows. В действительности командная оболочка и набор программ, кото-
рые поставляются с UNIX могут существенно ускорить и облегчить работу

Гаспар Чилингаров Page: 10


UNIX – учебное пособие

с системой, а возможность автоматизировать почти все повторяющиеся ру-


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

1.6. Что где лежит?


man hier
Для того, чтобы просмотреть, в какой директории должены находится ка- which
кие файлы, стоит прочесть страничку помощи man hier. Для поиска, где whereis
расположены файлы, или страницы помощи можно воспользоваться коман-
дой whereis <имя_файла или команды>. Для того, чтобы узнать пол-
ный путь к исполняемому файлу, надо воспользоватсяся командой which
<имя команды>.

Гаспар Чилингаров Page: 11


UNIX – учебное пособие

2. Текстовые редакторы
2.1. Работа с pico
pico
pico представляет из себя простой визуальный текствый редактор.
Для запуска редактора в командной строке надо набрать:
pico [+номер_строки] [имя_файла] ...
Если имя файла не указано или такой файл не существует, то редактор
откроет пустое окно, готовое к вводу текста. Если указан номер строки,
то после открытия файла курсор быдет установлен на эту строку. В ответ
на каждую команду pico меняет строку приглашения, выводя туда запрос о
выполняемом действии. Основные команды редактора:
Ctrl-C – отмена предыдущей команды
Ctrl-X – выход из редактора
Ctlr-V,Ctrl-Y – вниз/вверх на страницу текста
Ctrl-W строка <Enter> – поиск строки в файле
Ctrl-W <Enter> - повторить предыдущий поиск в файле
Ctrl-W Ctlr-V – переместиться на конец файла
Ctrl-W Ctlr-Y - переместиться на начало файла
Ctrl-K – удалить строку(или несколько строк, если нажать Ctrl-K несколь-
ко раз) и поместить в буфер
Ctrl-U – вставить строку из буфера

2.2. Основы работы с vi/vim


vi
vi (или усовершенстванный редактор – VI iMproved) является более слож- vim
ным текстовым редактором, позволяющим выполнять сложные функции над
текстом, позволяя автоматизировать и существенно ускорить работу с тек-
стом, но как и другие программы UNIX требуют тщательного изучения для
продуктивной и удобной работы с ними. В этой главе мы ознакомимся с
основными командами по редактированию текста. Всюду, где не оговорено
иначе, команды vi и vim совпадают. Запуск редактора осуществляется напо-
добие запуска ”pico”:
vim [+номер_строки] [имя_файла] ...

Редактор vi имеет несколько режимов работы:


командный - в этом режиме можно перемещаться по файлу и выполнять
редактирующие команды над текстом. Команды вызываются ОБЫЧ-
НЫМИ ЛАТИНСКИМИ БУКВАМИ.
ввода текста - в этом режиме обычные латинские буквы будут встав-
ляться в текст.
режим строчного редактора ED используется для управления файлами
(сохранить файл, считать файл и т.д.)

Гаспар Чилингаров Page: 12


UNIX – учебное пособие

Режим ввода Переход из командного режима в режим ввода


i - вставлять с позиции курсора
a - вставлять за позицией курсова (на один символ вправо)
A - вставлять с конца строки
cw - заменять текущее слово
r – заменить 1 букву и перейти в командный режим
R – перейти в режим замены(overwrite) и ждать ввода текста
o – вставить пустую строчку после текущей строки и перейти в режим ввода
O - вставить пустую строчку перед текущей строкой и перейти в режим ввода
Для выхода из режима ввода в командный режим используется ESC.

Командный режим Перемещение по тексту:


h,j,k,l - влево, вниз, вверх, вправо (эти же действия выполняют стрелоч-
ки)
Ctrl-F - на страницу вниз
Ctrl-B - на страницу вверх
w/b/e - вперед/назад на слово/в конец слова
W/B/E - вперед/назад на слово/в конец слова, отделенного пробелами
(/) – круглые скобки перемещают назад/вперед на предложение
{/} – фигурные скобки перемещают назад/вперед на абзац
[[/]] – двойные квадратные скобки перемещают назад/вперед на функцию
или секцию
% - найти парную скобку ( или {
числоG – перейти на указанную строку
H/M/L – перейти в начало/середину/конец экрана
z/z./z- - переместить текущую строку в начало/середину/конец экрана
^/0/$ – перейти на первый не пробел/в самое начало/в конец строки
Поиск по тексту:
/Шаблон поиска <Enter> – поиск по шаблону
n – повторить поиск вниз по тексту
N – повторить поиск вверх по тексту
Удаление текста:
x – удаление символа над курсором
X – удаление символа слева от курсора
dw – удаление слова
dd – удаление строки
de – удаление с текущей позиции до конца слова
db – удаление с текущей позиции до начала слова
dE – удаление с текущей позиции до следующего пробела
dB – удаление с текущей позиции до предыдущего пробела
Для команд удаления можно задавать количество повторений – так ко-
манда 10x сотрет 10 символов начиная с текущей позиции. Все команды
удаления заносят удаленный текст в буфер обмена.
Копирование/вставка текста:
Y – копировать текущую строчку
числоY – копировать несколько сток, начиная с позиции курсора
p – вставить текст из буфера после курсора/со следующей строки
P – вставить текст из буфера перед курсором/в предыдущую строчку
Другие операции:
J - Склеить две строки

Гаспар Чилингаров Page: 13


UNIX – учебное пособие

~ - поменять строчные в прописные буквы и наоборот


ZZ – запись файла и выход

Команды редактора ED Переход из командного режима в режим редакто-


ра ED происходит по нажатию клавиши ”:”, поэтому все команды ED начи-
наются с ”:”.
:q! <Enter> - выйти без сохранения
:q - выйти из редактора
:w [имя файла] – запись файла, если указано имя файла, то текст будет
записан в этот файл
:wq – запись и выход из редактора
:е имя файла – открыть файл для редактирования

Гаспар Чилингаров Page: 14


UNIX – учебное пособие

3. #!/bin/sh
3.1. Что такое `shell`?
Для взаимодействия пользователя с компьютером и для того, что бы он мог
подавать команды операционной системе, нужно програмное обеспечение. В
UNIX это командный интерпретатор — shell, который предоставляет возмож-
ность запускать процессы, управлять ими и т.д. Далее мы будем считать, что
командный интерпретатор, shell, оболочка обозначают одну и ту же програм-
му.
Все строки, которые начинаются на #, shell игнорирует. В первой строке
скрипта после символов #! записывается полный путь к командному интер-
претатору, таким образом для запуска shell надо указывать #!/bin/sh.

3.2. Встроенные/внешние команды, фоновый запуск


Все команды, которые может запускать пользователь, являются либо встро-
енными в оболочку, либо внешними. Примерами встроенных команд могут
являтся echo (вывести строку на терминал), set (вывести список опреде-
ленных переменных), cd (изменить текущую директорию), pwd. Другие же
команды – cp, mv, rm, less и другие – это внешние программы, запускаемые
оболочкой.
Обычно shell ждет завершения выполнения команды. Однако имеется воз-
можность запустить задачу в асинхронном режиме, т.е. без ожидания ее за-
вершения. Для этого после команды (после всех ее аргументов и указаний о
переназначении ввода-вывода) надо поставить знак &. При этом по умолча-
нию стандартный ввод команды назначается на пустой файл /dev/null.

3.3. Перенаправление ввода/вывода, конвейер команд


Есть 3 направления ввода-вывода - стандартный ввод (stdin), стандартный
вывод (stdout) и стандартный протокол (stderr). Как правило, команды
берут исходные данные из стандартного ввода и помещают результаты в стан-
дартный вывод. Стандартные ввод, вывод и протокол можно переназначить.
< <имя файла> - служит для переназначения стандартного ввода (дескрип-
тор файла 0)
<< <строка> - ввод происходит со стандартного ввода, пока не встретится
указанная <строка> или конец файла
> <имя файла> - для стандартного вывода (дескриптор файла 1)
>> <имя файла> - для стандартного вывода; если файл существует, то вы-
водимая информация добавляется к конец этого файла
<& <цифра> - в качестве стандартного ввода объявляется файл, ассоцииро-
ванный с дескриптором <цифра>; аналогично для стандартного вывода >&
<цифра>
<&- и >&- закрывают, соответственно, стандартный ввод и вывод.
Чтобы переназначить стандартный протокол туда же, куда уже назначен
стандартный вывод, следует употребить конструкцию ... 2>&1.

Гаспар Чилингаров Page: 15


UNIX – учебное пособие

Важен порядок переназначения: shell производит переназначение слева


направо по указанному списку. Так, 1 > yyy 2 >& 1 сначала ассоциирует
дескриптор 1 с файлом yyy, а затем дескриптор 2 с 1, т.е. тоже с yyy. А 2
>& 1 1 > yyy ассоциирует дескриптор 2 с терминалом, а 1 - с файлом yyy.
Конвейер – это последовательность команд, разделенных знаком |. Смысл
конвейера в том, что стандартный вывод одной команды перенaправляется на
стандартный ввод другой. Если после конвейера стоит ‘;’ либо конец строки,
то shell ждет его завершения. Если & - то не ждет.

3.4. Подстановка значений и метасимволы


Подстановка результатов работы команд Выражения можно заключать в
обратные кавычки (`). Такие выражения вычисляются в месте использова-
ния. Они могут быть, например, частью строк.

# Значение, полученное в результате выполнения


# команды date присваивается
# переменной DATE.
DATE=`date`

Подстановка значений переменных Все переменные в языке shell - тек-


стовые. Их имена должны начинаться с буквы и состоять из латинских букв,
цифр и знака подчеркивания (_). Чтобы воспользоваться значением перемен-
ной, надо перед ней поставить символ $. Использование значения переменной
называется подстановкой.
Значения переменным присваиваются следующим образом:
<имя>=<значение>
Для подстановки значений переменных возможны также следующие кон-
струкции:
${<переменная>} или $<переменная>
если значение <переменной> определено, то оно подставляется. Скобки при-
меняются лишь если за <переменной> следует символ, который без скобок
бует использован как часть имени переменной.
${<переменная>:-<слово>}
если <переменная> определена и не является пустой строкой, то подставля-
ется ее значение; иначе подставляется <слово>.
${<переменная>:=<слово>}
если <переменная> не определена или является пустой строкой, ей присваи-
вается значение <слово>; после этого подставляется ее значение.

Переменные, автоматически устанавливаемые shell-ом ? – код возврата


предыдущей синхронно выполненной команды
$ - номер текущего процесса
! - номер последнего асинхронного процесса

Гаспар Чилингаров Page: 16


UNIX – учебное пособие

Метасимволы Метасимволы - символы, имеющие специальное значение для


интерпретатора:
? * ; & ( ) | ^ < > <пробел> <табуляция>
<возврат_каретки>
Однако специальное значение этих символов может отключить, если перед
ним поставить \. Все символы, заключенные между кавычками ’ и ’, представ-
ляют самих себя. Между двойными кавычками (”) выполняются подстановки
команд и параметров (см. выше), а символы \, `,” и $ могут экранироваться
предшествующим символом \.
После всех подстановок в каждом слове команды ищутся символы *, ?, и
[. Если находится хотя бы один из них, то это слово рассматривается как ша-
блон имен файлов и заменяется именами файлов, удовлетворяющих данному
шаблону (в алфавитном порядке). Если ни одно имя файла не удовлетворяет
шаблону, то он остается неизменным. Значения указанных символов:
* - любая строка, включая и пустую
? - один любой символ
[...] - любой из указанных между ними символов. Пара символов, разде-
ленных знаком -, означает любой символ, который находится между ними,
включая и их самих. Если первым символом после ”[” идет ”!”, то указанные
символы не должны входить в имя файла

3.5. Простые команды, цепочки и списки команд


Простая команда - это последовательность слов, разделенная пробелами.
Первое слово является именем команды, которая будет выполняться, а осталь-
ные будут переданы ей как аргументы. Имя команды передается ей как аргу-
мент номер 0 (т.е. имя команды является значением $0). Значение, возвра-
щаемое простой командой - это ее статус завершения.
Несколько команд можно объединять в цепочки, где выполнение команд
зависит от результатов выполнения предыдущей команды.
<команда1> && <команда2> [...]
<команда1> || <команда2> [...]
Если команды разделены оператором && (логическое И), то каждая следу-
ющая команда выполняется только тогда, когда все предыдущие команды
завершились успешно. Команды, разделенные оператором || выполняются до
тех пор, пока не выполнится успешно хоть одна из них.
Несколько команд можно объединять друг с другом в списки команд. Ко-
манды в списке разделяются символом ‘;’ или <Enter>
<команда1> ; <команда2> [ ; <команда3>... ]
или
<команда1>
<команда2>
<команда3>
...
Для объединения результатов (текста, выводимый на стандартный вывод)
выполнения какого-либо списка команд применяются круглые скобки
( <список_команд> )

Гаспар Чилингаров Page: 17


UNIX – учебное пособие

3.6. Программирование в shell (циклы, условия)


for
Цикл “для всех значений в списке” – for Цикл ”for” по очереди подстав-
ляет значение элементов <набора>, которые разделены пробелами, в <переменную>
и выполняет тело цикла.
for <переменная> [ in <набор> ]
do
<список>
done
case
Оператор выбора case Оператор выбора выполняет <список>, соответству-
ющий первому <шаблону>, которому удовлетворяет <переменная>.
case $<переменная> in
<шаблон> [ | <шаблон>... ]) <список> ;;
...
esac
Форма шаблона та же, что и используемая для генерации имен файлов. Часть
| шаблон... может отсутствовать.
if
Условный оператор if Условный оператор в shell записывается следующим then
образом: else
if <список1>
then
<список2>
[ elif <список3>
then
<список4> ]
...
else
<список5> ]
fi
Выполняется <список1> и, если код его завершения 0, то выполняется
<список2>, иначе - <список3> и, если и его код завершения 0, то выпол-
няется <список4>. Если же это не так, то выполняется <список5>. Ветви
elif и else могут отсутствовать.
while
Цикл “пока” – while/until Оператор while выполняется до тех пор, пока until
код завершения последней команды <списка1> есть 0, выполняются коман-
ды <списка2>. При замене оператора while на until условие выхода из
цикла меняется на противоположное.
while <список1>
do
<список2>
done
В качестве одной из команд <списка1> может быть команда true (false).

Гаспар Чилингаров Page: 18


UNIX – учебное пособие

По этой команде не выполняется никаких действий, а код завершения уста-


навливается 0 (-1). Эти команды применяются для организации бесконечных
циклов. Выход из такого цикла можно осуществить лишь по команде break.

3.7. Встроенные команды


Как правило, для выполнения каждой команды shell порождает отдельный
процесс. Специальные команды отличаются тем, что они встроены в shell и
выполняются в рамках текущего процесса.
: - Пустая команда. Возвращает нулевой код завершения.
. file - shell читает и выполняет команды из файла file, затем завершается;
при поиске file используется список поиска $PATH.
break [n] - Выход из внутреннего for или while цикла; если указано n, то
выход из n внутренних циклов.
continue [n] - Перейти к следующей итерации внутреннего for или while
цикла; если указано n, то переход к следующей итерации n-ого цикла.
cd [ <аргумент> ] - Сменить текущую директорию на директорию <аргумент>.
По умолчанию используется значение $HOME.
echo [ <арг>... ] - Выводит свои аргументы в стандартный вывод, раз-
деляя их пробелами.
eval [ <арг>... ] - Аргументы читаются, как если бы они поступали
из стандартного ввода и рассматриваются как команды, которые тут же и
выполняются.
exit [ n ] - Завершение выполнения shell’а с кодом завершения n. Если n
опущено, то кодом завершения будет код завершения последней выполненной
команды (конец файла также приводит к завершению выполнения).
read [ <переменная>... ] - Читается из стандартного ввода одна стро-
ка; первое ее слово присваивается первой переменной, второе - второй и т.д.,
причем все оставшиеся слова присваиваются последней переменной.
readonly [ <переменная>... ] - Запрещается изменение значений ука-
занных переменных. Если аргумент не указан , то выводится информация обо
всех переменных типа readonly.

3.8. Проверка условий – команда test


test
Команда test применяется для проверки условия. Формат вызова: [...]
test <выражение> или [ <выражение> ]
Команда test вычисляет <выражение> и, если его значение - истина, возвра-
щает код завершения 0 (true); иначе - ненулевое значение (false). Ненулевой
код завершения возвращается и если опущены аргументы.
<выражение> может состоять из следующих примитивов:
-r файл - истина, если файл существует и доступен для чтения
-w файл - истина, если файл существует и доступен для записи
-x файл - истина, если файл существует и является выполняемым
-f файл - истина, если файл существует и является обычным файлом
-d файл - истина, если файл существует и является директорией
-s файл - истина, если файл существует и имеет ненулевую длину
-z s1 - истина, если длина строки s1 нулевая
-n s1 - истина, если длина строки s1 ненулевая

Гаспар Чилингаров Page: 19


UNIX – учебное пособие

s1 = s2 - истина, если строки s1 и s2 совпадают


s1 != s2 - истина, если строки s1 и s2 не совпадают
s1 - истина, если s1 непустая строка
n1 -eq n2 - истина, если целые n1 и n2 алгебраически совпадают. На месте
-eq могут быть также -ne(non equal), -gt(great than), -ge (great or equal), -lt
(less than), -le (less or equal).

3.9. Задания
Вот эти задания помогут вам освоить программирование на shell-е.
Напишите скрипт, который выводит в текстовом режиме на экран гра-
фик параболы ( 
) для значений x от -11 до +11. Для облегчения
задания предлагаю принять следующие условия – ось X расположена
по вертикали, а ось Y - по горизонтали (меньшие значения находятся
слева).
Измените скрипт так, что бы он выводил бы так же оси координат X,
Y.
А теперь поменяйте функцию на  

 и постарайтесь вывести
на экран ее.
И еще раз поменяйте функцию на  
 
   .
Последние 2 задания не должны от Вас требовать никаких изменений в
скрипте, кроме как изменения функции и масштаба по оси Y.
Следующее задание – напишите программу-калькулятор, которая будет
иметь один регистр аккумулятор. Значение, которым инициализируется ак-
кумулятор, задается пользователем. После того, как программа инициализи-
рует аккумулятор, она должна выполнять следующие команды:
+ число – прибавить число к аккумулятору
- число – вычесть число из аккумулятору
* число – умножить число и аккумулятору
/ число – разделить аккумулятор на число
q – выход из программы
После каждой команды скрипт должен выводить значение регистра-аккумулятора.
Измените скрипт, что-бы он проверял бы операции деления на ноль, нали-
чие аргумента у операции, проверял бы, что введенный аргумент является
числом, а не произвольной строкой. Для реализации используйте команду
case.

Гаспар Чилингаров Page: 20


UNIX – учебное пособие

4. Обработка текстов
4.1. Шаблоны (regular expressions)
шаблоны
Что такое регулярное выражение? Если вы работали с Norton/Volkov/Windows regexp
Commander или Far, то знаете такую вещь, как ”wildcards”. Например: delete
c:\windows\*.* удаляет все файлы из указанной директории. :) Регулярные
выражения – это значительно более мощный инструмент. Всякое регулярное
выражение состоит из пар
<набор_символов><квантификатор>
Набор символов обозначает какие именно символы должны быть в тексте в
данной позиции – это может быть один символ, диапазон символов (от ‘А’ до
‘Я’), перечисление символов и т.д. Может быть указано ”все, кроме данного
набора символов”. Указатель количества символов называется ”квантифи-
катор”. Итак, квантификатор может иметь как конкретное значение - либо
одно фиксированное, либо как числовой промежуток (скажем, от 6-и до 8-и
вхождений), так и абстрактное ”любое число, в т.ч. 0” (любое кол-во вхо-
ждений), ”любое натуральное число” – от 1 до бесконечности (одно и более
вхождений), ”либо 0, либо 1” ( “?”). По умолчанию квантификатор для дан-
ного набора символов равен единице – тогда его можно опустить и вообще не
указывать. Для более гибкого поиска сочетаний эти связки ”набор символов
- квантификатор” можно объединять друг с другом.

4.2. POSIX-совместимые выражения


Набор символов (character class) Набор символов может включать в себя:

. точка любой символ


[<символы>] квадратные класс символов (”любое из”)
скобки
[^<символы>] негативный класс символов (”любое кро-
ме”)
- тире обозначение последовательности в клас-
се символов (”[0-9]” – цифры)

Рекомендация: не пользуйтесь классом символов для обозначения


всего лишь одного символа (вместо ’[ ]+’ вполне сойдет ’ +’).
➧ Не пишите в классе символов точку – это ведь любой символ, тогда
другие символы в классе будут просто лишними (а в негативном
классе получится отрицание всех символов).

Квантификатор (quantifier) Квантификатор - это указатель количества за-


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

Гаспар Чилингаров Page: 21


UNIX – учебное пособие

{<количество>} либо {<минимум>, <максимум>}


Для удобства использования введены следующие символы:
* - эквивалент {0,}
+ - эквивалент {1,}
? - эквивалент {0,1}
На практике такие символы используются чаще, чем фигурные скобки.

Якоря (anchors, position anchors) Если в регулярном выражении встреча-


ются ”якоря”, то сравнение строки с шаблоном производится только с начала
или только с конца строки. Символ ”^” обозначает начало строки, а ”$” –
конец строки. Эти символы должны стоять, соответственно, в самом начале
и в самом конце шаблона.

Структура шаблонов Например, если вам надо, чтобы в тексте были либо
только маленькие буквы, либо только большие, либо только цифры. Класс
символов ”[a-zA-Z0-9]” не подходит (под такой шаблон подойдет и строка
“aZZaZell0”). А вот такой шаблон точно описывает то, что мы хотим:
[a-z]+|[A-Z]+|[0-9]+
Вертикальная черта – знак ”или” регулярных выражений (знака ”и”, есте-
ственно, не существует – это и есть само регулярное выражение). Разде-
ленные вертикальной чертой шаблоны в официальной документации называ-
ются альтернативными ветвями (это подразумевает ветвление, т.е. наличие
вложенных альтернативных ветвей). Программа сравнивает со строкой все
ветви (проходясь по их ряду слева направо), до первого совпадения (это
важно учесть, если у вас сложное выражение со вложенными ветвями). Для
разделения уровней и отделения этого дерева альтернатив от остального ша-
блона используются обычные скобки. Скобки по-научному(в официальной
документации) называются subpattern (вложенный шаблон). Они использу-
ются не только для сложных вариантов шаблонов, но и для гибкой замены
фрагментов текста или получения их в переменную. Пример:
Проверка правильного написания email-а:
^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}$
Строки, которые совпадут с таким шаблоном:
user@foobar.com
mailer-daemon@cnn.dk

Строки, которые не совпадут:


Strange@@email.com
billgates@microsoft.c0m

4.3. Расширенные регулярные выражения – Perl и egrep


Как правило все операторы использующие регулярные выражения имеют схо-
жие опции, такие как:

Гаспар Чилингаров Page: 22


UNIX – учебное пособие

i - не различать строчные и заглавные буквы.


m - считать строку многострочной.
s - однострочная строка.
x - расширенный синтаксис ( использование пробелов и комментари-
ев)

Обычно все эти опции записываются как ’/регулярное_выражение/опция’.

“Жадные” квантификаторы По умолчанию действие квантификаторов ”жад-


но” (greedy). Совпадение распространяется столько раз, насколько это воз-
можно, не учитывая результат действия на следующие квантификаторы. Ес-
ли вы хотите ”уменьшить их аппетит”, то используйте символ ”?”. Это не
изменяет значение квантификаторов, просто уменьшает распространение –
последовательность символов, которая будет выбрана – минимальная, чтоб
стаботал бы квантификатор. Таким образом:

*? - станет 0 и более
+? - 1 и более
?? - 0 или 1 раз
{n}? - точно n раз
{n,}? - не меньше n раз
{n,m}? - больше или равно n и меньше m раз

Специальные символы Шаблоны работают так же, как и двойные кавыч-


ки, поэтому в них можно использовать `\` - символы (бэкслэш-символы):

\t - символ табуляции
\n - новая строка
\r - перевод каретки
\l - нижний регистр следующего символа
\u - верхний регистр -//-
\L - все символы в нижнем регистре до \E
\U - в верхнем -//-
\E - ограничитель смены регистра
\Q - отмена действия как метасимвола

Обратите внимание, что все это ”один” символ. Для обозначения последо-
вательности применяйте модификаторы. Если внутри шаблона применяется
группировка (круглые скобки), то номер подстроки группы обозначается как
’\цифра’.

4.4. grep/egrep
grep
Команда grep применяется для фильтрафии текста по какому-то шаблону. egrep
При запуске она ожидает получить обрабатываемый текст на стандартный
ввод, а отфильтрованные строки выводятся на стандартный вывод.
Синтаксис вызова команды grep:

Гаспар Чилингаров Page: 23


UNIX – учебное пособие

grep [--v] [--i] [-q] <шаблон> [ файл1... ]


egrep [--v] [--i] [-q] <шаблон> [ файл1... ]
Если командам передается имя файла, то команды фильтруют не стандартный
ввод, а текст из этих файлов. Команда grep работает с POSIX шаблонами, а
egrep понимает синтаксис расширенных выражений.
-v – вывести все строки, не удовлетворившие шаблону
-i – проводить поиск независибо он размера букв
-q – не генерировать никакого вывода. Ненулевой код выхода указывает на
то, что шаблон не был удовлетворен. Если в шаблоне содержатся символы,
который могут быть раскрыты shellом, например “*”, то шаблон надо заклю-
чить в одинарные кавычки.

4.5. Потоковый редактор SED


sed
Команда имеет формат:
sed [ -n ] [ -e <script> ] [ -f <sfile> ] [<file> ]
Команда копирует файлы (по умолчанию со стандартного входа) на стан-
дартный выход, редактирует их в соответствии со своими(!) командами, за-
даваемые параметром <script> (в командном файле или строке редактора [а
не shell!]). Таким образом ”sed” циклически преобразует входные строки в
выходные. По флагу -f sed берет файл команд из файла <sfile>. Если есть
только опция -e <script>, то флаг -e можно опустить. Флаг -n подавляет
вывод (происходящий по умолчанию). <script> состоит из команд редакти-
рования, по одной в строке, имеющих формат:
[ addr [ , addr ] ] cmd [ args ]
Адреса ”[ addr [ , addr ] ]” - это либо просто номера строк, либо по-
следняя строка (символ $), либо регулярные выражения в стиле редактора
“ed“. Если адреса не указаны - просматриваются все входные строки. Ес-
ли один адрес, то выбираются совпадающие строки (в случае регулярного
выражения) или одна строка, если задан номер. Если заданы два адреса,
выбираются строки в заданном интервале. Добавление знака ! в конец ад-
реса вызывает выполнение cmd для всех строк, не входящих в интервал. В
качестве указателей начала и конца регулярного выражения вместо /regexp/
могут использоватся <знак>regexp<знак>, например, %regexp%.
Для следующих (основных) функций (команд) максимальное число допу-
стимых адресов указано в скобках.
(1)a\ text - добавляет text после указанной строки
(2)b label - осуществляет переход к команде (”cmd”) “label:cmd”. если
метка (”label”) отсутствует, то переход на конец командного файла.
(2)c\ text - удаляет выбранные строки и заменяет их на ”text’.
(2)d - удаляет найденные строки
(1)i\ text - вставляет ”text” на место выбранной строки. (сравните с a\)
(2)p - выводит найденные строки (используется с флагом “-n “)
(1)q - выходит из ”sed”
(2)r rfile - читает файл ”rfile” и выдает на выход
(2)s/reg_expr/rpl/flags - заменяет регулярное выражение ”reg_expr”
на ”rpl” с учетом флагов ”flags”
g - глобально (по всей строке)

Гаспар Чилингаров Page: 24


UNIX – учебное пособие

p - выводить замены
w <wfile> - сохранять заменяемое в <wfile>
(2)y/str1/str2/ - заменяет все вхождения символов ”str1” соответству-
ющими символами ”str2”. длины строк должны быть одинаковыми
(1)= - выдает номера строк
(2){ } - скобки группируют команды

4.6. Язык обработки данных AWK


awk
Вызов awk Возможны два основных варианта:
awk [-Fc] ’prog.awk’ [<file>...]
Это простейший случай, когда программа (заключенная в кавычки ’) нахо-
дится в теле команды,
-F<char> - флаг, меняющий стандартный разделитель полей на <char>.
<file> - имя файла исходных данных, при его отсутствии - со стандартного
входа.
awk [-Fc] -f <prog_file_name> [<file>...]
Флаг -f говорит о том, что awk-программу надо брать из файла, имя которого
указано следом.

awk-переменные В языке awk выделяются две группы переменных: предо-


пределенные и декларированные в программе. Исходные значения предопре-
деленных переменных устанавливаются интерпретатором awk в процессе за-
пуска и выполнения awk-программы. К предопределенным относятся:
NR - номер текущей строки
NF - число полей в текущей строке
RS - разделитель строк на вводе (по умoлчанию - \0)
FS - разделитель полей на вводе (по умолчанию - пробел и/или табуляция)
ORS - разделитель строк на выводе (по умолчанию – RS)
OFS - разделитель полей на выводе (по умолчанию – FS)
OFMT - формат вывода чиcл (по умолчанию - ”%.6g”)
FILENAME - имя входного файла.
Прочим переменным пользователь может присваивать начальные значе-
ния. По умолчанию переменные имеют значение ”0” или пустая строка (что
для awk равнозначно!).

Типы переменных:
позиционные ($1 $2..., которые соответствуют полю1 полю2... в данной
строке, $0 – соответствует всей строке),
числа с плавающей точкой,
строка символов,
массив.
Интерпретатор awk рассматривает переменную как строковую, пока не воз-
никает необходимость выполнить операции, если выполняется операция кон-
катенации(пробел), то как строки, если +, то как числа с плавающей точкой.

Гаспар Чилингаров Page: 25


UNIX – учебное пособие

Массивы не объявляются, а начинают существовать в момент первого ис-


пользования. Индекс массива - любое ненулевое значение или строка. Мас-
сивы ассоциативные, т.е. индексом может быть не только число, но и строка.

Операции Операции в awk, такие же как в Си


=, +=, -=, *=, /=, %=, +, /, %, ++, --
Переменные сравниваются как чисел, если оба числа, иначе – просходит
сравнение строк
<, <=, ==, !=, >=, >
Логические операции
!, ||, &&
Операция ”пробел” – конкатенация двух и более строк.

Структура awk-программы Программа состоит из операторов (правил), име-


ющих вид:
шаблон {действие}
шаблон {действие}
...
Частные случаи:
{действие} - когда действие выполняется для всех строк.
шаблон - когда выводятся строки с данным шаблоном.
Действие может состоять из последовательности операторов, разделяемой
; или переводом строки или закрывающей скобкой. Открывающая скобка все-
гда должна быть на той-же строке, где указан шаблон. Возможны коммен-
тарии (как в shell ”#.........”). Существует два шаблона специального вида
(”BEGIN”-начальные установки и ”END” - ”последействия”):
BEGIN {действие}
шаблон {действие}
шаблон {действие}
...
END {действие}
В общем виде шаблон может состоять из регулярного выражения, простого
выражения или их комбинации, которая составляется объединением быра-
жений через логические операторы(и,или,не).
Регулярное выражение либо может иметь вид /regexp/, тогда проверяется
соответствие всей строке, либо иметь вид $<Nполя>~/regexp/, тогда прове-
ряется соответствие регулярного выражения только для заданного поля. В
случае, если регулярное выражение должно получать значение истина при
несовпадении, используется символ !, т.е. !/regexp/ или $<Nполя>!~/regexp/.
Простое выражение – это выражения типа $3 != $2, $2 >= $1 и т.д.

Операторы управления exit - завершить выполнение программы, next -


перейти к следующей строке, управление на начало awk-программы, break
- выход из цикла, continue - переход к следующей итерации.

Гаспар Чилингаров Page: 26


UNIX – учебное пособие

Структурные операторы Структурные операторы в значительной степени


аналогичны соответствующим операторам Си. В последнем случае (for...
in...) для каждого индекса выполняется блок операторов. Текстовые ин-
дексы рассматриваются в лексикографическом порядке.
if (условие) {операторы} [else {операторы}]
while (условие) {операторы}
for (выражение; условие; выражение) {операторы}
for (индекс in имя_массива) {операторы}

Встроенные функции sin (expr), cos (expr) – синус, косинус от expr


exp (expr), log (expr), sqrt (expr) - возведение в степень, нату-
ральный логорифм, извлечение корня от expr
int (expr) - целая часть числа
length (s) - длина строки s
printf (fmt,...) - форматирование (аналогично Си) по спецификации
fmt.
substr (s, m, n) - подстрока в n символов строки s, начинающаяся с m.
getline () - чтение следующей строки в $0, возвращает 0, если достигнут
конец файла, иначе 1
index (s1, s2) - номер позиции, с которой s1 совпадает с s2, иначе 0.
split (s, M, c) - строка s разбивается элементы массива M по раздели-
телю c (по умолчанию FS=” ”); функция возвращает число полей.

Задания Простые задания – написать такую командную строку awk, кото-


рая бы эмулировала бы функции команды head, написать такую программу
на awk, которая принимала бы на вход результат выполнения команды ls
-al и выводила-бы количество файлов в директории и средний размер фай-
ла в директории.
Более сложное задание: сравните вывод команд cal и ncal. Надо напи-
сать программу-фильтр на awk, которая будет принимать на вход результат
работы команды cal и выводить результат аналогичный выводу команды
ncal.

4.7. Расширенные возможности vi/vim


Использование шаблонов для поиска и замены Для того, что бы найти
или заменить какой-то текст, Вы можете использовать регулярные выраже-
ния. Так , следующее выражение – [<][<>]*[>], найдет вхождения текста,
заключенного в треугольные скобки. А вот команда :s/[<]\([<>]*\)[>]/{\1}/
заменит треугольные скобки на фигурные. Круглые скобки в этом выраже-
нии указывают какие части выражения выделять и сопоставлять при замене
переменным \1, \2 и т.д.

Использование внешних фильтров Для того, что-бы пропустить выбран-


ный фрагмент или весь текст через фильтр, используется команда “!”
:[<диапазон>]!<команда> <аргументы>
Если <диапазон> опущен, то обрабатывается только текущая строка. Для
указания всех строк используется символ %.

Гаспар Чилингаров Page: 27


UNIX – учебное пособие

Вставка результата работы внешней программы в текущую позицию про-


изводится следующей командой vi:
:r!<команда> <аргументы>

Гаспар Чилингаров Page: 28


UNIX – учебное пособие

5. Права доступа, управление процессами, фай-


ловая система
Всякий объект в UNIX имеет владельца – будь то файл, процесс или еще
какой-то системный объект. Всякое обращение к объекту разрешается или
запрещается исходя из идентификатора пользователя и идентификатора груп-
пы, к которой принадлежит пользователь, запустивший процесс, идентифи-
катора владельца объекта и прав доступа. Каждому пользователю в системе
сопоставлено некое число - UID (user ID) пользователя. Так-же каждый
пользователь входит в какую-либо группу, которая идентифицируется при
помощи GID (group ID). Пользователь может входить одновременно в одну
основную группу и несколько дополнительных. У нескольких пользователей
может быть одинаковый UID, тогда для операционной системы они не будут
представлять никакой разницы.

5.1. Файлы: владельцы файлов, типы файлов, права досту-


па
Каждый файл на диске имеет владельца, который и определяет права досту-
па других пользователей к этому файлу. Пользователи могут иметь права
для чтения, записи и выполнения файла. Права можно устанавливать для
самого пользователя (UID процесса == UID владельца файла), для группы
(основной или дополнительный GID процесса == GID владельца файла), для
всех оставшихся ползователей – не попавших в предыдущие 2 категории.
Для изменение прав доступа используют команду chmod. Файлы в UNIX
могут быть 5 типов:
обыкновенные файлы
директории
символические ссылки (soft links) - создаются при помощи команды ln
ссылки (hard links) - создаются при помощи команды ln
устройства с блочным вводом/выводом (block devices)
устройства с посимвольным вводом/выводом (character devices)
каналы (pipes)
Нас будут интересовать пока только ”обыкновенные файлы”, директории и
символические линки.

5.2. Владельцы процессов


У каждого процесса, выполняемого в системе, тоже есть владелец, а сле-
доватльно, и UID и GID. При запуске процесса его UID и GID совпада-
ют с идентификаторами процесса, который его породил. Сигнал завершения
можно посылать только процессу, который выполняется от имени того-же

Гаспар Чилингаров Page: 29


UNIX – учебное пособие

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


программы ”kill”.

Гаспар Чилингаров Page: 30


UNIX – учебное пособие

6. Работа с сетью в ОС UNIX


Почти с самого начала, когда UNIX начал получать широкое распростра-
нение в университетах, он начал привлекать к себе, как удобная среда для
реализации и проверки идей - в частности идей по объединению компьюте-
ров вместе и создания вычислительных сетей. Семейство протоколов TCP/IP
разрабатывалось и апробировалось именно на ОС UNIX , и является основ-
ным протоколом, который используется в системе UNIX . Каждое сетевое
устройсто принято называть ”интерфейс” - вне зависимости, что это – сете-
вая плата, виртуальный сетевой интерфейс, модем, соединение при помощи
последовательного или параллельного порта и т.п. В этой главе мы рассмот-
рим, как настраивается поддержка TCP/IP в FreeBSD.

6.1. Сетевые интерфейсы и их текущая конфигурация


Для конфигурации интерфейсов используется команда ifconfig, которая
позволяет просматривать текущую конфигурацию интерфейсов и менять ее.
Подробную информацию по команде можно найти в ее man-страничке. ifconfig(8)
ifconfig [-a] [-l] [<имя_интерфейса>] [<опции>]
Примеры запуска команды ifconfig -l – получить список всех интерфей-
сов (названия):
>ifconfig -l
dc0 dc1 lp0 faith0 gif0 lo0 ppp0 sl0
>

Получение полной информации об интерфейсах – в FreeBSD начиная с


версии 4.0 можно не указывать флаг -а. ifconfig -a
>ifconfig -a
dc0: flags+43<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 217.113.0.94 netmask 0xffffffe0 broadcast 217.113.0.95
inet6 fe80::280:48ff:feb3:1aa6 \%dc0 prefixlen 64 scopeid 0x1
ether 00:80:48:b3:1a:a6
media: Ethernet 10baseT/UTP
status: active
dc1: flags+43<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 217.113.0.33 netmask 0xffffffe0 broadcast 217.113.0.63
inet6 fe80::280:48ff:feb3:13f5 \%dc1 prefixlen 64 scopeid 0x2
ether 00:80:48:b3:13:f5
media: Ethernet autoselect (10baseT/UTP)
status: active
lp0: flags+10<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
faith0: flags+00<MULTICAST> mtu 1500
gif0: flags+10<POINTOPOINT,MULTICAST> mtu 1280
lo0: flags+49<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1\%lo0 prefixlen 64 scopeid 0x9
inet 127.0.0.1 netmask 0xff000000
ppp0: flags+10<POINTOPOINT,MULTICAST> mtu 1500
sl0: flagsА10<POINTOPOINT,LINK2,MULTICAST> mtu 552
>

Гаспар Чилингаров Page: 31


UNIX – учебное пособие

Рассмотрим подробнее, что выдала команда ifconfig. До двоеточия


стоит название интерфейса, к которому относится эта информация. После –
численное значение флагов и их символическое представление

UP/DOWN – показывает состояние интерфейса – разрешен ли он админи-


страторм или нет.
BROADCAST – интерфейс поддерживает рассылку и прием широковещатель-
ных сообщений
MULTICAST – интерфейс поддерживает рассылку и прием multicast сооб-
шений
POINTTOPOINT – интерфейс типа ”точка-точка” – т.е. среда передачи не
разделяется между многими машинами

mtu <кол-во байт> – какое максимальное количество байт может быть


передано в одном пакете
inet 217.113.0.94 netmask 0xffffffe0 broadcast 217.113.0.95
– настройки IPv4 TCP/IP стека - на это указывает ключевое слово ”inet”.
Далее идет IP адрес присвоенный данной машине, сетевая маска – данном
случае это 255.255.255.224, записанное в шестнадцтеричной форме, далее –
широковещательный адрес для данной подсети.
inet6 fe80::280:48ff:feb3:13f5 %dc1 prefixlen 64 scopeid 0x2XXX
write description and decypher config :)))
ether 00:80:48:b3:1a:a6 – тип интерфейса и его MAC адрес
media: Ethernet autoselect (10baseT/UTP) – тип используемой в
данный момент среды передачи – витая пара, 10 Мбит/сек.
status: active – статус интерфейста, если физически интерфейс отсо-
единен от сети, то этой строчки не будет.
Интерфейс ”lo0” – это виртуальный интерфейс, который адресует эту-же
машину, так называемая ”петля”. Можно заметить, что для увеличения ско-
рости обмена MTU на этом интерфейсе существенно больше, чем на других.

6.2. Конфигурация интерфейсов


Для изменения настроек сетевого интерфейса используются следуюшие ко-
манды:
ifconfig <iface> down – запретить использование интерфейса
ifconfig <iface> up – разрешить использование интерфейса
ifconfig <iface> inet <IP> netmask <mask> [alias] – установить
IP адрес на интерфейс. Если задан модификатор ”alias”, то установить
дополнительных адрес.
ifconfig <iface> mtu <mtu_size> – изменить MTU интерфейса на
заданное значение
ifconfig <iface> delete [<IP>] – удалить IP, присвоенный этому
интерфейсу

Гаспар Чилингаров Page: 32


UNIX – учебное пособие

ifconfig <iface> media <media_type> – установить тип среды пе-


редачи данных (для Ethernet - 10baseT, 100BaseT)
ifconfig <iface> mediaopt <media_options> – установить допол-
нительные параметры среды передачи данных – например ”duplex/half-
duplex”

6.3. Статистика по интерфейсам


netstat
Для просмотра большей части информации, связанной с сетью, используется
команда netstat. Что бы посмотреть статистику работы интерфейсов, ис-
пользуется следущие ее ключи: netstat -i
netstat -i [-I<iface>] [-b] [-w<N секунд>] [-d]
Команда netstat -i показывает количество переданных через интерфейс паке-
тов и количество ошибок.
-I<iface> – показывать информацию только для данного интерфейса
-b – показывать так-же и количество переданных байт
-w<N секунд> – повторять вывод команды раз в N секунд
-d – показывать количество потерянных(dropped) пакетов

6.4. Просмотр конфигурации и настройка маршрутизации


Состояние таблиц маршрутизации просматривается при помощи команды
netstat -r. Вот пример работы этой команды: netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 217.113.0.65 UGSc 20 561571 dc0
127.0.0.1 127.0.0.1 UH 0 19 lo0
217.113.0.32 ff:ff:ff:ff:ff:ff UHLWb 0 3 dc1 =>
217.113.0.32/27 link#2 UC 4 0 dc1 =>
217.113.0.37 0:60:97:da:62:ff UHLW 0 21075 dc1 865
217.113.0.42 52:54:5:f1:cc:1e UHLW 0 392873 dc1 786
217.113.0.63 ff:ff:ff:ff:ff:ff UHLWb 0 92 dc1
217.113.0.64/27 link#1 UC 2 0 dc0 =>
217.113.0.65 0:50:54:9f:28:40 UHLW 20 0 dc0 688
217.113.0.66 0:80:48:b3:1d:3f UHLW 0 12 dc0 1046

В первом столбце указаны адреса назначения, во втором - маршрутизато-


ры, через которые они доступны, далее – флаги (см. ниже), количество соеди-
нений, использующих этот маршрут, кол-во переданных пакетов, интерфейс,
через который достижим данный маршрутизатор, через сколько времени этот
маршрут будет уничтожен(в секундах).
b – Этот маршрут представляет собой широковещательный адрес
C – Клонировать – создавать новые маршруты при использовании данного
маршрута
c – Клонировать в зависимости от протокола

Гаспар Чилингаров Page: 33


UNIX – учебное пособие

D – Маршрут создан динамически – из-за переадресации


G – Для достижения получателя надо использовать промежуточные марш-
рутизаторы
H – Запись соответствует одному хосту
L – Сущаествует правильное преобразование протокола в адрес канального
уровня
M – Маршрут изменен динамически – из-за переадресации
R – Хост или сеть недоступны
S – Статический маршрут – маршрут был добавлен вручную
U – Маршрут можно использовать (usable)
W – Маршрут возник в результате клонирования
Таким образом динамические маршруты, возникающие в результате клони-
рования, создаются на какой-то срок и в случае отсутствия активности уни-
чтожаются.

Данные ARP таблицы можно просмотреть командой arp. Синтаксис ко- arp
манды:
arp [-n] -a
arp -s <hostname> <ether_addr> [temp] [pub]
arp -d <hostname>
Первая форма команды позволяет просмотреть содержимое таблицы ARP.
Вторая форма – вручную добавить в таблицу запись соответствия MAC ад-
реса IP адресу. Если указан модификатор ”temp”, то данная запись будет
временной – будет удалена через некоторое время системой, а если нет –
то постоянной(permanent). Если же указан модификатор ”pub”, то машина
будет отвечать на ARP запросы, даже если <hostname> не является одним
из ее адресов.
Третья форма используется для удаления записи, соответствующей <hostname>,
из таблицы ARP. Пример запуска команды arp:
> arp -a -n
? (217.113.0.32) at ff:ff:ff:ff:ff:ff permanent [ethernet]
? (217.113.0.37) at 0:60:97:da:62:ff [ethernet]
? (217.113.0.42) at 52:54:5:f1:cc:1e [ethernet]
? (217.113.0.63) at ff:ff:ff:ff:ff:ff permanent [ethernet]
? (217.113.0.65) at 0:50:54:9f:28:40 [ethernet]
>
Адреса 217.113.0.32 и 217.113.0.63 помечены как постоянные, по-
скольку они являются широковещательными адресами.

Гаспар Чилингаров Page: 34


UNIX – учебное пособие

Модификация таблиц маршрутизации производится при помощи коман-


ды route. Синтаксис команды: route
route add <dest_net> <mask> <gateway>
route delete <dest_net> <mask>
Команда route add добавляет статическую запись в таблицу маршрутиза-
ции. <dest_net>/<mask> задают сеть назначения, а <gateway> – марш-
рутизатор, который должен использоваться, что бы ее достичь. <mask> зада-
ется в виде четырех октетов – yyy.yyy.yyy.yyy. Команда route delete
удаляет указанный маршрут из таблицы мапшрутизации. Вместо того, что
бы задать сеть 0.0.0.0 с маской 0.0.0.0 (т.е. все IP адреса), можно восполь-
зоваться сокращением ”default” – например, route delete default.

6.5. Использование службы DNS


Для того, чтобы указать ОС, какие сервера Доменной Службы Имен (DNS)
надо использовать для преобразования символических имен в IP-адреса, надо
создать или отредактировать файл /etc/resolv.conf. Каждая опция указыва- /etc/resolv.conf
ется в файле на отдельной строке, а доступны следующие опции:
domain <имя_домейна> - эта опция указывает, в каком домейне будет
происходить поиск символических имен, для которых не указанно имя до-
мейна. nameserver <IP> - эта строка задает IP адрес сервера, к которому
будут направлятя все DNS запросы. Если в файле заданы несколько серве-
ров, то они будут опрашиваться в том порядкe, в котором они заданы. Для
тoгo, что бы запросить информацию от DNS сервера, используется команда
nslookup. Синтаксис запуска nslookup: nslookup
nslookup [<имя_хоста>] [<адрес_сервера>]
Если команда nslookup вызывается без аргументов, то она выдает пригла-
шение и ждет ввода команд. В частности, команда set querytype=<type>
или просто set q=<type> устанавливает тип запросов в <type>, а ко-
манды set d1 и set d2, включают режим отладки и режим расширенной
отладки, соответственно.
Для получения информации от DNS можно так-же воспользоваться ко-
мандой host. Синтаксис команды: host
host [-l] [-t <тип записей>] <хост> [<DNSсервер>]
Опция -l позволяет просмотреть содержимое всех DNS зоны, а опция -t
<тип записей> указать какой именно тип записей выводить.

6.6. Фильтрация пакетов, firewall


firewall
Очень часто для обеспечения безопастности сети или для уменьшения объ- фильтрация
ема передаваемой информации требуется фильтровать часть данных, переда- трафика
ваемых через маршрутизатор на основании каких-то правил. Такой подход
позволяет избирательно разрешать права доступа отдельных хостов. Про-
грамное обеспечение, которое позволяет осуществлять фильтрациэ трафика,
называется ”межсетевым экраном” или просто – firewall.
Рассмотрим фильтрацию трафика на 3-ем уровне модели OSI – на сете-
вом. Единственной информацией, идентифицирующей соединение на сетевом

Гаспар Чилингаров Page: 35


UNIX – учебное пособие

(IP) уровне, является IP адрес источника (source IP, далее - srcIP) и адрес
получателя – destination IP или dstIP. В случая протоколов TCP, UDP или
ICMP, работающих на 4-ом уровне, добавляется дополнительная информа-
ция. Так для TCP и UDP это номер порта.
Правила для firewall-ов пронумерованы и просматриваэтся в порядке уве-
личения номера правила. Для каждого приходящего и исходящего пакета
производится сопоставление пакета правилам firewall-а. Как только будет до-
стигнуто первое правило, под которое попадает пакет, он будет обработан в
соответствии с этим правилом. При этом увеличится на 1 счетчик, указыва-
эщий на количество использований данного правила.
Таким образом правила для IP имеют следующий вид: пропускать(отвергать)
пакеты с таким-то srcIP и таким-то dstIP.
Для TCP или UDP надо еще указывать и номер порта, таким образом
правила проибретают следующий вид: пропускать(отвергать) пакеты с таким-
то srcIP и srcPort и таким-то dstIP и dstPort.
Для управления встроенным в FreeBSD firewall-ом используется команда
ipfw. Синтаксис команды следующий: ipfw
ipfw [-f | -q] flush
ipfw [-q] zero [number ...]
ipfw [-q] delete number ...
ipfw show [number ...]
ipfw [-q] add [number] rule-body

Первая команда удаляет все правила из таблицы firewall-а.


По умолчанию единственное правило в таблице – отвергать весь
трафик со всех хостов. Поэтому надо быть очень внимательным при

изменении правил firewall-а удаленно, так как вы рискуете остаться
вообще без доступа к машине.
Вторая – обнуляет счетик использований для данного правила. Если не
указано конкретное правило, то обнуляются счетчики всех правил. Третья –
стирает одно и более правил из таблицы. Четвертая – показывает одно и бо-
лее правил, и сколько раз было использованно каждое правило (match count).
А последняя команда позволяет добавить правило. Если надо добавить прави-
ло в какую-либо заданную позицию, то надо указать номер правила. Формат
правила следующий: action proto from src to dst [options]
action – что именно делать с пакетом, соответствующим данному правилу
allow – разрешить передачу пакета
deny – запретить передачу
skipto <номер правила> – перейти на правило
proto – тип протокола, которому соответствует правило. Возможные типы:
ip или all – все семейство IP протоколов, tcp, udp. Полные список
протоколов находится в /etc/protocols. /etc/protocols

src, dst – адрес источника или получателя. Для IP протокола можно


использовать следующее:
IP – один IP адрес
IP/<кол-во бит>, IP/<маска> – указывает сетку IP адресов

Гаспар Чилингаров Page: 36


UNIX – учебное пособие

any – любой адрес, эквивалентно 0.0.0.0/0


me – все адреса, которые установлены на интерфейсах данной машины.
Для протоколов tcp/udp можно использовать и номер порта. Например
any 80 обозначает HTTP порт любой машины, а me 25,80,100,1024-500
– порты SMTP, HTTP, POP3 и дополнительные порты локальной ма-
шины. Для обозначения портов можно использовать и символические /etc/services
имена, так как таблица преобразования в номера портов находится в
файле /etc/services.
options – для каждого протокола могут быть указаны дополнительные
опции. Для полного их описания стоит просмотреть страничку помощи
ipfw(8).
Разрешим соединения только с хоста A и будем отвергать все оставшиеся
соединения:
ipfw add allow ip from A to me # разрешить приходящие
пакеты
ipfw add allow ip from me to A # разрешить исходящие
пакеты
ipfw add deny all from any to any # запретить все
оставшееся

Набор правил, позволяющих выходящие telnet соединения:


ipfw add allow tcp from me to any 23
ipfw add allow tcp from any 23 to me

Но такой набор правил правил не учитывает случая, что соединение может


быть иниициированно с порта 23 удаленной машины. Чтобы не пропускать
ненужные пакеты добавим несколько опций:
ipfw add allow tcp from me to any 23 setup
ipfw add allow tcp from any 23 to me established

Теперь первое правило ”пропускает” только выходящие пакеты для установ-


ления соединения (с установленым битом SYN и сброшенным битом ACK). А
вот второе – пропускает только пакеты с установленными битами ACK или
RST.
Для разрешения запросов DNS:
ipfw add allow udp from me to any 53
ipfw add allow udp from any 53 to me

6.7. tcpdump – отлаживаем сеть


Использование tcpdump для отладки сети.

Гаспар Чилингаров Page: 37


UNIX – учебное пособие

Литература
Статьи, доступные на сервере “Центра Информационных
Технологий”, http://www.citforum.ru/

1. С. Д. Кузнецов, Операционная система UNIX


2. А.Соловьев, sed и awk (учебное пособие)
3. Галина О. В., Язык обработки данных AWK
4. Галина О. В., Неинтерактивный текстовый редактор SED
5. Крутиков М.П., Редактор vi

Печатные издания
6. Робачевский A. Операционная системя UNIX. – СПб.: BHV – Санкт-
Петербург, 1998. – 528 с.
7. Шевель А. Linux. Обработка текстов. Специальный справочник. – СПб.:
Питер, 2001. – 384с.: ил.
8. Немет Э. и др. UNIX: руководство системного администратора. Пер. с
англ. – К.:BHV, 1997 – 832с.

Гаспар Чилингаров Page: 38