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

TL;DR В первой части описывается, почему псевдонимы — это так важно, сколько времени они экономят и т.д., но, если вы просто хотите узнать, как создать собственные псевдонимы, то перейдите к шагу 1.



Повышение производительности


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

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

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

Мир программиста


Нам программистам часто приходится в рамках одного проекта много раз запускать одни и те же команды bash, например  cd ..ls -l или  pwd. От того, что мы раз в неделю запускаем эти команды производительность не снизится, а вот если запускать их приходится по два раза в день, в конце концов эффективность упадет.

Некоторые команды bash короткие, другие — длинные. Некоторые запомнить сложно, другие — легко. Главное — ускорить рабочий процесс (повысить эффективность), а для этого можно создать декларативные команды (читаемый код), которые легко запомнить и написать.

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

Сделайте команды git короче


Я провел простое испытание, чтобы продемонстрировать, сколько времени уходит на внесение изменений на Github. У среднестатистического программиста как правило уходит около 20–25 секунд на то, чтобы сделать push изменений на github.com.

# Test
git add .
git commit - m "minor changes"
git push -u origin master


Допустим, каждую неделю вы выполняете git push 15 раз, а на пуш в целом уходит 20 секунд.

  • В неделю уходит 5 минут
  • В месяц уходит 20 минут
  • В год — 4 часа

Эти 3 команды можно заменить одним псевдонимом lazyman "minor changes", и вместо 20 секунд мы получим 5.

  • В неделю уйдет 1,25 минут
  • В месяц уйдет 5 минут
  • В год —1 час

В целом производительность увеличится на 75% (в четыре раза). Речь шла о простом примере. Теперь представьте сколько времени можно сэкономить на таких командах как run apache server && run tests && report data && close или gcc project-source-code.c -o executable-file-name, которые мы запускаем 15–30 раз в день.

Как я рассчитал повышение производительности? (для зануд)


# Formula
((old - new) / old) * 100%

= ((20 sec - 5 sec) / 20 sec) * 100%
= 75 % (performance increase)


Перед тем, как приступать к созданию псевдонимов


При создании псевдонимов их обычно размещают в файле ~/.bashrc. Это скрытый файл в домашнем каталоге, доступный отовсюду. Однако, хорошим тоном считается хранить системные файлы отдельно от личных. Для этого создаем новый файл под названием  ~/.custom_aliases и добавляем все псевдонимы туда. Также не забывайте после этого выполнять source ~/.custom_aliases, иначе они не будут работать.

Шаг 1 — ?Создать файл custom_aliases


Все создаваемые псевдонимы следует хранить в этом файле.

# create file
touch ~/.custom_aliases


Шаг 2 — Открыть файл custom_aliases


Откройте файл в текстовом редакторе, либо через gedit или code (Visual Studio Code), либо как считаете нужным.

Visual Studio Code (если установлен)
# opens file
code ~/.custom_aliases

Gedit
# opens file
code ~/.custom_aliases


Шаг 3 — Создать псевдонимы (aliases)


Давайте сделаем простой псевдоним: когда мы вводим «welcome»в bash терминал на экране появится «Welcome John Doe.».

alias welcome='echo "Welcome $USER."'

Шаг 4 — Обновить изменения


Перед запуском недавно созданной команды bash необходимо обновить файл custom_aliases.

# update file
source ~/.custom_aliases


Шаг 5 — Выполнить новую команду bash


Напечатайте следующее в вашей любимой командной оболочке.

# command line
welcome
> Welcome John Doe.


Молодцы! Вы только что создали собственный файл для хранения псевдонимов. А теперь давайте рассмотрим, какие виды команд можно создавать.

Собственные псевдонимы команд bash (персональные)


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

Рекомендация: Для сохранения структуры при добавлении большого количества псевдонимов разделите их на группы — как в примере ниже — при помощи комментариев.

# Version Control
alias gs="git status"
alias gd="git add ."
alias gp="git push -u origin master"

# Directory
alias diskusage="df -h"
alias folderusage="du -ch"
alias totalfolderusage="du -sh"

# Various
alias opencustomaliases="code ~/.custom_aliases"
alias updatecustomaliases="source ~/.custom_aliases"
alias updatethenupgrade="sudo apt-get update && sudo apt-get upgrade"


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

Запуск нескольких команд


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

Пример 1 ?—? Создание функции


# Multiple commands

function lazyman() {
git add .
git commit -a -m "$1"
git push -u origin master
}


Пример 2 —? Создание псевдонима


