ZSH – Интерактивная командная оболочка для Linux + Oh-My-Zsh

ZSH – Интерактивная командная оболочка для Linux + Oh-My-Zsh

Обновлено 23.02.2024

Приветствую!

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

Присоединяйтесь к нашему каналу: t.me/r4ven_me и чату: t.me/r4ven_me_chat в Telegram .

TLDP

# установливаем Z-Shell и вспомогательных утилит
sudo apt update && sudo apt install -y zsh fzf git curl

# проверяем все ли установилось в нашу систему
whereis {zsh,fzf,git,curl}

# установливаем Oh-My-Zsh - отвечаем yes
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# устанавливаем плагин zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# устанавливаем плагин fast-syntax-highlighting
git clone https://github.com/zdharma-continuum/fast-syntax-highlighting ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting

# устанавливаем плагин cmdtime
git clone https://github.com/tom-auger/cmdtime ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/cmdtime

# меняем тему на agnoster
sed -i 's/^ZSH_THEME=.*/ZSH_THEME="agnoster"/' ~/.zshrc

# отключаем автообновления Oh-My-Zsh
sed -i "s/^#.*omz:update.*disabled/zstyle ':omz:update' mode disabled/" ~/.zshrc

# активируем установленные плагины
sed -i 's/^plugins=\(.*\)/plugins=\(git zsh-autosuggestions fast-syntax-highlighting fzf cmdtime\)/' ~/.zshrc

# задаем цвета для плагина fzf (это всё одна команда)
echo "export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'
        --color=fg:#e5e9f0,bg:#3b4252,hl:#81a1c1
        --color=fg+:#e5e9f0,bg+:#3b4252,hl+:#81a1c1
        --color=info:#eacb8a,prompt:#bf6069,pointer:#b48dac
        --color=marker:#a3be8b,spinner:#b48dac,header:#a3be8b'\n\n\
        $(cat ~/.zshrc)" > ~/.zshrc

# применяем внесенные изменения
source ~/.zshrc

# для минималистичного prompt
echo "prompt_context() [ ]" >> ~/.zshrc && source ~/.zshrc

## настройка Oh-My-Zsh для root пользователя

# копируем файлы нашего пользователя в директорию пользователя root
sudo cp -r {~/.oh-my-zsh,~/.zshrc} /root/

# меняем оболочку по умолчанию у root
sudo chsh -s /usr/bin/zsh

# переключаемся в root для проверки
sudo -s

Предисловие

Zsh (Z-Shell) – это расширенная командная оболочка для Unix-подобных операционных систем, предоставляющая дополнительные функции и возможности по сравнению с более стандартной оболочкой, такой как Bash. Zsh поддерживает автодополнение, расширенное форматирование вывода, мощную конфигурацию и другие продвинутые функции для повышения производительности и удобства при работе с командной строкой.

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

Моя рекомендация: используйте Zsh для повседневной работе в командной строке, а все скрипты автоматизации пишите на Bash. Истина, как обычно, где-то посередине)

Если вы читали мои предыдущие посты, то вероятно знаете, что все манипуляции с командной строкой я провожу в среде дистрибутива Linux Mint, на данный момент версии 21, редакции Cinnamon. Материал данной статьи не исключение.

Если что, вот несколько материалов по этой теме:

Установка Z-Shell и вспомогательных утилит

Открываем терминал и выполняем команду установки:

sudo apt update && sudo apt install -y zsh fzf git curl

Что мы установили:

  • zsh – сама оболочка;
  • fzf – утилита “нечёткого” поиска (опционально);
  • git – система контроля версий;
  • curl – утилита взаимодействия с веб сервисами.

После отработки команды, проверяем все ли установилось в нашу систему:

whereis {zsh,fzf,git,curl}

С помощью синтаксиса фигурных скобок { } в командной строке Linux можно указать список значений. В данном случае команда whereis обработает их поочередно и выведет результат в стандартный вывод.

Все на месте, идём дальше.

Установка и настройка фреймворка Oh-My-Zsh

Выполним установку Oh-MyZsh, установим два дополнительных плагина и выполним начальную настройку оболочки.

Установка Oh-My-Zsh в Linux Mint 21

