Ликбез по Linux

Полезные мелочи при работе с консолью в GNU/Linux

Эта статья является приложением к статье "Bash: основы обитания в командной строке" (№28, 2008). Ниже познакомимся с более детальной настройкой этой типовой стандартной командной оболочки.

Хотя современные системы GNU/Linux предоставляют возможность обычному пользователю пользоваться исключительно графическим интерфейсом, не стоит забывать про силу командной оболочки. И не только в случаях, когда X-сервер рухнул в результате неправильной конфигурации системы или вам просто нужно выполнить какие-либо сервисные процедуры.

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

К тому же работа в консоли не такая уж трудная и заковыристая. Командная оболочка в ЮНИКС-системах имеет множество настроек и функций, которые способны сделать использование консоли довольно комфортным и уютным.

 

Мы уже описывали удобства, что предоставляют волшебные клавиши автодополнения и работы с историей команд "tab", "вверх", "вниз". Стоит обязательно потренироваться в использовании этих клавиш, и через короткое время консоль уже не будет пугать своей сложностью.

Ещё более комфортная работа в командной оболочке обеспечивается редактированием скрытых файлов .bashrc_profile и .bashrc, что находятся в домашнем каталоге. Файл ~/.bashrc_profile задаёт параметры командной оболочки при логине пользователя в систему. А файл ~/.bashrc определяет поведение командной оболочки во время очередного запуска терминала или эмулятора терминала в графическом режиме.

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


Переменные окружения

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

Значение каждой из этих переменных можно посмотреть через команду echo. Например:

$ echo $PATH
usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/home/mik/flex/bin/

Для установки переменных в bash используется стандартный оператор присваивания:

имя=значение
export имя

То есть, например, чтобы добавить ещё один путь поиска в переменную PATH, в ~/.bashrc_profile нужно записать:

PATH = "/usr/games"
export PATH

Для тренировки предлагаю поиграть с переменной TMOUT, что определяет время бездействия терминала. Если установить значение этой переменной больше нуля, то вы заставите консоль завершить свою работу по истечении указанного количества секунд, если в течение этого времени не будет ничего введено. Теперь можно не бояться оставить рутовый терминал без присмотра.


Псевдонимы

Следующим инструментом для обеспечения пользовательского комфорта являются псевдонимы (алиасы). Они задают одной символьной последовательности значение другой. В оболочке bash создаются посредством использования команды alias и удаляются посредством команды unalias. Общий синтаксис такой:

alias имя=значение

Когда bash получает команду, то проверяет, не содержит ли эта команда известные псевдонимы. Если да, то символы команды замещаются соответствующим текстом псевдонима.

Псевдонимы удобны, прежде всего, тем, что при их помощи можно сократить длинные команды до очень коротких, что экономит время и нервы:

alias ls='ls -color=auto'

Но алиасы обеспечивают не только краткость. С их помощью можно обеспечить некоторую проверку правописания, когда при наборе команды случайно не ту клавишу нажмёшь:

alias xs='cd'
alias vf='cd'
alias moer='more'
alias kk='ll'

И ещё при нынешнем распространении юникода тем, кому религия позволяет, можно поэкспериментировать и попытаться "русифицировать" bash, создав кириллические псевдонимы:

alias лс='ls'

Когда на диске много файлов и папки с кириллическими именами, такие псевдонимы могут обеспечить неплохой комфорт.


Set и shopt

В ~/.bashrc опытных админов также можно встретить команды set и shopt. Эти команды используются для настройки поведения bash. С их помощью можно установить проверку почты или автозавершение имени хоста при встрече слова, начинающегося с "@" и т.д.

По правде говоря, на мой взгляд, таких уж интересных режимов работы для начинающих линуксоидов команды set и shopt не содержат. Разве что команда shopt +u cdspell будет исправлять небольшие опечатки в написании пути при использовании команды cd. Однако знать о существовании этих команд нужно, чтобы не пугаться, встретив в чьём-нибудь ~/.bashrc.


Функции

