Цель занятия: знакомство с командами по работе с процессами и командами, предоставляющими сведения о системе.
Изучаемые команды: «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы»
В данном сценарии изучаются команды, предоставляющие сведения о системе.
Начальные условия: Командная строка после входа в систему.
Определить имя текущей UNIX-системы с помощью команды uname -a
[user@localhost ~]$ uname -a Linux localhost 2.6.18-wks-smp-alt1 #1 SMP Wed Dec 13 01:43:50 MSK 2006 i686 GNU/Linux
На экран выводится полная версия системы, дата компиляции ядра и тип процессора.
Вывести содержимое каталога proc
с помощью команды ls /proc:
[user@localhost ~]$ ls /proc 1 1511 1730 7 config.gz ide mdstat swaps 10 1524 2 81 cpuinfo interrupts meminfo sys 1050 1569 237 811 crypto iomem misc sysrq-trigger 11 1570 260 82 devices ioports modules sysvipc ...
Признаком операционной системы Linux является наличие
каталога /proc
, который содержит псевдофайлы,
предоставляющие системную информацию и позволяющие настраивать ядро.
Вывести текущие пользовательские сеансы с помощью команды who:
[user@localhost ~]$ who user tty1 Mar 11 20:38 (localhost)
Вывести список всех примонтированных устройств с помощью команды mount:
[user@localhost ~]$ mount /dev/root on / type auto (ro) proc on /proc type proc (rw,noexec,nosuid,gid=19) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620) tmpfs on /tmp type tmpfs (rw) udev on /dev type tmpfs (rw,mode=755,size=5m) shmfs on /dev/shm type tmpfs (rw)
Первый столбец — имя устройства, второй — точка монтирования, далее следует тип файловой системы и параметры монтирования.
Вывести загруженность примонтированных дисков с помощью команды df -h:
[user@localhost ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 46M 46M 0 100% / tmpfs 62M 0 62M 0% /tmp udev 5.0M 44K 5.0M 1% /dev shmfs 62M 0 62M 0% /dev/shm
Вывести информацию о всех выполняющихся процессах с помощью команды ps aux:
[user@localhost ~]$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.4 1540 556 ? Ss 19:46 0:05 init [5] root 2 0.0 0.0 0 0 ? S 19:46 0:00 [migration/0] root 3 0.0 0.0 0 0 ? S 19:46 0:00 [ksoftirqd/0] root 4 0.0 0.0 0 0 ? S 19:46 0:00 [watchdog/0] .. root 1653 0.0 0.8 2372 1020 tty1 S 20:38 0:00 su - user user 1655 0.0 1.3 3068 1712 tty1 S 20:38 0:01 -bash user 1741 0.0 0.6 2376 788 tty1 R+ 23:01 0:00 ps aux
Оставить в выводе предыдущей команды только системные процессы с помощью команды ps aux | grep -v user:
[user@localhost ~]$ 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).
Вывести иерархию процессов с помощью команды pstree:
[user@localhost ~]$ pstree init-+-acpid |-crond |-dbus-daemon |-events/0 |-hald---hald-runner-+-hald-addon-acpi | |-hald-addon-keyb | `-hald-addon-stor |-khelper |-ksoftirqd/0 |-kthread-+-aio/0 ...
В корне дерева находится процесс init.
Рассмотреть поведение процессов интерактивно с помощью команды top.
В данном сценарии изучаются сигналы, управляющие клавиши для передачи процессам сигналов, команды управления процессами.
Начальные условия: Командная строка после входа в систему.
Запустите команду yes, производящую бесконечный вывод
символа y
на экран. Прервите её
нажатием Ctrl+C.
[user@localhost ~]$ yes y y y y ... y [user@localhost ~]$
При этом запущенному процессу был отправлен сигнал SIGTERM
—
завершения программы.
Запустим сбор информации обо всех файлах системы с помощью команды find / > files.txt.
[user@localhost ~]$ find / > files.txt
Найдем идентификатор запущенного только что процесса с помощью команды ps aux | grep find, запущенной в другом терминале.
[user@localhost ~]$ 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.
Отправим сигнал завершения этому процессу с помощью команды kill 8178, указав в качестве параметара идентификатор процесса.
[user@localhost ~]$ kill 8178
Можно убедиться, что на терминале с запущенной командой появились строка Terminated и приглашение.
Если попытаться завершить системный процесс, например командой kill 1, появится сообщение об ошибке доступа:
[user@localhost ~]$ kill 1 -bash: kill: (1) - Operation not permitted
Отправление сигналов системным процессам может производить только суперпользователь.
Альтернативным способом отправления сигналов процессам — по имени процесса, а не по PID — является команда killall. Выполнив команду killall bash, мы завершим все командные оболочки, а тем самым и сеансы пользователей.
[user@localhost ~]$ killall bash
До этого мы отправляли только сигнал завершения процесса. Он может
перехватываться и игнорироваться программами. Неперехватываемым является
сигнал SIGKILL
, который может быть отправлен, например, следующей командой:
killall -SIGKILL find
[user@localhost ~]$ killall -SIGKILL find
В данном сценарии изучается работа с заданиями командной оболочки, запуск заданий в фоновом режиме.
Начальные условия: Командная строка после входа в систему.
Запустим длительную команду, например find / > files.txt и
приостановим её выполнение с помощью
нажатия Ctrl+Z. При
этом процессу посылается сигнал SIGSTOP
.
[user@localhost ~]$ find / > files.txt [1]+ Stopped find / > files.txt [user@localhost ~]$
Команда приостановлена и запомнена как задание 1 (номер в квадратных скобках).
Текущий список запущенных заданий командной оболочки можно посмотреть командой jobs.
[user@localhost ~]$ jobs [1]+ Stopped find / > files.txt
Возобновить исполнение задания можно командой fg 1, параметром которой является номер задания.
[user@localhost ~]$ fg 1 find / > files.txt
Если еще раз приостановить процесс, можно запустить задание в фоновом режиме: bg 1.
[user@localhost ~]$ bg 1 [1]+ find / > files.txt & [user@localhost ~]$
Тогда можно будет продолжать работу в командной строке.
Команды можно запускать сразу в фоновом режиме. Для этого
необходимо добавить в конец команды символ &
(амперсанд):
find / -name "*.xml" > xml-list &.
[user@localhost ~]$ find / -name "*.xml" > xml-list & [1] 9413 [user@localhost ~]$
При этом командная оболочка выводит номер задания и PID созданного процесса.
В данном сценарии рассматриваются демоны как процессы, не связанные ни с одним терминалом.
Начальные условия: Командная строка после входа в систему.
Если запустить команду в фоновом режиме и выйти из командной оболочки,
например: find / -name "*.html" -exec grep -Hn "linux loader" \{}
\; & и exit, то запущенная команда завершится
по сигналу SIGHUP
.
[user@localhost ~]$ find / -name "*.html" -exec grep -Hn "linux loader" \{} \; & [1] 9555 [user@localhost ~]$ exit
Для того, чтобы программы не получали сигнал SIGHUP
, используется
команда nohup:
nohup find / -name "*.txt" -exec grep -Hn "linux loader" \{} \; &
[user@localhost ~]$ nohup find / -name "*.html" -exec grep -Hn "linux loader" \{} >> result\; & [1] 9783 [user@localhost ~]$ exit
Эта программа завершится корректно после окончания поиска.
В данном сценарии изучается механизм приоритетов UNIX и команды для изменения приоритетов запускаемых процессов.
Начальные условия: Командная строка после входа в систему.
Каждый процесс в системе имеет свой уровень приоритета (в UNIX он
называется nice
), который можно увидеть с помощью
команды ps -l — в столбце «NI».
[user@localhost ~]$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 17223 17222 0 75 0 - 994 wait pts/1 00:00:00 bash 0 R 1000 17485 17223 0 75 0 - 612 - pts/1 00:00:00 ps
По умолчанию приоритет процессов простого пользователя равен нулю.
Для запуска процесса с заданным приоритетом воспользуемся командой nice. Например, запустим создание архива с пониженным приоритетом: nice -n 10 tar -cjf libraries.tar.bz2 /usr/lib/.
[user@localhost ~]$ nice -n 10 tar -cjf libraries.tar.bz2 /usr/lib/
Чтобы изменить приоритет уже запущенной программы используется команда renice. Например, для понижения приоритета заранее запущенного процесса архивации tar -cjf libraries.tar.bz2 /usr/lib & воспользуемся командой renice +10 -p 3442:
[user@localhost ~]$ tar -cjf libraries.tar.bz2 /usr/lib & [1] 3442 [user@localhost ~]$ renice +10 -p 3442
Простые пользователи не могут повышать приоритет процессов, только понижать.