И так, Oh-My-Zsh – это проект с открытым исходным кодом, представляющий собой фреймворк и набор расширений для оболочки Zsh.

Зачем вообще нужен какой-то Oh-My-Zsh, если мы только что установили Zsh? Дело в том, что низкоуровневое конфигурирование оболочки – это довольно сложный процесс, сравнимый с написанием ПО на определенном языке программирования. Но т.к. множество людей использующих командную строку Linux не являются программистами, а задействовать потенциал оболочки хочется, разработчики проекта Oh-My-Zsh любезно предоставили сообществу такую возможность.

Все настройки с несложным синтаксисом задаются в одном файле конфигурации ~/.zshrc, а остальное уже делает сам фреймворк. В этом ми убедимся ниже.

Установка данного фреймворка производится с помощью скрипта, вызываемого командой, которая указана на официальном сайте проекта: https://ohmyz.sh/

В команде используется утилита curl, которую мы установили ранее. Выполняем в терминале:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Чтобы посмотреть содержимое файла скрипта просто перейдите по: https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh

При выполнении у нас спросят, хотим ли мы изменить нашу текущую оболочку на Zsh:

Вводим y затем Enter, следом пароль от своего пользователя и снова Enter.

Вы заметите, что приглашение (prompt) командной строки изменилось:

После установки в домашней директории пользователя появятся конфигурационный файл оболочки .zshrc и папка с файлами фреймворка .oh-my-zsh:

Оба файла являются скрытыми

Установка плагинов динамической подсветки и автоподстановки

По умолчанию Oh-My-Zsh уже имеет множество плагинов. Посмотреть их список можно в директории ~/.oh-my-zsh/plugins. Дополнительно установим еще 3 кастомных плагина для: быстрой динамической подсветки синтаксиса, умной автоподстановки команд и отображения времени, затраченного на выполнение команды.

Установка производится путем клонирования репозиториев с файлами плагинов с помощью утилиты git в папку ~/.oh-my-zsh/custom/plugins. Поочередно выполняем 3 команды в терминале:

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zdharma-continuum/fast-syntax-highlighting ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/fast-syntax-highlighting

git clone https://github.com/tom-auger/cmdtime ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/cmdtime

Правка конфигурационного файла .zshrc

Теперь немного настроим наш Zsh. Открываем на редактирование файл конфигурации ~/.zshrc любым удобным вам редактором. Например, xed:

xed ~/.zshrc

Для удобства включите отображение подсветки синтаксиса для данного файла:

Для разнообразия я буду редактировать файл в vim:

vim ~/.zshrc

Кстати я недавно сделал вводную статью по виму (: VIM — Консольный редактор: знакомство

В файле редактируем указанные ниже строки.

  • Меняем тему:
# Мняем с:
ZSH_THEME="robbyrussell"

# на:
ZSH_THEME="agnoster"

Список доступных тем можно посмотреть в директории ~/.config/oh-my-zsh/themes.

Посмотреть превью каждой темы можно в официальном GitHub репозитории разработчиков: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

  • Отключаем автообновление Oh-My-Zsh:
# Раскоменчиваем строку:
zstyle ':omz:update' mode disabled
  • Указываем список плагинов:
# Находим параметр plugins и проводим к виду:
plugins=(git zsh-autosuggestions fast-syntax-highlighting fzf cmdtime)

Сохраняем содержимое и применяем внесенные изменения специальной командой:

source ~/.zshrc

Наш prompt оболочки изменился:

Для полного применения настроек измененной оболочки рекомендую перезайти в учетную запись пользователя на вашем рабочем столе.

Демонстрация работы Zsh + Oh-My-Zsh

Для демонстрации выполним команду:

ls -l Документы

Тут видно:

  • Вся команда имеет подсветку синтаксиса (плагин fast-syntax-highlighting);
  • После отработки команды справа отображается время, потраченное на ее выполнение (плагин cmdtime);
  • При начале набора команды, которая уже вводилась ранее, оболочка предлагает подсказку тусклым цветом (плагин zsh-autosuggestions). При нажатии клавиши стрелки вправо – произойдет подстановка команды. Данные для подстановки оболочка берет из файла истории: ~/.zsh_history.

Отдельная особенность Zsh это механизм подстановки при нажатии клавиши Tab. Например, введите команду ls затем пробел и несколько раз клавишу Tab:

Оболочка позволяет переключаться между возможными вариантами и при выделении нужного, по нажатию Enter, указать его в командной строке. Не ну прелесть)

