Как изменить alias по умолчанию в iterm
Перейти к содержимому

Как изменить alias по умолчанию в iterm

  • автор:

Как сделать красивую консоль в Mac и Linux

Если у вас OS X, поставьте iTerm2, он лучше стандартного Terminal.app. Если у вас Linux, то у вас наверняка уже есть неплохой терминал, или вы можете самостоятельно поставить любой, который вам нравится. Я вот люблю Sakura. Ещё я обычно меняю цветовую схему. Стандартные чёрные мне не очень нравятся, есть крутая схема Solarized. Как её устанавливать тоже зависит от вашего терминала.

Теперь настроим непосредственно шелл. Шелл — это оболочка, в которой выполняются команды. Он показывает вам так называемое приглашение, оно обычно состоит из имени пользователя, имени компьютера и пути к тому месту, где вы сейчас находитесь. И выполняет команды, которые вы в него вводите. Стандартный шелл выглядит так:

Стандартное приглашение в шелле

Скучновато, правда? Первое, что мы сделаем — сменим оболочку с bash на zsh. Bash — это стандартная оболочка, которая поставляется в комплекте большинства систем. Zsh — это более современная оболочка со множеством плюшек. По сравнению с bash улучшены автодополнение, алиасы, хоткеи. Всё, что может bash, zsh может тоже, так что не вижу причин не переходить. У пользователей OS X zsh уже есть на компьютере, а пользователям Linux, скорее всего, нужно его установить. В Ubuntu и Debian это делается просто:

Установка zsh в Ubuntu и Debian

Пользователи остальных систем наверняка справятся с установкой. Теперь нужно сделать, чтобы zsh был вашей оболочкой по умолчанию, то есть использовался каждый раз, когда вы открываете терминал. Для этого есть команда chsh (change shell):

Ввод пароля при смене шелла

У вас спросят пароль администратора. По мере ввода на экране ничего изменяться не будет, просто напечатайте ваш пароль и нажмите Enter. Появится сообщение о том, что ваш шелл изменён:

Смена оболочки по умолчанию

Теперь нужно выйти из системы и снова зайти. Когда вы откроете терминал, увидите приветственное сообщение zsh. Он предлагает вам ничего не делать, записать в свои настройки только комментарии, чтобы это сообщение не появлялось в следующий раз или пойти в меню настройки:

Приветствие от zsh

Мы, ничего не делая, выйдем (нажмём q), потому что знаем секрет. Секрет в том, что не нужно писать длинный конфиг, если вы новый пользователь: частые проблемы и хотелки уже решили другие, и родилась такая замечательная штука — Oh My ZSH. Это набор плагинов и настроек, которые решают самые популярные задачи и делают ваш шелл просто офигенным. Установим его, следуя инструкциям с официального сайта:

curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 

Установка прошла, но ничего не поменялось? Надо закрыть терминал и снова открыть его, чтобы настройки, которые приехали к нам из oh-my-zsh, прочитались и применились. Закрыли-открыли, теперь видим новое приветствие:

Приветствие шелла после установки Oh My ZSH!

Это стандартная тема oh-my-zsh под названием robbyrussell (по имени автора). Мы можем поставить любую из тем, которые поставляются с oh-my-zsh. Я, например, использую Bureau, когда-то я её писала, потому что не нашла подходящей. Чтобы поменять тему, напишите её название (маленькими буквами, как на странице со списком тем) в файле .zshrc . Он лежит в вашей домашней папке ( /Users/Ваш_логин или /home/ваш_логин ). Поскольку он начинается с точки, он скрыт. Включите отображение скрытых файлов. Тему нужно прописать в переменную ZSH_THEME , это в районе восьмой строки, вот так:

Меняем тему в конфиге с помощью переменной ZSH_THEME

Сохраните файл и снова перезапустите терминал (или откройте в нём новую вкладку). Теперь шелл выглядит по-новому:

Тема Bureau в шелле

Это тема Bureau. В верхней строчке сначала имя пользователя, потом имя машины, потом путь к папке, где пользователь сейчас находится. Справа текущее время. В следующей строке просто символы, которые обозначают, что ввод здесь, а справа после шестиугольника текущая версия Node. js, ветка Git (если пользователь сейчас в Git-репозитории), и кружочки, которые обозначают, что есть несохранённые изменения. В этой теме версия Node. js показывается только если вы используете Node Version Manager.

Тема Agnoster в шелле

А это тема Лёши, можете её взять из GitHub и сохранить в папке ~/.oh-my-zsh/themes , или установить простой командой:

curl https://gist.githubusercontent.com/meritt/53dcaf7f8f5ecaa62b2b/raw/ec63d857f9ad565011047ab5b486d159ddf0e2ef/meritt.zsh-theme -o ~/.oh-my-zsh/themes/meritt.zsh-theme 

