355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Дэвид Тейнсли » Linux и UNIX: программирование в shell. Руководство разработчика » Текст книги (страница 1)
Linux и UNIX: программирование в shell. Руководство разработчика
  • Текст добавлен: 15 октября 2016, 00:39

Текст книги "Linux и UNIX: программирование в shell. Руководство разработчика"


Автор книги: Дэвид Тейнсли



сообщить о нарушении

Текущая страница: 1 (всего у книги 25 страниц)

Введение

Интерпретатор bourne shell

Переносимость интерпретатора shell

Структура книги

Интерпретатор shell

Фильтрация текста

Регистрация в системе

Основы shell–программирования

Совершенствование навыков по написанию сценариев

Что нужно знать

ЧАСТЬ 1

ГЛАВА 1

1.1. Информация о файлах

1.2. Типы файлов

1.3. Права доступа к файлам

1.4. Изменение прав доступа к файлу

1.4.1. Символьный режим

1.4.2. Примеры использования команды chmod

1.4.3. Абсолютный режим

1.4.4. Дополнительные примеры использования команды chmod

1.5. Каталоги

1.6. Биты смены идентификаторов (SUID и SGID)

1.6.1. Для чего нужны биты SUID и SGID?

1.6.2. Установка битов SUID и SGID

1.7. Команды chown и chgrp

1.7.1. Пример использования команды chown

1.7.2. Пример использования команды chgrp

1.7.3. Определение групп, в состав которых вы входите

1.7.4. Определение групп, в состав которых входят другие пользователи

1.8. Команда umask

1.8.1. Обработка значений umask

1.8.2. Примеры установки значений umask

1.9. Символические ссылки

1.9.1. Применение символических ссылок

1.9.2. Примеры создания символических ссылок

1.10. Заключение

ГЛАВА 2

2.1. Опции команды find

2.1.1. Опция -name

2.1.2. Опция -perm

2.1.3. Опция -prune

2.1.4. Опции -user и -nouser

2.1.5. Опции -group и -nogroup

2.1.6. Опция -mtime

2.1.7. Опция -newer

2.1.8. Опция -type

2.1.9. Опция -size

2.1.10. Опция -depth

2.1.11. Опция -mount

2.1.12. Поиск файлов с последующей архивацией командой cpio

2.1.13. Опции -exec и -ok

2.1.14. Дополнительные примеры использования команды find

2.2. Команде xargs

2.3. Заключение

ГЛАВА 3

3.1. Планировщик cron и команда crontab

3.1.1. Структура crontab–файла

3.1.2. Примеры записей в crontab–файле

3.1.3. Опции команды crontab

3.1.4. Создание crontab–файла

3.1.5. Вывод на экран содержимого crontab–файла

3.1.6. Редактирование crontab–файла

3.1.7. Удаление crontab–файла

3.1.8. Восстановление утерянного crontab–файла

3.2. Команда at

3.2.1. Запуск команд и сценариев с помощью команды at

3.2.2. Просмотр списка запланированных заданий

3.2.3. Удаление запланированного задания

3.3. Оператор &

3.3.1. Запуск команды в фоновом режиме

3.3.3. Уничтожение фонового задания

3.4. Команда nohup

3.4.1. Запуск задания с помощью команды nohup

3.4.2. Одновременный запуск нескольких заданий

3.5. Заключение

ГЛАВА 4

4.1. Применение метасимвола '*'

4.2. Применение метасимвола '?'

4.3. Применение метасимволов […] и [!…]

4.4. Заключение

ГЛАВА 5

5.1. Команда echo

5.2. Команда read

5.3. Команда cat

5.4. Каналы

5.5. Команда tee

5.6. Стандартные потоки ввода, вывода и ошибок

5.6.1. Стандартный поток ввода

5.6.2. Стандартный поток вывода

5.6.3. Стандартный поток ошибок

5.7. Файловый ввод–вывод

5.7.1. Переадресация стандартного потока вывода

5.7.2. Переадресация стандартного потока ввода

5.7.3. Переадресация стандартного потока ошибок

5.7.5. Объединение выходных потоков в файле

5.8. Команда exec

5.9. Применение дескрипторов файлов

5.10. Заключение

ГЛАВА 6

6.1. Оператор &&

6.2. Оператор ||

6.3. Группирование команд с помощью скобок

6.4. Заключение

ЧАСТЬ 2

ГЛАВА 7

