Visitors have accessed this post 4601 times.

Как я выбирал оболочку командной строки

4
0
4601
2 октября 2020 11:34
Автор: Rebrain Me
Linux

Visitors have accessed this post 4601 times.

Автор — Юрий Власов

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

Красиво — да, но множество цветов отвлекает от сути. Кроме того, указывается ветка Git-репозитория, которая занимает жизненно важное место в левой части, а ее можно было бы перенести вправо.

Оболочки командной строки

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

  • bash – де-факто стандартная оболочка, базовая автоподстановка и дополнение путей, есть в большинстве дистрибутивов по умолчанию, часто используется как оболочка для скриптов.
  • fish и zsh – две разные оболочки, которые намного превосходят bash по функционалу, часто на слуху.
  • ksh, tsh, csh … другие оболочки, могут быть ничем не хуже и даже лучше, просто чуть менее распространены.

Задача этой статьи — субъективно разобраться в том, чем действительно нужно занимать окно терминала и предложить решение на базе zsh.

Что нужно для того, чтобы использование командной строки было эффективным?

Требования к оболочке

  1. Автодополнение путей. Это, бесспорно, главная функция, которая требуется для перемещения по древу директорий. Казалось бы, в Bash по умолчанию есть автодополнение путей по нажатию Tab дважды. Попробуйте Zsh – там нужно нажать Tab один раз, мелочь, казалось бы … А теперь вернитесь на Bash 🙂 Кроме того, Zsh можно настроить таким образом, что выбрасывается список файлов, подпадающих под заданный префикс. А это убирает необходимость прерывать ввод и делать ls -la, можно вообще стрелочками вариант выбрать. Это не часто используется, но удобно.
  2. Поиск по истории команд. Если вы уже перешли на ranger, то это скорее всего станет для вас самым значимым требованием. Сначала мы узнаем про Ctrl+R для поиска команды в истории уже набранных. Удобно, но не совсем. В Zsh можно просто набрать кусочек команды и стрелочками выбрать нужную из автоподсказки. Субъективно удобнее и вот почему: для показа следующей команды из истории нужно опять нажать Ctrl+R, что не всегда удобно, особенно когда прощелкал нужную.
  3. Выделение начала приглашения ко вводу. Когда листаешь большое количество логов в терминале от разных команд, начинаешь теряться и тратить дополнительное время на различение того, к какой команде относится тот или иной блок логов, где сама команда и т. д. Выделять текст приглашения ко вводу действительно нужно, но не так, чтобы он затмевал все… Зачастую первое, что меняет начинающий пользователь нестандартной оболочки, – это содержимое переменной PS1. Вот неплохое описание переменных PS1-4.
  4. Легковесность. Вкратце: когда ломишься на сервер, на котором loadavg в десятки раз превышена, очень жалеешь, что поставил в motd или начало .zshrc (.bashrc) прожорливый код по выводу развернутой статистики о потреблении ресурсов процессора, памяти, сети, диска и т. д.
  5. Неперегруженность. Пусть и выбрана zsh для ежедневного пользования, все скрипты пишу с shabang на классический sh, потому что она практически везде есть, и синтаксис унифицирован. Иными словами, не рекомендуется писать скрипты, используя нестандартные синтаксисы крутых оболочек, заморочишься ставить их на каждый сервер.
  6. Комфортность. Эффективность и комфорт все-таки плотно связаны. Поставить полупрозрачную картинку на фон или подобрать шрифты по вкусу тоже очень важно, когда ловишь себя на мысли, что корявые шрифты и угловатость интерфейса отбивает желание трудиться напрочь. Главное, не переусердствовать.

Алиасы

Очень удобно объявлять алиасы для ускорения набора команд.

Ну и немного юмора: alias please=’sudo’ сделает ваше общение с компьютером намного мягче.

Конфигурация zsh

Как можно заметить, выделяется каждая команда между операндами разделения типа ; && |. При этом команда вводится на второй строке, после приглашения с указанием каталога текущей директории и имени пользователя с хостом. Это сделало длинные команды более удобными для чтения и сопровождения. Справа честно взятое из стандартных настроек, поставляемых к zsh в Manjaro,  указание текущей ветки Git репозитория. В случае наличия изменений, удалений, добавлений появляются желтый, зеленый, красный кружочки – много места не занимает, поэтому решено оставить. Пусть будет.

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

Скачать конфигурацию на базе zsh можно здесь.

От редакции

Если вам интересно посещать открытые онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

Kubernetes: 6 секретов успешных команд
array(1) { [0]=> object(WP_Term)#11552 (16) { ["term_id"]=> int(10) ["name"]=> string(10) "Kubernetes" ["slug"]=> string(10) "kubernetes" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(10) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(4) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(10) ["category_count"]=> int(4) ["category_description"]=> string(0) "" ["cat_name"]=> string(10) "Kubernetes" ["category_nicename"]=> string(10) "kubernetes" ["category_parent"]=> int(0) } } Kubernetes

Перевод статьи — https://enterprisersproject.com/article/2020/2/kubernetes-6-secrets-success

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

0
0
29 января 2021
Sandboxing Nginx
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Автор - Юрий Изоркин

В конце 2018 года мне на глаза попался пул-реквест, который позволял запускать сервис nginx от непривилегированного пользователя - https://github.com/NixOS/nixpkgs/pull/51551 - nginx: do not run anything as root. Это повышает защиту web-сервера nginx.

При каждом запуске сервиса nginx происходит проверка конфигурации на...

4
0
13 ноября 2020
Основы DevOps
array(1) { [0]=> object(WP_Term)#11552 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Появление DevOps в 2009 (хотя, по некоторым источникам, это все-таки было в 2008) в корне поменяло процесс взаимодействия между отделами разработки и эксплуатации. До этого момента это были два совершенно разные подразделения со своими целями, задачами и KPI. Как следствие, они не слишком вникали в деятельность друга и часто возникала абсолютно...

4
0
25 сентября 2020