Самым гибким инструментом настройки командной оболочки для обеспечения более комфортной работы являются функции. Функции в ~/.bashrc - это те же самые скрипты bash. Общий синтаксис определения функции следующий:

function name () {
...
Скрипт
...
}

Ключевое слово function не является обязательным. Вызов функции осуществляется так же, как и вызов любой команды.

Создание функций - это отдельная тема по программированию на bash. Мы не будем здесь эту тему затрагивать, хотя бы потому, что уже достаточно написано готовых файлов ~/.bashrc, которые можно просто взять из Интернета и посмотреть.

Поэтому в заключение для практики рекомендую скачать какой-нибудь уже готовый ~/.bashrc - например, с librarian.spb.ru/page/moj-bashrc. Здесь один молодой сисадмин и достойный ученик Мастера Фу делится с человечеством своим личным bashrc. Автор этого файла на целых 17 килобайт собрал воедино всё, что он нашёл любопытного в Сети.

Данный bashrc можно изучать в учебных целях или просто скопировать в свой собственный настроечный файл и использовать. Например, здесь есть уже готовые удобные функции упаковки и распаковки архивов, сортировки и вывода процессов, которые нагружают систему более 0.1%, функции автоматического конвертирования образов в iso и многое другое.


Учимся использовать man-ы

Страницы руководства man - самый крупный справочник по всем командам (и не только), установленным в системе. Применяется очень просто:

$ man имя_команды

Например: "$ man bash" выведет руководство к bash, причём в данном случае оно будет довольно объёмным (в Debian - 2871 строк!), поэтому стоит запомнить пару клавиш для удобного обращения с ним. Например, "/" вызывает поиск введённого шаблона. Для того, чтобы найти следующее совпадение, нужно жать "n", а для предыдущего совпадения существует клавиша "N". Вообще, для вывода информации man использует программу pager, в Debian её роль играет less, так что для детальной инструкции по использованию клавиш стоит почитать вывод команды "$ man less". Кстати, как можно почитать в "$ man man", в базе данных man находятся статьи не только по командам, но и по многим системным файлам, различным вызовам и т. п. И, кроме всего прочего, в man есть поиск по ключевым словам. Делается это так:

$ man -k список ключевых слов


Управление процессами

Для того, чтобы посмотреть список процессов, обычно используется программа ps. Но если запустить её без параметров, то результат будет не особенно полезен, зато при использовании ключей результат можно получить просто великолепный. Например, очень удобно такое применение:

$ ps aux

а если добавить опцию f (получится "$ ps auxf"), то список вообще будет представлен в виде дерева. Также можно фильтровать по разным полям, например, по имени пользователя.

$ ps aux -u root

И важное напоминание: не забываем про великий и могучий grep для того, чтобы фильтровать ненужную информацию.

Это, конечно, замечательно, но ps выдаёт только моментальный снимок процессов, актуальный на момент вызова команды. Если же нужно смотреть на список в реальном времени (например, чтобы узнать, кто же так сильно загружает процессор), то стандартным средством является top. После запуска жмём "h" и читаем, как им управлять, хотя более удобными и мощными заменителями являются atop и htop. По умолчанию они не установлены, но это дело поправимое. Htop позволяет детально просматривать информацию о загрузке процессоров, памяти, посылать различные сигналы процессам, фильтровать по степени использования оперативной памяти и процессоров. Тут же можно и убить непослушную программу. Но если же нету желания применять такие программы (например, быстрее из консоли одной командой убить процесс), то все манипуляции можно осуществить из голой консоли. Команда kill PID убивает процесс, чей PID указан. Если же хочется использовать имя, то есть команда killall имя, которая убивает все процессы с указанным именем. Кроме того, по умолчанию для завершения процесса посылается сигнал SIGTERM. Если же процесс не отвечает на системные сигналы, то он не завершится. Для решения такой проблемы нужно посылать сигнал SIGKILL. Делается это следующим образом:

$ killall -9 mplayer

Михаил АСТАПЧИК,
Антон Oni ЛИПАРИН

Версия для печатиВерсия для печати

Номер: 

08 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!