Какво е и как се работи с .bashrc

Какво е и как се работи с .bashrc

Какво е и как се работи с .bashrc – Ръководство за персонализация на терминала

🚀 Какво е и как се работи с .bashrc

Персонализирайте своя терминал и автоматизирайте ежедневните задачи

🤔 Какво е .bashrc?

.bashrc е конфигурационен файл, който се изпълнява всеки път когато отворите нов терминал (bash shell). Той ви позволява да:

  • Създавате персонализирани команди (алиаси)
  • Дефинирате собствени функции
  • Настройвате променливи на средата
  • Персонализирате подканата (prompt)
  • Автоматизирате повтарящи се задачи
💡 Къде се намира?
Файлът се намира в home директорията: ~/.bashrc
Понякога може да не съществува – в такъв случай просто го създайте.

🐳 Употреба на Docker алиасите:

# Основни Docker команди
dps              # показва работещи контейнери в таблица
dpa              # показва всички контейнери
dst container1   # стартира контейнер
dsp container1   # спира контейнер

# Логове и мониторинг
dlf container1   # следи логовете в реално време
dlogs container1 # показва последните 100 реда от логовете
dlogt container1 # показва логовете от последния час

# Работа с контейнери
dex container1 bash    # влиза в контейнер с bash
dsh                    # влиза в първия работещ контейнер
denter myapp           # влиза в контейнер по име (функция)

# Почистване
drm container1   # премахва контейнер
drma            # премахва всички контейнери
docker_cleanup  # пълно почистване на системата
📁 Функции за работа с файлове:
# === Файлови операции ===

# Бърз backup на файл
backup() {
    cp "$1" "$1.backup.$(date +%Y%m%d_%H%M%S)"
    echo "Backup създаден: $1.backup.$(date +%Y%m%d_%H%M%S)"
}

# Размер на директория
dirsize() {
    du -sh "$1" 2>/dev/null || du -sh .
}

# Почистване на празни директории
cleanup() {
    find . -type d -empty -delete
    echo "Празните директории са изтрити"
}

⚡ Основни операции

Отваряне на файла за редактиране:

# С nano редактор
nano ~/.bashrc

# С vim редактор  
vim ~/.bashrc

# С VS Code
code ~/.bashrc

Презареждане на конфигурацията:

# След промени в .bashrc файла
source ~/.bashrc

# Или с къса форма
. ~/.bashrc
⚠️ Важно: След всяка промяна в .bashrc файла трябва да го презаредите или да отворите нов терминал, за да влязат в сила промените.

🔗 Алиаси (Aliases)

Алиасите са кратки имена за дълги команди. Спестяват време и намаляват грешките.

📝 Основни примери за алиаси:
# === Основни алиаси ===
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# === Навигация ===
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# === Git команди ===
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline'

# === Системни команди ===
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias ps='ps aux'

# === Цветни команди ===
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
🐳 Docker алиаси:
# === Docker команди ===
alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Image}}\t{{.Ports}}"'
alias dpa='docker ps -a'
alias dst='docker start'
alias dsp='docker stop'
alias drm='docker rm'
alias drma='docker rm $(docker ps -aq)'        # премахва всички контейнери
alias dex='docker exec -it'                    # docker exec -it  bash
alias dsh='docker exec -it $(docker ps -q | head -n1) bash'  # shell в първия работещ контейнер
alias dlf='docker logs -f'
alias dlogs='docker logs --tail=100 -f'
alias dlogt='docker logs --since=1h -f'        # последния 1 час
🌐 Мрежови алиаси:
# === Мрежови команди ===
alias ping='ping -c 5'
alias fastping='ping -c 100 -s.2'
alias ports='netstat -tulanp'
alias myip='curl -s checkip.dyndns.org | grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"'

⚙️ Функции

Функциите са по-мощни от алиасите – могат да приемат параметри и да съдържат сложна логика.

🔧 Полезни системни функции:
# === Системни функции ===

# Бърза архивация
mktar() {
    tar -czf "${1}.tar.gz" "$1"
}

# Извличане на архиви
extract() {
    if [ -f "$1" ]; then
        case "$1" in
            *.tar.bz2)   tar xjf "$1"     ;;
            *.tar.gz)    tar xzf "$1"     ;;
            *.bz2)       bunzip2 "$1"     ;;
            *.rar)       unrar x "$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
    else
        echo "'$1' не е валиден файл"
    fi
}

# Създаване и влизане в директория
mkcd() {
    mkdir -p "$1" && cd "$1"
}

# Търсене на файлове
findfile() {
    find . -name "*$1*" -type f
}

# Търсене в съдържанието на файлове
findtext() {
    grep -r "$1" .
}
🐳 Docker функции:
# === Docker функции ===

# Спиране на всички контейнери
docker_stop_all() {
    echo "🛑 Спиране на всички Docker контейнери..."
    docker stop $(docker ps -q)
    echo "✅ Всички контейнери са спрени"
}

# Почистване на Docker системата
docker_cleanup() {
    echo "🧹 Почистване на Docker системата..."
    docker system prune -af
    docker volume prune -f
    echo "✅ Docker системата е почистена"
}

# Бързо влизане в контейнер по име
denter() {
    if [ -z "$1" ]; then
        echo "❗ Употреба: denter "
        return 1
    fi
    docker exec -it "$1" bash
}

# Показване на ресурсите използвани от контейнери
docker_stats() {
    docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}"
}

🐳 Docker алиаси и функции

За тези, които работят с Docker контейнери, тези алиаси ще ви спестят много време и писане:

🖥️ Практически пример – Proxmox Backup

Ето как да добавите функцията за автоматично сваляне на Proxmox backup файлове:

