Linux-сервер своими руками — страница 27 из 119

Практически все операционные системы обладают механизмом перенаправления ввода/вывода, и Linux не является исключением из этого правила. Обычно программы вводят текстовые данные с консоли (терминала) и выводят данные на консоль. При вводе под консолью подразумевается клавиатура, а при выводе — экран монитора. Клавиатура и экран монитора — это, соответственно, стандартный ввод и вывод (stdin и stdout). Любой ввод/вывод можно интерпретировать как ввод из некоторого файла и вывод в файл. Работа с файлами производится через их дескрипторы.

Для организации ввода/вывода в UNIX используются три файла: stdin (дескриптор 0), stdout (дескриптор 1) и stderr (дескриптор 2).

Символ > («больше») используется для перенаправления стандартного вывода в файл. Например:

$ cat > newfile.txt

В этом примере стандартный вывод команды cat будет перенаправлен в файл newfile.txt, который будет создан после выполнения этой команды. Если файл с этим именем уже существует, то он будет перезаписан. Нажатие Ctrl + D остановит перенаправление и прервет выполнение команды cat.

Символ < («меньше») используется для переназначения стандартного ввода команды. Например, при выполнении команды cat < file.txt в качестве стандартного ввода будет использован файл file.txt, а не клавиатура.

Символ >> используется для присоединения данных в конец файла (append) стандартного вывода команды. Например, в отличие от случая с символом >, выполнение команды cat >> newfile.txt не перезапишет файл в случае его существования, а добавит данные в его конец.

Чтобы перенаправить весь стандартный поток ошибок в какой-нибудь файл, используйте переадресацию 2> имя файла или 2>> имя файла. В первом случае стандартный поток ошибок будет передан в файл или на устройство, а во втором — поток ошибок будет добавлен в файл, если такой существует. При использовании переадресации 2>&1 стандартный поток ошибок будет перенаправлен на стандартный вывод интерпретатора Bourne (здесь 1 и 2 — дескрипторы файлов). Для перенаправления стандартного потока ошибок в файл вы можете также использовать переадресацию >& имя_файла (интерпретатор C-Shell).

В командных интерпретаторах Korn и C-Shell можно использовать переадресацию >! имя_файла. При этом файл не будет перезаписан, если он существует.

Символ | используется для перенаправления стандартного вывода одной программы на стандартный ввод другой. Например,

ps –ax | grep httpd.

Можно также использовать переадресацию |&. В этом случае стандартный поток ошибок будет передан по каналу другой команде интерпретатора.

5.3. Команды управления процессами

Команда ps

Команда ps предназначена для вывода информации о выполняемых в текущий момент процессах. Данная команда имеет много параметров, о которых вы можете прочитать в руководстве (man ps). Здесь я опишу лишь наиболее часто используемые мною (см. табл. 5.2).

Параметры программы ps Таблица 5.2

Параметр Описание
Отобразить все процессы, связанные с терминалом (отображаются процессы всех пользователей)
Отобразить все процессы
-t список_терминалов Отобразить процессы, связанные с указанными терминалами
-u идентификаторы_пользователей Отобразить процессы, связанные с данными идентификаторами
-g идентификаторы_группОтобразить процессы, связанные с данными идентификаторами групп
-xОтобразить все процессы, не связанные с терминалом

Например, после ввода команды ps –а вы увидите примерно следующее:

PID  TTY   TIME     CMD

1007 tty1  00:00:00 bash

1036 tty2  00:00:00 bash

1424 tty1  00:00:02 me

1447 pts/0 00:00:02 mpg123

2309 tty2  00:00:00 ps

Для вывода информации о конкретном процессе вы можете воспользоваться командой:

# ps –ax | grep httpd

698  7 S 0:01 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1261 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1262 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1263 9 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1264 9 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1268 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1269 ? S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1270 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1271 9 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1272 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1273 7 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

1280 9 S 0:00 httpd –DHAVE_PHP4 –DHAVE_PROXY –DHAVE_ACCESS –DHAVE_A

В приведенном выше примере используется перенаправление ввода/вывода между программами ps и grep, в результате чего будет отображена информация обо всех процессах, содержащих в строке запуска «httpd». Данную команду (ps –ax | grep httpd) я написал только лишь в демонстрационных целях — гораздо проще использовать параметр –С программы ps вместо перенаправления ввода/вывода и параметр –е вместо –ах.

Команда top

Эта команда предназначена для вывода информации о процессах в реальном времени. Процессы сортируются по максимальному занимаемому процессорному времени, но вы можете изменить порядок сортировки (см. man top). Команда также сообщает о свободных системных ресурсах.

# top

7:49pm up 5 min, 2 users, load average: 0.03, 0.20, 0.11 

56 processes: 55 sleeping, 1 running, 0 zombie, 0 stopped 

CPU states: 7.6% user, 9.8% system, 0.0% nice, 82.5% idle 

Mem 130660K av, 94652K used, 36008K free, OK shrd, 5220K buff 

Swap:72256K av, 0K used, 72256K free 60704K cached 

PID  USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

1067 root 14  0  892  892 680   R    2.8  0.6  0:00 top

1    root 0   0  468  468 404   S    0.0  0.3  0:06 init

2    root 0   0  0    0   0     SW   0.0  0.0  0:00 kflushd

3    root 0   0  0    0   0     SW   0.0  0.0  0:00 kupdate

4    root 0   0  0    0   0     SW   0.0  0.0  0:00 kswapd

Просмотреть информацию об оперативной памяти вы можете с помощью команды free, а о дисковой — с помощью команды df. Информация о зарегистрированных в системе пользователях доступна по команде w.

Существует графический аналог программы top — gtop (см. рис. 5.1).

Изменение приоритета процесса — команда nice

Формат использования:

nice [-коэффициент понижения] команда [аргумент]

Рис. 5.1. Программа gtop

Команда nice выполняет указанную команду с пониженным приоритетом, коэффициент понижения указывается в диапазоне 1..19 (по умолчанию он равен 10). Суперпользователь может повышать приоритет команды, для этого нужно указать отрицательный коэффициент, например —10. Если указать коэффициент больше 19, то он будет рассматриваться как 19.

Команда nohup — игнорирование сигналов прерывания

Формат использования:

nohup команда [аргумент]

Команда nohup выполняет запуск команды в режиме игнорирования сигналов. Не игнорируются только сигналы SIGHUP и SIGQUIT.

Команда kill — принудительное завершение процесса

Формат использования:

kill [-номер сигнала] PID

где PID — идентификатор процесса, который можно узнать с помощью команды ps.

Команда kill служит для принудительного завершения процесса. При этом процессу с указанным идентификатором (PID) посылается сигнал завершения. В качестве параметра можно указать номер сигнала, который следует отсылать. По умолчанию отсылается сигнал SIGTERM.

Команды выполнения процессов в фоновом режиме — jobs, fg, bg

Команда jobs выводит список процессов, которые выполняются в фоновом режиме, fg — переводит процесс в нормальный режим («на передний план» — foreground), a bg — в фоновый. Запустить программу в фоновом режиме можно с помощью конструкции

<команда>&

5.4. Создание расписаний

Механизм расписаний Linux (UNIX) предоставляет удобные и мощные средства для обслуживания системы. Например, можно создать расписание резервирования данных в нерабочее время или обновления системы через Интернет.

Для запуска команд по расписанию используется демон cron. Он запускается автоматически из файла /etc/init.d при многопользовательском уровне запуска. Об уровнях запуска поговорим немного позже. Каждую минуту cron пробуждается и проверяет содержимое файлов crontab. Для какой-то определенности назовем эти файлы файлами расписаний.