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

Временный алиас

По своей сути алиас (alias) это просто ярлык для команд. То есть, мы можем, введя всего одно слово запустить любую команду, или даже группу команд, включая параметры и имена файлов. Рассмотрим простой, но полезный пример. Предположим, нам необходимо отсортировать все файлы в выводе команды ls по размеру. К примеру, нам нужно понять какие файлы занимают в каталоге Downloads слишком много места и не надо ли их удалить.

Для реализации этой задачи с помощью ls нам бы потребовалась следующая конструкция:

ls --human-readable --size -1 -S --classify

Каждый раз набирать команду с таким количеством параметров не слишком удобно. Можно воспользоваться командой alias для того чтобы создать ярлык для данной команды.

alias lsrt='ls --human-readable --size -1 -S --classify'

Теперь запуск lsrt приведет к тому же результату, что и использование ls с параметрами.

В общем случае команда alias и ее значения могут иметь следующий вид:

alias name=value

alias name='command'

alias name='command arg1 arg2'

alias name='/path/to/script'

alias name='/path/to/script.sh arg1'

Если нам больше не нужен созданный алиас, мы можем воспользоваться командой:

unalias имя_алиаса

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

Замечу, что в качестве альтернативы алиасам можно использовать готовые скрипты, однако, для того, чтобы они были доступны из любого каталога, каталог со скриптами нужно будет прописать в $PATH и правильно раздать права на выполнение. При использовании алиасов в Bash все намного проще.

Добавляем в Bash

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

alias ls_hid=’ls -d .* --color=auto’

Добавим данную строку в файл .bashrc и выполним в домашнем каталоге:

После запуска данного алиаса мы можем видеть файлы и каталоги, начинающиеся с точки, в том числе и сам .bashrc.

Продолжим настраивать наши админские полезности. Создадим алиас для обновления списков пакетов и самих пакетов:

alias update='sudo apt-get update && sudo apt-get upgrade'

Использование одного такого алиаса позволит на избавиться от целой строки команд.

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

alias gh='history|grep'

Это может быть полезно, если вы не помните, какие именно параметры использовались с той или иной командой ранее, или какие каталоги и файлы использовались ранее с данной командой.

Вот как выглядит использование данного алиаса:

 

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

alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | egrep ^/dev/ | sort"

Результат:

Еще пара небольших но не менее полезных алиасов. Сортировка по времени модификации и подсчет файлов:

alias left='ls -t -1'

alias count='find . -type f | wc -l'

Виртуальные среды и сети

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

Ниже приводятся два алиаса для настройки виртуальных сред в Python:

alias ve='python3 -m venv ./venv'

alias va='source ./venv/bin/activate'

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

alias ports='netstat -tulanp'

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

alias iptl='sudo /sbin/iptables -L -n -v --line-numbers'

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

alias hdrc='curl -I --compress'

Полезности для Docker

При работе с контейнерами Docker приходится часто запускать и останавливать контейнеры. Удобнее всего заранее подготовить алиасы для выполнения соответствующих задач.

Так, если мы хотим запустить контейнер в привилегированном режиме, то можно составить такой алиас:

alias dockrun=’sudo docker run -i -t --privileged $@’

Для остановки контейнера создадим следующий алиас:

alias dockstop=’sudo docker stop $(docker ps -a -q) ‘

А для удаления воспользуемся следующим:

alias dockrm=’sudo docker rm $(docker ps -a -q)‘

Заключение

На этом я думаю, повествование об алиасах можно завершить. Естественно, приведенные выше алиасы не являются исчерпывающим списком всех команд, которые можно с их помощью “сократить”. При необходимости, читатель может создать собственный набор сокращенных команд для работы.

