Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

LINUX 101: Расширение возможности командной оболочки

Оригинал: LINUX 101: POWER UP YOUR SHELL
Автор: Ben Everard
Дата публикации: June 16, 2015
Перевод: Н.Ромоданов
Дата перевода: ноябрь 2015 г.

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

Зачем это делать?

  • Сделайте жизнь в командной строке легче и быстрее.
  • Возобновляйте сессии после потери соединения.
  • Не нажимайте лишний раз на клавиши!

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

Как пользователь Linux, вы, вероятно, знакомы с командной оболочкой (т. е. командной строкой). Вы можете в какой-то момент открыть терминал, а затем выполнить некоторую важную работу, которую вы нельзя сделать в графическом интерфейсе, или, возможно, вы постоянно находитесь в среде оконного менеджера и командная оболочка — это ваш главный способ взаимодействия с системой Linux.

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

Делаем приглашение командной строки более значимым

Большинство дистрибутивов поставляется с очень простыми приглашениями командной строки - они выдают немного информации, и, как правило, вы не обращаете на это внимание, однако можно сделать гораздо более информативным. Возьмите приглашение, используемое по умолчанию, например, в инсталляторе Debian 7:

mike@somebox:~$

Здесь указан пользователь, имя хоста, текущий каталог и символ типа аккаунта (если вы переключитесь в аккаунт root, то символ $ будет заменен на символ #). Но где хранится эта информация? Ответ — она находится в переменной окружения PS1. Если вы введете команду echo $PS1, то в конце текстовой строки вы увидите следующий фрагмент текста:

u@h:w$

Он выглядит немного некрасиво, и на первый взгляд вы можете начать возмущаться, предполагая, что это должно быть ужасное регулярное выражение, но мы не собираемся вас мучить их сложностью. Нет, символы слэш являются здесь управляющими последовательностями escape, указывающее строке-приглашению выполнять определенные действия. Часть u, например, говорит выводить имя пользователя, в то время как w означает, что нужно выводить рабочий каталог.

Ниже перечисляется, что вы можете выводить в строке приглашения в командной строке:

  • d - текущее время
  • h - имя хоста
  • n - символ новой строки
  • A - текущее время (ЧЧ:ММ)
  • u - имя пользователя
  • w - (в нижнем регистре) весь путь к рабочему каталогу
  • W - (в верхнем регистре) только рабочий каталог
  • $ - символ строки приглашения, который будет заменен на символ # для пользователя root
  • ! - номер данной команды в списке истории команд history командной строки

Уточним разницу для вариантов w и W: в первом случае вы увидите весь путь к каталогу, в котором вы работаете (например, /usr/local/bin), в то время как для последнего варианта будет просто указана часть bin.

Теперь, что вы думаете об изменении строки-подсказки? Вы должны изменить содержимое переменной окружения PS1. Попробуй следующее:

export PS1=”I am u and it is A $”

Теперь ваша строка-подсказка будет выглядеть примерно так:

I am mike and it is 11:26 $

Теперь вы можете поэкспериментировать с другими последовательностями escape, показанными выше, с тем, чтобы создать строку-приглашение вашей мечты. Но подождите секундочку - когда вы выйдите из системы, все результаты вашей напряженной работы будут потеряны, поскольку значение переменной окружения PS1 заново переустанавливается каждый раз, когда запускается терминал. Простейший способ исправить это - открыть конфигурационный файл .bashrc (в вашем домашнем каталоге) и добавить всю команду экспорта в конец файла. Этот файл .bashrc будет считываться интерпретатором Bash каждый раз, когда вы начинаете новый сеанс работы с оболочкой, так что всегда будет появляться результат вашей работы. Вы также можете украсить вашу строку-приглашение символами различного цвета. Это поначалу будет несколько сложновато, т. к. вы должны использовать некоторые довольно странные управляющие последовательности escape, но результат может оказаться впечатляющим. Добавьте следующую последовательность в вашу строку PS1 и цвет текста изменится на красный:

[e[31m]

Вы можете поменять номер 31 на один из следующих с тем, чтобы получить другой цвет:

  • 30 Black - Черный
  • 32 Green - Зеленый
  • 33 Yellow - Желтый
  • 34 Blue - Голубой
  • 35 Magenta – Мажента (Малиновый)
  • 36 Cyan – Циан (Морская волна)
  • 37 White - Белый

Итак, давайте завершим этот раздел созданием супер строки-приглашения, использовав в ней управляющие последовательности escape и цвета, которые мы уже рассмотрели. Сделайте глубокий вдох, согните пальцы, а затем введите следующую строку:

export PS1=”(!) [e[31m][A] [e[32m]u@h [e[34m]w [e[30m]$ “

Здесь высвечивается номер команды в списке истории команд в Bash, текущее время, а также заданы цвета для комбинации пользователь/хост и рабочего каталога. Если вы чувствуете себя особенно амбициозно, вы можете изменить цвет фона, а также цвет текста для действительно поразительных комбинаций. О полном списке цветовых кодов можно узнать в Arch wiki по ссылке http://tinyurl.com/3gvz4ec.

Важное о командной оболочке

Если вы абсолютный новичок и статью о Linux читаете в первый раз, то чтение этой статьи может для вас оказаться оказаться несколько тяжеловатым. Поэтому ниже перечислены основные сведения с тем, чтобы вы познакомились с командной оболочкой. Доступ к ней, как правило, осуществляется через приложение Terminal, XTerm или Konsole, которое находится в вашем меню, и когда вы его запустите, то сможете пользоваться следующими командами:

  • ls (выдача списка файлов);
  • cp one.txt two.txt (копирование файла);
  • rm file.txt (удаление файла);
  • mv old.txt new.txt (перемещение или переименование файла);
  • cd /some/directory (переход в указанный каталог);
  • cd .. (переход в каталог уровнем выше);
  • ./program (запуск программы program из текущего каталога);
  • ls > list.txt (перенаправление в файл данных, выдаваемых программой).

Почти для каждой команде есть страница руководства, объясняющая ее параметры (например, man ls; для того, чтобы выйти из режима просмотра руководства, нажмите клавишу Q). В нем вы можете узнать о параметрах команды, например, что с помощью команды ls -la показывается подробный список, включающий в себя скрытые файлы. Используйте клавиши управления курсором, указывающие вверх и вниз, для циклического перехода к предыдущим команда, а клавишу Tab используйте для того, чтобы завершить ввод имени файла после ввода его части.

Tmux: Оконный менеджер для командной оболочки

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

Если, в конечном итоге, вы работаете одновременно сразу с несколькими терминалами, то у вас возникает подобная ситуация; вас могут раздражать переходы между ними и постоянный поиск нужного терминала в панели задач или в списке окон. С помощью оконного менеджера, работающего в текстовом режиме, можно не только одновременно запускать несколько сессий командной оболочки внутри одного и того же окна, но вы можете даже их организовать так, чтобы их окна были показаны на экрано одно рядом с другим.

Также имеется еще одно преимущество: отключение от сессии и повторное к ней подключение. Лучший способ увидеть, как это работает, это попробовать все самостоятельно. В окне терминала введите команду screen (она установлена по умолчанию в большинстве дистрибутивов, либо она будет доступна в ваших репозиториях). Появляется некоторый текст приветствия - просто нажмите клавишу Enter для того, чтобы его закрыть. Теперь запустите интерактивную программу в текстовом режиме, например, nano, и закройте окно терминала.

В обычной сессии командной оболочки, действие закрытия окна остановит все процессы, запущенные внутри него - так что ваш сеанс редактирования с помощью Nano будет завершен. Но не при использовании команды screen. Откройте новый терминал и введите команду:

screen -r

И, вуаля: сессия Nano, которую вы запустили ранее, возвратилась!

Когда вы первоначально запустили команду screen, она создала она создала новую сессию командной оболочки, которая независима и не привязана к окну конкретного терминала, поэтому от нее можно отключиться, а затем позже можно к ней снова подключиться (благодаря параметру -r).

Это особенно полезно в случае, если вы для подключения к другой машине используете SSH, выполняете какую-то работу и не хотите, чтобы плохое подключение привело к потере всех ваших результатов. Если вы делаете свою работу внутри сессии команды screen и подключение пропадает (или разряжается аккумулятор вашего ноутбука, или ваш компьютер взрывается), вы можете просто переподключить сессию / перезарядить аккумулятор / купить новый компьютер, а затем вернуться в сессию SSH на удаленном компьютере, запустив для этого команду screen -r и оказаться в том месте, где вы остановились.

Сейчас мы здесь рассказываем об экране GNU, но в названии этого раздела упоминает приложение tmux. По сути, tmux (terminal multiplexer - терминальный мультиплексор) похож на улучшенную версию screen со множеством полезных дополнительных функций, так что здесь мы собираемся рассматривать это приложение. В некоторых дистрибутивах tmux есть по умолчанию; в других, как правило, его нужно установить командой apt-get, yum install или pacman -S.

После того, как он будет у вас установлен, введите команду tmux для того, чтобы его запустить. Вы сразу заметите, что снизу расположена зеленая строка с информацией. Она очень похожа на панель задач традиционного оконного менеджера: есть список запущенных программ, имя хоста, время и дата. Теперь, например, снова запустите программу Nano и нажмите сочетание клавиш Ctrl+B, а затем клавишу C. В результате в сессии tmux будет создано новое окно и вы можете увидеть это в нижней части на панели задач:

0:nano- 1:bash*

Каждое окно имеет номер, и та программа, которая отображается в текущий момент, помечается символом звездочки. Нажатие сочетания клавиш Ctrl+B является стандартным способом взаимодействия с tmux, так что если вы нажмете это сочетание клавиш, а затем укажите номер окна, то вы перейдете к соответствующему окну. Вы также можете использовать сочетание клавиш Ctrl+B с последующим нажатием N и P, чтобы перейти к следующему или предыдущему окну, соответственно; либо использовать Ctrl+B с последующим L для того, чтобы переключаться между двумя наиболее часто используемыми окнами (немного похоже на классическое поведения комбинации клавиш Alt+Tab для рабочего стола). Для того, чтобы получить список окон, используйте сочетание клавиш Ctrl+B, а потом — клавишу W.

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

Для этого в tmux используются "панели". Нажмите сочетание клавиш Ctrl+B, а затем клавишу %, и текущее окно будет разделено на две части, одна слева и одна справа. Вы можете переключаться между ними с помощью Ctrl+B с последующим нажатием О. Это особенно полезно в случае, когда вы хотите одновременно видеть сразу два объекта - например, страницу с инструкцией на одной панели, и редактор с файлом конфигурации на другой.

Возможно, вы захотите изменить размер отдельных панелей, и это сделать немного сложнее. Сначала вы должны воспользоваться сочетанием клавиш Ctrl+B, а затем клавишу двоеточие (:); в результате в результате панель tmux, расположенная внизу, будет окрашена в оранжевый цвет. Теперь вы находитесь в командном режиме, в котором вы можете вводить команды управления tmux. Введите команду esize-pane -R для того, чтобы изменить размер текущей панели на один символ вправо или используйте параметр -L для того, чтобы изменить размер влево. Может показаться, что это длинные команды для относительно простой операции, но обратите внимание, что в командном режиме tmux (который был запущен вышеупомянутой командой двоеточия) есть возможность автодополнения, выполняемая с помощью клавиши табуляции. Поэтому вам не нужно вводить всю команду - просто введите "RESI" и нажмите клавишу Tab для того, чтобы завершить ввод. Также обратите внимание на то, что в командном режиме tmux также есть своя собственная история команд, так что если вы хотите повторить операцию изменения размера, нажмите сочетание клавиш Ctrl+B, затем двоеточие, а затем используйте клавишу движения курсора вверх для того, чтобы выбрать команду, которую вы ввели ранее.

Наконец, давайте рассмотрим возможность отключения и повторного подключения — удивительной особенности команды screen , о которой мы рассказывали ранее. Находясь внутри tmux, нажмите словосочетание Ctrl+B, а затем D для того, чтобы отсоединиться от текущей сессии tmux от терминальной сессии, которая будет продолжать работать в фоновом режиме. Для того, чтобы переподключиться к сессии, используйте tmux. Но что произойдет, если у вас запущено несколько сессий tmux? Используйте следующую команду для того, чтобы получить их список:

tmux ls

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

tmux: оконный менеджер для вашей командной оболочки

Здесь с помощью tmux открыты две панели: в левой с помощью Vim редактируется конфигурационный файл, в то время как справа показана страница справки

Zsh: альтернативная командная оболочка

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

Многие продвинутые пользователи предпочитают Zsh — командную оболочку Z Shell. Это замена для Bash, в которой предлагаются почти все те же функции, но с некоторыми дополнительными возможностями. Например, в Zsh вы можете ввести ls - и нажав на клавишу Tab, получить краткие описания различных вариантов, доступные для ls. Нет необходимости открывать страницу руководства!

В Zsh предлагаются многие другие возможности автозавершения: например, наберите cd /u/lo/bi и нажмите клавишу Tab — будет выдан полный путь /usr/local/bin (при условии, что нет других путей, содержащих u, lo и bi). Или наберите cd, а затем нажмите Tab, и вы увидите красиво раскрашенный каталог - гораздо лучше тех простых, которые используются в Bash.

Zsh доступен в репозиториях всех основных дистрибутивов; установить его и для того, чтобы его запустить, введите zsh. Чтобы изменить командную оболочку, которая будет использоваться по умолчанию, с Bash на Zsh, воспользуйтесь командой chsh. А для получения дополнительной информации посетите сайт www.zsh.org.

Терминалы будущего

Вам может быть интересно, почему приложение, которое содержит приглашение командной строки, называется терминалом. Вернемся в первые дни существования Unix, когда люди, как правило, работали на многопользовательских машинах — гигантских мэйнфреймах, занимающих некоторую комнату где-то в здании, и люди, подключающиеся к ним, использовали комплект, состоящий из экрана и клавиатуры, который подключался к проводам. Такие терминальные машины часто называли "немыми", поскольку они самостоятельно не делали никакой важный работы - они просто отображали все то, что было послано по проводам от мэйнфреймов, и послали им то, что набиралось на клавиатуре.

Сегодня, почти все из нас выполняют всю фактическую обработку на собственных машинах, поэтому наши компьютеры не являются терминалами в традиционном смысле. Именно поэтому такие программы, как XTerm, Gnome Terminal, Konsole и т.д. называются "эмуляторами терминалов" - они обеспечивают те же возможности, что и физические терминалы прошлых лет. И в самом деле, во многих отношениях они не стали выполнять чего-либо большего. Конечно, у нас сейчас есть сглаженные шрифты, более качественные цвета и возможность щелкнуть мышкой по адресу URL, но в общем и целом они работают без всяких изменений в течение многих десятилетий.

Но некоторые программисты пытаются это изменить. Члены команды разработчиков (http://tinyurl.com/osopjv9) ультра-шикарного оконного менеджера Enlightenment, намереваются добавить в терминалы в 21-м веке такие функции, как отображение на дисплее медиаресурсов. Вы можете в каталоге с изображениями набрать команду s и просматривать миниатюры изображений или непосредственно внутри вашего терминала даже воспроизводить видео. В итоге терминал чем-то несколько большим, чем файловый менеджер, а это означает, что вы можете быстро проверить содержимое медиа-файлов без необходимости открывать их в отдельном приложении.

Также есть приложение Xiki (www.xiki.org), которое описывается как "революция в командной оболочке". Это как смесь традиционной командной оболочки, графического интерфейса и вики; Вы можете вводить команды в любом месте экрана, хранить свою выдаваемые данные в виде заметок, которыми можно воспользоваться в будущем, а также можете создавать очень мощные пользовательские команды. Это трудно описать простыми словами, поэтому авторы сделали видео (смотрите раздел Screencasts на сайте Xiki), в котором показано, насколько велик потенциал.

И Xiki, безусловно, не случайный проект, который может исчезнуть через несколько месяцев. Авторы запустили успешную компанию на Kickstarter-е с тем, чтобы финансировать свои разработки, и к концу июля собрали более $84000. Да, вы прочитали правильно - $84K для эмулятора терминала. Это может быть самая необычная краудфайндинговая кампания, поскольку некоторые ненормальные пользователи решили, что запускается новый журнал о Linux ...

Терминалы следующего поколения

Многие программы, предоставляющие доступ к командной строке и текстовому режиму, имеют возможности, эквивалентные возможностям графического интерфейса, и зачастую работают гораздо быстрее быстро и более эффективно. Наши рекомендации: Irssi (клиент IRC), Матт (почтовый клиент), rTorrent (BitTorrent), Ranger (файловый менеджер), htop (монитор процессов). Браузер elinks, если учесть ограничения терминала, выполняет достойно свою работу по просмотру веб-страниц и он полезен при чтении текстовых тяжелых сайтов, таких как Wikipedia.

Настройка цветовой схемы

Мы в Linux Voice не одержимы поддержкой всякого украшательства, но мы признаем важность эстетики в тех случаях, когда вы смотрите на что-то каждый день в течение нескольких часов. Многим из нас нравится доводить настройки рабочих столов и оконных менеджеров к=до совершенства, подбирать пиксели для идеальный теней и возиться с цветовыми схемами до тех пор, пока мы не будем довольны на 100%. (А потом еще некоторое время возиться по привычке).

Но мы склонны игнорировать окно терминала. Но он тоже заслуживает любви, и на сайте http://ciembor.github.io/4bit yt вы найдете весьма удивительные по цветовой гамме решения, настройки которых можно экспортировать во все популярные эмуляторы терминала ( среди поддерживаемых приложений XTerm, Gnome Terminal, Konsole и Xfce4 Terminal). Перемещайте ползунки настроек до тех пор, пока вы не достигнете нирваны цветовой схемы, а затем нажмите на кнопку Get Scheme ("Получить схему"), которая находится в верхнем правом углу страницы.

Если вы проводите много времени в текстовом редакторе, например, в Vim или Emacs, то там также стоит пользоваться хорошо продуманной палитрой. Отличным примером является схема с соляризацией (http://ethanschoonover.com/solarized), которая не только красивая, но также предназначены для максимального удобства, что подтверждено количеством ее исследований и испытаний.