Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1_ОСС_Методичка___.docx
Скачиваний:
38
Добавлен:
19.05.2015
Размер:
13.86 Mб
Скачать

Предостережение

Скрипты из директория /etc/rcS.d выполняются на уровнях от 1 до 5, так что вы, как правило, не должны их трогать, если не знаете, что они делают. Если вы случайно отключите ключевой сервис, вам, возможно, придется воспользоваться спасательным диском для того, чтобы ликвидировать ошибку.

Вывести информацию о всех выполняющихся процессах можно с помощью команды ps aux:

user@desktop ~ $ ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 1432 480 ? S 13:16 0:01 init [3]

root 2 0.0 0.0 0 0 ? SN 13:16 0:00 [ksoftirqd/0]

root 3 0.0 0.0 0 0 ? S< 13:16 0:00 [events/0]

..

user 8456 0.3 4.4 34932 22944 ? S 13:24 2:15 emacs

user 22537 0.0 0.3 3720 1560 pts/3 Ss 22:37 0:00 /bin/bash

user 8839 0.0 0.1 2644 932 pts/3 R+ 23:01 0:00 ps aux

Оставить в выводе предыдущей команды только системные процессы с помощью команды ps aux | grep -v user:

user@desktop ~ $ ps aux | grep -v user

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 1432 480 ? S 13:16 0:01 init [3]

root 2 0.0 0.0 0 0 ? SN 13:16 0:00 [ksoftirqd/0]

root 3 0.0 0.0 0 0 ? S< 13:16 0:00 [events/0]

...

root 6989 0.0 0.1 1672 704 ? Ss Oct25 0:00 /usr/sbin/syslog

root 7128 0.0 0.1 2020 716 ? Ss Oct25 0:00 /usr/sbin/fcron

Часть процессов, показанные в квадратных скобках, — это потоки ядра, исполняющие специальные функции.

Можно выделить демонов — в столбце терминала они имеют символ «?». Например, системный журнал (syslog) или планировщик задач (cron).

1 Запустим сбор информации обо всех файлах системы с помощью команды find / > files.txt.

user@desktop ~ $ find / > files.txt

2 Найдем идентификатор запущенного только что процесса с помощью команды ps aux | grep find, запущенной в другом терминале.

user@desktop ~ $ ps aux | grep find

user 8178 9.7 0.1 2844 1020 pts/1 R+ 23:45 0:00 find /

user 8230 0.0 0.1 2708 736 pts/2 R+ 23:45 0:00 grep find

Первая строка содержит необходимый PID.

3 Отправим сигнал завершения этому процессу с помощью команды kill 8178, указав в качестве параметара идентификатор процесса.

user@desktop ~ $ kill 8178

Можно убедиться, что на терминале с запущенной командой появились строка «Terminated» и приглашение.

Если попытаться завершить системный процесс, например командой kill 1, появится сообщение об ошибке доступа:

user@desktop ~ $ kill 1

bash: kill: (1) - Operation not permitted

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

Альтернативным способом отправления сигналов процессам — по имени процесса, а не по PID — является команда killall.

4 Выполнив команду killall bash, мы завершим все командные оболочки, а тем самым и сеансы пользователей.

user@desktop ~ $ killall bash

До этого мы отправляли только сигнал завершения процесса. Он может перехватываться и игнорироваться программами. Неперехватываемым является сигнал SIGKILL, который может быть отправлен, например, следующей командой: killall -SIGKILL find

user@desktop ~ $ killall -SIGKILL find

Выполнение задач в фоновом режиме

В данном сценарии изучается работа с заданиями командной оболочки, запуск заданий в фоновом режиме.

1 Запустим длительную команду, например find / > files.txt и приостановим её выполнение с помощью нажатия Ctrl-Z. При этом процессу посылается сигнал SIGSTOP.

user@desktop ~ $ find / > files.txt

[1]+ Stopped find / > files.txt

user@desktop ~ $

Команда приостановлена и запомнена как задача 1 (номер в квадратных скобках).

2 Текущий список запущенных задач командной оболочки можно посмотреть командой jobs.

