Введение в Linux (110
..pdf4.emacs – редактор для программистов,
5.mcedit – часть midnight commander.
Современные редакторы (гуи):
1.Gedit,
2.Kedit,
3.Gvim,
4.Kate.
14.VI / VIM
1)Выбор и открытие файла.
vi1.txt – просто открыть,
vi 1.txt ++11 – открыть и перейти на 11 строку,
vi 1.txt 2.txt – открыть два файла подряд (после закрытия одного будет два),
vi-o 1.txt 2.txt – открыть два файла сразу.
2)Режимы.
−режим команд (по умолчанию),
−режим вставки,
−режим выделения (визуальный режим, только VIM).
3) Перемещение (режим команд). h j k l (лево / низ / верх /право),
0 / $ – начало и конец строки, ^ – первый пробельный символ, w / b – слово вперед / назад,
e – конец слова вперед,
W / B – большое слово вперед / назад, C-F / C-B – PgUp / PgDown,
C-E / C-Y – скролл 1 строки вперед / назад, <number> G / G – переход на строку / в конец,
31
gg – переход в начало,
t<char> / f <char> – вперед до первого символа (невкл / вкл), T<char> / F<char> – назад до первого символа (невкл / вкл), % – парная скобка, () – предыдущее / следующее предложение,
{} – предыдущий / следующий абзац, ! – сказать про английский язык и набор текста, + / - – предыдущая / следующая строка,
H / M / L – верх / центр / конец экрана.
4)Изменение.
i / a – переход в режим вставки перед / после курсора, R – переход в режим замены (REPLACE),
r<char> – замена одного символа под курсором, I / A – режим ввода с начала / конца строки,
o / O – режим ввода со следующей / предыдущей строки, x / X – delete / backspace,
d<movement> – удалить нечто (dw – удалить слово, dt4 – удалить до первого символа 4),
c – то же что удалить, но с переходом в режим вставки, dd – удалить строку,
yy – скопировать строку,
p / P – вставить после / перед курсором. Если скопирована строка целиком, то после / перед строкой, где курсор,
J – объединить строки, u – Undo,
C-R – Redo,
. – повтор последней команды,
s – удалить символ и в режим вставки,
32
S – удалить строку и в режим вставки, ~ – invert-case,
Escape – выход из режима вставки / визуального в режим команд,
! перемещение – не в режиме вставки.
5) Поиск.
/<pattern> – вперед, ?<pattern> – назад,
n / N – следующий / предыдущий результат,
# / * – предыдущий / следующий идентификатор,
! Можно использовать как Movement
6)Визуальный режим.
v– выделение,
V – выделение строк,
C-v – выделение прямоугольного блока .
7)Команды.
:– начало команды, :w – сохранить файл,
:e file – редактировать файл,
:q – выход (если не сохранено – не даст), :q! – выход без лишних вопросов, :(area)s/from/to/flags – замена (типа седа), ZZ – выйти и сохранить,
ZQ – выйти и не сохранить, :retab – замена табов на пробелы,
Q – переход в ed-режим, выйти – набрать vi <Enter>,
8)Другие возможности
−повторы (число + команда – повторить команду несколько раз),
−регистры – используются для хранения текстов (есть спец-регистры)
33
(help reg)
−“<register>y,
−“<register>p,
−“+ / “*,
−метки ,
−ma – поставить метку,
−`a – перейти к метке,
−'a – перейти к метке (к первому непустому символу строки),
−mA, 'A – глобальные метки между файлами,
−макросы,
−q<name> <actions...> q – записать макрос,
−@name – применить макрос,
−@@ – применить последний макрос,
−<number> @<name> – применить макрос много раз,
−g Z (gUw, guw gcw) – глобальные команды,
−буфера – несколько открытых файлов,
−табы – несколько табов,
−colorscheme – схемы раскраски,
−vimrc – файл настроек,
−плагины,
−nerdcommenter – удобные комментарии,
−xml – обработка xml(подсветка, валидация, форматирование, автозакрытие тегов),
−MRU – последние редактировавшиеся файлы,
−vimdiff – 3-way merge tool,
−auto-complete (ctags).
34
15. ЯДРО
Ядро – центр любой ОС, который содержит в себе следующие компоненты:
1.Драйверы устройств.
2.Файловые системы, в том числе виртуальные.
3.Многозадачность (процессы, потоки).
4.Система управления памятью.
5.Сетевые протоколы и прочий ввод-вывод.
6.Планировщик задач.
7.Безопасность.
Различают пространство ядра и пространство пользователя (соответственно kernelspace/userspace). Процессы, выполняемые ядром, имеют больший́ приоритет и работают быстрее. Они не подвергаются дополнительным проверкам (на безопасность и ошибки). Падение пользовательского процесса приводит к завершениюпроцесса, падение ядра– костановке работы ОС.
Есть драйвер NTFS, который из-за политики Microsoft не может писать файлы, только на чтение. Есть драйвер NTFS-3g, который позволяет писать на NTFS, но из-за опасений нестабильности работает в пространстве пользователя.
Ядро – компилируемый бинарный исполняемый файл, может содержать модули ядра, т. е. компоненты, которые динамически подгружаются при необходимости.
Модулями ядра поставляются некоторые драйвера (например, Nvidia). lsmod – список загруженных модулей,
insmod – загрузить модуль, rmmod – выгрузить модуль,
modprobe – более умная утилита для работы с модулями.
Сборка осуществляется из исходников. Достается пакет с исходниками, распаковывается, выполняется конфигурация (make menuconfig), дела-
35
ется сборка и установка (make && make modules && make install && make modules_install).
Исходники ядра есть с патчами (gentoo-sources), адаптированные под данный вариант Linux; есть напрямую от Linux (vanilla-sources).
Не следует бояться собирать ядро.
16. УПРАВЛЕНИЕ ПРОЦЕССАМИ
./process – запуск процесса из текущей директории, Control-C – прерывание процесса,
Control-Z – остановка процесса, [1] stopped ./process
fg – продолжить выполнение в переднем плане, bg – продолжить выполнение в фоне.
./process & – запуск в фоне, [2] 16699
2 – номер задачи (job),
16699 – идентификатор процесса (PID). Идентификатор уникален, количество ограничено (в 32-разрядных – 2^15, в 64-разрядных – по умолчанию до 2^15, но можно увеличить до 2^22)
jobs – список всех задач.
[1]– Running ./process
[2]+ Running ./process2 fg %1
Сигналы – способ межпроцессного взаимодействия,
SIGINT (Interrupt) – прерывание процесса, происходит при нажатии Control-C, SIGSTOP – остановка процесса, происходит при нажатии Control-Z, SIGCONT – продолжить процесс, происходит при вызове fg.
36
Любая программа может обрабатывать сигналы и осуществлять собственную обработку сигнала. Например, вместо прерывания осуществлять плавное правильное завершение процесса.
kill – послать сигнал процессу,
kill <PID> – убивает процесс, по умолчанию посылается SIGTERM (Terminate),
kill %1 – убивает задание (job) номер 1,
killall java – убивает все процессы с именем java,
kill -s SIGKILL <PID> – убивает без лишних вопросов,
SIGHUP – сигнал посылается всем фоновым процессам при выходе, либо обрыве соединения. По умолчанию завершает выполнение процесса. Можно запустить nohup <команда>, и тогда после выхода или обрыва фоновый процесс останется выполняться.
kill -l – список всех доступных сигналов.
У процессов есть иерархия: 0 – это ядро, 1 – это init, главный процесс системы. У каждого процесса есть PPID (Parent PID). Процесс запускается, запускает дочерние, которые могут быть фоновыми. Чтобы дождаться окончания фонового процесса, используется команда wait, которой можно указать пид в качестве параметра.
После завершения дочерний процесс ждет, отдать код завершения родительскому процессу. Если он был не фоновым, то он сразу завершается, если был фоновым, то – после вызова wait из родительского процесса или завершения родительского процесса. Пока родительский процесс не прочитал код возврата – дочерний процесс становится «зомби» (умер, но не погребен). Зомби не занимает ресурсов, кроме пида, его можно убить следующими способами:
1.вызвать wait в родительском процессе,
2.послать SIGCHLD родительскому процессу,
37
3.завершить родительский,
4.ребут.
Пример зомби-процесса.
#include <unistd.h> #include<stdlib.h> #include <stdio.h> int main()
{
int pid;
pid = fork(); if (!pid)
{
exit(0);
}
printf(“look at zombie!”); getchar();
}
«Демон» – процесс, который запускается самой ОС, и работает в фоновом режиме без взаимодействия с пользователем.
«Форк-бомба» – специальная программа, выбирающая все пиды и тем самым не дающая сделать ничего с системой.
Пример на C++
#include <unistd.h> int main()
{
while(1)
fork();
}
38
ps – список своих процессов,
ps -a – список процессов всех пользователей,
ps -x – показывает все, которые без терминала («демоны», гуи), ps u – user-oriented,
ps -l – long BSD format,
ps --forest – дерево процессов,
top – утилита для просмотра самых нагруженных процессов, htop – то же что топ, но только намного красивее.
У каждого процесса есть приоритет (NICENESS), по умолчанию – 20. Чем меньше, тем лучше.
Любой пользователь может понизить приоритет своей задачи. ROOT может понижать и повышать любые приоритеты.
nice -n10 process – запустить процесс с приоритетом на 10 больше текущего (понизить).
renice 10 pid – сменить приоритет во время выполнения процесса.
17.ЗАГРУЗКА СИСТЕМЫ
1.Грузит MBR – маленькая программа.
2.MBR грузит ядро, которое остается в памяти на протяжении работы системы и никогда не выгружается. Ядро пишет на консоль версию.
Вдальнейшем версию можно посмотреть /proc/version.
3.Ядро обнаруживает устройства и пишет на консоль.
4.Ядро запускает /sbin/init (PID = 1). Init запущен пока работает система.
Конфиг init - /etc/inittab.
5.init грузит скрипты (монтирование, запуск приложений), которые на-
ходятся в /etc/init.d, а также в /etc/rcX.d/...
6.init запускает getty, которая выдает приглашение на консоль.
39
Загрузчики.
1.LILO (LinuxLOader). Конфиг лежит в /etc/lilo.conf. Выдает строку приглашения
boot: <TAB> – выбрать ядро, можно передать параметры Важно – при использовании LILO нужно обязательно его перезапускать при изменении ядра или его места расположения.
2.GRUB. Устанавливается – grub-install, конфиг – /boot/grub/menu.lst
Отличие – он сам понимает файловые системы и сам находит ядро
TODO – про новый GRUB
То, что обнаруживает ядро, можно получить, вызвав dmesg | less. Там всё закольцовывается, позже можно посмотреть в /var/log/messages.
18. RUNLEVEL
Runlevel – конечный автомат, управляющий init. 0 – Halt,
1s – Single user,
2 – Multiuser, no network,
3– Multiuser, text-console,
4– Multiuser, graph console,
5= 4,
6– Reboot.
В/etc/rcX.d находится то, что нужно запускать или останавливать на данном уровне.
/etc/rc3.d/[sk]<num><name>
то, что s – то надо запустить (start) то, что k – то надо прибить (kill)
Например,
/etc/rc3.d/s03networking → (symlink) → /etc/init.d/networking
40