Статья подготовлена в преддверии старта курса DevOps. Практики и инструменты. По ссылке ниже вы сможете узнать подробнее о программе курса и зарегистрироваться на бесплатный урок.

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


  1. dlinyj
    04.07.2023 15:37

    Алиасы хороши, но потом вспоминать из замучаешься. Каждый раз в bashrc лазаю посмотреть. Первый пример:


    ls --human-readable --size -1 -S --classify

    На самом деле можно сократить:


    ls -h -s -1 -S -F

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


    1. stan_volodarsky
      04.07.2023 15:37
      +17

      Вы хотели сказать `ls -hs1SF`?


      1. dlinyj
        04.07.2023 15:37
        +2

        Именно это я и хотел сказать.


    1. ihouser
      04.07.2023 15:37

      Можно создать алиас для вывода списка созданных алиасов.


      1. E_STRICT
        04.07.2023 15:37
        +7

        alias без параметров как раз это и делает


    1. Opaspap
      04.07.2023 15:37
      +1

      Я обычно юзаю ls -lhrt --sort size , непонятно зачем всякие classify, если сортировка прямая, всё самое большое далеко вверху окажется. -t тут лишнее, но просто удобнее помнить, чтобы без sort была сортировка по времени


    1. azizoid
      04.07.2023 15:37

      А чем Вам `ls -hs1SF` не понравился?



  1. 13werwolf13
    04.07.2023 15:37
    +5

    главный недостаток использования алиасов - к ним привыкаешь
    вот привык ты писать msp вместо длинной конструкции с awk, grep, sed и прочим, полез на сервер а там этого нет, и тратишь драгоценные секунды на попытки вспомнить что у тебя дома в bashrc/zsfrc под этим алиасом (я на всякий случай синхроню свой zshrc на телефон и уже пару раз подглядывал)

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

    это конечно мелочи и мучают они только невнимательных, но это не значит что о них стоит забывать

    в статье я бы ещё упомянул что в отличии от bash в zsh (и вроде бы у fish но не уверен) у алиасов есть прекрасная фича: alias -s exe=wine которая может применяться в разных кейсах упрощения жизни (например можно нарисовать alias -s pdf=okular и по быстрому открывать pdf)


    1. kt97679
      04.07.2023 15:37

      Чтобы при использовании ssh на удаленном сервере были те же алиасы, что и на локальном, можно использовать подход из вот этой статьи: https://habr.com/ru/articles/529544/


      1. 13werwolf13
        04.07.2023 15:37

        даааа нооооо...

        1) многие юзают не bash а zsh/tcsh/fish/etc
        2) многие юзают ohmybash/ohmyzsh/oрmyfish/starship/etc
        3) копирование bashrc на сервер де факто = показывание своего bashrc другим людям (что не всегда приемлемо)

        все эти три пункта тоже решаемы, но это уже оверинженеринг и переусложнение


        1. kt97679
          04.07.2023 15:37

          Вы безусловно правы. Мое решение не универсально и его скорее надо рассматривать как proof of concept.


  1. stanced
    04.07.2023 15:37
    -1

    Алиасы крутая штука, часто генерирую пароли с помощью alias pass="openssl rand -hex 10"


  1. it-navy
    04.07.2023 15:37

    Я ещё использую алиасы для работы с менеджерами пакетов. В случае с pacman например: update='sudo pacman -Syu' pacu='sudo pacman -S' remove='sudo pacman -Rs' и.т.д.


  1. randomsimplenumber
    04.07.2023 15:37
    +2

    Когда в руках молоток bash, все кругом похоже на гвозди aliasы :)

    А для оценки размеров файлов удобнее ncdu.


  1. placidity_master
    04.07.2023 15:37

    alias lsblk='lsblk -o size,NAME,LABEL,MOUNTPOINT,FSTYPE,FSAVAIL,FSUSE%,OWNER,GROUP,MODE,UUID'


    alias watch_blk=' watch -n1 lsblk -o size,NAME,LABEL,MOUNTPOINT,FSTYPE,FSAVAIL,FSUSE%,OWNER,GROUP,MODE,UUID'


  1. sloniki
    04.07.2023 15:37

    Я с баша пересел на Oh My Zsh, c блекджеком и уже написанными алиасами в плагинах


  1. AUser0
    04.07.2023 15:37

    Простите, но

    Использование одного такого алиаса позволит на избавиться от целой строки команд.

    Извините.


  1. ask0rbin
    04.07.2023 15:37

    Один из удобнейших alias, которые встречаются во многих дистрибутивах из коробки - ll (ls -alF).


  1. Himura
    04.07.2023 15:37

    sudo docker

    не надо так. надо так:

    sudo usermod -aG docker $USER


  1. delvin-fil
    04.07.2023 15:37

    Что у вас за версия bash?
    Это не работает:
    alias mnt="mount | awk -F' ' '{ printf "%s\t%s\n",$1,$3; }' | column -t | egrep ^/dev/ | sort"
    А вот это очень даже:
    mount | awk '{ print "%s\t%s\n",1,3; }' | column -t | egrep ^/dev/ | sort