Журнал LinuxFormat - перейти на главную

LXF147:tut3

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Тренинги Linux

Часть 7: Учитесь управлять процессами как профи и овладейте редактором Vi, который славен своим минимализмом.



Наша серия про LPI близится к концу – последняя статья выйдет в следующем месяце; и пора обратиться к сложностям, встречающимся на пути системного администратора.

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

Наконец, мы исследуем редактор Vi, поставляемый почти с каждым дистрибутивом Linux и Unix; он считается трудным в освоении, но для разобравшихся в его основах становится просто даром Божьим.

В следующем номере мы приведем подробный список учебных вопросов для LPI, поэтому, когда вы закончите с этим руководством, у вас будет несколько недель, чтобы освежить знания. Удачи!


Раздел 1: Управление процессами

Представьте, что вы, сидя дома, размечтались о чашечке чая. Как человек предприимчивый, вы просите ближайшего члена семьи ее вам приготовить. Вышеупомянутый член рысит на кухню; но, обернувшись в кресле, вы видите, что он/она вместо чая заваривает кофе. Вы восклицаете «Черт побери, я же просил чаю!» или нечто подобное. А как это звучит в терминах компьютера? Что происходит, если вы запустили программу и хотите остановить ее или изменить способ ее работы?

На простейшем уровне, выкрику «стоять!» соответствует нажатие Ctrl+C. Попробуйте эту комбинацию клавиш с командой, генерирующей большой объем вывода, вроде ls -R / для вывода содержимого корневого каталога и всех его подкаталогов. Когда она примется изрыгать тысячи строк на терминал, можно нажать Ctrl+C и остановить ее на полпути. Команда остановлена; больше ничего не делается. Это крайне важно на случай, если сдуру введено что-то неправильное и надо срочно пресечь команду, пока она не нанесла ущерб.

Однако бывают и другие варианты. Что если вы просто хотите отложить выполнение программы на потом? Например, вы ввели команду man gcc (чтобы прочесть страницу справки по компилятору GNU C Compiler), прокрутили текст вниз и увидели что-то интересное – вам хочется это опробовать, не теряя положения в тексте. Нажмите Ctrl+Z, и страница просмотра справки исчезнет в фоне, оставив вас в командной строке. Сделайте то, что хотели, и наберите fg (от foreground – передний план) – вы вернетесь в то же место страницы справки, где и были.


Программу можно запустить в невидимом режиме (приостановив), чтобы вы могли вернуться к ней, когда созреете. Для этого добавьте к имени команды символ амперсанда (&) следующим образом:

man df &

Здесь мы открываем для просмотра страницу справки для команды df (она отображает объем свободного места на диске), но делаем это в фоновом режиме. Экран отреагирует строкой

[1] 3192

В скобках показан порядковый номер фоновой программы; второе число – идентификатор процесса (мы перейдем к ним через минуту). Теперь занимайтесь делом, а когда нужно будет пристроиться к запущенной программе, просто введите fg.

Эта система становится особенно удобной при манипуляции несколькими программами. Например, введите

nano &
man df &


Здесь мы запустили две программы в фоновом режиме. Если ввести jobs, мы получим их список с номерами и командами их запуска. Можно восстановить выполнение программы по ее номеру: например, fg 1 переключит нас в редактор Nano, а fg 2 — в программу просмотра страницы справки.

Теперь – к процессам. По сути, процесс – это экземпляр выполняемой программы. Большинство простых программ создают единственный процесс: самое себя. Более сложные программы, такие как рабочий стол, запускают множество процессов – демоны мониторинга файлов, оконные менеджеры и т. д. Это помогает обслуживать систему (представьте, что весь KDE был бы в одном огромном исполняемом файле, и при выходе из строя одного компонента рухнуло бы все), а также позволяет делать всякие удобные вещи.

Чтобы вывести список процессов, наберите ps. Вывод команды вряд ли вас вдохновит – скорее всего это будет лишь пара строк: команда выведет только процессы, запущенные текущим пользователем. Для просмотра всех процессов, выполняющихся на компьютере, введите ps ax. Обычно их список очень длинен, и лучше переправить его через канал команде less, как мы рассказывали в прошлом месяце:

ps ax | less

Что именно вы увидите, зависит от конкретной сборки дистрибутива Linux и запущенных в данный момент программ, но вот вам пример:

2972 pts/0 Ss 0:00 bash

Здесь 2972 – идентификатор процесса (PID). У каждого процесса есть уникальный идентификатор, начиная с номера 1, соответствующего программе /sbin/init, которую ядро запускает при загрузке. Следующий фрагмент pts/0 показывает, с какого виртуального терминала была запущена команда – если здесь вы видите знак вопроса, то процесс был запущен вне терминала: например, ядром или скриптом загрузки. Ss означает, что процесс спит (не производит активной работы), затем идет индикатор времени, показывающий, сколько процессорного времени процесс получил на данный момент, а за ним следует команда, запустившая процесс.

Еще один способ получения списка процессов (по умолчанию отсортированного по потреблению процессора) – команда top. Это интерактивная программа – она обновляется каждые несколько секунд, отображая в верхней части списка задачи, наиболее активно использующие процессор. Столбцы снабжены заголовками (в черном прямоугольнике), и вы можете определить идентификатор процесса, пользователя, который его запустил, и т. д. Обратите внимание на различные столбцы с информацией об использовании памяти: самый важный из них – RES (resident – резидентная часть), в нем показан объем реальной памяти, который процесс использует в данный момент. Для выхода из top нажмите Q.

Итак, предположим, что вы удачно запустили программу, но внезапно она дала сбой: застряла в цикле и съедает все процессорное время. Завершить ее, нажав Ctrl+C, нельзя – вы запускали программу не из терминала, а из оконного менеджера. Что делать? Первая возможность – определить идентификатор с помощью описанных выше методов и ввести команду

kill <pid>

Замените <pid> идентификатором процесса. Хотя эта команда и намекает на убийство, но по умолчанию ведет себя довольно мягко. От себя лично kill отправляет процессу дружелюбное сообщение «Не хотите ли завершиться?», получив которое, процесс может предпринять необходимые действия (например, удалить временные файлы перед завершением). Иногда это остановит процесс, но если у процесса есть собственный обработчик сигнала kill и по причине сбоя он уже ни на что не способен – вы в тупике. Тут kill начинает оправдывать свое название. Введите

kill -9 <pid>

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

Иногда бывает несколько процессов с одним и тем же именем, или вам просто лень искать PID процесса. В этом случае пригодится команда killall. Например, пусть вы скомпилировали новейший модуль Apache, добавили его в Apache... и ваш web-сервер пошел наперекосяк, но не дает себя остановить обычными скриптами, причем запущено множество экземпляров apache. Попробуйте такую команду:

killall -9 apache

Другой полезный сигнал, который не является разрушительным, а лишь велит программе перезапуститься или перечитать свои файлы настройки – SIGHUP, названный по выражению “hanging up» [вешать трубку, разъединяться] из эпохи телефонных модемов. Многие программы игнорируют этот сигнал, но он прекрасно работает с рядом фоновых демонов, таких как серверы:

killall -HUP sendmail

Эта команда велит всем выполняющимся процессам sendmail на секунду приостановиться, перечитать файлы настройки и продолжать работу. Это очень удобно, когда вы хотите быстро изменить файл настройки, не останавливая всю программу. Если по какой-то причине вы не хотите, чтобы этот сигнал обрабатывался, воспользуйтесь nohup для его отключения – более подробную информацию см. в man nohup.


Раздел 2: Создание новых файловых систем

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

Для начала припомним: жесткий диск обычно делится на несколько разделов. Например, у вас может быть раздел с Windows и раздел с Linux. Большинство систем Linux располагаются на двух или более разделах: разделах данных (таких как / и /home) и разделе подкачки для виртуальной памяти. Данные на этих разделах должны храниться в определенном порядке, или формате, и исторически в Linux это был формат файловой системы ext2. Потом появилась ext3 (то же, что и ext2, но с добавлением журналирования), а теперь – ext4. Другие типы разделов из мира Linux и UNIX включают XFS и ReiserFS. В большинстве систем Windows используется NTFS, но на внешних носителях, таких как USB-брелки, обычно используется FAT32 (также известная в Linux как VFAT).

Основная утилита разбиения диска на разделы с командной строки – fdisk. В качестве ее аргумента нужно указать файл устройства для вашего жесткого диска следующим образом:

/sbin/fdisk /dev/sda

(Учтите, что запускается эта команда от имени root; а если вы не уверены в том, какой файл устройства соответствует жесткому диску, загляните в вывод dmesg.) Также обратите внимание, что здесь указано /dev/sda, а не /dev/sda1: последняя цифра – номер конкретного раздела, а нам необходим весь диск. В большинстве случаев sda – первый жесткий диск, sdb – второй, и т. д.

fdisk – довольно «голая» программа, без меню или мастеров для автоматизации действий. Введите p для вывода списка разделов своего жесткого диска и m для вывода справки. Вы увидите команды для удаления разделов, создания новых разделов и т. д. Все производимые изменения не записываются на диск до тех пор, пока вы не нажмете w. В некоторых дистрибутивах есть cfdisk, версия fdisk на основе curses, где все немного удобнее: есть простые меню, а перемещаются по ним клавишами управления курсором.

Создав раздел, отформатируйте его. Тут в дело вступают утилиты mkfs. Наберите /sbin/mkfs и нажмите Tab для вывода возможных вариантов – вы увидите mkfs.ext3 (для большинства разделов Linux), mkfs.vfat (для разделов FAT32) и другие. Для форматирования раздела просто укажите его файл устройства:

/sbin/mkfs.ext3 /dev/sda2

Для разделов подкачки пользуйтесь командой mkswap. Затем можно активировать и деактивировать раздел подкачки командами swapon и swapoff.


Раздел 3: Краткий обзор редактора Vi

Наконец, в этом месяце мы бегло оглядим Vi, «визуальный» редактор. А не нелепо ли описывать редактор как «визуальный» – разве не все они такие? Но в семидесятые годы, когда Vi разрабатывался для операционных систем Unix, кое-кто еще пользовался телетайпами...

Идея полноэкранного редактора была достаточно новаторской, так как люди привыкли работать с отдельными строками текстового файла. Редактор Vi – очень сжатый и примитивный, но благодаря его низким требованиям устанавливается почти на каждый компьютер с Unix. В мире Linux большинство дистрибутивов содержат Vim (Vi Improved), гораздо более продвинутую версию редактора.

Начинаем

Для запуска редактора наберите vi filename.txt. Прежде чем колотить по клавишам, обратите внимание, что Vi работает в двух режимах: обычном (для команд) и вставки (для редактирования текста). Это отличает его от большинства других редакторов, в которых сразу набирается текст.

В Vi для ввода текста в текущей позиции курсора нужно нажать i, после чего вы сможете набрать то, что хотите. Закончив, нажмите Esc для возврата в обычный режим ввода команд.

Команд в Vi немало, и если вы хотите стать гуру Vi, то специальных книг про него хватает. Но вот самые основы: в обычном режиме ввод dd удаляет строку, yy копирует строку в буфер обмена, а p вставляет эту строку обратно в текст.

Для выполнения некоторых операций сначала нужно набрать двоеточие. Например, :w записывает файл на диск, а :q завершает работу редактора. (Если вы что-то переделали, не сохранили изменения и попытались выйти, Vi может пожаловаться – выйти без сохранения данных можно командой :q!.) Действия можно объединять: например, команда сохранения и выхода – :wq.

Многие люди считают Vi и Vim дико неудобными в работе и предпочитают редакторы без командного режима, типа Emacs или Nano. Другие, наоборот, обожают первые два из вышеупомянутых за минимализм и ненавидят склонность двух последних неумеренно злоупотреблять клавишей Ctrl. Эта война пылает постоянно, но, независимо от ее исхода, все хорошие администраторы должны иметь базовые навыки работы в Vi, так как он почти наверняка будет на любом компьютере, который вам попадется.

Персональные инструменты
купить
подписаться
Яндекс.Метрика