Операционная система 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)
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)kt97679
04.07.2023 15:37Чтобы при использовании ssh на удаленном сервере были те же алиасы, что и на локальном, можно использовать подход из вот этой статьи: https://habr.com/ru/articles/529544/
13werwolf13
04.07.2023 15:37даааа нооооо...
1) многие юзают не bash а zsh/tcsh/fish/etc
2) многие юзают ohmybash/ohmyzsh/oрmyfish/starship/etc
3) копирование bashrc на сервер де факто = показывание своего bashrc другим людям (что не всегда приемлемо)все эти три пункта тоже решаемы, но это уже оверинженеринг и переусложнение
kt97679
04.07.2023 15:37Вы безусловно правы. Мое решение не универсально и его скорее надо рассматривать как proof of concept.
stanced
04.07.2023 15:37-1Алиасы крутая штука, часто генерирую пароли с помощью alias pass="openssl rand -hex 10"
it-navy
04.07.2023 15:37Я ещё использую алиасы для работы с менеджерами пакетов. В случае с pacman например: update='sudo pacman -Syu' pacu='sudo pacman -S' remove='sudo pacman -Rs' и.т.д.
randomsimplenumber
04.07.2023 15:37+2Когда в руках
молотокbash, все кругом похоже нагвоздиaliasы :)А для оценки размеров файлов удобнее ncdu.
placidity_master
04.07.2023 15:37alias 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'
AUser0
04.07.2023 15:37Простите, но
Использование одного такого алиаса позволит на избавиться от целой строки команд.
Извините.
ask0rbin
04.07.2023 15:37Один из удобнейших alias, которые встречаются во многих дистрибутивах из коробки - ll (ls -alF).
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",3; }' | column -t | egrep ^/dev/ | sort
dlinyj
Алиасы хороши, но потом вспоминать из замучаешься. Каждый раз в bashrc лазаю посмотреть. Первый пример:
На самом деле можно сократить:
Немногим больше, чем ваш алиас, но запомнить проще. Не нужно намеренно раздувать команды ради примера.
stan_volodarsky
Вы хотели сказать `ls -hs1SF`?
dlinyj
Именно это я и хотел сказать.
ihouser
Можно создать алиас для вывода списка созданных алиасов.
E_STRICT
alias
без параметров как раз это и делаетOpaspap
Я обычно юзаю ls -lhrt --sort size , непонятно зачем всякие classify, если сортировка прямая, всё самое большое далеко вверху окажется. -t тут лишнее, но просто удобнее помнить, чтобы без sort была сортировка по времени
azizoid
А чем Вам `ls -hs1SF` не понравился?
dlinyj
https://habr.com/ru/companies/otus/articles/745882/#comment_25718830