Не забудьте прописать тему meritt в вашем файле .zshrc .

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Как «приручить» консоль, или 5 шагов к жизни с командной строкой

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

Статья для тех, кто использует Linux или macOS. Если у вас Windows, вы можете использовать WSL (приравнивается к Ubuntu).

Есть задачи, которые проще выполнить в командном интерфейсе, а не в графическом, к примеру:

  • посчитать количество строк кода в проекте,
  • скопировать все файлы с расширением .png из одной папки в другую,
  • «постучаться» в API и посмотреть какой ответ он выдаёт.

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

Поверьте, стоит один раз настроить командную оболочку и разобраться, как в ней работать, и рабочее окружение начнёт помогать вам как хорошая IDE.

Обо всём по порядку, начнём с терминологии и пойдем дальше. Если вы уже знакомы с основами, можно переходить к разделу «Изучаем арсенал».

  • Зачем вообще использовать командную строку
    • Примеры из жизни
    • Поиск по истории
    • Автодополнение
    • Wildcards
    • Функции, алиасы и аббревиатуры
    • Стандартные команды
    • Помощь: man, help, tldr
    • Объединяем команды
    • Современные утилиты

    Статья только началась, а по тексту уже встречались и командная строка, и командная оболочка. Чем отличаются консоль, терминал, командная оболочка и командная строка?

    Если объяснять «из центра наружу»: командная строка — строка, где пользователь пишет команды; командная оболочка — программа, которая интерпретирует команды, введённые в командную строку и выводит результат.

    Термины «консоль» и «терминал» в статье используются как синонимы и обозначают программу для ввода и вывода информации. В терминале запускается командная оболочка.

    В статье будут встречаться примеры команд. Если по ходу прочтения вы не понимаете, что делает консольная команда, скопируйте её и вставьте в ExplainShell. Благо «Роскомнадзор» перестал его блокировать после разблокировки Telegram.

    Зачем вообще использовать командную строку

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

    Когда хотят рассказать чем же хорош CLI , выделяют разные преимущества перед GUI :

    • Доступность. Командная строка доступна везде. Внутри Android Studio есть вкладка с командной строкой. Можно и вовсе настроить «drop-down» терминал (ещё его называют «quake style»), который будет появляться поверх всех приложений по нажатию сочетания клавиш.
    • Многофункциональность. Одна точка доступа к любым утилитам.
    • Простота. Простой командный интерфейс может заменить сложный графический интерфейс. Сделать графический интерфейс который позволит ввести, например, пять параметров может быть довольно нетривиальной задачей, а сделать то же самое с командным интерфейсом — просто.
    • Легковесность. Как правило, CLI утилиты используют меньше ресурсов.

    Меня как разработчика больше всего впечатляет, как можно комбинировать CLI утилиты. Текст — интерфейс общения, который понятен для всех утилит с командным интерфейсом. Утилиты принимают на вход текст и возвращают тоже текст. Это один из принципов Unix, которые сформулировал Дуглас Макилрой в 1978 году:

    Пишите программы, которые делают одну вещь и делают её хорошо.

    Пишите программы, которые бы работали вместе.

    Пишите программы, которые поддерживают текстовые потоки, потому что это универсальный интерфейс.

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

    Примеры из жизни

    Я задал вопрос коллегам-роботам: «Для чего вы чаще всего открываете терминал?» Получился такой ТОП-5:

    1. Работа с Git там, где не хватает графического интерфейса Git-клиента.
    2. Установка пакетов и управление зависимостями (подробнее про менеджер пакетов поговорим в разделе «Устанавливаем менеджер пакетов»).
    3. Работа с SSH.
    4. Проверка API с помощью curl.
    5. Когда нужно «грохнуть» процесс.

    Есть и менее очевидные применения:

    1. Скачать видео из YouTube поможет youtube-dl. Качаете подкаст и нужна только аудио-дорожка? Добавьте к команде флаг —audio . Хотите скачать весь плейлист или даже весь канал? Подставляйте ссылку на канал и готовьте побольше свободного места.
    2. Хотите посмотреть отличия между файлами? Выполните команду diff и укажите пути до файлов, которые надо сравнить.

    Шаг 1: Открываем терминал

    Не терминал, а эмулятор терминала. (c) Департамент зануд

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

    cool-retro-terminal

    Выбор терминала — это тема для отдельной статьи. Кратко: если у вас Linux, начните с этого списка. На macOS популярен iTerm2, но я его не использовал, поэтому не могу ни поругать, ни похвалить.

    Для меня важно чтобы и на компьютере с Linux, и на рабочем ноутбуке с macOS был один и тот же терминал с одинаковыми настройками. Я выбирал среди кроссплатформенных и остановился на kitty.

    Шаг 2: Устанавливаем менеджер пакетов

    Мы оказались в терминале. Первое, с чем нужно разобраться, — менеджер пакетов.

    Я встречал людей, которые уверены, что, для того чтобы установить программу из консоли, нужно непременно собирать её из исходников и вообще это сложно. Это не так. Программы в собранном виде хранятся в репозиториях. Пакетные менеджеры устанавливают программы из репозиториев и отвечают за их обновление и удаление.

    Это даже проще, чем искать надёжный источник, из которого можно скачать программу, и удобнее, чем магазины приложений в macOS или Windows, где зачастую нет нужных программ.

    Менеджеры пакетов в Linux

    В дистрибутивах Linux менеджер пакетов есть по умолчанию. В Ubuntu, Debian и Mint это apt-get, а в Manjaro и ArchLinux — pacman.

    Чтобы установить пакет достаточно в терминале написать apt-get install [package] . Если у вас pacman, то pacman -S [package] . Может понадобиться sudo в начале, чтобы выполнить команду с правами root.

    Чтобы обновить все пакеты с помощью apt-get введите команду apt-get update && apt-get upgrade . В pacman — pacman -Syu .

    В pacman много флагов и сложно сразу запомнить нужные. Ещё одно неудобство — он не поддерживает установку пакетов из репозитория AUR . Это репозиторий, в который могут загружать пакеты любые пользователи. Исправить минусы помогут утилиты, которые упрощают работу с pacman. Рекомендую попробовать yay.

    Менеджеры пакетов в macOS

    В macOS придется установить пакетный менеджер. Самые популярные — Homebrew и MacPorts. Homebrew активнее поддерживается сообществом, а пакеты в нём обновляются чаще, поэтому лучше использовать его. Для установки скопируйте актуальную команду установки c официального сайта. Эта команда скачает скрипт установки и запустит его.

    Может понадобиться установка «XCode Command Line Tools». Это базовый набор консольных инструментов — clang, git, make и других. Он не зависит от XCode, а называется так, потому что необходим XCode для компиляции.

    Теперь, чтобы установить пакет, достаточно в терминале написать brew install [package] .

    Обновляются все пакеты одной командой — brew upgrade . Если brew отказывается работать, напишите brew doctor , и brew подскажет, что с ним не так, а также как это исправить.

    Шаг 3: Устанавливаем командную оболочку

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

    Все примеры в статье будут сделаны с использованием командной оболочки fish . Эта командная оболочка проста для освоения и в ней все нужные функции работают «из коробки».

    Чтобы узнать, какая оболочка используется по умолчанию у вас, выполните команду echo $SHELL . Скорее всего, команда выведет /env/bash или /env/zsh — это самые популярные оболочки. Если хотите сравнить возможности bash, zsh и fish, посмотрите эту таблицу.

    Установим fish c помощью менеджера пакетов:

    # Если pacman sudo pacman -S fish # Если apt-get sudo apt-get install fish # Если brew brew install fish

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

    Fish установлен. Запускаем его командой fish :

    osip@homepc ~ % fish Welcome to fish, the friendly interactive shell Type `help` for instructions on how to use fish osip@homepc ~>

    Теперь можно настроить внешний вид. Команда fish_config откроет в браузере страницу настроек. Здесь можно настроить цветовую схему, приглашение командной строки (prompt), посмотреть список функций, переменные окружения, историю команд и список горячих клавиш. Здесь же можно добавлять, редактировать и удалять аббревиатуры команд. Про аббревиатуры поговорим чуть позже.

    Fish по умолчанию

    Закройте терминал и откройте его заново. Вы окажетесь не в fish, а в командной оболочке по умолчанию. Есть два варианта, как сделать так, чтобы открывался fish:

    1. Назначить fish командной оболочкой по умолчанию. Нужно учитывать, что скрипты инициализации текущей командной оболочки не будут выполняться. Команды и переменные окружения из .bashrc , .bash_profile , .zshrc и т.д, нужно переместить в .config/fish/fish.config , а затем адаптировать под синтаксис fish.
    2. Использовать fish только как интерактивную оболочку. Это более безболезненный способ, потому что не нужно мигрировать скрипты и переменные окружения. В конце скрипта инициализации текущей командной оболочки нужно запустить fish. Добавьте строку exec fish в файл .bash_profile , если у вас bash или в .zshrc , если zsh. Эти файлы находятся в корневой директории пользователя. На ArchWIki есть более подробное описание этого и еще нескольких способов.

    Поиск по истории

    Давайте-ка посмотрим, что умеет fish. Если еще не установили, можно попробовать в браузере. Я изменил только цвета и prompt, больше ничего не настраивал.

    Когда вы начинаете набирать команду, fish подсказывает команды и аргументы, которые вы использовали раньше. Чтобы применить подсказку нажмите → . Подставить одно слово из подсказки — Ctrl + → .

    sample_command — это демонстрационная функция. Она принимает любые параметры и ничего не возвращает.

    Чтобы ввести предыдущую команду, нажмите клавишу ↑ . С помощью клавиш ↑ и ↓ можно перемещаться по истории команд. Если командная строка пуста, команды будут листаться по очереди. Если в командной строке есть текст, то история будет фильтроваться по нему.

    Автодополнение

    Начните писать любую команду и нажмите Tab , не дописывая её до конца. Попробуйте с командой git config :

    Дополнение работает с командами, подкомандами и аргументами. Вместе с вариантами дополнения выводится описание подкоманд из документации.

    Если утилита не поддерживает автодополнение, fish умеет создавать дополнения из документации man. Для этого нужно выполнить команду fish_update_completions .

    А что с путями? Например, хотим перейти в папку dev/tools/jarjar/ :

    Дополнение путей тоже работает на Tab . Для перехода по пути не обязательно писать команду cd в начале. А еще работает дополнение, если написать первую букву имени каждой папки в пути. Если указан несуществующий путь, он подсвечивается красным.

    Сложно запомнить все нужные флаги у команд. Хочу вывести дерево файлов, но не помню, как ограничить его глубину и сделать так, чтобы вывод был цветным. Для такого случая есть Shift + Tab — дополнение с поиском:

    Автодополнение может сработать в самых неожиданных местах, например, так работает автодополнение для команды kill :

    Убийство Android Studio на глазах у studentd

    Wildcards

    В fish, как и в bash, есть поддержка wildcards. Wildcards позволяют выполнить команду для нескольких файлов.

    Выводим все файлы с расширением .md в текущей папке

    * — соответствует любой строке
    ** — соответствует любой иерархии папок, то есть рекурсивно заходит во вложенные папки

    Применим wildcard, чтобы скопировать все файлы apk после сборки в папку output :

    • cp build/*.apk output/ — скопирует все apk из папки build.
    • cp build/**.apk output/ — скопирует все apk из папки build и из всех вложенных папок. То, что надо.

    Функции, алиасы и аббревиатуры

    Большиство команд fish это функции. Можно писать и свои функции. Синтаксис такой:

    function [название] [тело функции] end

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

    Для часто используемых команд можно создать более короткие синонимы — алиасы. В fish команда alias создаёт однострочную функцию.

    Как выглядит alias?

    Флаг —save указывает, что нужно автоматически вызвать команду funcsave после создания алиаса. Таким образом алиасы сохранятся для будущих сессий.

    Другой вариант сокращения команд — аббревиатуры. Они настраиваются командой abbr или в fish_config во вкладке «Abbreviations».

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

    Аббревиатуры подставляются «на лету», когда вы нажимаете Space или Enter . В отличие от алиасов, аббревиатуры не являются функциями.

    Шаг 4: Изучаем арсенал

    Командная оболочка есть, теперь нужны команды.

    Консольные утилиты могут быть с CLI и TUI. Command Line Interface (CLI) — программа принимает команды через командную строку. Так работает большинство утилит. Text User Interface (TUI) — интерфейс рисуется псевдографикой и по нему можно кликать мышкой как по GUI.

    TUI для Spotify

    CLI не нужно бояться. На замену старым утилитам появляются новые с улучшенным UX , ориентированные на человека, а не на скрипты.

    Например, многие старые утилиты, которые выводят размер файла, по умолчанию выводят его в байтах. А утилита df вообще выводит свободное место на диске в количестве блоков по 512 байт.

    Чтобы выводились понятные человеку размерности, нужно добавить флаг -h (human readable). Цветной вывод удобнее читать, но он тоже по умолчанию обычно отключен и включается добавлением флага, чаще всего -C . В современных же утилитах по умолчанию включен цветной «человекопонятный» вывод.

    Стандартные команды

    Чтобы пользоваться командной строкой, нужно знать несколько стандартных команд:

    Если команда долго работает и вы не хотите дожидаться её завершения, прервите её выполнение сочетанием клавиш Ctrl + C .

    Помощь: man, help, tldr

    Есть несколько способов получить справку по команде.

    man — выводит полную справку:

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

    Если ввести man man , вы получите справку по команде man, где всё это подробно описано.

    man — это утилита с TUI, в ней есть горячие клавиши. Для поиска нажмите / , а для выхода q . / и q — стандартные клавиши для поиска и выхода, они работают во многих TUI утилитах. Ещё один стандартная клавиша — ? , она открывает справку.

    Можно выполнить команду из man — для этого нажмите ! и введите команду. Хотите открыть man для другой команды внутри man или сразу попробовать выполнить команду, следуя документации? Легко.

    Страницы в man пишут разработчики утилит. Если разработчик не написал справку, man выдаст «No manual entry for [command]». Но даже если нет страницы в man можно вывести краткую справку с помощью флага —help . Попробуйте написать man —help .

    Для команд fish можно открыть справку в браузере командой help .

    Если читать мануалы некогда, то поможет утилита tldr. Она отображает типичные случаи использования команд:

    tldr tldr

    Объединяем команды

    Помните, в самом начале я говорил, что консольные команды как «кирпичики» и их можно объединять, чтобы решить более сложную задачу? Сейчас мы этим и займёмся.

    Чтобы направить вывод одной команды на вход другой, используется оператор | . Он называется pipe, а на русский его переводят как «конвейер». Если мы хотим подать вывод команды find_bone на вход команде eat , нужно между этими командами поставить «трубу» (pipe):

    $ find_bone | eat

    Синтаксис понятен, но таких команд не существует и запустить их у себя в консоли не получится. Давайте посмотрим на более реальный пример:

    $ echo -e "spot\\nhandle\\npick\\natlas" > robots.txt $ cat robots.txt | sort atlas handle pick spot

    Оператор | нам уже знаком, но что делает > ? Этот оператор направляет вывод команды в файл. После этого командой cat мы достаём содержимое файла и с помощью оператора | отдаём на сортировку.

    Современные утилиты

    Просмотр списка файлов: ls, tree → exa

    Для просмотра списка файлов в папке обычно используют стандартную команду ls , а для просмотра иерархии папках — tree . Обе эти утилиты можно заменить более дружелюбной утилитой exa.

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

    Скриншоты. Сравнение ls, tree и exa.

    Сравнение вывода ls и exaСравнение вывода tree и exa

    Бонус: В exa можно совместить два режима вывода.

    Просмотр запущенных процессов: top → htop

    top и htop. Обе утилиты выводят список запущенных процессов, но htop делает это гораздо приятнее.

    В htop можно сортировать процессы по разным столбцам, нажимая на них. Кнопки в нижнем меню тоже нажимаются. Столбцы и информационные блоки в «шапке» настраиваются — можно убрать лишнее и добавить нужное.

    А как выглядит top?

    Работа с JSON: jq

    jq — незаменимая утилита, если вы работаете с JSON. Проще показать на примерах что умеет делать jq.

    $ echo '' | jq type parse error: Invalid numeric literal at line 1, column 15 $ echo '' | jq type "object"
    $ echo '' | jq

    Выкусываем из json’а только то, что нужно:

    $ set json '[, ]' $ echo $json | jq 'map(.model)' --compact-output ["spot","atlas"] $ echo $json | jq .[0].model "spot" # А теперь пример посложнее $ echo $json | jq 'map() | add'

    Это только малая часть возможностей. Все возможности смотрите в доке.

    Другие утилиты

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

    Консольный HTTP клиент: curl, wget → httpie

    httpie делает то же что curl — отправляет запросы в сеть. Но посмотрите как отличается синтаксис и оформление вывода в curl и httpie.

    На фотографии слева направо: curl и httpie

    Отображение содержимого файла: cat → bat

    cat и bat выводят содержимое файла, но bat подсвечивает синтаксис и отображает изменения из гита.

    Поиск по содержимому файлов: grep → ripgrep

    ripgrep — более быстрая версия grep. Сравнение скорости работы показывает, что ripgrep быстрее всех 🙂

    Поиск файлов: find → fd, fzf

    Для поиска файлов можно использовать стандартную утилиту find . Для неё есть альтернатива — fd. Она работает быстрее, поддерживает цветной вывод, по умолчанию игнорирует скрытые файлы и файлы из .gitignore . Посмотрите на гифку, которая демонстрирует работу fd .

    Ещё одна утилита для поиска — fzf [fuzzy finder]. Это утилита с TUI для интерактивного поиска файлов с использованием нечёткого поиска по названиям.

    Ещё из приятного — есть предпросмотр содержимого.

    Подсчёт количества строк кода: wc → tokei

    Стандартная утилита wc [word count] считает количество слов, символов и строк в файлах, но чтобы с помощью неё посчитать количество строк кода в проекте, придётся написать что-то такое:

    $ fd -g '*.kt' | xargs wc -l

    У такой команды есть сразу несколько недостатков:

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

    Утилита tokei лишена перечисленных недостатков. Вот пример вывода tokei на одном из наших проектов:

    Упс, файлы proguard засчитались в пользу Prolog

    Свободное место на диске: du → ncdu

    Ещё один пример разницы CLI и TUI. В отличие от du, ncdu это TUI. Тут же можно перейти внутрь папки или удалить ненужное нажав d .

    Хм, накопилось много врапперов и кэшей Gradle. Можно почистить.

    Сравнение файлов: diff → delta

    Отличная замена старому-доброму diff — delta. Можно использовать режим отображения side-by-side, если больше нравится, включить отображение номеров строк. Даже без дополнительных настроек диффы выглядят приятно:

    Измерение времени работы программы: time → hyperfine

    Не верьте на слово, если я говорю, что одна утилита работает быстрее другой. Лучше проверьте.

    Можно измерить время выполнения команды с помощью time (в macOS — gtime ). Эта утилита не предназначена для бенчмарков — нет возможности «прогрева», команда выполняется один раз. hyperfine подойдёт лучше, потому что изначально разработан для бенчмарков.

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

    Вывод команды tree перенаправлен в «пустоту» (/dev/null), потому что здесь не важен вывод команды, важно только время её выполнения. С hyperfine этого делать не нужно, он сам отбрасывает вывод команды.

    Hyperfine умеет отслеживать признаки неправильного бенчмарка. Вот некоторые подсказки:

    • если во время замера есть выбросы, hyperfine посоветует закрыть другие программы, потому что они могут влиять на бенчмарк,
    • если первый запуск команды дольше остальных, hyperfine посоветует сделать «прогрев», задав параметр —warmup N . Перед бенчмарком программа выполнится N раз.

    Можно сравнивать скорость выполнения нескольких команд. Для этого нужно написать команды друг за другом, заключив их в кавычки:

    $ hyperfine 'command_one' 'command_two' 'command_three'

    Шаг 5: Сохраняем настройки

    Чтобы не настраивать каждый раз все программы заново, нужно где-то сохранять настройки.

    Конфиги — это файлы. Обычно они хранятся в корневой директории пользователя вместе со скриптами инициализации командной оболочки, например, в папке .config/ . Если вы установили fish, то найдёте папку .config/fish/ и в ней файлы с настройками. Самый простой способ сохранить конфиги — сохранить их в Git-репозиторий.

    Имена файлов и папок с настройками обычно начинаются с точки, поэтому одним словом их называют «dotfiles». На момент написания статьи на GitHub опубликовано 138 425 репозиториев с именем dotfiles — есть куда подсмотреть.

    На странице awesome-dotfiles вы найдёте много информации про dotfiles. Там же есть ссылки на инструменты, которые помогают управлять dotfiles.

    Я использую yadm. Мне важна кроссплатформенность, поэтому пригождается его возможность создавать альтернативные версии файлов для разных ОС.

    Заключение

    В консоли может быть сложно работать, если ее не «приручить». Но если выбрать удобную для себя командную оболочку и один раз ее настроить, то она будет постоянно помогать вам.

    Чтобы не настраивать рабочее окружение на каждом новом компьютере заново, сохраняйте конфиги в Git-репозиторий. Но не забывайте о безопасности — следите, чтобы в репозиторий не попал ключи и пароли.

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

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

    Если будут вопросы или вам понадобится помощь с освоением консоли, пишите мне в Telegram @osipxd. Ещё я иногда пишу в канал @rareilly заметки про Android и вообще про всё интересное, что нахожу. Спасибо за внимание!

    Что ещё почитать

    • Работаем в консоли быстро и эффективно;
    • Консольные утилиты Linux, которые смогут облегчить вам жизнь;
    • ArchWiki: fish;
    • The Art of Command Line (есть перевод на русский).

    Oh My Zsh: прокачай свой терминал

    Oh My Zsh

    Стандартный терминал Unix систем, будь то MacOS или Linux, неплох. И все же, от инструмента, за которым приходится работать каждый день, хочется большего. Ниже представлена версия того, как сделать его более удобным и продуктивным.

    Новичкам возможно будет интересно (и полезно):

    • пройти курс по основам командной строки ;
    • изучить шпаргалки linux cheat sheet ;
    • ознакомится с программированием на Shell в Unix .

    Знакомьтесь, iTerm2

    Для начала, замените стандартный терминал на что-нибудь получше. Пользователям MacOS рекомендую iTerm2 . Для пользователе прочих Unix систем существуют другие решения, например Guake .

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

    iTerm2

    Чтобы установить iTerm2 вручную: скачайте его с официального сайта, распакуйте скачанный архив и переместите приложение в папку с программами.

    Или, если используете Homebrew, установить iTerm2 можно одной командой:

    brew cask install iterm2

    Самый популярный шорткат — быстрое отображение или скрытие iTerm2. Можно сделать чтобы консоль выезжала сверху, как в Quake.

    iTerm2 Console

    Но фича не работает из коробки, поэтому потребуется выполнить некоторые действия: перейдите в настройки (iTerm2Preferences), далее ProfilesKeysConfigure Hotkey Window, хоткей можно указать любой, остальные настройки как на скриншоте ниже.

    Configure Hotkey iTetm2

    Далее (там же в Profiles) перейдите в Window, и установите настройки как на скриншоте (или измените по своему усмотрению). За стиль окна отвечает настройка Style.

    Configure Window iTetm2

    Можно двигаться дальше.

    Мигрируй на Zsh

    Zsh она же Z shell — одна из современных командных оболочек Unix. Мало кто знаком и использует все ее функции. Однако это и не требуется — фреймворк Oh My Zsh, который мы установим далее, позволит настраивать ее и кастомизировать с помощью тем и плагинов.

    У пользователей MacOS, скорее всего, Zsh уже установлена, если нет — установите с помощью менеджера пакетов Homebrew, а затем сделайте zsh оболочкой по умолчанию.

    brew install zsh
    chsh -s /bin/zsh

    Установка zsh в Ubuntu и Debian.

    apt install zsh
    chsh -s /bin/zsh

    Пользователи прочих Unix систем наверняка справятся с установкой .

    Убедиться, что zsh является оболочкой по умолчанию можно следующей командой.

    echo $SHELL

    Результат /bin/zsh означает, что все сделано верно.

    Далее необходимо перелогиниться. Когда вновь откроете терминал, возможно увидите приветственное сообщение zsh. Ничего не меняйте и выйдите, выбрав q.

    Zsh: быстрый старт

    Еще до установки Oh My Zsh и плагинов можно оценить мощь Zsh.

    Попробуйте ввести следующую команду:

    Она вставит в консоль предыдущую команду. Будет полезна, если забыли указать sudo для команды требующей root:

    you-sudo-command
    error: you cannot perform this operation unless you are root.
    sudo !!
    sudo you-sudo-command

    От предыдущей команды можно взять только аргумент.

    cd ~/MyFolder
    cd: no such file or directory: cd ~/MyFolder
    mkdir !*
    mkdir ~/MyFolder

    Вставить в консоль последнюю команду, начинающуюся с указанных символов:

    !part-of-command

    Конструкция похожа на предыдущую, но применима для известной части символов в середине или в конце команды:

    !?part-of-command?

    Например, !?VIDEO? из моей истории команд, после нажатия на Tab, преобразуется в:

    git push --set-upstream origin dt.feature.VIDEO-10000

    Опечатку в последней введенной команде можно исправить так:

    ^dc^cd

    А с помощью следующей команды удобно сделать бэкап файла.

    cp nginx.conf

    Конструкция выше аналогична команде:

    cp nginx.conf nginx.conf.bak

    Следующая конструкция удалит ранее распакованные файлы. Будет полезна если вы распаковали архив tar.gz не в тот каталог.

    rm -f `tar ztf /path/to/file.tar.gz`

    Примеры выше, малая доля того, что умеет Zsh. Еще больше возможностей открывается при использовании фреймворка Oh My Zsh.

    Установка Oh My Zsh

    Oh My Zsh — open source фреймворк, поддерживаемый сообществом. Предназначен для управления настройками Zsh и расширяющий его функционал и за счет плагинов и тем.

    Установка через curl

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

    Установка через wget

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

    Установка вручную (загрузите скрипт, затем выполните его)

    curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh sh install.sh

    Oh My Zsh установится в папку ~/.oh-my-zsh. Если понадобится удалить Oh My Zsh, не удаляйте папку вручную, а воспользуйтесь специальной командой:

    uninstall_oh_my_zsh

    Oh My Zsh в действии

    Одно из неудобств консоли — перемещение по папкам. Oh My Zsh расширяет возможности автодополнения по кнопке Tab.

    Например, Oh My Zsh исправляет регистр букв. Можно написать:

    cd ~/de

    Затем нажать Tab и команда преобразуется в:

    cd ~/Desktop/

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

    Автодополнение в Oh My Zsh

    Автодополнение работает для любой части файлов и каталогов. Чтобы перейти в каталог ~/Downloads, можно написать:

    cd load

    По нажатию Tab, строка будет преобразована.

    cd ~/Downloads/

    Oh My Zsh умеет дополнять имена каталогов по всему пути, а не только по последней его части, например:

    ls /v/l/apa

    По нажатию Tab, строка будет преобразована.

    ls /var/log/apache2

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

    export CDPATH=/var/www:/home/имя_пользователя/MyFolder
    cd MyFolder

    Выбор темы

    Дефолтная тема Oh My Zsh минималистична и хороша, но я предпочитаю Agnoster. Обратите внимание, как информативно выглядит в ней git-репозиторий.

    Чтобы установить тему из репозитория откройте файл ~/.zshrc, и в поле ZSH_THEME замените значение на имя понравившейся темы.

    ZSH_THEME="agnoster"

    Подобрать тему можно на странице репозитория Oh My Zsh .

    Чтобы установить внешнюю тему, скачайте ее, а затем переместите в каталог тем ~/.oh-my-zsh/custom/themes.

    Если после установки темы наблюдаете проблему со шрифтами, странные символы или кривые уголочки нужно установить дополнительные шрифты powerline patched fonts .

    cd ~/Downloads/
    git clone https
    ://github.com/powerline/fonts.git
    cd fonts
    ./install.sh

    Затем перейдите в настройки iTerm2Preferences, далее ProfilesText и в поле Font выберите скачанный шрифт, например Meslo LG или Droid Sans. Перезапустите терминал, теперь шрифты будут корректно отображаться в выбранной теме.

    Выбор цветовой схемы

    Рекомендую попробовать цветовые схемы iTerm2 Material Design или тему Dracula .

    Цветовые схемы устанавливаются в дополнение к темам, чтобы сделать вид терминала еще привлекательнее, или вместо них — если тему по душе вы еще не подобрали.

    Так выглядит мой терминал с установленной темой Agnoster и цветовой схемой Dracula.

    Чтобы изменить цветовую схему терминала, скачайте понравившуюся, а затем перейдите в настройки iTerm2Preferences, далее ProfilesColor и в поле Color Presets (справа внизу), выберите пункт Import и импортируйте, а затем выберите скачанную тему.

    Плагины

    Плагины расширяют возможности Oh My Zsh. Список всех плагинов входящих в состав Oh My Zsh приведен на странице репозитория .

    Как и в случае с темами, чтобы добавить плагин, нужно прописать его название в файле ~/.zshrc, секция plugins. Например, чтобы активировать плагин docker, добавьте «docker» в секцию plugins.

    # Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
    # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
    # Example format: plugins=(rails git textmate ruby lighthouse)
    # Add wisely, as too many plugins slow down shell startup.
    plugins=(
    git
    docker
    )

    Чтобы установить сторонний плагин, его нужно предварительно скачать и положить в каталог сторонних плагинов ~/.oh-my-zsh/custom/plugins.

    По умолчанию включен только один плагин — git. Он показывает актуально ли текущее состояние репозитория, активную ветку и есть ли изменения. Таким образом не нужно постоянно проверять git branch -v и git status.

    Несколько полезных плагинов из репозитория Oh My Zsh:

    npm — добавлят поддержку автодополнения к npm;
    vagrant — автодополнения для vagrant, если пользуетесь им;
    composer — автодополнения и алиасы;
    sudo — если для выполнения команды потребовались права суперпользователя, плагин позволит не возвращаться в начало строки, а нажать два раза Esc, и он добавит sudo в начало команды.

    И пара интересных внешних плагинов:

    zsh-syntax-highlighting — добавляет подсветку синтаксиса, подсвечивает команду если в написании допущена ошибка;
    zsh-autosuggestions — предугадывает команды на основе ранее вводимых.

    Алиасы

    Алиасы или псевдонимы — это сокращения для длинных команд или даже последовательности команд.

    Список текущих алиасов Oh My Zsh можно посмотреть командой:

    alias

    Свои алиасы можно добавлять в файле ~/.zshrc

    Example aliases alias zshconfig="mate ~/.zshrc" alias ohmyzsh="mate ~/.oh-my-zsh" alias dkps="docker ps" alias dkst="docker stats"

    Шпаргалка с алиасами встроенными в Oh My Zsh доступна на странице репозитория . Ознакомьтесь, а лучше запомните.

    Ссылки

    На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

    Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.

    Записки на полях

    Грабли, на которые я наступил. Руководства, инструкции, ощущения.

    Если инфорация оказалась интересна и/или полезна, не побрезгуйте, оставьте комментарий 😉

    суббота, 22 февраля 2020 г.

    Python на MacOS. Смена версии по умолчанию на 3.8 (или любую последнюю)

    Выясняем, какие у нас есть версии, и какая версия выбрана основной
    $ python -V
    Python 2.7.10
    $ python3 -V
    Python 3.8.1

    Видно, что есть как минимум 2 версии (на самом деле еще есть 3.7) Python. Версия по умолчанию — 2.7. Выясняем пути к интерпретаторам
    $ which python
    /usr/bin/python
    $ which python3
    /Library/Frameworks/Python.framework/Versions/3.8/bin/python3

    Путь к python3 надо сохранить. Он нам потребуется. Открывает файл настроек bash:
    $ nano ~/.bash_profile

    В самый низ добавляем строку:
    alias python=python3

    это, если команда python3 вызывает последнюю версию интерпреатора, а не предыдущую (3.7). Или полный путь:
    alias python color: red;»>3.8 /bin/python3″

    Аналогично для pip:
    alias pip color: red;»>3.8 /bin/pip3″

    Проверьте версию Python в строке пути (выделил красным).

    Сохраняем файл. Далее команда:
    $source ~/.bash_profile

    Закрываем все терминальные окна. Не сворачиваем «крестиком», а закрываем через Command-Q. Заново открываем терминал и проверяем:
    $ python -V
    Python 3.8.1

    Должна быть правильная версия интерпретатора.

    Обновление pip:

    pip install -U pip

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *