пʼятницю, 21 січня 2011 р.

Эффективно работаем в консоли Линукса

Я очень много времени провожу под консолью. Да, именно под настоящей консолью, а не эмулятором терминала. И я не содержу сервер, как могут подумать. Просто это на самом деле удобно, как для меня. А для того, чтобы было еще удобнее, я ее настроил под себя — так и удобнее, и производительность труда немного выше. Для тех, кто тоже хочет посвятить себя ее изучению, дам несколько рекомендаций, что нужно сделать. 
Совет №1. Включить и настроить Framebuffer. В стандартном виде консоль линукса просто текстовая. Ее разрешение составляет всего 80x25 символов (это текстовый режим), а мой монитор умеет все 1280x1024 пикселей (графический режим), и это уже не рациональное использование ресурсов. Конечно, работать за ней можно, но не очень удобно — имена файлов могут не влезать, большие, прям таки огромные буквы и, как говорят, ШГ. А то, во что превращается Midnight Commander, им только детей пугать. Но время идет и прогресс не позабыл и консоль Linux! Что же этот прогресс может нам дать? А дать он может многое, и все благодаря использования технологии кадрового буфера, или Framebuffer.


Кадровый буфер (framebuffer, буфер кадра, видеобуфер, фреймбуфер) — виртуальное электронное устройство или область памяти для кратковременного хранения одного или нескольких кадров в цифровом виде перед его отправкой на устройство видеовывода. Буфер может быть использован для выполнения над кадром различных предварительных операций, организации стоп-кадра, устранения мерцания изображения и др. Обычно кадр хранится в виде последовательности цветовых значений каждого пикселя изображения. Цветовые значения чаще всего хранятся в следующих форматах: одноразрядный (монохромный; 1 бит), 4/8-битный (палитровый), 16-битный (High Color) и 24-битный (True Color); также может присутствовать альфа-канал. Размер памяти, необходимый для хранения одного кадра, зависит от разрешения и глубины цвета. При этом управление происходит уже не через устройства /dev/tty*, а через /dev/fb*.

Как его включить? Если у Вас современный дистрибьютив с ядром версии старше 2.4.5 (рекомендуется ядро ветки 2.6), даю 99,9% на то, что фреймбуфер у вас уже включен по-умолчанию. Нужно только настроить. Если Вы на 100% уверены, что эта технология все-таки у вас не работает, тогда только пересобирать ядро. Но как это делать, описывать не буду. Может как то потом. 
Настройка фреймбуфера. Для того, что бы от фреймбуфера было больше толка, давайте настроим его. Во-первых, выставим для него оптимальное разрешение — обычно настраивают максимальное, которое поддерживает LCD монитор. Мой имеет диагональ 17", значит наше рабочее разрешение будет 1280x1024. Глубину цвета возьмем тоже побольше — 24bit. Смотрим в таблицу и по этим параметрам узнаем код (больше можно узнать на английской вики):




640x480

800x600

1024x768

1280x1024

1600x1200

256 / 8bit

0x301 / 769

0x303 / 771

0x305 / 773

0x307 / 775

796

32k / 15bit

0x310 / 784

0x313 / 787

0x316 / 790

0x319 / 793

797

64k / 16bit

0x311 / 785

0x314 / 788

0x317 / 791

0x31A / 794

798

16M / 24bit

0x311 / 786

0x314 / 789

0x317 / 792

0x31b / 795