7.1. Поиск одиночных символов с помощью метасимвола '.'

7.2. Поиск выражений в начале строки с помощью метасимвола '^'

7.3. Поиск выражений в конце строки с помощью метасимвола '$'

7.4. Поиск символов, встречающихся неопределенное число раз, с помощью метасимвола '*'

7.5. Поиск специальных символов с помощью метасимвола ''

7.6. Поиск символов, входящих в заданный набор или

7.7. Поиск символов, встречающихся заданное число раз

7.8. Примеры

7.9. Заключение

ГЛАВА 8

8.1. Команда grep

8.1.1. Употребление кавычек

8.1.2. Параметры команды grep

8.1.3. Поиск среди нескольких файлов

8.1 4. Определение числа строк, в которых найдено совпадение

8.1.5. Вывод номеров строк

8.1.6. Поиск строк, не соответствующих шаблону

8.1.7. Поиск символов на границе слов

8.1.8. Игнорирование регистра символов

8.2. Команда grep и регулярные выражения

8.2.1. Выбор символов из списка

8.2.2. Инверсия шаблона с помощью метасимвола ""

8.2.3. Шаблон, соответствующий любому символу

8.2.4. Поиск по дате

8.2.5. Комбинированные диапазоны

8.2.6. Поиск повторяющихся последовательностей

8.2.7. Выбор из нескольких шаблонов

8.2.8. Поиск пустых строк

8.2.9. Поиск специальных символов

8.2.10. Поиск имен файлов, соответствующих заданному формату

8.2.11. Поиск IP–адресов

8.2.12. Поиск строк с использованием подстановочных знаков

8.3. Классы символов

8.4. Дополнительные примеры использования команды grep

8.4.1. Фильтрация списка файлов

8.4.2. Подавление вывода сообщений об ошибках

8.4.3. Фильтрация списка процессов

8.5. Команда egrep

8.6. Заключение

ГЛАВА 9

9.1. Вызов awk

9.2. Сценарии

9.2.2. Работа с полями и записями

9.2.3. Регулярные выражения

9.2.4. Метасимволы

9.2.5. Операторы

9.2.6. Операторы сравнения

9.2.7. Логические операторы

9.2.8. Операторы присваивания и арифметические операторы

9.2.9. Встроенные переменные

9.2.10. Встроенные функции работы со строками

9.2.11. Escape–последовательности

9.2.12. Команда printf

9.2.13. Передача переменных утилите awk

9.2.14. Файлы сценариев

9.2.15. Массивы

9.3. Заключение

ГЛАВА 10

10.1. Чтение и обработка данных в sed

10.2. Вызов редактора sed

10.2.1. Сохранение выходных данных

10.2.2. Синтаксис команд

10.2.3. Основные команды редактирования

10.3. Регулярные выражения

10.4. Вывод строк (команда p)

10.4.1. Отображение строки по номеру

10.4.2. Отображение строк из заданного диапазона

10.4.3. Поиск строк, соответствующих шаблону

10.4.4. Поиск пo шаблону и номеру строки

10.4.5. Поиск специальных символов

10.4.6. Поиск первой строки

10.4.7. Поиск последней строки

10.4.8. Отображение всего файла

10.5. Вывод номеров строк (команда =)

10.6. Добавление текста (команда а)

10.7. Создание файла сценария

10.8. Вставка текста (команда i)

10.9. Изменение текста (команда с)

10.10. Удаление текста (команда d)

10.11. Замена подстроки (команда s)

10.12. Вывод строк в файл (команда w)

10.13. Чтение строк на файла (команда r)

10.14. Досрочное завершение работы (команда q)

10.15. Отображение управляющих символов (команда l)

10.16. Дополнительные примеры использования редактора sed

10.16.1. Обработка управляющих символов

10.16.2. Обработка отчетов

10.16.3. Добавление текста

10.16.4. Удаление начальной косой черты в путевом имени

10.17. Заключение

ГЛАВА 11

11.1. Сортировка файлов с помощью команды sort

11.1.1. Опции команды sort

11.1.2. Сохранение результатов сортировки

11.1.3. Тестовый файл

11.1.4. Индексация полей

11.1.5. Проверка факта сортировки файла

11.1.6. Простейшая сортировка

11.1.7. Сортировка а обратном порядке

11.1.8. Сортировка по заданному полю

11.1.9. Сортировка по числовому полю

11.1.10. Сортировка с отбрасыванием повторяющихся строк

