Gymterview
junior

Что такое алиасы и файлы конфигурации shell?

Алиасы (alias) — это пользовательские сокращения для часто используемых команд, позволяющие создавать короткие имена для длинных или сложных командных строк.

Работа с алиасами

Пример
# Создать алиас (действует в текущей сессии)
alias ll='ls -la'
alias gs='git status'
alias gp='git push'
alias dc='docker compose'
alias k='kubectl'

# Показать все алиасы
alias

# Показать конкретный алиас
alias ll

# Удалить алиас
unalias ll

# Выполнить оригинальную команду, игнорируя алиас
\ls
command ls

Файлы конфигурации bash

Файл Когда загружается Что размещать
~/.bash_profile (или ~/.profile) Login shell (вход в систему, SSH) Переменные окружения
~/.bashrc Interactive non-login shell (новый терминал в GUI) Алиасы, функции, настройки промпта
~/.bash_logout При завершении login shell Команды очистки

Рекомендуемая практика: в ~/.bash_profile подгружать ~/.bashrc, чтобы настройки работали в обоих случаях:

Пример
# ~/.bash_profile
if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

Файлы конфигурации zsh

  • ~/.zprofile — аналог ~/.bash_profile
  • ~/.zshrc — аналог ~/.bashrc (основной файл конфигурации)
  • ~/.zshenv — выполняется для ВСЕХ экземпляров zsh (включая скрипты)

Пример конфигурации ~/.bashrc для Java-разработчика

Полный пример .bashrc
# Переменные окружения
export JAVA_HOME=/usr/lib/jvm/java-17
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

# Алиасы для Git
alias gs='git status'
alias gl='git log --oneline -20'
alias gd='git diff'
alias gc='git commit'
alias gp='git push'

# Алиасы для Docker
alias dc='docker compose'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'

# Алиасы для Maven
alias mci='mvn clean install'
alias mcp='mvn clean package -DskipTests'
alias mt='mvn test'

# Алиасы для навигации
alias ..='cd ..'
alias ...='cd ../..'
alias ll='ls -lah'
alias la='ls -la'

# Полезные функции
mkcd() {
    mkdir -p "$1" && cd "$1"
}

# Настройка промпта (показывает текущую ветку git)
parse_git_branch() {
    git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

# История
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoredups:erasedups

На собеседовании: интервьюер проверяет понимание разницы между login shell и non-login shell, и какие файлы при каком типе загружаются. Частая ошибка — добавлять переменные окружения только в .bashrc и удивляться, что они не работают в cron или при SSH-подключении (login shell читает .bash_profile).