# Multiple commands

alias lazyman="git add . && git commit -a -m '$i' && git push -u origin master"


Не забудьте обновить файл custom_aliases, для чего нужно запустить source ~/.custom_aliases и ввести lazyman "First commit".


Рекламная пауза. Хочу представить новый проект LOOKING.HOUSE — на нем собрано более 150 точек looking glass в 40 странах. Можно быстро выполнить команды host, ping, traceroute и mtr.


Комментарии (28)


  1. Cheater
    16.08.2018 13:03

    Вы переизобрели git aliases. :) Конвейеры (xxx | yyy) там тоже есть.

    git commit -a -m '$i'

    $1, нет? $i не определена. И разве одинарные кавычки не экранируют переменную?


    1. leonid239
      16.08.2018 21:58

      На всякий случай обращаю Ваше внимание, что это перевод и переводчик ничего не изобретал :-)


  1. vmm86
    16.08.2018 13:09

    Не уверен насчёт универсальности в разных оболочках, но у меня получалось указывать функцию в .bashrc без ключевого слова function.


    1. stychos
      17.08.2018 23:50

      Оно совершенно не нужно, да. А вот файл конфигурации далеко не на всех системах .bashrc называется.


  1. aamonster
    16.08.2018 13:10

    Э… Последний пример (alias lazyman) вроде ж вообще неправильный — аргумент передаётся в последнюю команду. Тут afaik алиас не годится, и вообще не надо на них делать что-то мало-мальски сложное (сложнее добавления опций в команду).


  1. valery1707
    16.08.2018 13:30

    alias gp="git push -u origin master"

    А от этого польза есть?
    Я вот вижу только вред: обычно всё же работа идёт в рамках git-flow/аналогов и ветка отнюдь не одна, так что пушить строго в master не нужно.


    1. positron48
      18.08.2018 15:59

      Это же только пример, каждый составляет алиасы так, как ему удобно. Вот, например мой список алиасов для гита:

      alias gits='git status '
      alias ga='git add '
      alias gb='git branch '
      alias gitc='git commit'
      alias gitcc='git commit -a -m'
      alias gd='git diff'
      alias go='git checkout '
      alias gp='git pull '
      alias gpo='git pull origin'
      alias gpu='git push '
      alias gpuo='git push origin'
      alias gpom='git pull origin master'
      alias gom='git checkout master'
      


      go и gpuoh особенно доставляют при работе.


  1. Merderik
    16.08.2018 15:15

    Изобретаем колесо? Или ставим zsh + oh-my-zsh и радуемся бесчисленным плагинам? (Которые так же можно поправить на своё усмотрение)


  1. kreicer
    16.08.2018 15:15

    Собственно, вопрос такой: есть ли возможность сделать так, чтобы файл с алиасами не приходилось переподключать каждый сеанс?


    1. foldr
      16.08.2018 18:16

      Добавить в .bashrc


      if [ -f ~/.bash_aliases ]; then
          . ~/.bash_aliases
      fi

      Алиасы будут загружаться при входе в систему


  1. andrshmi
    16.08.2018 15:15

    Как я рассчитал повышение производительности? (для зануд)


    1. формула неправильная
    2. в 4 раза = на 300%, а не 75%


    1. Deosis
      17.08.2018 08:12

      Производительность вообще криво посчитана.
      Задача занимает меньше 1% рабочего времени.
      Как ее не ускоряй, больше 1% к производительности не получишь.
      Тогда можно всех разработчиков отправить на курсы слепой печати.
      Если он будет печатать вдвое быстрее, то он решит вдвое больше задач.


  1. Sleuthhound
    16.08.2018 16:04
    +1

    alias diskusage=«df -h»
    alias folderusage=«du -ch»
    alias totalfolderusage=«du -sh»


    По-моему df -h или du -sh будет явно быстрее набрать, чем totalfolderusage, я уже не говорю о том, что df я вспомню в пьяном угаре когда меня разбудят в 4 утра, а вот totalfolderusage сомнительно.

    И вообще, я бы не советовал шлепать непонятные алиасы типа totalfolderusage и folderusage на коротенькие команды типа df или git с опциями, в один прекрасный день через 10 лет вас спросят, а как с помощью df посмотреть сколько занимает текущая директория, а вы ооопссс… totalfolderusage?! И забыли нужные опции. И это не шутки, так работает мозг.


    1. bogolt
      16.08.2018 19:18

      Полностью согласен.
      Я лично буду гадать это totalfolderusage или foldertotalusage или хм sumfolderusage да еще и ошибок наделаю.
      Примерно как я каждый думаю что мне нужно useradd или adduser.

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

      Ну и как финальный аккорд — если кто-то считает что знает как удобнее то репа на гитхабе, со сборником удобных алиасов, чтобы можно было их обсудить, придумать как лучше и потом уже сообща использовать… и чем Сталлман не шутит может лет через 10 получить их как стандартные алиасы в линуксах ( как сейчас например ll ).


      1. stychos
        17.08.2018 23:55

        Я всегда переопределяю l на аргументы -alhF, в дефолтном дебиановском/убунтовском виде он мне совершенно не нравится.


    1. stychos
      17.08.2018 23:53

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


  1. vaniacer
    16.08.2018 16:10

    Имхо алиасы должны быть короткими, вот

    мои алиасы
    #editors no comments
    alias n='nano'
    alias g='gedit'
    
    #git no comments
    alias gc='git commit -am'
    alias gb='git branch'
    alias gbm='git checkout master'
    alias gbd='git checkout dev'
    alias gp='git push'
    alias ga='git add'
    
    #clear
    alias cls='clear; ls' # очищает экран и показывает список файлов
    alias ccls='cd; cls'  # переходит в дом. каталог затем очищает экран и показывает список файлов
    
    #utils
    alias fm='free -m'                     # память в мегобайтах
    alias nsl='netstat -lnp'               # исп. порты
    alias psc='ps aux --sort=-pcpu | head' # сортирует процессы по исп. ЦПУ
    alias psm='ps aux --sort=-pmem | head' # сортирует процессы по исп. памяти
    alias dumb='du -shx * | sort -rhk1'    # показывает диск. простр. исп. папками, сначала бОльшие
    
    #update no comments
    alias sysupdate='sudo a #pt-get update; sudo apt-get upgrade -y; sudo apt-get autoremove -y; sudo apt-get autoclean -y'
    
    #cp with waiting animation
    alias cp="~/SCR/spiner cp"
    #Выполняет команду cp (copy) через скрипт, который показывает
    #прикольную анимацию пока работает cp
    #т.к. у cp нет прогрессбара и становится скучно когда копируешь большие файлы)
    

    вот такая анимация)
    image

    #fun no comments)
    alias suco=sudo
    


    1. Lamaster
      16.08.2018 21:14

      А не лучше ли «pv cp»?


      1. vaniacer
        17.08.2018 08:54

        Там есть анимация с сиськами?


        1. cooladmin
          17.08.2018 13:22

          я думал это глаза)


          1. vaniacer
            17.08.2018 16:53

            Когда думаешь что это сиськи выглядит гораздо лучше, правда?)
            (*) (*)


  1. plin2s
    16.08.2018 20:17
    +2

    А потом человек садится за другую машину и такой "эээ… ааа… а как там все это делать без моих любимых алиасов?"


    1. vaniacer
      17.08.2018 16:54

      И копирует свой файлик с алиасами.


  1. maxzhurkin
    16.08.2018 21:35

    Почему
    alias gd=«git add .»
    а не
    alias ga=«git add .»
    ?
    Я понимаю, что вопрос к автору оригинального текста, а не к переводчику, однако


  1. stychos
    17.08.2018 23:57
    +1

    У автора отсутствует самый нужный алиас: alias sudo='sudo '
    Без него ни один Ваш алиас не заработает с sudo.


  1. Tavas
    18.08.2018 15:59

    Спасибо за перевод


  1. SakhalinDDF
    18.08.2018 15:59

    Не понимаю в чем смысл сокращать и без того короткие команды, типа git, ls, df и иже с ними. Лично у меня алиасы используются для сокращения множественных аттрибутов, которые очень неудобно набирать руками, например что то типа вот этого

    alias rdp_win='xfreerdp /u:username /p:password /v:192.168.10.2 /drive:workspace,/home/www /drive:downloads,/home/user/Downloads /w:1920 /h:1200 -grab-keyboard +clipboard'
    alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)'
    alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)'
    


    А сокращение команды из 5-7 символов до двух например — по моему это какой то перебор. И кстати да, как уже написали выше — у гита есть собственный механизм алиасинга, дабы не засирать глобальное пространство комманд своими гениальными поделками


  1. Ispolin
    18.08.2018 15:59

    Спасибо!
    Но:
    1) Удивлен, что кто то еще пушит в гит через командную строку.
    2) Делает это в мастер
    3) ctrl+r резко ускоряет все подобные операции из коробки