11.1.11. Задание ключа сортировки с помощью опции -k

11.1.12. Несколько ключей сортировки

11.1.13. Указание позиции, с которой начинается сортировка

11.1.14. Обработка результатов сортировки с помощью команд head и tail

11.1.15. Передача результатов сортировки утилите awk

11.1.16. Объединение двух отсортированных файлов

11.1.17. Дополнительные примеры команды sort

11.2. Удаление повторяющихся строк с помощью команды uniq

11.2.1. Синтаксис

11.2.2. Определение количества повторений

11.2.3. Отображение только повторяющихся строк

11.2.4. Проверка уникальности отдельных полей

11.3. Объединение файлов с помощью команды join

11.3.1. Объединение двух файлов

11.3.2. Включение несовпадающих строк

11.3.3. Задание формата вывода

11.3.4. Выбор ключевого поля

11.4. Вырезание текста с помощью команды cut

11.4.1. Задание разделителя полей

11.4.2. Вырезание отдельных символов

11.5. Вставка текста с помощью команды paste

11.5.1. Определение порядка вставки столбцов

11.5.2. Выбор разделителя полей

11.5.3. Слияние строк

11.5.4. Чтение данных и» стандартного входного потока

11.6. Разделение файла на части с помощью команды split

11.7. Заключение

ГЛАВА 12 Утилита tr

12.1. Применение утилиты tr

12.1.1. Диапазоны символов

12.1.2. Сохранение выходного результата

12.1.3. Устранение повторяющихся символов

12.1.4. Удаление пустых строк

12.1.5. Преобразование прописных букв в строчные

12.1.6. Преобразование строчных букв в прописные

12.1.7. Удаление определенных символов

12.1.8. Преобразование управляющих символов

12.1.9. Быстрые преобразования

12.1.10. Сравнение с несколькими символами

12.2. Заключение

Часть 3

ГЛАВА 13

13.1. Файл /etc/profile

13.2. Пользовательский файл $НОМЕ/.profile

13.4. Создание файла .logout

13.5. Заключение

ГЛАВА 14

14.1. Понятие о переменных интерпретатора shell

14.2. Локальные переменные

14.2.1. Отображение значения переменной

14.2.2. Удаление значения переменной

14.2.3. Отображение значений всех переменных интерпретатора shell

14.2.4. Объединение значений переменных

14.2.5. Проверка на наличие значения переменной (подстановка)

14.2.6. Применение переменных, содержащих аргументы системных команд

14.2.7. Как сделать переменную доступной только для чтения

14.3. Переменные среды

14.3.1. Присваивание значений переменным среды

14.3.2. Отображение значений переменных среды

14.3.3. Удаление значений переменных среды

14.3.4. Встроенные переменные интерпретатора shell

14.3.5. Другие переменные среды

14.3.6. Применение команды set

14.3.7. Экспорт переменных в дочерние процессы

14.4. Позиционные параметры командной строки

14.4.1. Применение в сценариях позиционных параметров

14.4.2. Передача параметров в системные команды

14.4.3. Специальные параметры

14.4.4. Код завершения последней команды

14.5. Заключение

ГЛАВА 15

15.1. Правила применения кавычек

15.3. Одинарные кавычки

15.4. Обратные кавычки

15.5. Обратная косая черта

15.6. Заключение

Часть 4

ГЛАВА 16

16.1. Зачем создаются shell–сценарии

16.1.1. Не отказывайтесь от новых идей

16.2. Структура сценария

16.3. Выполнение сценария

16.4. Заключение

ГЛАВА 17

17.1. Проверка прав доступа к файлу

17.2. Применение логических операторов при осуществлении проверки

17.3. Проверка строк

17.4. Проверка чисел

17.5. Применение команды expr

17.5.1. Приращение переменной цикла

17.5.2. Проверка численных значений

17.5.3. Поиск по шаблону

17.6. Заключение

ГЛАВА 18

18.1. Коды завершения

18.2. Управляющие конструкции

18.2.1. Операторы, изменяющие ход выполнения сценария

18.2.2. Циклические операторы

18.3. Операторы if then else

18.3.1. Простые операторы if

18.3.2. Проверка значений переменных

18.3.3. Проверка вывода команды grep

18.3.4. Проверка вывода команды grep с помощью переменной

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

18.3.6. Проверка текущего каталога

18.3.7. Проверка прав доступа к файлу