799
Предупреждение: режимы для разрешений более 1280x1024 еще не достаточно оттестированы, поэтому никаких гарантий не даю!
Итак, для меня подходит значение 0x31b. Его можно таким и оставить, а можно перевести в десятичную, более привычную систему счисления: запускаем редактор vim и в нем вводим команду :echo 0x31b. Я получил результат 795. Одно из этих значений нужно передать в ядро при загрузке через параметр «vga». Теперь настройте свой загрузчик. К примеру вот вырезка из моего /boot/grub/menu.lst:
title linux
root (hd0,0)
kernel /boot/vmlinuz splash=verbose vga=795
initrd /boot/initrd.img
Для отключения фреймбуфера просто убираем параметр vga. 
Что нам это дало? Во-первых глазам приятнее. Если еще поставить красивый шрифт, как я написал тут, то прямо загляденье. Во-вторых, удобнее работать. Представьте только, как на серверном 22" мониторе будет удобно читать логи! В-третьих, сейчас уже очень много программ и игр работают под этой чудо-технологией. К примеру, qemu, mplayer (один раз у меня сгорела видеокарта и Х просто не мог загрузится. Тогда я через mplayer под консолью фильмы с аниме гонял), frozen-bubble, mmc и так далее. Можно даже попробовать отказаться от X.org :) 
Совет№2. Настроить ~/.bashrc. Но это опционально. Я, например, добавил в запрос счетчик количества фоновых приложений — такое себе подобие панели задач. Для этого я дописал в файл ~/.bashrc такую строку:
export PS1="[\u'\j'@\H \W]$ "
Или вот, например, чтобы не набирать всю комманду перед каждым просмотром видео, создадим псевдоним для mplayer. Теперь можно просто набрать в консоли mplay с именем файла и смотреть с любимыми настройками:
alias mplay="mplayer -noquiet -nofs -nomouseinput -vc coreserve, -sub-fuzziness 1 -identify -slave -vo xv -ao pulse -stop-xscreensaver -ass -embeddedfonts -ass-line-spacing 0 -ass-font-scale 1 -ass-force-style PlayResX=512,PlayResY=320,Name=Default,Fontname=Arial,Fontsize=20,PrimaryColour=\&H00ffffff,BackColour=\&H00000000,OutlineColour=\&H00000000,Bold=0,Italic=0,Alignment=2,BorderStyle=1,Outline=1,Shadow=2,MarginL=20,MarginR=20,MarginV=8 -fontconfig -font Arial -subfont-autoscale 0 -subfont-osd-scale 20 -subfont-text-scale 20 -cache 2000 -osdlevel 1 -vf-add screenshot -slices -channels 2 -af scaletempo,equalizer=4:3:2:1:0:0:1:2:3:4 -softvol -softvol-max 110 -subcp enca:ru:cp1251"
Вы можете придумать что-то свое.
Совет№3. Научится эффективно управлять задачами. Linux, в отличии от MS-DOS, всегда был многозадачной ОС. Конечно, пользы от этого было бы мало, если бы не придумали нормального механизма управления процессами. И это таки сделали. Далее я опишу простейшие манипуляции с процессами, которые нужно знать для начала.
Запуск приложений. Большинство программ для Линукс умеют работать и под консолью, даже если они имеют графический интерфейс. Для запуска просто вводим команду и по возможности параметры. Для примера запустим консольный проигрыватель музыки с плейлистом:
[keed'0'@mandrivka ~]$ mpg123 -@ ~/enigma.m3u
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.12.1; written and copyright by Michael Hipp and others
    free software (LGPL/GPL) without any warranty but with best wishes