user@desktop ~ $ jobs

[1]+ Stopped find / > files.txt

3 Возобновить исполнение задания можно командой fg 1, аргументом которой является номер задания.

user@desktop ~ $ fg 1

find / > files.txt

Если еще раз приостановить процесс, можно запустить задачу в фоновом режиме:

bg 1.

user@desktop ~ $ fg 1

[1]+ find / > files.txt &

user@desktop ~ $

Тогда можно будет продолжать работу в командной строке.

4 Команды можно сразу запускать в фоновом режиме. При этом необходимо добавить символ «&» (амперсанд) в конец строки команды: find / -name "*.xml" > xml-list &

user@desktop ~ $ find / -name "*.xml" > xml-list &

[1] 9413

user@desktop ~ $

При этом командная оболочка выводит номер задания и PID созданного процесса.

Демон – это задача, выполняющаяся в фоновом режиме, и при запуске машины стартует целая маленькая армия таковых. Бывают демоны управления автоматизированными задачами, демоны для управления питанием и параметрами CPU, демоны для печати и демоны для ведения системных журналов. Некоторые выдают свое происхождение, прибавляя к именам букву «d», другие предпочитают названия-ребусы навроде «binfmpt-support» или «brltty».

Говоря о демонах, большинство подразумевает сервисы. Часто они стартуют при загрузке и скромно выполняются в фоновом режиме – но это не обязательно легковесные средства управления системой. Нет причин не считать демонами и полные пакеты приложений. Какие сервисы выполнять, а какие – нет, целиком зависит от вашего дистрибутива и целей его применения. Если вы используете дистрибутив, ориентированный на серверное применение, то весьма вероятно, что в числе демонов будет web-сервер Apache вместе со своей школой приложений-помощников. Это беспардонный побор ваших ресурсов, если web-сервер вам ни к чему, а ведь еще не так давно дистрибутивы типа Mandriva устанавливали и запускали web-сервер по умолчанию. В наши кризисные времена, скорее всего, такого не происходит, но весьма вероятно, что у вас все еще остается что-нибудь ненужное, «крутящееся» в фоновом режиме.

Список потенциальных нарушителей

Есть много способов узнать, какие сервисы выполняются в вашей системе, но самый ясный из них – прибегнуть к команде под названием chkconfig. Может потребоваться установить ее вручную через ваш менеджер пакетов, но, будучи запущенной в командной строке, она создаст список выполняющихся сервисов и выдаст его в терминал. Запуск программы на Ubuntu по умолчанию дал нам 93 различных задачи, а на OpenSUSE 11 – только 83. Первым делом вы отметите, что точное определение, чем занимается та или иная служба, весьма затруднено. Вот что было вверху списка вывода chkconfig на машине с Ubuntu:

acpi-support 2345

acpid 2345

alsa-utils off

anacron 2345

apmd on

Слева стоят названия сервисов, а справа от каждого из них находится описание уровня его запуска (runlevel). Linux, как и Unix, использует различные уровни запуска для разных сервисов. Например, уровень запуска 1 обычно используется для аварийной загрузки в режиме однопользовательской системы. Это значит, что в нем нет сети и, конечно, никакого графического рабочего стола.

Пример выше показывает, что демон anacron, отвечающий за выполнение задач в назначенное время, будет запущен, когда система загружается на уровнях 2, 3, 4 и 5. Проблема с уровнями запуска состоит в отсутствии стандарта для разных дистрибутивов. Для всех дистрибутивов одинаковы только уровни 0 и 6, используемые соответственно для остановки и перезагрузки компьютера. В Gentoo уровень запуска 3 – это полное многопользовательское окружение с рабочим столом. В Slackware ему отвечает уровень 4, а в Ubuntu, Fedora и OpenSUSE – уровень 5.

Окно настройки сервисов Ubuntu выдает список задач, которые можно безопасно удалять, если вы умеете обходиться без них.

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

Хотя GUI-утилиты управления сервисами имеют много преимуществ, ни одна из них не превосходит chkconfig в ясности использования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]