18.3.8. Проверка параметров, передаваемых сценарию

18.3.9. Определение интерактивного режима выполнения сценария

18.3.10. Простые операторы if else

18.3.11. Проверка установок переменных

18.3.12. Проверка пользователя, выполняющего сценарий

18.3.13. Передача параметров сценария системной команде

18.3.14. Применение команды null

18.3.15. Проверка на предмет создания каталога

18.3.16. Другие возможности копирования

18.3.17. Применение нескольких операторов if

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

18.3.19. Проверка кода завершения последней команды

18.3.20. Добавление и проверка целых значений

18.3.21. Простой сценарий, обеспечивающий безопасность при регистрации

18.3.22. Применение elif

18.3.23. Несколько проверок, реализуемых с помощью elif

18.4. Оператор case

18.4.1. Простой оператор case

18.4.2. Применение символа | при поиске по шаблону

18.4.3. Приглашение для ввода y или n

18.4.4. Оператор case и передача командных параметров

18.4.5. Прием потока ввода без применения шаблонных команд

18.4.6. Значения переменных, заданные по умолчанию

18.5. Цикл for

18.5.1. Простой цикл for

18.5.2. Вывод на экран строки списка

18.5.3. Использование команды ls совместно с циклом for

18.5.4. Применение параметров вместе с циклом for

18.5.5. Посылка сигналов серверам с помощью цикла for

18.5.6. Создание резервных копий файлов с помощью цикла for

18.5.7. Массовое преобразование

18.5.8. Удаления, выполняемые с помощью редактора sed

18.5.9. Подсчет с помощью циклов

18.5.10. Циклы for для обработки документов

18.5.11. Вложенные циклы for

18.6. Цикл until

18.6.1. Простой цикл until

18.6.2. Контроль наличия файла

18.6.3. Мониторинг дисковой памяти

18.7. Цикл while

18.7.1. Простой цикл while

18.7.2. Применение цикла while при вводе с клавиатуры

18.7.3. Применения цикла while для считывания данных из файлов

18.7.4. Считывание данных из файлов с помощью IFS

18.7.5. Обработка файла с помощью проверок условий

18.7.6. Выполнение суммирования

18.7.7. Одновременный просмотр двух записей

18.7.8. Игнорирование символа #

18.7.9. Работа с форматированными отчетами

18.7.10. Цикл while и дескрипторы файлов

18.8. Управление ходом выполнения циклов с помощью команд break и continue

18.8.1. Команда break

18.8.2. Прекращение выполнения оператора case

18.8.3. Команда continue

18.8.4. Пропуск строк в файлах

18.9. Меню

18.10. Заключение

ГЛАВА 19

19.1. Объявление функций в сценарии

19.2. Использование функций в сценарии

19.3. Передача параметров функции

19.4. Возврат значения функции

19.5. Проверка значений, возвращаемых функцией

19.6. Файл функций

19.7. Создание файла функций

19.8. Подключение файла функций

19.9. Проверка загруженных функций

19.10. Вызов функций интерпретатора shell

19.10.1. Удаление shell–функций

19.10.2. Редактирование shell–функций

19.10.3. Примеры функций

19.10.4. Подведение итогов

19.11. Вызов функций

19.11.1. Вызов функций, размещенных в сценариях

19.11.2. Вызов функций из файла функций

19.12. Загрузка файлов, которые состоят не только из функций

19.13. Заключение

ГЛАВА 20

20.1. Команда shift

20.1.1. Простой способ использования команды shift

20.1.2. Последний параметр командной строки

20.1.3. Преобразования файла с помощью команды shift

20.2. Команда getopts

20.2.1. Пример сценария, использующего команду getopts

20.2.2. Принцип работы команды getopts

20.2.3. Указание значений опций с помощью команды getopts

20.2.4. Доступ к значениям

20.2.5. Использование команды getopts для преобразования файлов

20.3. Заключение

ГЛАВА 21

21.1. Применение команды tput

21.1.1. Строчный поток вывода данных

21.1.2. Числовой вывод

21.1.3. Поток вывода булевых данных

21.2. Работа с командой tput

21.2.1. Присвоение имен командам tput

21.2.2. Применение булевого потока вывода

21.2.3. Использование команды tput в сценариях

21.2.4. Генерирование escape–последовательностей

21.2.5. Изменение положения курсора

21.2.6. Центрирование отображаемого текста

21.2.7. Определение атрибутов терминала

21.2.8. Применение функциональных клавиш при работе со сценариями

21.2.9. Применение различных цветов

21.2.10. Генерирование цветов

21.2.11. Улучшение внешнего вида меню

21.3. Заключение

ГЛАВА 22

22.1. Добавление записей

22.2. Удаление записей

22.3. Обновление записей

22.4. Просмотр записей

22.5. Заключение

ГЛАВА 23

23.1. Наиболее распространенные ошибки

23.1.1. Ошибки, связанные с циклом

23.1.2. Как обычно пропускают кавычки

23.1.3. Проверка на наличие ошибки

23.1.4. Регистр символов

23.1.5. Циклы for

23.1.6. Команда echo

23.2. Команда set

23.3. Заключение

ГЛАВА 24

24.1. Полный список команд, встроенных в интерпретатор shell

24.1.1. Команда pwd

24.1.2. Команда set

24.1.3. Команда times

24.1.4. Команда type

24.1.5. Команда ulimit

24.1.6. Команда wait

24.2. Заключение

Часть 5

ГЛАВА 25

25.1 Быстрый метод формирования файла

25.2. Скоростной способ вывода документа на печать

25.3. Автоматизация меню

25.4. Автоматизация передачи файлов по протоколу ftp

25.5. Организация доступа к базам данных

ГЛАВА 26

26.1. Создание регистрационных файлов

26.1.1. Применение команды date для создания журнальных файлов

26.1.2. Создание уникальных временных файлов

26.2. Сигналы

26.2.1. Уничтожение процесса

26.2.2. Обнаружение сигнала

26.3. Команда trap

26.3.1. Перехват сигналов и выполнение действий

26.3.2. Захват сигнала и выполнение действий

26.3.3. Блокировка терминала

26.3.4. Игнорирование сигналов

26.4. Команда eval

26.4.1. Выполнение команд, находящихся в строке

26.4.2. Присвоение значения имени переменной

26.5. Команда logger

26.5.1. Использование команды logger

26.5.2. Использование команды logger в сценариях

26.6. Заключение

ГЛАВА 27

27.1. Сценарий pingall

27.2. Сценарий backup_gen

27.3. Сценарий del.lines

27.4. Сценарий access.deny

27.5. Сценарий logroll

27.6. Сценарий nfsdown

27.7. Заключение

ГЛАВА 28

28.1. Определение наличия каталогов уровня выполнения

28.2. Уточнение текущего уровня выполнения

28.3. Ускорение работы с помощью файла inittab

28.4. Переходим к уровням выполнения

28.4.1. Различные уровни выполнения

28.4.2. Формат сценария уровня выполнения

28.4.3. Инсталляция сценария уровня выполнения

28.5. Использование файла inittab для запуска приложений

28.6. Другие методы, применяемые для запуска и останова служб

28.7. Заключение

ГЛАВА 29

29.1. Определение Web–страницы

29.2. Протокол cgi

29.3. Подключение к Web–серверу

29.4. Сценарии cgi и HTM

29.4.1. Базовый сценарий cgi

29.4.2. Отображение вывода команды интерпретатора shell

29.4.3. Использование SSI

29.4.4. Счетчик количества посещений

29.4.5. Вывод на печать текущих настроек Web–среды с помощью ссылки

29.4.6. Другие общие переменные среды

29.5. Введение в методы get и post

29.5.1. Метод get

29.5.2. Метод post

29.5.3. Заполнение списка

29.5.4. Автоматическое обновление Web–страницы

29.6. Заключение

ПРИЛОЖЕНИЕ А Коды ASCII

ПРИЛОЖЕНИЕ Б

basename

cat

compress

cp

diff

dircmp

dirname

du

file

fuser

head

mkdir

more

nl

printf

pwd

rm

rmdir

script

shutdown

sleep

strings

touch

tty

uname

uncompress

wait

wc

whereis

who

notes

1

2

3



Введение

Настоящая книга посвящена shell–программированию, или, точнее, программированию в интерпретаторе Bourne shell.

Программирование на языке интерпретатора shell приобретает все большую популярность по мере утверждения Linux в качестве удобной в работе и отказоустойчивой операционной системы. Трудно оценить, какое количество пользователей работают с Linux. Эта операционная система распространяется бесплатно, хотя многие компании разрабатывают ее коммерческие варианты. Кроме того, несмотря на сделанные несколько лет назад неутешительные прогнозы специалистов относительно будущего UNIX, данная ОС также не теряет популярности, и число ее приверженцев продолжает расти.

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

При написании книги во внимание принимались шесть основных положений:

   • читатель должен быстро освоить инструментальные средства интерпретатора shell, а также изучить основы программирования на языке shell;

   • книга должна служить не только руководством, но и справочником;

   • для повышения производительности системы читателю следует научиться писать shell–сценарии;

   • необходимо, чтобы shell–сценарии имели четкую и понятную структуру}

   • главы, по возможности, должны быть самодостаточными и независимыми друг от друга, что упрощает их изучение;

   • читатель должен уметь решать ряд административных задач, в частности создавать CGI–сценарии.

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

Если вы приступили к изучению shell–программирования, очевидно, у вас есть на то веские причины. Основные причины изучения shell–программирования заключаются в следующем:

   • язык программирования интерпретатора shell вполне самодостаточен, он содержит все необходимые управляющие конструкции и удобен в применении;

   • открывается возможность быстрого создания сценариев;

   • сценарии позволяют автоматизировать рутинные операции, выполняемые обычно вручную.

Интерпретатор bourne shell

Bourne shell является стандартным интерпретатором команд, который входит в состав всех систем UNIX и совместим с интерпретатором bash в Linux. В книге, посвященной shell–программированию и не привязанной к конкретной операционной системе, в качестве общего знаменателя должен рассматриваться именно Bourne shell. Учтите, что существуют и другие интерпретаторы, такие как bash, Korn shell и С shell. Если в вашей системе установлен интерпретатор bash, сценарии из этой книги будут выполняться в нем, поскольку bash совместим с Bourne shell. Синтаксис интерпретатора Korn shell близок к синтаксису рассматриваемого здесь языка.

Если внимательно изучить сценарии системной инсталляции, то можно обнаружить, что более чем на 95 процентов они являются сценариями Bourne shell. Это объясняется тем, что создатели сценариев знали: они будут выполняться в любой системе UNIX и Linux.

Переносимость интерпретатора shell

Если необходимо, чтобы создаваемый сценарий выполнялся под управлением любой системы, он должен обладать свойством переносимости. Переносимость сценариев определяется двумя основными факторами: • синтаксисом языка применяемого интерпретатора shell; • используемыми командами интерпретатора.

Проблемы, связанные с первым фактором, решаются автоматически, если сценарии создаются для интерпретатора Bourne shell.

Что касается второго фактора, то для большинства shell–сценариев характерна следующая особенность: по крайней мере, 20 процентов (а то и больше) их рабочего времени затрачивается на выполнение таких shell–команд, как cp, mv, mkdir и др. Здесь и заключена проблема переносимости. Дело в том, что поставщики разных операционных систем оснащают эти команды различными наборами опций. В нашей книге используются сценарии общего характера и применяются только те опции и команды, которые присутствуют как в System V, так и в BSD. Если же имеются какие‑либо различия, то приводятся альтернативные команды, но это случается сравнительно редко.

Структура книги

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

Книга состоит из пяти частей, посвященных различным аспектам программирования на языке интерпретатора shell.

Интерпретатор shell

В первой части книги рассматриваются общие вопросы, связанные с работой в интерпретаторе shell.

В главе 1 рассказывается о правах доступа к файлам и каталогам, а также о том, как создавать символические ссылки.

Чтобы на поиск созданного вами файла не уходило много времени, прочитайте

главу 2, посвященную команде find .

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

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

Фильтрация текста

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

В отдельных главах описаны: grep – утилита поиска текстовых файлов (глава 8), awk – текстовый редактор, имеющий собственный язык сценариев (глава 9), sed – потоковый редактор, позволяющий выполнять быстрое редактирование (глава 10), и tr – утилита трансляции символов (глава 12). В главе 11 обсуждаются вопросы сортировки и объединения файлов, а также принципы работы с отдельными фрагментами текста.

Регистрация в системе

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

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

В главе 15 даны рекомендации относительно того, как правильно употреблять различного рода кавычки и другие специальные символы интерпретатора shell, что позволит вам эффективно работать с системными переменными.

Основы shell–программирования

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

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

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

В главе 21 вы узнаете, как форматировать текст при выводе на экран. Отдельная глава, 22, посвящена вопросам обновления файлов. В главе 23 сосредоточены основные сведения об отладке сценариев.

Завершает данную часть обзор встроенных shell–команд, которые до этого не рассматривались.

Совершенствование навыков по написанию сценариев

В пятой части состоится знакомство с современными методами создания сценариев.

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

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

Глава 27 включает небольшую коллекцию полезных сценариев. Один из них позволяет запрещать другим пользователям доступ к вашим файлам, не модифицируя файл /etc/passwd.

Если вы интересуетесь вопросами разработки HTML–страниц, прочитайте главу 29, в которой рассматривается создание CGI–сценариев, но не с помощью языка Perl, а с помощью интерпретатора Bourne shell.

В книгу включены два приложения: приложение А, содержащее таблицу кодов ASCII, и приложение Б, в котором представлен ряд интересных shell–команд.

Что нужно знать

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

Чтобы запускать CGI–сценарии из главы 29, нужно располагать инсталлированным Web–сервером и иметь право выполнять CGI–сценарии.

Соглашения, принятые в книге

В книге употребляются следующие обозначения и шрифтовые выделения:


[Ctrl+клавиша]

Означает нажатие указанной клавиши одновременно с клавишей [Ctrl]; например, [Ctrl+O] – это указание одновременно нажать клавиши [Ctrl] и [О]

Courier New

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

Courier New

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

В первых двух частях книги можно встретить примечания наподобие следующего:

В Linux…

Они служат для того, чтобы кратко описать различия между синтаксисом рассматриваемой команды в BSD/Linux и System V.

Приводимые в книге сценарии протестированы в Linux (Red Hat) и в AIX. Не которые сценарии протестированы в системе Data Generals.

ЧАСТЬ 1

Интерпретатор shell

ГЛАВА 1

Файлы и права доступа к ним

Если вы не хотите, чтобы кто угодно получал доступ к вашим файлам, изучите назначение битов режима. Благодаря им можно управлять доступом к файлам и каталогам, а также указывать тип доступа к создаваемым файлам. Это лишь небольшая часть системы безопасности в UNIX и Linux. Но на данный момент нас интересует не система безопасности в целом, а только та ее часть, которая имеет отношение к файлам и каталогам.

В этой главе рассматриваются следующие темы:

   • права доступа к файлам к каталогам;

   • биты смены идентификаторов {SUID и SGID);

   • изменение владельца файла или каталога с помощью команд chown и chgrp;

   • команда umask;

   • символические ссылки.

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

Примечание:

Пользователь root (системный администратор) может отменить практически все ограничения, заданные рядовым пользователем.

Доступ к созданному файлу может осуществляться тремя способами:

   • Путем чтения, при этом содержимое файла отображается на экране.

   • Путем записи, при этом содержимое файла редактируется или удаляется.

   • Путем выполнения, если файл содержит сценарий интерпретатора shell либо является программой.

Пользователи, имеющие доступ к файлу, делятся на три категории:

   • Владелец файла, создавший его.

   • Члены группы, к которой относится владелец файла.

   • Остальные пользователи.

1.1. Информация о файлах

После создания файла система сохраняет о нем всю информацию, которая может когда‑либо понадобиться, в частности:

   • раздел диска, где физически находится файл;

   • тип файла;

   • размер файла;

   • идентификатор владельца файла, а также тех, кому разрешен доступ к файлу;

   • индексный дескриптор;

   • дата и время последнего изменения файла

   • режим доступа к файлу.

Рассмотрим типичный список файлов, полученный в результате выполнения команды ls -l.

$ ls -l

total 4232

-rwxr‑xr‑x

1 root

root

3756 Oct

14

04:44

dmesg

-r‑xr‑xr‑x

1 root

root

12708 Oct

3

05:40

ps

-rwxr‑xr‑x

1 root

root

5388 Aug

5

1998

pwd

Информацию, предоставляемую командой ls -l, можно разбить на следующие части:


total 4232

Суммарный размер файлов в каталоге

-rwxr‑xr‑x

Режим доступа к файлу, отображаемый в виде строки из десяти

символов. Первый символ ('-') указывает на то, что текущая запись

относится к файлу (если на его месте стоит символ d, значит,

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

категории:

rwx – права владельца (первая триада);

r‑x – права группы (вторая триада);

r‑x – права остальных пользователей (последняя триада).

Символ r означает право чтения, символ w – право записи,

символ x – право выполнения, символ ' – ' -oтсутствие соответ-


    Ваша оценка произведения:

Популярные книги за неделю