Методические указания по командам управления системой в UNIX

Команды получения сведений о системе

date

Команда позволяет посмотреть текущие дату и время в одном из множества форматов. Суперпользователь также может использовать эту команду для установки текущей даты и времени.

По умолчанию команда выводит время в формате заданной временной зоны. Для получения времени по Гринвичу используется ключ -u.

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

Рассмотрим примеры использования команды:

  • Текущее время:

    [user@localhost ~]$ date
    Срд Окт 19 08:21:38 MSD 2005

  • Текущее время по Гринвичу:

    [user@localhost ~]$ date -u
    Срд Окт 19 04:21:39 UTC 2005

  • Вывод даты в специальном формате:

    [user@localhost ~]$ date +%d%m%Y
    07012007

cal

Команда предназначена для вывода календаря на месяц или на год. По умолчанию, выводит календарь текущего месяца.

В качестве параметра можно указать год или месяц и год. Обратим внимание, что команда cal 05 выведет календарь на 5-й год, а не на 2005-й.

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

Рассмотрим примеры использования команды:

  • Календарь на текущий месяц

    [user@localhost ~]$ cal
        Октябрь 2005
    Вс Пн Вт Ср Чт Пт Сб
                       1
     2  3  4  5  6  7  8
     9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31

  • Календарь на 2005 год.

    [user@localhost ~]$ cal 2005
                                   2005
    
           Январь                 Февраль                 Март
    Вс Пн Вт Ср Чт Пт Сб   Вс Пн Вт Ср Чт Пт Сб   Вс Пн Вт Ср Чт Пт Сб
                       1          1  2  3  4  5          1  2  3  4  5
     2  3  4  5  6  7  8    6  7  8  9 10 11 12    6  7  8  9 10 11 12
     9 10 11 12 13 14 15   13 14 15 16 17 18 19   13 14 15 16 17 18 19
    16 17 18 19 20 21 22   20 21 22 23 24 25 26   20 21 22 23 24 25 26
    23 24 25 26 27 28 29   27 28                  27 28 29 30 31
    30 31
    ...

ps

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

Команда ps обладает несколькими видами записи параметров, что может в вести в заблуждение: например, список всех исполняющихся процессов можно получить как с помощью команды ps ax или ps -ef, а также с помощью ps -A. Получть полный список возможных ключей можно, запустив ps --help. Таким неоднородным набором ключей команда обязана своей долгой истории использования во всех версиях UNIX (например, ключи без знака - достались в наследство от BSD UNIX).

Для просмотра всех процессов можно воспользуемся следующей командой:

[user@localhost ~]$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.4   1540   556 ?        Ss   19:46   0:04 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]
..
user      1655  0.2  1.3   3068  1676 tty1     S    20:38   0:00 -bash
user      1695  0.0  0.6   2380   788 tty1     R+   20:41   0:00 ps aux

Вывод этой команды ориентирован на пользователя (ключ u), но отсортирован по времени запуска процесса. Здесь можно увидеть следующие параметры процесса: пользователь, идентификатор, уровень использования процессора (в процентах), уровень использования памяти (в процентах), объём используемой виртуальной памяти, объём используемой реальной памяти, терминал, с которым связан процесс, состояние выполнения, время старта, время исполнения (на процессоре), имя программы (с параметрами), в результате которой был создан процесс. Отметим, что сам процесс ps всегда находится в конце таблицы, так как сам выполнялся в момент сбора состояния процессов.

При использовании ключа -H можно посмотреть процессы, выстроенные в иерархию:

[user@localhost ~]$ ps u -H
USER   PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user 22537  0.0  0.3   3720  1560 pts/3    Ss   22:37   0:00 /bin/bash
user  8890  0.0  0.1   2644   876 pts/3    R+   23:13   0:00   ps u -H
user  9243  0.0  0.2   3724  1368 pts/1    Ss+  17:15   0:00 /bin/bash --noediting -i
user  8033  0.0  0.3   3720  1568 tty1     S    13:17   0:00 -bash
user  8168  0.0  0.2   3260  1120 tty1     S+   13:18   0:00   /bin/sh /usr/bin/startx
user  8179  0.0  0.1   2240   636 tty1     S+   13:18   0:00     xinit .xinitrc --
user  8186  0.0  0.2   3516  1080 tty1     S    13:18   0:00       sh /home/user/.xinitrc
...

В данном случае выводятся все процессы текущего пользователя.

pstree

Для иерархического отображения запущенных процессов больше подходит программа 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
     |         |-cqueue/0
     |         |-kacpid
     |         |-kblockd/0
...

Видно, что в корне дерева находится процесс init, который в UNIX является самым первым процессом, запускаемым операционной системой.

Эта команда также имеет множество ключей, настраивающих формат вывода информации о процессах.

top

Для вывода динамически изменяющейся информации о процессах и используемых ресурсах системы используется программа top. После запуска программы пользователь попадает в интерактивный интерфейс:

Tasks:  86 total,   2 running,  84 sleeping,   0 stopped,   0 zombie
Cpu(s):  6.2% us,  0.8% sy,  0.0% ni, 92.0% id,  0.6% wa,  0.3% hi,  0.0% si
Mem:    512480k total,   428352k used,    84128k free,    44848k buffers
Swap:   529160k total,    12312k used,   516848k free,   210444k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8239 dralex    15   0 26856 8860 6512 S  7.9  1.7   5:39.31 artsd
    1 root      16   0  1432  480  420 S  0.0  0.1   0:01.22 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0
    3 root      10  -5     0    0    0 S  0.0  0.0   0:00.54 events/0
    4 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread
    8 root      10  -5     0    0    0 S  0.0  0.0   0:00.59 kacpid
    7 root       7 -10     0    0    0 S  0.0  0.0   0:00.10 vesafb
...

Для выхода используется клавиша q. Программа имеет много управляющих клавиш, которые можно узнать, нажав на h (help).

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

free

Небольшая команда, предоставляющая информацию об использовании памяти. Она представлена не во всех современных версиях UNIX.

[user@localhost ~]$ free
             total       used       free     shared    buffers     cached
Mem:        512480     476256      36224          0      51216     251712
-/+ buffers/cache:     173328     339152
Swap:       529160      11500     517660

Команда выводит объём оперативной памяти (в килобайтах) и устройства своппинга: общий, свободный, занятый, используемый для системных нужд.

df

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

Команда df выводит сведения обо всех примонтированных файловых системах:

[user@localhost ~]$ df
Файловая система     1K-блоков      Исп  Доступно  Исп% смонтирована на
/dev/hda6             24697672  21164336   3533336  86% /
udev                    256240       180    256060   1% /dev
/dev/hda1              9827968   8073084   1754884  83% /mnt/win
none                    256240         0    256240   0% /dev/shm
server:/home/shared    8194752   5368992   2416032  69% /mnt/shared

Для более «человеческого» представления объёма диска используется ключ -h:

[user@localhost ~]$ df -h
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/hda6              24G   21G  3,4G  86% /
udev                  251M  180K  251M   1% /dev
/dev/hda1             9,4G  7,7G  1,7G  83% /mnt/win
none                  251M     0  251M   0% /dev/shm
server:/home/shared   7,9G  5,2G  2,4G  69% /mnt/shared

who

Команда выводит список пользователей, работающих в настоящий момент в системе.

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

[user@localhost ~]$ who
user   tty1         2005-10-24 13:17
user   pts/0        2005-10-24 13:19
user   pts/2        2005-10-24 23:59

При использовании ключа -u выводится время неактивности для каждого терминала и идентификатор соответствующего ему процесса:

[user@localhost ~]$ who -u
user   tty1         2005-10-24 13:17 11:41        7992
user   pts/0        2005-10-24 13:19 11:41        8228
user   pts/2        2005-10-24 23:59   .          9280

mount

Эта команда используется для монтирования новых файловых систем (подробнее об этом сказано в разделе «Дерево каталогов»). В общем случае команда mount имеет следующий формат: mount [-t тип_ФС] имя_устройства точка_монтирования [параметры]

Рассмотрим пример монтирования гибкого диска:

[user@localhost ~]$ mount -t vfat /dev/fd0 /mnt/floppy -o rw
[user@localhost ~]$ ls /mnt/floppy
document.tex files/

В качестве файловой системы указан FAT, опции содержат флаг разрешения чтения и записи содержимого диска. После монтирования файлы доступны в каталоге /mnt/floppy.

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

При запуске mount без параметров выводится список всех примонтированных локальных и сетевых файловых систем:

[user@localhost ~]$ mount
/dev/hda6 on / type reiserfs (rw,noatime)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
udev on /dev type tmpfs (rw,nosuid)
devpts on /dev/pts type devpts (rw)
/dev/hda1 on /mnt/win type ntfs (ro,uid=1000,gid=100,nls=utf8)
none on /dev/shm type tmpfs (rw)
usbfs on /proc/bus/usb type usbfs (rw,devmode=0664,devgid=85)
server:/home/shared on /mnt/shared type nfs (rw,rsize=32768,wsize=32768,intr,...

Можно увидеть ряд служебных файловых систем (proc, udev, sysfs, т. п.).

uname

Вывод имени запущенной UNIX-системы.

[user@localhost ~]$ uname
Linux

Для вывода полного имени используется параметр -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

Команды по работе с процессами

kill

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

Команда kill имеет один из следующих форматов: kill [-s название_сигнала] идентификатор_процесса kill -название_сигнала идентификатор_процесса kill -код_сигнала идентификатор_процесса

Для того, чтобы отправить сигнал, необходимо знать идентификатор процесса-получателя. Узнать идентификатор можно с помощью команды ps. Если при вызове команды kill сигнал не указан, то посылается сигнал TERM. Обычный пользователь может посылать сигналы только своим процессам. Посылать сигналы процессам других пользователей может только суперпользователь. Рассмотрим пример уничтожения процесса:

[user@localhost ~]$ ps
PID  TT  STAT      TIME COMMAND
3800  p3  S      0:00,03 su (bash)
3822  p3  T      0:00,08 mplayer /home/guest/music/U96/Das\ Boot.mp3
3824  p3  R+     0:00,00 ps
[user@localhost ~]$ kill 3822

После вызова команды kill 3822 процесс mplayer будет уничтожен.

Для вывода списка всех сигналов используется команда kill -l:

[user@localhost ~]$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGURG
17) SIGSTOP     18) SIGTSTP     19) SIGCONT     20) SIGCHLD
21) SIGTTIN     22) SIGTTOU     23) SIGIO       24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGINFO     30) SIGUSR1     31) SIGUSR2

exec

Является встроенной командой оболочки. Используется для замены процесса shell другим процессом.

Команда exec имеет следующий синтаксис: exec -lc -a имя исполняемый файл [перенаправление ...]

fork (&)

Символ & используется для запуска программ в фоновом режиме. Пример:

[user@localhost ~]$ mplayer /home/guest/music/U96/Das\ Boot.mp3&
[1] 1558

bg, fg и jobs

Являются встроенными командами оболочки. Команды используются для работы с заданиями — процессами, запущенными из командного интерпретатора.

Команда jobs имеет следующий синтаксис: jobs [-lnprs] [jobspec ...] jobs -x команда [параметры]

Для вывода всех заданий используется команда jobs:

[user@localhost ~]$ jobs
[1]+  Running                 nice -n 20 tar -cyf test.tar.bz2 /home/guest/data/* &
[2]+  Stopped                 nice -n 20 tar -cyf test.tar.bz2 /home/guest/texts/*
[3]-  Exit 127                nice 20 tar -cyf /abcdefg/texts ./test.tar.bz2
[4]+  Done                    tar -cyf test.tar.bz2 text.txt

Напротив идентификатора задания указано состояние процесса.

Для вывода, кроме основной информации, идентификаторов запущенных процессов используется ключ -l. Для вывода только идентификаторов запущенных процессов используется ключ -p. Для вывода информации о процессах, у которых изменилось состояние с момента последнего вызова команды jobs используется ключ -n.

Команда bg используется для перевода задания в фоновый режим.

Команда имеет следующий синтаксис: bg [идентификатор_задания]

Запуск команды без параметров приводит к запуску в фоновом режиме текущего задания. Если указан параметр идентификатор_задания, то в фоновом режиме будет запущено указанное задание. Пример:

[user@localhost ~]$ bg
[1]+ nice -n 20 tar -cyf test.tar.bz2 /home/guest/texts/* &

Команда fg используется для перевода задания на передний план.

Команда имеет следующий синтаксис:

fg [идентификатор_задания]

Запуск команды без параметров переводит к переводу текущего задания на передний план. Если указан параметр идентификатор_задания, то задание с указанным идентификатором станет текущим и будет переведено на передний план. Пример:

[user@localhost ~]$ fg
nice -n 20 tar -cyf test.tar.bz2 /home/guest/texts/*

nohup

Команда позволяет запустить процесс, отключив его от управляющего терминала.

Команда nohup имеет следующий синтаксис: nohup [--] запускаемая_программа [аргументы] nohup запускает указанную программу с игнорированием сигналов HUP и увеличением приоритета для планировщика задач на 5. Таким образом, команда может продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы. Если стандартным выводом stdout команды является терминал, то он и стандартный поток ошибок stderr перенаправляются в файл nohup.out в текущем каталоге. Если это невозможно, то перенаправление происходит в файл $HOME/nohup.out. Если и это оказывается невозможным, то команда не запускается. Команда nohup не переводит автоматически запускаемый процесс в фоновый режим. Чтобы это сделать, необходимо завершить команду символом &.

Пример использования:

[user@localhost ~]$ nohup mplayer /home/guest/music/U96/Das\ Boot.mp3
appending output to /home/guest/nohup.out

nice

Команда используется для запуска процесса с измененным приоритетом для планировщика задач.

Команда nice имеет следующий формат: nice [-n смещение_приоритета] запускаемая_программа [параметры]

Команда nice позволяет изменять приоритет от -20 (наивысший) до 20 (самый низкий) относительно текущего. По умолчанию, процессы имеют приоритет командного интерпретатора, из которого они запускаются. Повышать приоритет может только суперпользователь (т. е. задавать отрицательное значение параметра -n смещение_приоритета). Пример использования команды:

[user@localhost ~]$ nice -n 15 mplayer /home/guest/music/U96/Das\ Boot.mp3 &
[1] 895
uest@premudrij-peskar$ ps -l
UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
1002   890   889   0   8  0  3112  1660 wait   S     p2    0:00,02 su (bash)
1002   895   890   0 111 15 23000 13200 -      TN    p2    0:00,08 mplayer /home/guest/music/U96/Das\ Boot.mp3
1002   896   890   0  96  0  1392   768 -      R+    p2    0:00,00 ps -l

Значение NI процесса mplayer равно 15, для всех остальных процессов равно 0 по умолчанию.

renice

Команда используется для изменения приоритета запущенных процессов.

Команда renice имеет следующий формат: renice новое_значение_приоритета список_идентификаторов renice -n смещение_приоритета список_идентификаторов Для изменения значения приоритета отдельных процессов достаточно перечислить их идентификаторы:

[user@localhost ~]$ ps -l
UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
1002   890   889   0  96  0  3112  1600 -      R     p2    0:00,06 su (bash)
1002   895   890   0 111 17 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002   900   890   0 101  5 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002  1084   890   1  96  0  1392   760 -      R+    p2    0:00,00 ps -l
[user@localhost ~]$ renice +18 895 900
895: old priority 17, new priority 18
900: old priority 5, new priority 18
[user@localhost ~]$ ps -l
UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
1002   890   889   0   8  0  3112  1600 wait   S     p2    0:00,06 su (bash)
1002   895   890   0 111 18 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002   900   890   0 101 18 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002  1086   890   0  96  0  1392   760 -      R+    p2    0:00,00 ps -l

Для изменения приоритета всех процесов какого-либо пользователя необходимо использовать ключ -u. В этом случае значения идентификаторов после ключа -u будут интерпретироваться как идентификаторы пользователей. Можно задавать как числовые, так и символьные идентификаторы пользователей.

[user@localhost ~]$ renice -n 1 -u guest
1002: old priority 0, new priority 1
[user@localhost ~]$ ps -l
UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
1002   890   889   0   8  1  3112  1600 wait   SN    p2    0:00,07 su (bash)
1002   895   890   0 111 18 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002   900   890   0 101 18 23000 11224 -      TN    p2    0:00,08 mplayer Boot.mp3
1002  1110   890   0  97  1  1392   760 -      RN+   p2    0:00,00 ps -l

Из данного примера видно, что значения NI для процессов mplayer не изменились. Вызов команды renice с ключом -n изменяет только минимальные приоритеты (в данном случае, нули).

Резюме

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

Ключевые термины: «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы», «Вопросы»

Дополнительные материалы

  1. Курячий Г.В., Маслинский К.А. Операционная система Linux. — М.: Интуит.Ру, 2005. — 392 с.: ил.
  2. Курячий Г.В. Операционная система UNIX. — М.: Интуит.Ру, 2004. — 292 с.: ил.
  3. Рейчардс К., Фостер-Джонсон Э. UNIX: справочник. — СПб.: Питер Ком, 1999. — 384 с.: ил.