Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LINUX / ЛП_ieem_linux.doc
Скачиваний:
114
Добавлен:
27.03.2016
Размер:
1.94 Mб
Скачать

Архиворование данных и управление системными процессами

ОПИСАНИЕ СОСТАВИЛ:

КОЗЛОВ А.В.

МОСКВА 2007

Лабораторный практикум по курсу: “Операционная система Red Hat Linux

Лабораторная работа №4

Архивирование данных и управление системными процессами

Цель работы: на основе командного интерпретатора BASH научиться архивировать данные ОС Linux; научиться управлять процессами (ставить, снимать и сортировать процессы, изменять приоритет процесса), ставить задачи и управлять задачами в ОС Linux.

Теоретические сведения

Управление задачами и процессами. В процессе работы с операционной системой Linux пользователь часто запускает (выполняет) встроенные и внешние приложения. Такими приложения чаще всего выступают текстовые и графические редакторы, системы автоматизированного проектирования, программы общения по сети, музыкальные и видео плееры, программы диагностики работы компьютера, web-браузер и некоторые другие. При этом неоспоримым достоинством Linux является наличие многозадачного режима, что позволяет пользователю многие из перечисленных приложений запускать одновременно. Например, слушая музыку, пользователь имеет возможность рисовать рисунки в графическом редакторе и одновременно общаться с другими пользователями с помощью icq-клиента. Все приложения в виде отдельных окон располагаются на рабочем столе пользователя. При этом для запуска нового приложения достаточно выбрать и запустить новую пиктограмму (иконка в Linux) на рабочем столе или выбрать ее из меню. Мы так к этому привыкли, что даже трудно себе представить, что операционные системы предыдущих поколений сторонних разработчиков не позволяли запускать одновременно несколько приложений. Одной из причин этому являлась низкая производительность компьютеров предыдущих поколений. Сейчас все по-другому.

Работа пользователя в текстовой консоли терминала на самом компьютере (хосте) или удаленно с другого компьютера также позволяет пользователю запускать одновременно несколько приложений. Вы спросите: как, если имеется всего одна строка командного приглашения Linux? Все дело в том, что запуск приложений из под консоли терминала можно производить в интерактивном и фоновом режимах. При запуске нового приложения (программы) ставиться новая задача, задача провоцирует запуск одного или нескольких процессов в оперативной памяти компьютера. Для полного понимание определим два новых термина: задача и процесс. Задача – это приложение, которое можно запустить и которой можно управлять в операционной системе. Процесс – это программа, которая возникает в оперативной памяти компьютера при постановке задачи. Процессы вызываются не только действиями пользователей в результате постановки задачи пользователя. Система также запускает свои процессы, как называемые демоны. Демоны – программы, которые работают непрерывно, обрабатывая периодические служебные запросы. Например, демон dtlogin контролирует регистрацию пользователей в системе. Каждому процессу назначается уникальный идентификационный номер (PID – process identification data), через который ядро системы следит за процессом и управляет им. PID представляет собой номер, который позволяет пользователю следить за процессом и оказывать на него воздействие. Ядро системы должно знать, что конкретному процессу разрешено. Для этого оно проверяет сведения о нем: сверяет UID (user identification data) и GID (group identification data) процесса, которые полностью совпадают с UID и PID пользователя, запустившего процесс. Когда запускается процесс, сначала создается его дубликат. При этом новый процесс называется дочерним, а процесс, который его породил – родительским. Потом дочерний процесс замещает копию кода, который создал родительский процесс, тем кодом, который сам дочерний процесс готовиться запустить. Пока выполняется приложение, оболочка ждет завершение дочернего процесса. По окончанию работы программы родительский процесс завершает дочерний процесс и ждет новую команду.

Интерактивный и фоновый режимы. При запуске исполняемого приложения bigtask в интерактивном режиме, пользователю в командном приглашении надо просто ввести название команды и нажать Enter. При этом в данном командном приглашении Linux уже больше ничего ввести не удастся, пока не выполнится предыдущее приложение. Если же требуется выполнить с одной командной строки несколько приложений, то предыдущее приложение нужно перевести в фоновый режим либо изначально запускать задачу в фоновом режиме. Фоновые операции особенно удобны при выполнении заданий, требующих много времени. Например, при выполнении печати можно одновременно редактировать какой-нибудь файл. Для того чтобы выполнить задачу в фоновом режиме, необходимо в конце ее поставить амперсанд (&). При вводе такой команды в фоновом режиме система выдает на экран номер задания пользователя и системный номер процесса. При этом система указывает в квадратных скобках номер задания, по которому пользователь может следить за ним и им управлять. Так же отображается системный номер процесса – номер, под которым задание проходит в системе. В фоновый режим можно переместить несколько задач, при этом система каждому присваивает номер для связи с пользователем.

Команда ps. Просмотр процессов осуществляется командой ps (process status), которые выполняются в текущий момент. Команда ps выводит следующие сведения о процессе: идентификатор процесса PID, идентификатор терминала TTY, суммарное время выполнения процесса TIME, а также команду, которой был вызван процесс CMD. Формат команды: ps параметр(ы) . В таблице 8 приведены параметры команды ps.

Таблица 8 – Параметры команды ps

Параметр

Описание

-aux

Отображении полного перечня процессов в системе.

-e

Выводится информация о каждом процессе в системе: PID, TTY, TIME, CMD.

-f

Выдается подробный вывод. Наряду с данными по опции –e также выводится информация UID (владелец процесса), PPID (ID родительского процесса) и STIME (время запуска процесса).

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

Полученная информация показывает, что большинство процессов были созданы 25 Марта, запущены под правами суперпользователя root, время исполнения большинства процессов – нулевое. Так как большинство процессов были созданы при отсутствии запуска приложений из под терминала системы, то в столбце TTY стоит знак вопроса (означает принадлежность процесса к системному). В таблице 9 приведем описание всех полей команды ps с опциями –ef .

Таблица 9 – Описание полей данных при использовании команды ps

Столбец

Описание

UID

Имя владельца процесса

PID

Уникальный идентификатор процесса

PPID

Уникальный идентификатор родительского процесса

C

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

STIME

Время запуска процесса (МесяцДень)

TTY

Терминал, который использовался при запуске процесса (у)

TIME

Суммарное время работы процесса.

CMD

Имя команды, которая породила процесс.

Надо оговориться, что время исполнения процесса в памяти компьютера не совпадает с реальным текущим временем. Это связано с большим количеством процессов и не равными правами (приоритетами) между ними. Поиск нужного процесса можно осуществить с помощью команд ps, grep и программного канала. Например, найдем все процессы, которые начинаются на букву «l». Апострофы можно опустить.

Команда top. Для просмотра существующих процессов также предусмотрена команда top в Linux. В отличие от ps она имеет свою интерактивную среду и в реальном времени изменяет информацию о ходе выполнения процесса. Пользователь может настроить top так, чтобы информация о процессах обновлялась каждую секунду или даже долю секунды. При этом top в отличие от ps отображает реальный расход процессорного времени для каждого процесса, расход оперативной памяти и некоторую другую информацию.

Команда vmstat. Данная команда предназначена для получения информации пользователем об эффективности использования различных компонентов системы. Например, памяти, центрального процессора, устройств ввода-вывода, и выполнения операций подкачки. При этом на экран выводится информация с полями, содержащими данные о работе различных компонентов системы. Если в качестве одного из параметров этой команды указать период времени, то информация будет выводится повторно через указанный интервал, обычно несколько секунд. Кроме того, в Linux имеется команда free , при вводе которой пользователь может узнать объем свободной оперативной памяти, в частности выяснить, сколько памяти свободно и сколько используется, а также сколько памяти выделено для буферов и файла подкачки.

Команда pgrep. Данная команда является более эффективным способом поиска процесса по имени. Команда pgrep отображает PID процесса, который соответствует шаблону поиска в командной строке. Например, отобразим PID процесса lp.

С командой pgrep используются следующие параметры.

Таблица 10 – Параметры команды pgrep

Параметр

Описание

-x

Выводятся PID, полностью совпадающие с шаблоном.

-n

Выводятся только более новые PID, чем тот, что соответствует шаблону. Выводится ID процесса, соответствующего шаблону.

-U

Отображаются PID, которые принадлежат заданному пользователю. Требуется задать только имя пользователя.

-l

Наряду с PID процесса выводится его имя.

В следующем примере покажем использование команды pgrep с параметром –l (вывод PID и имени процесса).

Сигналы. Управление процессами осуществляется при помощи сигналов. Сигнал – сообщение, несущее определенный номер. Linux использует сигналы для сообщения о прерываниях, сгенерированных пользователем, а также о неправильных системных вызовах, нарушенных конвейерах, неверных инструкциях и других условиях. Сигналы позволяют воздействовать на процессы, выполняющиеся в системе, он посылает процессу информацию о том, что произошло новое событие, на которое процесс должен прореагировать. Например, при нажатии комбинации клавиш Control-C процессу отправляется стоп-сигнал, по которому он должен завершить свою работу. Процесс считывает номер сигнала и в зависимости от номера реагирует определенным образом.

Таблица 11 – Перечень некоторых сигналов.

Тип

Имя

Номер

Генерирующее условие

Отсутствие сигнала

0

Выход по команде exit или при достижении конца программы.

Разрыв

SIGHUP

1

Разрыв линии.

Прерывание терминала

SIGIN

2

Нажатие клавиши прерывания (например, Ctrl-C).

Прекращение

SIGQUIT

3

