Условная подстановка позволяет проверить, установлен ли определенный параметр, или использовать вместо его значения другое. Значение самого параметра при этом не изменяется. Допустимые виды условных подстановок перечислены в таблице 8.4.
Условная подстановка Таблица 8.4
Конструкция Выполняет подстановку ${параметр:-строка} Значение по умолчанию. Если параметр имеет непустое значение, то подставляется оно, иначе — указанная строка ${параметр:=строка} Присваивание значения по умолчанию. Если параметр не имеет непустого значений, то ему присваивается «строка», после чего значение подставляется. Конструкция допустима только для переменных оболочки ${параметр:?сообщение} Ошибка, если пусто. Если параметр не имеет непустого значения, то выводится указанное сообщение. Сообщение можно опустить, тогда будет выведено стандартное сообщение ${параметр:+строка} Дополнительное значение. Если параметр имеет непустое значение, подставляется «строка», иначе — пустая строка ${параметр#шаблон} Подставляется значение параметра, в котором из головной части удален наименьший фрагмент, удовлетворяющий шаблону ${параметр##шаблон} Подставляется значение параметра, в котором из головной части удален наибольший фрагмент, удовлетворяющий шаблону ${параметр%шаблон} Подставляется значение параметра, в котором из хвостовой части удален наименьший фрагмент, удовлетворяющий шаблону ${параметр%%шаблон} Подставляется значение параметра, в котором из хвостовой части удален наибольший фрагмент, удовлетворяющий шаблону ${#параметр} Если параметр есть * или @, подставляется количество позиционных параметров, иначе — длина значения параметра в байтах
Например, команда
echo ${0:+"Моя любимая оболочка"}
заменит непустое значение параметра $0, равное «bash», на указанное дополнительное значение. Команда ${1:?"Не хватает параметра"}
выведет сообщение, если сценарий, в котором она встречается, будет случайно запущен без аргументов. Правильным подходом к написанию сценариев было бы выводить не такое малоинформативное сообщение, а краткую справку об использовании этого сценария, подобную тому, что можно увидеть, запустив почти любую команду с ключом -usage.Подстановки # и % полезны, например, тогда, когда нужно «выкусить» из полного пути к файлу собственно его имя или, наоборот, родительский каталог:
$ path=`which twm`; echo $path
/usr/X11R6/bin/twm
$ echo ${path##*/}
twm
$ echo ${path%/*}
/usr/X11R6/bin
$
8.6. Функции
Оператор определения функции имеет следующий синтаксис:
[function] имя() {
список
}
Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания. Вызывается функция подобно любой команде — по имени. Переданные ей аргументы в теле функции рассматриваются как позиционные параметры, причем в вызывающем сценарии значения позиционных параметров не меняются. Значение позиционного параметра 0 — это имя функции.
Вызов функции не порождает нового процесса, поэтому ей видны локальные переменные, установленные вызывающим сценарием или оболочкой до ее вызова.
Ошибка при выполнении функции приводит к немедленному ее завершению с ненулевым кодом возврата. Если вы хотите передать в коде возврата собственное значение, пользуйтесь оператором
return <число>
. Отсутствие числа или всего оператора return означает возврат нулевого значения. Код возврата функции помещается в переменную $? и доступен до выполнения следующей команды.Если вы задумали функцию как «библиотечную» (вызываемую из разных сценариев и в связи с этим определенную в отдельном файле), то для того, чтобы определить ее в текущем процессе, нужно не запускать ее файл на выполнение, а прочитать его встроенной командой source.
8.7. Обработка сигналов и протоколирование
Обычно при завершении сеанса работы пользователя система посылает всем запущенным им процессам сигналы (п.3.3.2), которые приводят к прекращению этих процессов. Возможно, вам понадобится обеспечить своему сценарию возможность продолжать выполнение даже после отключения запустившего его пользователя. Тогда посланный сигнал придется перехватывать и обрабатывать собственными средствами сценария.
Перехватить сигнал можно с помощью встроенной команды trap. Формат ее следующий:
trap [-lp] [команда сигнал сигнал...]
Ключ -l выводит список имен и номеров сигналов, известных в ОС Linux. Ключ -p выводит список команд, связанных с каждым сигналом. Сигналы указываются по номерам или именам, приставку SIG можно опускать.
Команда — это та команда, которая будет выполнена оболочкой при получении сигнала (ваш собственный обработчик). Если вместо нее указать пустую строку, то перечисленные сигналы будут проигнорированы. Если вместо сигналов указать EXIT или 0 (фиктивный номер), то команда будет выполнена при завершении сеанса работы с оболочкой.
Чаще всего перехватываются сигналы:
01 SIGHUP hangup, освобождение линии связи;
02 SIGINT interrupt, прерывание;
03 SIGQUIT quit, выход;
15 SIGTERM terminate, программный сигнал завершения.
Чтобы игнорировать все эти сигналы, введите команду:
$ trap "" 1 2 3 15
Протоколировать работу собственного сценария можно двумя способами.
Первый состоит в использовании команды-фильтра tee (п.3.4.6). Название этой команды происходит от английского названия буквы T, и действие ее похоже на эту букву: она копирует данные из своего стандартного потока ввода и раздваивает их на стандартный поток вывода и поток в указанный файл:
$ LOGFILE=my_log
$ if [ "$LOGGING" == "true" ]; then
> my_script | tee $LOGFILE; else
> my_script;
> fi
$
Если вы собираетесь не вводить эти команды из командной строки, а включить их в сценарий my_script, то вызов сценария изнутри него самого должен выглядеть так:
exec $0
Встроенная команда exec заменяет текущий процесс (то есть ту дочернюю оболочку, в которой запущен сценарий) на выполняемую команду, и сценарий, завершившись, возвращает управление прямо родительской оболочке. Интерактивную оболочку (ту, с которой вы начинаете сессию) подменить таким образом нельзя.
Если команде exec не указан аргумент, но указано перенаправление ввода-вывода, то exec совершает это перенаправление, продолжая выполнение текущего сценария. Таким способом можно получить динамическое перенаправление:
$ tty
/dev/pts/2
$ echo "Вывожу строку на терминал"
Вывожу строку на терминал
$ exec > log
$ echo "Вывожу строку в файл"
$ echo "И эту в файл"
$ exec > /dev/pts/2
$ echo "А эту снова на терминал "
А эту снова на терминал
$
Второй способ заключается в использовании команды script, которая копирует в файл весь сеанс работы в текстовой консоли: ввод пользователя и вывод команд. Это должен быть в полном смысле слова сеанс работы в командной строке: полноэкранные команды, такие, как редактор vi и даже man, оставляют в файле протокола мусор. Если вы запускаете команду script вручную, то остановить протоколирование можно командой exit.
$ LOGFILE=my_log
$ if [ "$LOGGING" == "true" ]; then
> script my_script $LOGFILE; else
> my_script;
> fi
$
Вызов сценария изнутри него самого должен выглядеть так:
Оглавление
-
Введение
-
Об этой книге
-
Почему Linux?
-
История Linux
-
***
-
Происхождение Linux
-
***
-
***
-
Выбор дистрибутива
-
***
-
***
-
Разное
-
Глава 1 Установка операционной системы
-
1.1. Подготовка жесткого диска
-
1.1.1. Рекомендуемая схема разбиения диска
-
1.1.2. Имена разделов в ОС Linux
-
1.1.3. Разделы и точки монтирования
-
1.2. Загрузка программы установки
-
1.2.1. С использованием загрузочного компакт-диска
-
1.2.2. С использованием загрузочной дискеты
-
1.2.3. С использованием жесткого диска
-
1.2.4. Установка по сети
-
1.3. Установка Fedora Core
-
1.3.1. Описание дистрибутива
-
1.3.2. Особенности установки различных версий Fedora Core
-
1.3.3. Установка загрузчика
-
1.3.4. Продолжение установки
-
1.4. Особенности установки Mandrake 10.0
-
1.5. Проблемы при установке
-
1.5.1. Конфликты Fedora Core 1 и 2 с различным оборудованием
-
1.5.2. Fedora Core: не удается войти в систему как root в графическом режиме
-
1.5.3. Ошибка Signal 11
-
1.5.4. Не определяется мышь
-
1.5.5. Проблемы с переходом в графический режим
-
1.5.6. Проблемы при загрузке
-
1.5.7. Проблемы с графическим экраном загрузчика
-
1.5.8. Не загружается система X Window
-
1.5.9. Я забыл пароль пользователя root
-
1.5.10. У меня больше оперативной памяти!
-
1.5.11. Не работают принтер или звуковая плата
-
1.6. Как удалить Linux
-
1.7. Системы с двойной загрузкой
-
1.7.1. Установка Windows 9x и Linux
-
1.7.2. Установка Windows 9x, Windows NT/2000/XP и Linux
-
1.8. Первый запуск Linux
-
1.9. Стандартные сервисы Linux
-
1.10. Справочная система
-
Глава 2 Файловая система LINUX
-
2.1. Видимая сторона файловой системы
-
2.1.1. Имена файлов и каталогов
-
2.1.2. Назначение основных системных каталогов
-
2.1.3. Типы файлов
-
2.1.4. Команды работы с файлами и каталогами
-
2.2. Изнанка файловой системы
-
2.2.1. Файловая система ext2fs — предшественница ext3fs
-
2.2.2. Журналируемые файловые системы
-
2.3. Создание и монтирование файловых систем
-
Глава 3 Работаем в командной строке
-
3.1. Как устроен Linux: ядро и процессы
-
3.2. Жизнь процесса
-
3.3. Взаимодействие процессов
-
3.3.1. Конвейер (pipe)
-
3.3.2. Сигналы
-
3.4. Командная оболочка. Bash
-
3.4.1. Встроенные команды
-
3.4.2. История команд
-
3.4.3. Переменные
-
3.4.4. Подстановка переменных и команд
-
3.4.5. Шаблоны имен файлов
-
3.4.6. Потоки ввода-вывода
-
3.4.7. Группировка команд
-
3.4.8. Инициализационные файлы bash
-
Глава 4 Рабочее место пользователя
-
4.1. Графическая система X Window
-
4.2. Оконная среда KDE
-
4.2.1. Рабочий стол KDE
-
4.2.2. Запуск программ и переключение между ними
-
4.2.3. Файловый менеджер Konqueror
-
4.2.4. Центр управления KDE
-
4.2.5. Работа со съемными носителями в KDE
-
4.2.6. Добавление собственных команд в контекстное меню KDE
-
4.2.7. Новое в KDE 3.4
-
4.3. Оконная среда GNOME
-
4.3.1. Общее описание и методика работы
-
4.3.2. Добавление собственных команд в контекстное меню GNOME
-
4.3.3. Автоматическая смена обоев
-
4.4. Офисные пакеты
-
4.5. Издательские системы
-
4.6. Графика в Linux
-
4.6.1. Графические редакторы
-
4.6.2. Программы — просмотрщики изображений
-
4.6.3. Как сделать снимок экрана
-
4.7. Полезные трюки
-
Глава 5 Звук и видео в Linux
-
5.1. Почему воспроизведение аудио в Linux лучше, чем в Windows
-
5.2. Прослушивание музыки
-
5.2.1. Сравнение Xmms и NoAtun
-
5.3. «Ограбление» Audio-CD
-
5.4. Программы для просмотра видео
-
5.5. Воспроизведение неподдерживаемых форматов
-
Глава 6 Сеть и интернет
-
6.1. Основные сетевые понятия
-
6.1.1. Протокол и интерфейс
-
6.1.2. Уровни взаимодействия OSI
-
6.1.3. Протокол TCP/IP и IP-адресация
-
6.1.4. DNS — система доменных имен
-
6.1.5. Порты
-
6.1.6. Динамическое выделение адреса
-
6.2. Подключение к локальной сети
-
6.2.1. Настройка сети в Linux Mandrake
-
6.2.2. Настройка сети в Linux Red Hat
-
6.2.3. Настройка сети в Fedora Core
-
6.2.4. Проверка работы сетевого интерфейса
-
6.2.5. Настройка сети в старых дистрибутивах
-
6.3. Подключение к Windows-сети
-
6.4. Подключение к Интернету
-
6.4.1. Настройка модема
-
6.4.2. Подготовка к выходу в Интернет
-
6.4.3. Специальные возможности браузеров
-
6.4.4. Текстовые браузеры
-
6.4.5. Полезный трюк: Что делать, если браузер «подвисает» на какой-то странице
-
6.4.6. Набор программ для работы в Интернете
-
Глава 7 Основы администрирования системы
-
7.1. Что понимается под администрированием системы
-
7.2. Конфигураторы Linux
-
7.3. Пользователи и квоты
-
7.3.1. Учетные записи пользователей
-
7.3.2. Создание и удаление пользователей и групп
-
7.3.3. Квотирование
-
7.4. Подключение и конфигурирование аппаратных устройств
-
7.4.1. Ядро и поддержка устройств
-
7.4.2. Утилиты для работы с модулями
-
7.4.3. Kudzu — утилита для автоматического определения устройств
-
7.4.4. Настройка установленных устройств
-
7.5. Установка программного обеспечения
-
7.5.1. Установка из исходных текстов
-
7.5.2. Установка из бинарных пакетов
-
7.5.3. Установка из пакетов, содержащих исходный код
-
7.6. Клонирование и восстановление системы
-
Глава 8 Язык командного интерпретатора
-
8.1. Параметры
-
8.2. Подстановки
-
8.3. Массивы
-
8.4. Управляющие структуры
-
8.4.1. Условные операторы
-
8.5. Условная подстановка параметров
-
8.6. Функции
-
8.7. Обработка сигналов и протоколирование
-
Глава 9 Управление процессами
-
9.1. Как загружается Linux
-
9.1.1. Начальная загрузка: LILO и GRUB
-
9.1.2. Продолжение загрузки.
-
9.2. Команды управления процессами
-
9.2.1. Иерархия процессов: ps и pstree
-
9.2.2. Информация о ресурсах системы: команды free, df, du
-
9.2.3. Процессы в реальном времени: команда top
-
9.2.4. Приоритет процесса: команды nice и renice
-
9.2.5. Фоновый режим: команды jobs, fg, bg
-
9.3. Протоколирование системы
-
9.3.1. Конфигурационный файл /etc/syslog.conf
-
9.3.2. Сетевое протоколирование
-
9.3.3. Протоколирование ядра. Демон klogd и команда dmesg
-
9.3.4. Что делать с протоколами дальше? Утилита logrotate
-
9.4. Выполнение заданий по расписанию
-
9.4.1. Запуск задания в назначенное время: команда at
-
9.4.2. Диспетчер расписаний — демон cron
-
Глава 10 Резервное копирование и восстановление данных
-
10.1. Восстановление удаленного файла
-
10.1.1. Midnight Commander
-
10.1.2. Утилита debugfs
-
10.2. Стратегия резервного копирования
-
10.3. Оборудование для резервного копирования
-
10.3.1. Стример
-
10.3.2. Магнитооптический диск
-
10.4. Программное обеспечение для резервного копирования
-
10.4.1. Простое резервное копирование по сети
-
10.4.2. Управление стримером
-
10.4.3. Команды dump и restore
-
10.4.4. Архиватор cpio
-
10.4.5. Программа AMANDA
-
10.5. Дублирование данных: введение в RAI D
-
10.6. Как найти, спрятать и безвозвратно уничтожить данные
-
Глава 11 Базовое конфигурирование сервера
-
11.1. Серверные технологии Linux
-
11.2. Организация и состав Linux-сервера
-
11.3. Суперсервер xinetd
-
11.3.1. Установка суперсервера xinetd
-
11.3.2. Настройка суперсервера xinetd
-
11.3.3. Запуск xinetd
-
11.3.3.1. Защита xinetd
-
11.3.3.2. Пример файла конфигурации /etc/xinetd
-
11.4. Удаленный доступ: ssh и telnet
-
11.4.1. Использование telnet
-
11.4.2. Настройка и использование SSH
-
Глава 12 Разделение ресурсов: NFS и SAMBA
-
12.1. NFS — сетевая файловая система
-
12.1.1. Клиент NFS: монтирование сетевого каталога
-
12.1.2. Настройка сервера NFS
-
12.2. Samba: Linux-сервер для Windows-клиентов
-
12.2.1. Samba на сервере
-
12.2.2. Настройка Samba
-
12.2.3. Практические примеры настройки
-
12.2.4. Доступ к принтеру Linux для Windows-машин
-
12.2.5. Доступ к Windows-принтеру с компьютера, работающего под Linux
-
12.2.6. Конфигуратор SWAT
-
12.2.7. Samba и безопасность
-
12.2.8. Оптимизация Samba
-
12.3. Совместное использование каталогов в Linux Mandrake
-
12.4. Программа LinNeighborhood — правильный выбор
-
Глава 13 DNS — служба имен
-
13.1. Введение в DNS
-
13.2. Настройка клиента DNS
-
13.3. Настройка сервера DNS
-
13.3.1. Обновление корневого кэша
-
13.4. Кэширующий сервер DNS
-
13.4.1. Настройка кэширования на DNS-сервере
-
13.4.2. Возможные проблемы и их решение
-
13.5. Вторичный сервер DNS
-
13.6. Просм отр DNS-зоны. Утилита nslookup
-
13.7. Оптимизация настроек сервера DNS
-
13.8. Защита сервера DNS
-
13.8.1. Настройка и запуск DNS-сервера в chroot-окружении
-
13.9. Использование подписей транзакций. Механизм TSIG
-
Глава 14 Почтовый сервер
-
14.1. Установка и настройка sendmail
-
14.1.1. Базовая настройка sendmail
-
14.1.2. Редактирование конфигурационных файлов
-
14.2. Аутентификация в sendmail
-
14.2.1. Установка и настройка SASL
-
14.2.2. Настройка sendmail+SASL
-
14.2.3. Настройка почтовых клиентов с использованием аутентификации
-
14.3. Агент доступа — fetchmail
-
14.4. Автоматическая сортировка входящей почты — программа procmail
-
14.5. Создание списка рассылки
-
14.6. Защита программы sendmail. Программа smrsh
-
Глава 15 Настройка сервера FTP
-
15.1. Сервер WU-FTPD
-
15.1.1. Настройка WU-FTPD. Конфигурационные файлы
-
15.2. Сервер ProFTP
-
15.2.1. Установка и запуск ProFTPD
-
15.2.2. Настройка ProFTPD. Файл /etc/proftpd.conf
-
15.2.3. Разграничение доступа к серверу ProFTP
-
15.3. Утилиты обслуживания FTP-сервера
-
15.4. Виртуальный узел FTP
-
15.5. Защита FTP
-
Глава 16 HTTP-сервер Apache
-
16.1. Установка Apache
-
16.2. Настройка Apache. Файлы конфигурации
-
16.3. Основные настройки. Файл httpd.conf (httpd2.conf)
-
16.3.1. Общие директивы
-
16.3.2. Директивы протоколирования
-
16.3.3. Директивы управления производительностью
-
16.3.4. Директивы обеспечения постоянного соединения с клиентом
-
16.3.5. Директивы создания виртуальных узлов
-
16.3.6. Директивы настройки отображения каталогов
-
16.3.7. Директивы обработки MIME-типов
-
16.3.8. Директивы для работы с многоязычными документами
-
16.3.9. Директивы перенаправления
-
16.3.10. Директивы обработки ошибок
-
16.3.11. Директивы управления доступом к отдельным каталогам
-
16.4. Файл ротации журналов /etc/logrotate.d/httpd
-
16.5. Системный файл конфигурации /etc/sysconfig/httpd
-
16.6. Сценарий запуска сервера Apache /etc/init.d/httpd
-
16.7. Графические конфигураторы Apache
-
16.8. Каталоги пользователей
-
16.9. Виртуальный HTTP-сервер
-
16.9.1. Виртуальные серверы с идентификацией по имени
-
16.9.2. Виртуальные серверы с идентификацией по IP-адресу
-
16.10. SSL и Apache
-
16.10.1. Установка SSL
-
16.10.2. Подключение SSL к Apache
-
16.10.3. Генерирование сертификатов
-
16.11. Пример файла httpd.conf
-
***
-
***
-
***
-
***
-
16.12. Перекодирование русскоязычных документов «на лету»
-
16.12.1. Russian Apache: установка, настройка, использование
-
16.12.2. Настройка перекодировки русскоязычных документов
-
16.13. Защита сервера Apache
-
16.14. Сервер kHTTPd — веб-сервер уровня ядра
-
16.14.1. Настройка kHTTPd
-
Глава 17 Установка и настройка MySQL. Связка Apache + PHP + MySQL
-
17.1. Установка MySQL
-
17.1.1. Назначение пароля суперпользователя
-
17.1.2. Автозапуск сервера MySQL
-
17.1.3. Пользователи сервера MySQL и их права
-
17.2. Клиентская часть MySQL
-
17.3. Установка PHP и настройка связки Apache+PHP+MySQL
-
17.3.1. Первый способ: из пакетов RPM
-
17.3.2. Тестируем созданную конфигурацию
-
17.3.3. Второй способ: из исходных текстов
-
17.4. Защита сервера MySQL
-
17.5. Введение в язык SQL
-
17.5.1. Общие понятия
-
17.5.2. Краткий практический курс SQL
-
Глава 18. Прокси-серверы SQUID и SOCKS
-
18.1. Что такое прокси-сервер?
-
18.2. Установка SQUID
-
18.3. Настройка SQUID
-
18.4. Запуск SQUID
-
18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf
-
18.5.1. Параметры сети
-
18.5.2. Параметры соседей
-
18.5.3. Управление кэшем
-
18.5.4. Протоколирование
-
18.5.5. Параметры внешних программ
-
18.5.6. Параметры администрирования
-
18.6. Списки ACL
-
18.6.1. Параметры доступа
-
18.7. Отказ от рекламы. Баннерный фильтр
-
18.8. Разделение канала с помощью SQUID
-
18.9. Настройка поддержки прокси у клиентов
-
18.10. Технология SOCKS5, или как использовать аську из локальной сети
-
18.10.1. Введение в SOCKS. Прокси-сервер SOCKS5
-
18.10.2. Настройка сервера SOCKS5
-
18.10.3. Запуск сервера socks5
-
18.10.4. Dante — еще один сервер SOCKS5
-
18.10.5. Настройка клиентов SOCKS5 (ICQ и licq)
-
Глава 19 Маршрутизация и межсетевые экраны
-
19.1. Введение в маршрутизацию
-
19.2. Программы маршрутизации в Linux
-
19.2.1. Демон routed
-
19.2.2. Демон gated — правильный выбор
-
19.3. Расширенные средства маршрутизации. Комплекс iproute2
-
19.3.1. Пакет iproute2
-
19.3.2. Утилита ip
-
19.3.3. Просмотр параметров сетевого устройства
-
19.3.4. Операции над адресами: команда ip address
-
19.3.5. Управление таблицей маршрутизации
-
19.3.6. Динамическая маршрутизация
-
19.3.7. Управление правилами маршрутизации
-
19.4. Что такое брандмауэр
-
19.5. Цепочки правил
-
19.6. IPTables — пакетный фильтр для ядер 2.4.x. и 2.6.x
-
19.6.1. Что изменилось в IPTables по сравнению с IPChains
-
19.6.2. Настройка ядра Linux для поддержки IPTables
-
19.6.3. Первичная настройка IPTables. Задание политики по умолчанию
-
19.6.4. Действия над цепочками
-
19.6.5. Правила фильтрации
-
19.6.6. Фильтрация по отдельным пользователям
-
Глава 20 Настройка ядра
-
20.1. Многообразие ядер Linux
-
20.2. Зачем настраивать ядро?
-
20.3. Динамические параметры ядра
-
20.4. Загрузочные параметры ядра
-
20.4.1. Параметры корневой файловой системы
-
20.4.2. Объем памяти
-
20.4.3. Управление RAMDISK
-
20.4.4. Управление планировщиком ввода/вывода
-
20.4.5. Другие параметры ядра
-
20.5. Компиляция ядра
-
20.5.1. Зачем обновлять ядро?
-
20.5.2. Конфигурирование ядра
-
20.5.2.1. Code maturity level options
-
20.5.2.2. General setup
-
20.5.2.3. Loadable module support
-
20.5.2.4. Processor type and features
-
20.5.2.5. Power Management Options
-
20.5.2.6. Bus Options
-
20.5.2.7. Executable file formats
-
20.5.2.8. Device drivers
-
20.5.2.9. Filesystems
-
20.5.2.10. Kernel hacking
-
20.5.2.11 .Cryptographic options
-
20.5.3.Сборка ядра
-
Глава 21 Создаем консольное приложение
-
21.1. Компилятор gcc
-
21.1.1. Вызов gcc
-
21.1.2. Общие опции
-
21.1.3. Опции языка
-
21.1.4. Опции препроцессора
-
21.1.5. Опции компоновщика
-
21.1.6. Опции каталогов
-
21.1.7. Опции отладки
-
21.1.8. Опции оптимизации
-
21.2. Сборочная утилита make
-
21.3. Пакет binutils и другие полезные программы
-
21.3.1. ansi2knr
-
21.3.2. as
-
21.3.3. bison
-
21.3.4. flex
-
21.3.5. gprof
-
21.3.6. strip
-
21.4. Пример программы на С
-
Глава 22 Отладка, трассировка и оптимизация программ
-
22.1. Ошибки и отладка
-
22.2. Отладчик gdb
-
22.3. Пример отладки программы
-
22.4. Трассировка системных вызовов
-
22.5. Оптимизация программ. Профайлер gprof
-
22.5.1. Использование профайлера
-
22.5.2. Как оптимизировать программу
-
Глава 23 Разработка графического приложения: библиотека GTK+
-
23.1. Введение в GTK+
-
23.2. Библиотека Glib
-
23.2.1. Стандартные типы данных библиотеки Glib
-
23.2.2. Функции для работы с памятью
-
23.2.3. Строки и Glib
-
23.2.4. Списки
-
23.2.5. Таймеры в Glib
-
23.3. Первая программа на GTK+
-
23.3.1. Виджиты
-
23.3.2. Окна
-
23.3.3. Изменение размеров окна
-
23.3.4. Обработка сигналов
-
23.3.5. Виджит событий — EventBox
-
23.4. Виджиты
-
23.4.1. Рождение, смерть и состояния виджита
-
23.4.2. Упаковка виджитов, поля ввода и кнопки
-
23.4.3. Переключатели
-
23.4.4. Список
-
23.4.7. Меню
-
23.4.8. Иерархия виджитов
-
Глава 24 Студия Glade
-
24.1. Что такое Glade?
-
24.2. Знакомство с Glade
-
24.3. Работа с проектом
-
24.4. Создание меню
-
24.5. Интересные виджиты
-
Глава 25 Пакет Dialog
-
25.1. Что такое Dialog?
-
25.2. Сообщения
-
25.3. Виджит Yes-no
-
25.4. Окно ввода текста
-
25.5. Зависимые и независимые переключатели
-
25.6. Организация меню
-
25.7. Календарь
-
25.8. Шкала прогресса
-
Глава 26 Взаимодействие процессов в Linux
-
26.1. Способы взаимодействия
-
26.2. Полудуплексные каналы
-
26.3. Каналы типа FIFO
-
26.4. Основные принципы System V IPC
-
26.5. Очереди сообщений
-
26.5.1. Основные структуры ядра для работы с очередями
-
26.5.2. Создание очереди сообщений
-
26.5.3. Постановка сообщения в очередь
-
26.5.4. Получение сообщений очереди
-
26.5.5. Проверка наличия сообщения в очереди
-
26.5.6. Тотальный контроль
-
26.6. Семафоры
-
26.6.1. Создание множества семафоров
-
26.6.2. Выполнение операций над семафорами
-
26.6.3. Контроль семафора
-
26.7. Разделяемые сегменты памяти
-
Глава 27 Создание сетевого приложения в Linux
-
27.1. Протокол TCP/IP
-
27.1.1. Многоуровневая архитектура стека TCP/IP
-
27.1.1.1. Уровень сетевого интерфейса
-
27.1.1.2. Межсетевой уровень
-
27.1.1.3. Транспортный (основной) уровень
-
27.1.1.4. Уровень приложений
-
27.1.2. Структура пакетов IP и TCP
-
27.2 Протокол ICMP
-
27.2.1. Для чего используется протокол ICMP
-
27.2.2. Структура ICMP-пакета
-
27.2.3. Тип и код ICMP-сообщения
-
27.2.4. Функции для работы с протоколом ICMP
-
27.2.4.1. Технические подробности
-
27.3. Программирование сокетов
-
27.3.1. Что такое сокет?
-
27.3.2. Создание и связывание сокета
-
27.3.3. Установление связи с удаленным компьютером
-
27.3.4. Функция gethostbyname()
-
27.3.5. Функции сетевого ввода/вывода
-
27.3.6. Завершение сеанса связи
-
27.3.7. Программа-сервер
-
27.3.8. Программа-клиент
-
27.3.9. Установка опций сокета
-
27.3.10. Сигналы и сокеты
-
27.3.11. Мультиплексирование
-
27.3.12. Неблокирующие операции
-
Глава 28 Программирование ядра
-
28.1. Каркас модуля
-
28.2. Компиляция модуля
-
28.3. Работа с устройствами
-
28.4. Операции над устройством. Поиск устройств
-
***
-
Приложение Таблицы соответствия Windows- и Linux-программ
-
***
-
***