Всеки път, когато отворите терминал, се случва нещо незабележимо. Bash зарежда поредица от конфигурационни файлове. Един от най-важните е .bashrc
. Този малък файл може да промени изцяло работния ви процес.
Мислете за .bashrc
като за личния ви асистент в терминала. Той запомня предпочитанията ви. Настройва средата според нуждите ви. Автоматизира рутинните задачи.
Какво е .bashrc файлът?
.bashrc
е скрипт файл, който Bash изпълнява при всяко стартиране. Името идва от „Bourne Again Shell Run Commands“. Файлът се намира в домашната ви директория.
Точката в началото го прави скрит. За да го видите, използвайте ls -la
в терминала. Всеки потребител има собствен .bashrc
файл.
Bash зарежда файла само при интерактивни сесии. Това означава, че се изпълнява в терминала. Не се зарежда при стартиране на скриптове.
Къде се намира .bashrc?
По подразбиране файлът е в домашната директория:
~/.bashrc
Символът ~
представлява домашната директория. За потребител „ivan“ пътят е /home/ivan/.bashrc
.
Ако файлът не съществува, можете да го създадете:
touch ~/.bashrc
Как работи зареждането на .bashrc?
Bash има йерархия на конфигурационните файлове. Разбирането на реда е важно за правилната настройка.
При стартиране Bash търси файлове в следния ред:
/etc/profile
– системен профил~/.bash_profile
– потребителски профил~/.bash_login
– алтернативен профил~/.profile
– общ профил~/.bashrc
– интерактивни настройки
Повечето дистрибуции зареждат .bashrc
от .bash_profile
. Това гарантира изпълнението при всяко стартиране.
Основни настройки в .bashrc
Псевдоними (Aliases)
Псевдонимите са съкращения за често използвани команди. Те пестят време и намаляват грешки.
# Основни псевдоними
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Навигация
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# Безопасност
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Git съкращения
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
Ето как да добавяте нов alias, функция или променлива директно от терминала, без да отваряте файла на ръка.
Например:
echo "alias gp='git pull'" >> ~/.bash/aliases
После презареждате:
source ~/.bashrc
И вече можете да ползвате gp
.
🔹Добавяне на export
echo "export EDITOR=nano" >> ~/.bash/exports
source ~/.bashrc
🔹 Добавяне на prompt
(примерно да смените PS1):
echo 'export PS1="\u@\h:\w\$ "' >> ~/.bash/prompt
source ~/.bashrc
⚡ Малък трик: създайте си helper команди
Можете да си направите специални функции/alias-и за това.
Примерно в ~/.bash/functions
сложете:
addalias() {
echo "alias $1='$2'" >> ~/.bash/aliases
source ~/.bashrc
}
addexport() {
echo "export $1=\"$2\"" >> ~/.bash/exports
source ~/.bashrc
}
Пример за ползване:
addalias gs "git status"
addexport EDITOR vim
И готово — автоматично ще се добавят и заредят без да пипате файловете ръчно.
Променливи на средата
Променливите на средата влияят на поведението на програмите:
# Редактор по подразбиране
export EDITOR=nano
# История на командите
export HISTSIZE=1000
export HISTFILESIZE=2000
# Цветна поддръжка
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
# Добавяне към PATH
export PATH="$HOME/bin:$PATH"
Функции
Функциите разширяват възможностите отвъд псевдонимите:
# Създаване на директория и навигация
mkcd() {
mkdir -p "$1" && cd "$1"
}
# Търсене на файлове
findfile() {
find . -name "*$1*" -type f
}
# Резервно копие на файл
backup() {
cp "$1" "$1.backup.$(date +%Y%m%d_%H%M%S)"
}
# Извличане на архиви
extract() {
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' не може да бъде извлечен" ;;
esac
}
Персонализиране на промпта
Промптът е текстът преди курсора в терминала. Персонализирането го прави информативен и красив.
Може да ви е интересно още: Как да оптимизирате rsync за бърз и сигурен трансфер на големи файлове
Основни променливи
Bash използва специални променливи за промпта:
# Променливи за промпта
# \u - потребителско име
# \h - име на хост
# \w - текуща директория
# \$ - $ за обикновен потребител, # за root
# \d - дата
# \t - време
# Прост промпт
PS1='\u@\h:\w\$ '
# Цветен промпт
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
Цветове в промпта
ANSI цветовите кодове правят промпта по-привлекателен:
# Дефиниране на цветове
RED='\[\033[0;31m\]'
GREEN='\[\033[0;32m\]'
YELLOW='\[\033[0;33m\]'
BLUE='\[\033[0;34m\]'
PURPLE='\[\033[0;35m\]'
CYAN='\[\033[0;36m\]'
WHITE='\[\033[0;37m\]'
NC='\[\033[0m\]' # No Color
# Цветен промпт с Git информация
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
PS1="${GREEN}\u@\h${NC}:${BLUE}\w${YELLOW}\$(parse_git_branch)${NC}\$ "
Полезни настройки за продуктивност
История на командите
Оптимизирането на историята подобрява работния процес:
# Размер на историята
HISTSIZE=1000
HISTFILESIZE=2000
# Избягване на дубликати
HISTCONTROL=ignoreboth:erasedups
# Добавяне на времеви печат
HISTTIMEFORMAT="%d/%m/%y %T "
# Игнориране на определени команди
HISTIGNORE="ls:cd:cd -:pwd:exit:date:* --help"
# Запазване на историята веднага
shopt -s histappend
PROMPT_COMMAND="history -a"
Автодопълване
Bash предлага мощни възможности за автодопълване:
# Активиране на разширено автодопълване
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
# Case-insensitive автодопълване
bind "set completion-ignore-case on"
# Показване на възможности при неяснота
bind "set show-all-if-ambiguous on"
Условна логика в .bashrc
Понякога настройките зависят от системата или потребителя:
# Проверка на операционната система
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
alias ls='ls --color=auto'
elif [[ "$OSTYPE" == "darwin"* ]]; then
alias ls='ls -G'
fi
# Различни настройки за различни хостове
if [[ "$HOSTNAME" == "work-laptop" ]]; then
export WORK_MODE=1
alias connect-vpn='sudo openvpn /etc/openvpn/work.conf'
fi
# Проверка за наличие на програми
if command -v code >/dev/null 2>&1; then
export EDITOR=code
elif command -v vim >/dev/null 2>&1; then
export EDITOR=vim
else
export EDITOR=nano
fi
Организиране на .bashrc файла
С времето .bashrc
може да стане много голям. Добрата организация е ключова:
#!/bin/bash
# ~/.bashrc: конфигурация за интерактивни bash сесии
# ================================================
# ОСНОВНИ НАСТРОЙКИ
# ================================================
# Проверка за интерактивна сесия
[[ $- != *i* ]] && return
# ================================================
# ПСЕВДОНИМИ
# ================================================
# Основни команди
alias ll='ls -alF'
alias la='ls -A'
# Навигация
alias ..='cd ..'
# ================================================
# ПРОМЕНЛИВИ НА СРЕДАТА
# ================================================
export EDITOR=nano
export HISTSIZE=1000
# ================================================
# ФУНКЦИИ
# ================================================
mkcd() {
mkdir -p "$1" && cd "$1"
}
# ================================================
# ПРОМПТ
# ================================================
PS1='\u@\h:\w\$ '
# ================================================
# ЛОКАЛНИ НАСТРОЙКИ
# ================================================
# Зареждане на локални настройки, ако съществуват
if [ -f ~/.bashrc.local ]; then
source ~/.bashrc.local
fi
Модулна организация
За по-сложни настройки използвайте отделни файлове:
# В ~/.bashrc
for file in ~/.bash/{aliases,functions,exports,prompt}; do
[ -r "$file" ] && [ -f "$file" ] && source "$file"
done
Създайте директория ~/.bash/
с файлове:
aliases
– всички псевдонимиfunctions
– потребителски функцииexports
– променливи на средатаprompt
– настройки за промпта
Това наистина е много добро. Ще обясня , малко повече.
От къде да взема чист .basrc ?
В Ubuntu и Linux Mint (които стъпват на едни и същи пакети от Debian) „чистият“ .bashrc
идва от пакета bash
.
Оригиналният „скелетен“ .bashrc
, по подразбиране се копира от:
/etc/skel/.bashrc
Когато се създава нов потребител, неговият ~/.bashrc
идва именно от този файл. Тоест — ако искате „чисто начало“, можеш просто да го копирате:
cp /etc/skel/.bashrc ~/.bashrc
Резервни копия и версии
.bashrc
е критичен файл. Правете резервни копия:
# Създаване на резервно копие
cp ~/.bashrc ~/.bashrc.backup.$(date +%Y%m%d)
# Използване на Git за версиониране
cd ~
git init
git add .bashrc
git commit -m "Initial .bashrc setup"
Тестване на промени
Преди постоянни промени, тествайте настройките:
# Тестване на нови настройки
bash --rcfile /path/to/test.bashrc
# Зареждане на промени без рестарт
source ~/.bashrc
Какво да не добавяте към .bashrc
Не всички настройки принадлежат в .bashrc
файла. Добавянето на неподходящ код може да причини проблеми.
Бавни операции
Избягвайте команди, които отнемат време за изпълнение:
# ЛОШО - бави стартирането на терминала
ping -c 1 google.com >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Интернет връзката е активна"
fi
# ЛОШО - скъпа операция при всяко стартиране
find /home -name "*.tmp" -delete 2>/dev/null
# ЛОШО - мрежова заявка
curl -s http://api.example.com/status
Интерактивни команди
Командите, които изискват потребителски вход, блокират стартирането:
# ЛОШО - ще спре стартирането
read -p "Въведете вашето име: " username
# ЛОШО - може да изиска парола
sudo apt update
Временни настройки
Не добавяйте настройки, които са нужни само веднъж:
# ЛОШО - трябва да е в отделен скрипт
wget https://example.com/setup.sh
chmod +x setup.sh
./setup.sh
Големи масиви от данни
Твърде много данни натоварват паметта при всяко стартиране:
# ЛОШО - твърде много данни
declare -a HUGE_ARRAY=(
"item1" "item2" ... "item10000"
)
Конфликтни настройки
Избягвайте настройки, които могат да конфликтират:
# ЛОШО - може да конфликтира с системни настройки
export PATH="/usr/local/bin" # презаписва вместо да добавя
# ПРАВИЛНО
export PATH="/usr/local/bin:$PATH"
Отладъчни съобщения
Не оставяйте отладъчен код в производствената версия:
# ЛОШО - замърсява изхода
echo "DEBUG: Loading .bashrc"
set -x # включва debug режим
Чести грешки и как да ги избегнем
Безкрайни цикли
Внимавайте с псевдонимите:
# ГРЕШНО - създава безкраен цикъл
alias ls='ls --color=auto'
# ПРАВИЛНО - използва оригиналната команда
alias ls='\ls --color=auto'
Конфликти между дистрибуции
Различните Linux дистрибуции имат различни настройки:
# Проверка преди настройка
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
fi
Производителност
Избягвайте бавни операции в .bashrc
:
# БАВНО - изпълнява се при всяко стартиране
PS1="$(git branch 2>/dev/null | grep '^*' | colrm 1 2) $ "
# БЪРЗО - изпълнява се само когато е необходимо
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1='\w$(parse_git_branch)\$ '
Споделяне на настройки
Добрите .bashrc
настройки заслужават да бъдат споделени:
GitHub Dotfiles
Създайте публично хранилище с вашите настройки:
# Структура на dotfiles хранилище
dotfiles/
├── bashrc
├── bash_profile
├── bash_aliases
├── install.sh
└── README.md
Инсталационен скрипт
Автоматизирайте инсталацията:
#!/bin/bash
# install.sh
# Създаване на резервни копия
cp ~/.bashrc ~/.bashrc.backup 2>/dev/null || true
# Свързване на файловете
ln -sf "$(pwd)/bashrc" ~/.bashrc
ln -sf "$(pwd)/bash_aliases" ~/.bash_aliases
echo "Dotfiles инсталирани успешно!"
echo "Изпълнете 'source ~/.bashrc' за активиране."
Ето го моят aliases
файл:
# ==== ФАЙЛОВЕ И ДИРЕКТОРИИ ====
alias ll='ls -lah --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias md='mkdir -p'
alias rd='rmdir'
alias dfh='df -h'
alias duh='du -sh *'
# ==== СИСТЕМНИ ====
alias cls='clear'
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias psg='ps aux | grep -v grep | grep -i'
alias myip='curl -s ifconfig.me'
alias ports='ss -tuln'
# ==== ДОКЕР ====
alias d='docker'
alias dps='docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"'
alias dimg='docker images'
alias dstop='docker stop $(docker ps -q)'
alias drm='docker rm $(docker ps -a -q)'
alias drmi='docker rmi $(docker images -q)'
alias dlog='docker logs -f'
# ==== GIT ====
alias gs='git status'
alias ga='git add .'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate --all'
# ==== NETWORKING ====
alias pingg='ping 8.8.8.8'
alias wgetr='wget -c' # resume downloads
alias netc='nmcli connection show'
alias netr='nmcli device status'
# ==== БЪРЗ ДОСТЪП ДО ФАЙЛОВЕ ====
alias lrc='cat ~/.bashrc'
alias lssh='cat ~/.ssh/config'
alias cip='curl icanhazip.com'
# ==== АДМИН (с root) ====
alias update='sudo apt update && sudo apt upgrade -y'
alias install='sudo apt install'
alias remove='sudo apt remove'
alias reboot='sudo systemctl reboot'
alias shutdown='sudo systemctl poweroff'
Заключение
.bashrc
файлът е мощен инструмент за персонализиране на терминала. Правилната му настройка може значително да подобри продуктивността ви.
Започнете с основните настройки. Добавяйте сложност постепенно. Тествайте промените преди окончателното им прилагане.
Не забравяйте да правите резервни копия. Споделяйте полезните си настройки с общността.
Терминалът е дома на всеки разработчик. Направете го удобен и функционален място за работа. Добре конфигурираният .bashrc
е първата стъпка към това.
Помнете – всеки потребител има уникални нужди. Адаптирайте настройките според работния си процес. Експериментирайте и намерете комбинацията, която работи най-добре за вас.