Нажатие клавиши прекращения (обычно, Ctrl-Shift-\ или Ctrl-Shift-|).

Уничтожение

SIGKILL

9

Самый сильный сигнал для процесса. Применять в крайнем случае.

Завершение программы

SIGTERM

15

Сигнал воздействия на процесс по умолчанию.

Стоп

SIGTSTP

20

Нажатие клавиши приостановки (обычно Ctrl-Z).

Команды kill и pkill. Снятие процессов осуществляется с помощью команды kill совместно с использованием номера сигнала. При этом обычно с kill используются два основных сигнала: 15 (используется по умолчанию) и 9 (уничтожением процесса). Старайтесь не применять 9 сигнал, т.к. завершение процесса с 9 сигналом иногда может привести к непредсказуемым последствиям. Сигнал 9, действую на процесс, приводит к незамедлительному завершению последнего. Например, если вы записываете диск и уничтожаете этот процесс 9 сигналом, вы можете повредить как сам диск, так и устройство CD-ROM. Или завершая процесс печати большого документа, вы можете повредить печатающее устройство. Или завершая сеанс работы с компьютером путем уничтожения соответствующего процесса во время архивирования большого массива данных, вы можете повредить жесткий диск и так далее. В следующем примере с помощью команды kill завершим работу демона lpsched по его PID.

Можно завершить работу процесса по его названию с помощью команды pkill:

Архивирование и сжатие данных. По достижению определенного этапа работы пользователя с операционной системой наступает момент, когда пользователю требуется сохранять и резервировать данные. Такие операции необходимо периодически выполнять для сохранения и резервирования данных на других носителях в случае разрушения основной системы или, например, в результате сбоя жесткого диска с данными (основного носителя). Кроме того, сохранение данных требуется также для обмена ими с другими пользователями при передачи их по сети. Не смотря на то, что подобные действия являются частью задач суперпользователя системы root, пользователю также требуется позаботиться о своих данных, так как кто лучше него знает, что ему требуется сохранить на будущее.

В Linux операции по сохранению и резервированию данных разделены на архивирование и сжатие. Архивирование данных – это процесс создания одного пакета, куда включены множество фалов, при этом размер общего пакета практически равен сумме размеров всех входящих в него файлов. Сжатие данных – процесс упаковки файлов или каталогов, направленный на уменьшение имеющегося их размера. Обычно при резервировании данных сначала их архивируют, а затем сжимают. Хотя возможны и другие варианты.

Команда tar . Команда tar относится к командам архивирования данных. Смысл ее работы заключается в сборе всех файлов, входящих в состав нового пакета. Кроме того, он также раскрывает созданные им ранее пакеты для получения исходных файлов. Таким образом, tar есть своеобразный мультиплексор–демультиплексор, выражаясь в терминах микроэлектроники. Команда tar помещает файлы в один архив – так называемый tar-файл. По умолчанию архив хранится на магнитной ленте, но он также может представлять собой обычный файл. Формат команды: tar функция(и) файл_архива имя_файла(ов) . В таблице 12 приведены различные функции команды tar .

Таблица 12 – Параметры команды tar

Функции

Определение

c

Создание нового tar-файла. Запись начинается с начала файла.

t

Просмотр содержимого tar-файла. Разархивирования не происходит.

x

Извлечение заданных файлов из tar-архива.

f

Используется для архивации в файл или из файла.

v

Выводятся комментарии (verbose mode).

r

Заданные файлы дописываются в конец ленточного архива.

u

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

e

При первой ошибке происходит немедленный выход.

h

Указание интерпретировать символические таким же образом, как обычные файлы и каталоги.

m

Используется при извлечении файлов из архива. Временем последней модификации становиться момент извлечения.

o

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

w

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

Выполним архивацию данных в директории laba2 с помощью команды tar, создадим новый файл yyy и допишем его в конец архива, удалим все файлы, кроме tar-файла, а также разархивируем данные обратно.

Команда compress. Следующей командой, которую мы рассмотрим, является команда compress. В отличие от команды tar команда compress является командой сжатия (упаковки) файлов и позволяет уменьшить их текущий размер. Особенно это полезно при работе с файлами большого размера: они занимают много места на диске и медленнее, чем маленькие, переносятся из системы в систему по сети. Коэффициент сжатия зависит от типа файла. Текстовые файлы уменьшаются на 60-80%. После сжатия файл заменяется новым, имеющим расширение .Z . Владелец и имя последней модификации остаются прежними, даже не смотря на то, что содержимое файла полностью изменилось. Формат команды: compress опция имя_файла . Обычно совместно с командой используют опцию –v , которая используется для вывода комментарий процесса. Сжатие уже упакованного файла приводит к увеличению, а не уменьшению размера. Распаковка таких файлов осуществляется командой uncompress , которая возвращает сжатые файлы к исходному состоянию. Совместно с uncompress , наряду с опцией –v , также используют опцию –c , которая позволяет просматривать содержимое упакованного файла. В следующем примере удалим все файлы, кроме tar-пакета, запакуем командой compress tar-файл и с помощью средств перенаправления просмотрим содержимое папки laba2.

Минус после опций tar означает, что содержимое для tar передается с uncompress. Команда compress при упаковке показывает, на сколько процентов удалось сжать файл. В данном случае размер Z-файла по сравнению с исходным tar-файлом уменьшился более чем в 3 раза.

Команда zcat. Команда zcat позволяет просматривать содержимое Z-файлов, сжатых при помощи compress. Zcat анализирует содержание compress и показывает его так, будто он и не был сжат. После выполнения этой команды в упакованном файле ничего не изменяется, он по-прежнему остается в сжатом виде. Формат команды: zcat имя_файла .Это эквивалентно uncompress –c имя_файла.Z . Если надо извлечь содержимое tar-файла без его распаковки, можно выполнить следующую команду.

Команда gzip. Команда gzip также предназначена для сжатия файлов. При ее использовании к сжатому файлу добавляется расширение .gz . Формат команды: gzip имя_файла имя_файла … На вход этой команды можно использовать большое количество файлов. После сжатия к каждому файлу добавиться расширение .gz . Распаковка файлов с расширением .gz осуществляется командой gunzip. Например, gunzip имя_файла . В следующем примере распакуем Z-файл с помощью uncompress, запакуем tar-файл с помощью gzip, и с помощью gunzip распакуем содержимое обратно. Обратите внимание, что после сжатия tar-файла, его размер значительно уменьшился. Также обращаем ваше внимание, что после распаковки Z-файла и gz-файла командами uncompress и gunzip, соответственно, запакованные Z-файл и gz-файл удаляется.

Команда gzcat. Просматривать содержимое файлов, сжатых gzip и compress, можно с помощью команды gzcat. Команда анализирует содержимое сжатого файла и выводит его так, будто он не сжат. После выполнения команды в сжатом файле ничего не меняется – данные по-прежнему в упакованном файле. Формат команды: gzcat имя_файла .. В следующем примере покажем как с помощью команды gzcat просматривать содержимое gz-файлов. Для этого заново создадим gz-файл с помощью команды gzip. Остальные файлы из текущей папки удалим.

Команда zip. Команда zip в отличие от предыдущих команд позволяет упаковывать сразу несколько файлов в один архив. К имени сжатого файла автоматически добавляется расширение .zip , если не было специально указано иное. Формат команды: zip имя архива архивируемый(ые) файл(ы) . Восстановление zip-файла осуществляется командой unzip: unzip file.zip . На следующем примере покажем, как можно использовать команду zip. Упакуем все файлы в текущей директории в новый файл files.zip .

Команда jar. Команда jar применяется в тех же случаях, что и tar. Ее специфика в том, что jar одновременно и архивирует и сжимает заданные файлы. Несколько файлов копируются и упаковываются в один архивный файл. Формат команды: jar параметры файл_архива имя_файла(ов) / каталога(ов). Параметры jar приведены в таблице 13.

Таблица 13 – Параметры команды jar

Параметр

Описание

c

Создание нового jar-файла.

t

Вывод содержимого jar-файла.

x

Извлечение заданных файлов из jar-архива.

f

Позволяет назначать целевой файл.

v

Режим комментарий.

В следующем примере упакуем все файлы в новый jar-архив.

Команда cpio (copy in / out). Команда cpio позволяет архивировать данные в отдельный файл или на ленту, а также извлекать указанные файлы из архива. При этом данные упаковываются на ленту эффективнее, чем с помощью tar. При восстановлении данных с ленты пропускаются все сбойные участки. Хорошая переносимость между различными системами. С помощью jar можно создавать многоатомные архивы, при архивации файлов jar время доступа к ним не меняется. Формат команды: jar параметр(ы) имя_файла(ов) . В таблице 14 показаны основные параметры jar.

Таблица 14 – Параметры команды cpio

Параметр

Определение

-o

Создание архива. Файлы и пути к ним копируются на ленту или в файл (copy in).

-c

Чтение или запись заголовочной информации в формате ASCII

-t

Чтение содержания файлов.

-v

Выдает данные в формате, напоминающем работу команды ls -l

-a

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

-M текст

Позволяет задать текст, что достигнут конец ленты.

-O имя_файла

Результат работы cpio направляется в файл.

-I имя_файла

Данные считываются с указанного файла.

-i

Извлечение файлового архива с ленты или из файла (copy out).

-p

Считывание со стандартного ввода списка путей к файлам.

В следующем примере с помощью команды find включим в архив cpio_arch.txt лишь те файлы, которые изменились в течении последней недели.

Соседние файлы в папке LINUX