Лекция №4 - vim, mc, inittab

В данной лекции мы немного поговорим о текстовых редакторах, файловом менеджере mc и рассмотрим файл inittab. Надеюсь, вы просмотрели основные команды оболочки, которые я просил рассмотреть самостоятельно. На всякий случай давайте рассмотрим те которые нам могут понадобиться сегодня.Команда ls -l - выводит на экран содержимое текущей директории в расширенном формате. Команде можно передать в качестве параметра любой каталог и тогда будет отображено уже его содержимое. Например ls -l /etc/X11/ - отобразит содержимое каталога /etc/X11.

Команда cd имя каталога - позволяет перейти в указанный каталог. cd /etc/ - выполнив эту команду перейдем в каталог /etc.

Мы уже рассмотрели команду less, которая позволяет нам просматривать содержимое текстовых файлов. Но less не позволяет изменять содержимое файлов. Для этой цели существуют текстовые редакторы. Одним из самых старых является текстовый редактор vi. Сейчас он практически вытеснен своим более продвинутым наследником vim. Редактор vim является очень гибким, универсальным (способным работать на практически любых типах консолей) и нетребовательным к ресурсам. Единственный его минус - он немного сложен на начальном этапе освоения, чем и отпугивает новичков. Все дело в том, что он не так интуитивно понятен как другие текстовые редакторы. Очень многие начинающие пользователи открыв какой либо файл в этом редакторе даже не могут выйти из него, что стразу вызывает массу негатива. Поэтому запомните следующее: у редактора vim есть несколько режимов работы: режим вставки (режим редактирования), основной режим, режим ввода команд. Между режимами работы можно переключатся нажимая определенные клавиши. По умолчанию vim запускается в основном режиме. Чтобы начать редактировать текст нужно перейти в режим вставки. Для этого необходимо нажать клавишу i (от английского insert). Для того, чтобы выйти из редактора vim, ему необходимо сообщить об этом выполнив команду выхода. Как вы уже догадались сделать это можно в режиме ввода команд. Чтобы перейти в режим команд необходимо нажать двоеточие - : . Чтобы перейти в основной режим необходимо нажать клавишу Esc (иногда два раза).

Еще один важный момент. Запомните его. Переход в основной режим возможен из любого режима (нажатием на клавишу Esc) переход в другие режимы возможен только из основного режима. То есть, чтобы перейти из режима вставки в режим команд, вам нужно сначала перейти в основной режим, а затем уже из основного перейти в режим команд.

В нижнем левом углу редактора слова подсказки указывают в каком режми вы находитесь. Например, в режиме вставки там будет написано – INSERT – (или — ВСТАВКА –), в режиме команд там будет двоеточие. Теперь рассмотрим несколько основных команд. После набора каждой команды нужно нажимать на клавишу Enter.

Команда выхода из редактора. Находясь в основном режиме, набрать :q! - выйти из редактора без сохранения сделанных изменений. Если набрать команду :q , то vim проверит были ли изменения в файле, и если были, то он предупредить вас об этом и вы останетесь в редакторе.

Чтобы сохранить сделанные изменения нужно набрать :w . Если сохраняется новый файл у которого нет имени, то после :w нужно через пробел указать имя файла - :w text.

Команды можно объединять. Например, вместо того чтобы сохранить текст существующего файла и выйти из редактора можно набрать :wq .

Чтобы получить справку по vim, нужно ввести команду :help. Чтобы выйти из справки нужно нажать команду выхода :q .

Описанных выше правил и команд уже достаточно, чтобы открывать файлы, редактировать их, сохранять сделанные изменения. Для дальнейшего изучения рекомендую обращаться к справке vim. Также много учебников и хороший статей можно найти в Интернете.

Если вы все же решили, что vim это не ваш редактор, или нет времени на его изучение, то можно воспользоваться более простыми текстовыми редакторами. Я рекомендую в этом случае обратить внимание на редактор nano. Этот редактор хорошо подойдет тем, кто только начинает изучать Linux. Набрав в консоли команду nano вы попадаете в редактор, в котором в нижней части указаны сочетания клавиш для выполнения основных действий (см. рис. 1).

Редактор nano

Рисунок 1

Чтобы выйти из редактора нужно нажать на комбинацию ctrl+x, для получения справки ctrl+g, для сохранения изменений ctrl+o и т.д. nano - простой и понятный редактор и его освоение не должно вызвать у вас затруднений.

Еще один редактор, которым вы возможно будете пользоваться это встроенный редактор программы Midnight Commander или более известной по сокращенному названию - mc. mc - это обычный двухпанельный файловый менеджер наподобие Norton Commander в DOS или Far в Windows. Чтобы запустить mc просто наберите в командной строке команду mc. Если вы работали с Far или Norton Commander, то освоение mc не займет у вас много времени, тем более, что многие сочетания клавиш у этих менеджеров совпадают. Нас в данный момент интересует встроенный редактор. Чтобы перейти в него нужно нажать на клавишу F4. Выйти можно, нажав на клавишу Esc два раза. Хочу также отметить, система может быть настроена так, что при нажатии на F4 будет запускать редактор системы по умолчанию (например nano).

А теперь давайте вернемся к загрузке Linux и рассмотрим подробно содержимое файла inittab. Наберите в командной строке команду vim /etc/inittab, чтобы открыть файл в редакторе vim. Строки начинающиеся с символа # являются комментариями. Процесс init не обращает на такие строки внимание. Остальные строки разделены на поля с помощью символа двоеточия. Первое поле это так называемая метка, во втором поле указывается runlevel (уровень системы), в третьем поле указывается действие процесса init, а в четвертом выполняемая команда и ее параметры. Рассмотрим для примера строку l5:5:wait:/etc/init.d/rc 5 .

l5 - это метка
5 - это runlevel
wait - это действие
/etc/init.d/rc - это команда, а 5 - это параметр

Что такое runlevel? Дело в том, работу системы условно разбили на так называемые уровни. То есть система в каждый момент времени находится на каком-то из уровней. Стандартно определено 7 уровней - от уровня 0 до уровня 6. Уровень 0 - означает, что система выключена. На уровне 1 система находится во время загрузки или в однопользовательском режиме. Уровни 2-5 - это уровни для многопользовательской работы. Причем уровень 5 как правило используется для запуска графической подсистемы, а уровень 3 - это многопользовательский алфавитно-цифровой режим (режим командной строки). Уровень 6 - это перезагрузка системы. При переходе системы на определенный уровень выполняется соответствующий для этого уровня набор скриптов. Скрипты расположены в папке /etc/init.d/. Строка из примера говорит о том, что при переходе на 5-й уровень работы системы необходимо запустить скрипт /etc/init.d/rc с параметром 5. Давайте теперь посмотрим на inittab с самого начала.

id:5:initdefault: - эта строка сообщает на каком уровне должна остаться система после загрузки (перезагрузки). В данном случае система должна перейти на пятый уровень на котором запускается графическая подсистема. Если цифру 5 заменить в этой строке например на цифру 2, то система загрузиться на второй уровень (обычно это многопользовательский режим без графической подсистемы).

si::sysinit:/etc/init.d/rcS - это первый скрипт инициализации системы, если не загружается в аварийном режиме. Здесь вводится понятие уровня S. Уровень S тесно связан с уровнем 1. Это уровни однопользовательского режима. В разных дистрибутивах определение этих уровней может немного отличатся. Поэтому в целом сложно дать точную оценку и отличия уровня 1 от уровня S. Необходимо уже для конкретного дистрибутива изучать отличия и особенности. Для разных дистрибутивов эта строка может отличатся в файле inittab.

~~:S:respawn:/sbin/sulogin - это программа для регистрации в системе в однопользовательском режиме. Две тильды указывают на то, что процесс должен пройти аутентификацию. Действие respawn - означает, что процесс init должен поддерживать этот процесс (sulogin) в рабочем  состоянии на указанном уровне (в данном случае на уровне S). Если процесс по каким-то причинам завершится, то он будет запущен снова.

Ниже представлены строки которые запускают скрипт загрузки на соответствующем уровне.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

Действие wait означает, что скрипт необходимо запустить и ждать пока он закончится. То есть init не будет предпринимать действий пока не закончится загрузка скрипта. Переходить между уровнями можно по команде init с передачей ей в качестве параметра номера уровня запуска. Например, по команде init 3 будет завершена работа графической подсистемы и вы перейдете в режим командной строки. Затем после регистрации в системе на уровне 3 можно набрать init 5 и снова будет запущена графическая подсистема.

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now - это строка указывает на то как процессу init реагировать на нажатие клавиш ctrl+alt+del. Как видим эта запись актуальна для уровней 1, 2, 3, 4, 5. То есть если необходимо, чтобы программы или скрипты запускались на нескольких уровнях их нужно просто перечислить без пробелов, запятых и других символов.

Следующие три строки описывают, как должна реагировать система, если появляется или пропадает питание.

pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

И последние строки:

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

отвечают за запуск на соответствующих уровнях программы getty.

Сейчас в некоторых современных дистрибутивах вместо процесса init, используется подсистема upstart в которой реализован свой init. Если вы не нашли у себя файла /etc/inittab значит у вас установлена подсистема upstart. Вместо файла inittab, upstart использует конфигурационные файлы размещенные в /etc/event.d/. Подсистема upstart является событийно-ориентированной, то есть ориентированной на обработку событий. Например, так же как и подсистема udev (можно сравнить со службой Plug&Play в Windows ), которая также ориентирована на обработку событий. Аппаратные средства постоянно усовершенствуються, растет их количество и разнообразие. Для удобства пользователей была придумана технология Plug&Play и вслед за этим для Linux была разработана подсистема udev. Подключение той же флешки - это событие, и подсистема udev реагирует на это событие и выполняет действия по инициализации устройства, монтированию файловой системы флешки и др. и флешка готова к использованию. Upstart работает по такому же принципу. Проект достаточно молодой и активно развивается, поэтому рекомендую отслеживать его развитие.

В заключении рекомендую выполнить несколько упражнений:

Отредактируйте файл inittab так, чтобы запускались только две консоли - вторая и третья. Перезагрузите систему и проверьте результат.
Отредактируйте файл inittab, так чтобы система запускалась только в текстовом режиме. Перезагрузите систему и проверьте результат.

Читать другие лекции по курсу Администратор ПК с Linux

Статьи и новости схожей тематики:

Комментариев: 13

  1. sergkarpenko:

    редактор от mc при помощи можно запустить и из консоли с помощью mcedit

    Ответить

    Igorka Reply:

    Спасибо. Не знал.

    Ответить

  2. Igorka:

    А еще у нас по mc был вопрос на лекции: Что это за комбинация клавиш “M-?” Оказалось, что это Alt+?. А М - это потому, что раньше на том месте где расположена клавиша Alt располагалась клавиша, которая называлась Meta.

    Ответить

    sergkarpenko Reply:

    та вроде на маках до сих пор так

    Ответить

    Igorka Reply:

    Может быть. Не замечал. Хотя с маками не работал.

    Ответить

  3. kid q:

    1 абзац:
    Команде можно передать в качестве параметра любой КАТАЛОГ и тогда будет отображено уже его содержимое.

    Ответить

    Igorka Reply:

    Спасибо большое!
    Исправил “каталок” на “каталог”.

    Ответить

  4. Anton:

    Ubuntu 9.10, никак не могу найти что-то похожее на inittab. это где-то в /etc/init.d/ ?
    P.S. лекции просто удивительные. читаю запоем

    Ответить

    Igorka Reply:

    Спасибо за комментарий.
    В конце лекции написано несколько слов о подсистеме upstart. Именно она используется в Ubuntu, поэтому inittab в ubuntu и нет. Вот небольшая заметка об upstart http://igorka.com.ua/2009-09-18/upstart-alternativa-init/ и более расширенное описание http://igorka.com.ua/2010-02-01/upstart-ubuntu/

    Ответить

  5. Anton:

    Спасибо, вторая ссылка очень интересная. а как, кстати, искать файлы? я вот испытываю проблему с поиском файлов и категорий. есть статьи на эту тему?
    P.S. на данный момент для поиска каталога использую достаточно забавную конструкцию
    ls -al | cat *имя_каталога*
    знаю, что глупо)

    Ответить

    Igorka Reply:

    У меня на сайте на тему поиска статей нет. Я использую команды locate или find.
    Для вашего примера это будет find -name *имя_каталога* -type d

    Ответить

  6. Aliyev:

    Mne vsyo ravno ne stalo ponyatno “l0:0:wait:/etc/init.d/rc 0″ eto funkciya,l0 - eto dlya ceqo nujna vaapwe?
    Отредактируйте файл inittab так, чтобы запускались только две консоли - вторая и третья. Перезагрузите систему и проверьте результат.
    Отредактируйте файл inittab, так чтобы система запускалась только в текстовом режиме. Перезагрузите систему и проверьте результат. - i etoqo toje ne smoq napisat,3 raza procital statyu no pocemu ta v qolovu ne daxodit:(

    Ответить

  7. Александр:

    Ошибка?
    На уровне 1 система находится в время загрузки

    Ответить

Оставьте свой отзыв