Также по умолчанию Zsh визуально отображает результат выполнения предыдущей команды:

Красный крестик указывает на ошибку

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

Про утилиту fzf и её плагин для Oh-My-Zsh

FZF (Fuzzy Finder, “нечеткий” пацанчик поисковик) – это мощный инструмент командной строки, предоставляющий возможность быстрого и интуитивного поиска файлов, директорий и других элементов в терминале.

Если ввести в терминале одноименную команду, то активируется режим “размытого” поиска по текущей директории:

fzf

Плагин fzf для Oh-My-Zsh используется для быстрого поиска по истории команд.

По умолчанию Oh-My-Zsh не подхватывает цветовую схему терминала для отображения цветов в fzf. Поэтому их нужно задавать вручную в виде переменной в файле конфигурации ~/.zshrc. Вот пример для цветовой схемы Nord:

export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'
    --color=fg:#e5e9f0,bg:#3b4252,hl:#81a1c1
    --color=fg+:#e5e9f0,bg+:#3b4252,hl+:#81a1c1
    --color=info:#eacb8a,prompt:#bf6069,pointer:#b48dac
    --color=marker:#a3be8b,spinner:#b48dac,header:#a3be8b'

Добавьте указанные выше строки в начале файла:

Сохраняем и выходим. Теперь работая в терминале нажмите Ctrl + r для активации встроенной в оболочку функции интерактивного поиска по истории команд:

Введите искомый ключ или перемещайте курсор с помощью клавиш стрелок на клавиатуре:

При нажатии Enter команда под курсором вставиться в командную строку. Для выхода из режима поиска нажмите клавишу Esc.

Ручное обновление Oh-My-Zsh

Ранее мы с вами отключили автоматическую проверку обновлений фреймворка (потому что меня это раздражает). При необходимости процесс обновления можно запустить вручную с помощью такой команды:

omz update

Минималистичный prompt оболочки

При использовании минималистичного prompt могут возникнуть проблемы при использовании scp и sftp на этом хосте. Имейте это ввиду. Сам наткнулся на такой нюанс. Подробности тут.

Если вы жаждете минимализма и вам кажется, что постоянно лицезреть имя своего пользователя и компьютера это визуальный шум, то добавьте в конец файла ~/.zshrc такую строку:

prompt_context() [ ]

Принципиально в конец файла! Иначе получите ошибку) Сохраняем, закрываем. Применяем изменения:

source ~/.zshrc

Ничего лишнего, только невроз.

Смена оболочки с bash на zsh для пользователя root

Чтобы получить аналогично настроенную оболочку и для root пользователя, выполняем такие команды:

# копируем файлы нашего пользователя в директорию пользователя root
sudo cp -r {~/.oh-my-zsh,~/.zshrc} /root/

# меняем оболочку по умолчанию у root
sudo chsh -s /usr/bin/zsh

# переключаемся в root для проверки
sudo -s

Утилита chsh в Linux позволяет пользователю изменить оболочку по умолчанию. Т.к. мы выполнили эту команду от имени суперпользователя root с помощью sudo, то тем самым изменили ему оболочку.

Как видно, при работе от root оболочка визуально сообщает нам об этом меткой Волан-де-Морта символом молнии.

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

Для использования на домашнем компьютере я не вижу ничего страшного. Но, например на продуктовых серверах от такой идеи, пожалуй стоит воздержаться)

Послесловие

Под конец, небольшое сравнение визуализации работы с Bash и Zsh:

Слева bash, справа zsh

И там и там выполнены одни и те же действия. Тут хорошо видно, что Zsh предоставляет больше интерактивности, чем Bash. Но Bash я все равно люблю, если что) Просто с Zsh удобно взаимодействовать с терминалом на ежедневной основе.

Спасибо, за ваше время. Успехов вам!

Полезные источники

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии