🚀 Какво е и как се работи с .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
🔗 Алиаси (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 команди === 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 -itbash 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_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 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'
• Правете 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 е мощен инструмент за персонализиране и автоматизиране на работата ви в терминала. Започнете с прости алиаси и постепенно добавяйте по-сложни функции според нуждите си.
Помнете: Добрата организация и документиране на кода прави поддръжката много по-лесна!