Directory: /data/Music/Enigma/1991 - MCMXC a D Limited Edition/
Playing MPEG stream 1 of 107: 01 - The Voice Of Enigma.mp3 ...
Title:   The Voice Of Enigma             Artist: Enigma
Album:    MCMXC a D Limited Edition
Genre:   New Age
MPEG 1.0 layer III, 192 kbit/s, 44100 Hz stereo
С музыкой жить веселее. Вот только теперь наша консоль получилась занятой и ничего нового ввести не получается. Что делать?
Можно плеер «свернуть». Для этого просто жмем клавиши Ctrl+Z. Это доступно для любых приложений, не только плеера. Выведется примерно такое сообщение и музыка прекратит играть:
^Z
[1]+ Stopped                               mpg123 -@ ~/enigma.m3u
[keed'1'@mandrivka ~]$
Нет, мы не закрыли приложение, мы его временно приостановили — он все еще запущен и занимает ресурсы компьютера. Для продолжения в фоновом режиме вводим команду bg (от англ. background — фон):
[keed'1'@mandrivka ~]$ bg
[1]+ mpg123 -@ ~/enigma.m3u &
[keed'1'@mandrivka ~]$
Музыка снова заиграла — процесс продолжился в фоне. Посмотрите на вторую строку — там написана наша команда, а в конце стоит знак «&». Для чего он нужен? Так вот, если его дописать в конец команды и выполнить ее, то программа сразу запустится в фоне. В нашем случае мы запустили плеер в обычном режиме, потом остановили и перезапустили его в фоне. Для примера давайте еще что то еще запустим, скажем, одну бесконечную и бестолковую команду:
[keed'1'@mandrivka ~]$ cat /dev/zero > /dev/null &
[2] 15335
[keed'2'@mandrivka ~]$
Процессу присваивается PID 15335, условный идентификатор 2 и приложение ушло выполнятся на задний план. Запустим еще что-то и остановим его:
[keed'2'@mandrivka ~]$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.060 ms
^Z
[3]+  Stopped                ping 127.0.0.1
[keed'3'@mandrivka ~]$
Теперь у нас в фоне 3 процесса. Как с ними работать? Очень даже просто. Давайте глянем, что у нас запущено и в каком состоянии оно находится. Тут нам пригодится команда jobs:
[keed'3'@mandrivka ~]$ jobs
[1]   Running                 mpg123 -@ ~/enigma.m3u &
[2]-  Running                 cat /dev/zero > /dev/null &
[3]+  Stopped                 ping 127.0.0.1
[keed'3'@mandrivka ~]$
Два работающих процесса, один приостановленный. Теперь каждый из них можно «развернуть», то есть перевести на передний план. Для этого есть программа fg (от англ. foreground — передний план). Используем ее так: fg, далее ставим знак «%» и без пробела идентификатор процесса — число, что стоит в первом столбике вывода jobs в квадратных скобках. Проверим, пингуется еще сеть или уже нет и опять остановим процесс:
[keed'3'@mandrivka ~]$ fg %3
ping 127.0.0.1
64 bytes from 127.0.0.1: icmp_seq=21 ttl=64 time=0.074 ms
64 bytes from 127.0.0.1: icmp_seq=22 ttl=64 time=0.058 ms
^Z
[3]+ Stopped                 ping 127.0.0.1
[keed'3'@mandrivka ~]$
Завершение процессов. Завершить процесс можно «мягко» и «жестко». Что бы это сделать мягко, переключимся на его и нажмем «Ctrl+C» (если для этого в программе не придумано специальных горячих клавиш, как в mc, например — F10): 
[keed'3'@mandrivka ~]$ fg %2
cat /dev/zero > /dev/null
^C
[keed'2'@mandrivka ~]$
Но бывает так, что программа начинает вести себя странно и/или потреблять довольно много ресурсов. Мягкий способ при этом не всегда помогает. Придется процесс убить — команда kill поможет нам. Используется она также, как и fg — убивает по PID`у или числовому идентификатору:
[keed'3'@mandrivka ~]$ jobs
[1]   Running                 mpg123 -@ ~/enigma.m3u &
[2]-  Running                 cat /dev/zero > /dev/null &
[3]+  Stopped                 ping 127.0.0.1
[keed'3'@mandrivka ~]$
Тут понятно, что мы убили ping. Однако завершая процессы таким способом Вы скорее всего потеряете все не сохраненные данные. Поэтому только в крайних случаях! Убить процесс можно и не зная его числовых значений, а зная только имя:
[keed'3'@mandrivka ~]$ killall ping
[keed'2'@mandrivka ~]
Используйте top. top — замечательная стандартная утилита для управления процессами. Описывать ее огромный функционал я не буду — это за меня уже сотни раз было сделано. Читайте man top в консоли, это полезно :) И на всякий случай приведу маленькую шпаргалку по тем командам, которые мы сегодня выучили:



команда & — запуск команды в фоновом режиме;
bg — перевод команды в фоновую работу;
fg %n— перевод процесса [n] в развернутый режим;
jobs — вывод списка запущенных процессов;
kill %n — убить процесс [n];
killall команда — завершить команду по ее названию;
nohup команда — запуск команды без привязки к консоли;
Ctrl+Z — приостановить процесс;
Ctrl+C — мягкое завершение процесса;
top — консольный диспетчер задач.

Для еще более гибкой работы в консоли попробуйте изучить screen.
Совет №4. Освойте скрипты. Это просто находка для автоматизации процессов. И это совсем не такие скрипты, как bat и cmd из мира Microsoft. Это на самом деле очень серьезный и удобный инструментарий для системного администрирования — тот не админ, который не знает bash. Настоятельно рекомендую руководство Advanced Bash-Scripting Guide. Скачать его бесплатно можно вот от сюда —  http://nklug.org.ua/lg/rus/articles/index-abs-guide.html. Оно очень хорошо написано, будет полезно как новичкам, так и опытным программистам. Я сам по нему учился и знаю, что говорю. Даже если вы далеки от программирования, научитесь хотя бы читать сценарии. Начните с легкого — с Bash, а далее, если втянитесь, самим захочется освоить что то посерьезнее вроде Perl или Python. 
Совет №5. Запустите сервис консольной мыши. Для этого установите
и запустите сервис gpm:
[keed'0'@mandrivka ~]$ sudo urpmi gpm
[keed'0'@mandrivka ~]$ sudo /etc/init.d/gpm start
Теперь прямо в консоли можно выделять, копировать и вставлять текст, а также более эффективно работать с vim или mc, например.


1 коментарі:

Dr.X сказав...

кто сказал, что ты не умеешь писать статьи?!

Дописати коментар