🚀 Proxmox Backup функция:
# === Proxmox Backup Functions ===
backup_ct() {
  local ct_id="$1"
  local server_ip="10.110.110.68"
  local remote_path="/backup512/dump"
  local local_path="/mnt/d/backup_proxmox"
  
  if [ -z "$ct_id" ]; then
    echo "❗ Употреба: backup_ct "
    return 1
  fi
  
  echo "🔍 Търсене на най-нов архив за контейнер $ct_id..."
  local latest=$(ssh root@$server_ip "ls -t $remote_path/vzdump-lxc-${ct_id}-*.tar.zst 2>/dev/null | head -1")
  
  if [ -z "$latest" ]; then
    echo "❌ Архив не е намерен за контейнер $ct_id"
    return 1
  fi
  
  local filename=$(basename "$latest")
  echo "📦 Копиране на $filename"
  
  if rsync -avz --progress root@$server_ip:"$latest" "$local_path/"; then
    echo "✅ Успешно копиране завършено!"
  else
    echo "❌ Грешка при копирането"
    return 1
  fi
}

# === Shortcuts ===
alias backup114='backup_ct 114'
alias backup_wp='backup_ct 200'
alias list_backups='ls -lah /mnt/d/backup_proxmox/'
alias backup_space='df -h /mnt/d/backup_proxmox'
✅ Как да използвате:
backup_ct 114 – сваля backup за контейнер 114
backup114 – бърз път за контейнер 114
backup_wp – бърз път за WordPress контейнер
list_backups – показва всички локални backup файлове

Стъпки за добавяне:

# 1. Отворете .bashrc файла
nano ~/.bashrc

# 2. Добавете функциите в края на файла
# (копирайте кода от горе)

# 3. Презаредете конфигурацията
source ~/.bashrc

# 4. Тествайте функцията
backup_ct 114

🎯 Полезни съвети

🎨 Персонализиране на подканата (PS1):

# Цветна prompt с Git статус
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\]\$ "

📊 Системна информация при старт:

# Показва системна информация при отваряне на терминал
if [ -f /proc/version ]; then
    echo "🖥️  Система: $(uname -sr)"
    echo "⏰ Време: $(date)"
    echo "💾 Памет: $(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
    echo "💿 Диск: $(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}')"
    echo "────────────────────────────────────────"
fi

🔐 Безопасност – SSH ключове:

# Функция за генериране на SSH ключ
generate_ssh_key() {
    local email="$1"
    if [ -z "$email" ]; then
        echo "❗ Употреба: generate_ssh_key [email protected]"
        return 1
    fi
    
    ssh-keygen -t ed25519 -C "$email"
    echo "✅ SSH ключ генериран! Публичният ключ:"
    cat ~/.ssh/id_ed25519.pub
}

# Алиас за копиране на SSH ключ
alias copy_ssh_key='cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard'
💡 Pro съвети:
• Правете backup на .bashrc преди големи промени
• Използвайте коментари за организация на кода
• Тествайте новите функции преди да ги добавите
• Споделяйте полезни функции с колегите си

🔄 Backup и възстановяване:

# Backup на .bashrc
cp ~/.bashrc ~/.bashrc.backup.$(date +%Y%m%d_%H%M%S)

# Възстановяване от backup
cp ~/.bashrc.backup.20250728_143000 ~/.bashrc
source ~/.bashrc

🎉 Заключение

Файлът .bashrc е мощен инструмент за персонализиране и автоматизиране на работата ви в терминала. Започнете с прости алиаси и постепенно добавяйте по-сложни функции според нуждите си.

Помнете: Добрата организация и документиране на кода прави поддръжката много по-лесна!

Няколко бързи начина да видите всички ваши алиаси:

🚀 Бързи команди за показване на алиаси

1. Показване на всички алиаси:

alias

2. Търсене на конкретен алиас:

alias | grep docker    # само Docker алиасите
alias | grep backup    # само backup алиасите

3. Форматирано показване с цветове:

alias | sort | column -t

📋 Създаване на функция за по-красиво показване

Добавете тази функция в .bashrc:

# === Показване на алиаси ===
show_aliases() {
    local category="$1"
    
    if [ -z "$category" ]; then
        echo "🔗 Всички алиаси:"
        alias | sort | sed 's/alias //' | column -t -s'=' | nl
    else
        echo "🔍 Алиаси за '$category':"
        alias | grep -i "$category" | sort | sed 's/alias //' | column -t -s'=' | nl
    fi
}

# Алиаси за бързо показване
alias aliases='show_aliases'
alias docker_aliases='show_aliases docker'
alias backup_aliases='show_aliases backup'
alias git_aliases='show_aliases git'

🎯 Използване:

aliases              # показва всички алиаси
docker_aliases       # само Docker алиасите  
backup_aliases       # само backup алиасите
show_aliases git     # само Git алиасите

📊 Още по-advanced функция:

list_my_stuff() {
    echo "════════════════════════════════════════"
    echo "🔗 АЛИАСИ ($(alias | wc -l) броя):"
    echo "════════════════════════════════════════"
    alias | sort | sed 's/alias //' | nl
    
    echo ""
    echo "════════════════════════════════════════"
    echo "⚙️ ФУНКЦИИ:"
    echo "════════════════════════════════════════"
    declare -F | cut -d' ' -f3 | grep -v '^_' | nl
}

alias myconfig='list_my_stuff'

Резултат:

  • aliases – красиво форматирани алиаси
  • myconfig – показва и алиаси, и функции
  • docker_aliases – само Docker алиасите

Много по-бързо от отварянето на .bashrc файла! 🎉

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: