Deprecated: Function get_magic_quotes_gpc() is deprecated in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 99

Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 619

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1169

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176

Warning: Cannot modify header information - headers already sent by (output started at /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php:99) in /hermes/walnacweb04/walnacweb04ab/b2791/pow.jasaeld/htdocs/De1337/nothing/index.php on line 1176
8000 GitHub - kootik/bash
Nothing Special   »   [go: up one dir, main page]

Skip to content

kootik/bash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Единое Окружение Bash для Удаленных Серверов

Это продвинутая конфигурация Bash, разработанная для решения одной главной проблемы: как поддерживать идентичное, удобное и мощное окружение командной строки на всех удаленных машинах, с которыми вы работаете по SSH?

Эта система избавляет от необходимости вручную копировать .bashrc на каждый сервер и рисковать, затирая существующие настройки. Вместо этого она "на лету" создает ваше привычное окружение на любой машине, куда вы подключаетесь, и даже централизованно собирает историю команд со всех серверов.

✨ Ключевые возможности

  • Полная синхронизация окружения: Ваши псевдонимы (aliases), функции и переменные окружения (exports) будут доступны на любом сервере, куда вы подключитесь через sshb.
  • Централизованная "вечная" история: Все команды, выполненные на любом сервере, сохраняются в один локальный файл ~/.bash_eternal_history, с указанием пользователя, хоста и каталога.
  • Умное и безопасное SSH-подключение (sshb): Главная "магическая" функция sshb использует мультиплексирование SSH для мгновенных повторных подключений и автоматически настраивает окружение, не оставляя мусора после себя.
  • Интерактивное управление инфраструктурой: Управляйте Kubernetes, Docker, systemd и Terraform с помощью удобных fzf-меню, не покидая терминал.
  • Продвинутая работа с Git: Переключайтесь между ветками и Pull Request'ами, просматривайте логи, управляйте stash и выполняйте cherry-pick в интерактивном режиме.
    • Модульная структура: Конфигурация разделена на 4 логических файла для легкой поддержки и расширения (.bashrc, .bash_export, .bash_functions, .bash_aliases).
  • Встроенная справка: Команды ha и fa покажут вам список всех доступных псевдонимов и функций с описаниями.
    • Множество утилит: Включает десятки полезных псевдонимов и функций для работы с git, docker, файловой системой, сетью и многого другого.

🚀 Как это работает? (Магия sshb)

Функция sshb — это сердце всей системы. Когда вы выполняете sshb user@server, происходит сложный, но надежный процесс:

  1. Создание безопасной среды:

    • На вашей локальной машине создается временный, защищенный каталог с помощью mktemp -d. Это исключает уязвимости.
    • В этом каталоге создается управляющий сокет для SSH.
  2. Установка "Мастер-соединения":

    • Выполняется команда ssh -fNM user@server. Она создает фоновое, постоянное SSH-соединение с сервером. Все последующие коммуникации будут проходить через него мгновенно, без повторной аутентификации.
  3. Упаковка окружения:

    • sshb локально собирает содержимое всех ваших конфигурационных файлов (.bashrc, .bash_export, .bash_functions, .bash_aliases) в один "пакет".
  4. Отправка и настройка на сервере:

    • Этот "пакет" по защищенному каналу отправляется на удаленный сервер и сохраняется во временный файл ~/.bash-ssh.
    • Если вы уже находитесь внутри сессии sshb и подключаетесь дальше, настраивается обратный туннель для пересылки истории команд на вашу локальную машину.
  5. Запуск "магической" сессии:

    • Выполняется финальная команда: exec bash --rcfile ~/.bash-ssh -i.
    • exec bash ...: Запускается новый экземпляр bash.
    • --rcfile ~/.bash-ssh: Это ключевой флаг. Он принудительно заставляет bash использовать наш отправленный "пакет" в качестве единственного файла конфигурации, полностью игнорируя системный .bashrc на сервере.
    • -i: Запускает оболочку в интерактивном режиме.
  6. Автоматическая очистка:

    • Как только вы выходите с сервера (командой exit), sshb автоматически закрывает фоновое "мастер-соединение".
    • Срабатывает механизм trap, который гарантированно удаляет временный каталог и управляющий сокет с вашей локальной машины, не оставляя следов.

Этот подход гарантирует, что ваше окружение будет полностью воссоздано на удаленной машине без изменения ее системных файлов.

📂 Структура файлов

Проект имеет простую и понятную модульную структуру:

  • ~/.bashrc: Главный файл, точка входа. Он обрабатывает логику SSH-подключений и загружает остальные части конфигурации.
  • ~/.bash_export: Здесь определяются все переменные окружения ($PATH, $EDITOR), настройки истории, локали и инициализация менеджеров версий.
  • ~/.bash_functions: Коллекция полезных shell-функций, включая "магическую" функцию sshb и утилиты для работы с файлами, сетью и git.
  • ~/.bash_aliases: Большая коллекция псевдонимов для ускорения повседневной работы в терминале.

🛠️ Установка

  1. Клонируйте репозиторий:

    git clone https://github.com/kootik/bash.git ~/.dotfiles
  2. Создайте символические ссылки:

    ln -s ~/.dotfiles/.bashrc ~/.bashrc
    ln -s ~/.dotfiles/.bash_export ~/.bash_export
    ln -s ~/.dotfiles/.bash_functions ~/.bash_functions
    ln -s ~/.dotfiles/.bash_aliases ~/.bash_aliases
  3. Установите зависимости: Убедитесь, что у вас установлены необходимые утилиты.

    # Для Debian/Ubuntu
    sudo apt-get update 
    sudo apt-get install socat fzf jq trash-cli xclip fd-find ripgrep bat
    
    # Для macOS (используя Homebrew)
    brew install socat fzf jq trash jq trash-cli xclip fd-find ripgrep bat
    
    # Для Fedora/CentOS  
    sudo dnf install fzf jq trash-cli ripgrep xclip
  4. Перезапустите оболочку: Откройте новую вкладку терминала или выполните source ~/.bashrc.

Теперь вместо ssh используйте команду sshb для подключения к удаленным серверам.

🔗 Зависимости

  • socat: (Опционально) Используется для создания надежного TCP-сервера для приема истории команд.
  • fzf: (Обязательно) Мощный нечеткий поиск, основа всех интерактивных утилит.
  • jq: (Рекомендуется) Используется для форматирования JSON-ответов.
  • trash-cli (или trash на macOS): (Рекомендуется) Для безопасного перемещения файлов в корзину.
  • ripgrep (rg): (Рекомендуется) Для сверхбыстрого поиска по коду (frg, ftodo).
  • gh: (Рекомендуется) Для работы с GitHub Pull Requests (fpr).
  • xclip: (Рекомендуется) Для интеграции с системным буфером обмена.

📄 Лицензия

Этот проект распространяется под лицензией GNU General Public License v3.0. Это означает, что он является свободным программным обеспечением, и вы можете его изменять и распространять на тех же условиях.

Встроенная справка (ha, fa)

Для быстрого просмотра всех доступных команд используйте:

  • ha - показать все псевдонимы (aliases).

  • fa - показать все функции.

    [Изображение справки по псевдонимам в терминале]

Алиасы

Image

Функции

Image

на фото часть функций и алиасов

Руководство по интерактивным утилитам (fzf)

Это новые мощные утилиты, которые превращают вашу командную строку в интерактивное меню.

Инструменты Kubernetes

Функция Назначение Требования Пример
kns Интерактивно переключить Namespace в текущем контексте. kubectl kns
kctx Интерактивно переключить Контекст (кластер). kubectl kctx
kdecode Декодировать секреты из Base64, выбрав их из списка. kubectl, jq kdecode

Инструменты Docker

Функция Назначение Требования Пример
d_dive Интерактивно "запрыгнуть" в работающий контейнер, выбрав его из списка. docker d_dive
dlogs Показать логи контейнера с возможностью слежения (-f), выбрав его из списка. docker dlogs -f

Продвинутые утилиты для Git

Функция Назначение Требования Пример
gfs Интерактивно управлять git stash (apply, pop, drop). git gfs
gfc_pick Интерактивно выбрать коммиты для cherry-pick из другой ветки. git gfc_pick
gsync Синхронизировать ваш форк с оригинальным (upstream) репозиторием. git gsync
fpr Интерактивно переключиться на Pull Request из GitHub. gh fpr

Системные и сетевые утилиты

Функция Назначение Требования Пример
fkill Интерактивно "убить" один или несколько процессов, выбрав их из списка. - fkill
svc Интерактивно управлять службами systemd (status, restart, stop, start). systemctl svc
fports Просмотреть открытые порты и связанные с ними процессы, с возможностью их завершения. ss fports
sshm Интерактивно подключиться к хосту из ~/.ssh/config. ssh sshm
fcd Интерактивно перейти в любой подкаталог текущей директории. find или fd fcd
check_ssl Проверить SSL-сертификат домена: кем выдан и срок действия. openssl check_ssl google.com

Инструменты для разработки

Функция Назначение Требования Пример
tfswitch Интерактивно переключить workspace в Terraform. terraform tfswitch
jwtdec Быстро декодировать JWT токен для просмотра header и payload. jq (опц.) jwtdec <token>
frg Сверхбыстрый интерактивный поиск по коду с помощью ripgrep. rg frg "MyApi"
ftodo Найти все комментарии TODO, FIXME, NOTE в проекте. rg ftodo

Работа с базами данных

Функция Назначение Требования Пример
pg_backup Интерактивно создать дамп базы данных PostgreSQL, выбрав ее из списка. psql, pg_dump pg_backup

Подробное руководство по псевдонимам из bash_aliases

Этот документ — детальный разбор псевдонимов, которые делают работу в командной строке быстрее, удобнее и безопаснее. Для каждой группы псевдонимов указана полная команда, назначение и наглядные примеры.

Часть 1: Навигация и просмотр содержимого

Улучшенный ls

Псевдоним Полная команда Назначение Пример
ls ls -AhF --color=auto Улучшенный ls по умолчанию. Показывает скрытые файлы, типы и использует цвета. ls
l ls -l Краткий псевдоним для вывода списка в длинном формате (без скрытых файлов). l
ll ls -alF Показать все файлы в подробном формате с индикаторами типа. ll /var/log
la ls -la Аналог ll, но без индикаторов типа (-F). la
lart ls -alrt Показать все файлы, отсортированные по дате изменения (самые новые внизу). lart ~/Downloads
lS ls -alSrh Показать все файлы, отсортированные по размеру (самые большие внизу). lS

Быстрая навигация

Псевдоним Полная команда Назначение Пример
.. cd .. Перейти на один уровень вверх. ..
... cd ../.. Перейти на два уровня вверх. ...
.... cd ../../.. Перейти на три уровня вверх. ....
-- - cd - Вернуться в предыдущий каталог. cd /etc, cd /tmp, -
gt cd "$(git rev-parse --show-toplevel)" Мгновенно перейти в корневой каталог текущего Git-репозитория. gt

Часть 2: Управление файлами и каталогами

Безопасные операции

Псевдоним Полная команда Назначение Пример
rm rm -Iv "Безопасное" удаление. Запрашивает подтверждение при удалении >3 файлов. rm *.tmp
cp cp -iv "Безопасное" копирование. Запросит подтверждение перед перезаписью файла. cp script.sh /bin
mv mv -iv "Безопасное" перемещение. Запросит подтверждение перед перезаписью. mv log.txt /logs
del trash Переместить файл в системную корзину вместо безвозвратного удаления. del photo.jpg

Управление правами

Псевдоним Полная команда Назначение Пример
chmx chmod +x Быстро сделать файл исполняемым. chmx ./install.sh
chmod chmod -c --preserve-root Стандартный chmod с защитой от случайного chmod -R /. chmod 600 key.pem

Часть 3: Система и сеть

Мониторинг ресурсов

Псевдоним Полная команда Назначение Пример
df df -Tha --total Показать использование дискового пространства в удобном формате. df
dus du -sh * sort -rh Показать размер всего в текущей папке, отсортировав по убыванию.
psmem ps auxf sort -nr -k 4 head -10
pscpu ps auxf sort -nr -k 3 head -10

Сетевая диагностика

Псевдоним Полная команда Назначение Пример
ports ss -tulanp Показать все активные сетевые соединения и слушающие порты. ports
myip curl -s ifconfig.me; echo Узнать свой внешний (публичный) IP-адрес. myip
serve python3 -m http.server Запустить простой веб-сервер для раздачи файлов из текущей папки. cd ~/share && serve

Часть 4: Инструменты разработчика

Пакетные менеджеры и Docker

Псевдоним Полная команда Назначение Пример
ni npm install Установить зависимости из package.json. ni
nid npm install --save-dev Установить пакет как зависимость для разработки. nid eslint
dps docker ps -a Показать все контейнеры Docker, включая остановленные. dps
dex docker exec -it Запустить bash внутри работающего контейнера. dex postgres-db bash

Kubernetes

Псевдоним Полная команда Назначение Пример
k kubectl Сокращение для kubectl. k get pods
kg kubectl get Сокращение для получения ресурсов. kg services
kd kubectl describe Показать детальное описание ресурса. kd pod/my-app-123
ka kubectl apply -f Применить конфигурацию из файла. ka deployment.yaml
kga kubectl get all --all-namespaces Показать все ресурсы во всех пространствах имен. kga

Часть 5: Удобство и мета-команды

Псевдоним Полная команда Назначение Пример
h history Показать историю команд. h
hg history grep Искать в истории команд.
reload source ~/.bashrc Перезагрузить конфигурацию Bash в текущем окне. reload
sudo sudo Трюк с пробелом, чтобы sudo работало с другими псевдонимами. sudo ll /root
cb-copy xclip -selection clipboard Скопировать стандартный ввод в буфер обмена. cat file.txt
cb-paste xclip -selection clipboard -o Вставить содержимое буфера обмена. cb-paste > new.txt

Руководство по утилитам из bash_functions

Этот документ — подробный разбор вспомогательных функций, которые автоматизируют рутинные задачи, не связанные напрямую с Git. Они помогут вам эффективнее управлять файлами, системой, сетью и рабочим окружением.

Часть 1: Управление файлами и архивами

bak

  • Назначение: Быстрое создание резервной копии файла с добавлением текущей даты и времени в имя.

  • Как это работает: Использует команду cp -iv, копируя указанный файл в новый с суффиксом .ГГГГ-ММ-ДД_ЧЧ:ММ:СС.

  • Когда использовать: Пе 103C7 ед тем, как вносить рискованные изменения в важный файл (например, файл конфигурации).

  • Пример использования:
    # Создать резервную копию nginx.conf перед редактированием
    bak /etc/nginx/nginx.conf

    # Будет создан файл: /etc/nginx/nginx.conf.2025-08-09_23-49-00

mkcd

  • Назначение: Создать каталог (включая все родительские) и немедленно перейти в него.
  • Как это работает: Объединяет две команды: mkdir -p (создать путь) и cd (перейти в каталог).
  • Когда использовать: Когда вы создаете новую структуру каталогов для проекта и хотите сразу начать в ней работать.
  • Пример использования:
    # Создать структуру для нового веб-проекта и перейти в нее
    mkcd ~/projects/new-cool-app/src
    # Вы окажетесь в каталоге ~/projects/new-cool-app/src

ff и fd

  • Назначение:

    • ff (Find File): Искать файлы по имени (или маске) в текущем каталоге и всех его подкаталогах.
    • fd (Find Directory): Искать каталоги по имени.
  • Как это работает: Это удобные обертки над стандартной командой find.

  • Когда использовать: Когда вы знаете имя файла/каталога, но не помните, где именно он лежит в большом проекте.

  • Пример использования:
    # Найти все файлы с расширением .md в проекте
    ff "*.md"

    # Найти каталог с компонентами в проекте React
    fd "components"

trash

  • Назначение: Безопасное удаление файлов и каталогов путем перемещения их в системную корзину, а не безвозвратного стирания.
  • Как это работает: Использует утилиту trash-cli. Если она не установлена, функция сообщит об этом.
  • Когда использовать: Всегда, вместо rm, когда вы не уверены на 100%, что файл вам больше никогда не понадобится.
  • Пример использования:
    # Переместить ненужный лог-файл в корзину
    trash old_log.txt

extract

  • Назначение: Универсальный распаковщик, который автоматически определяет тип архива и использует правильную команду для его извлечения.
  • Как это работает: Конструкция case проверяет расширение файла и вызывает соответствующую команду (tar, unzip, unrar и т.д.).
  • Когда использовать: Чтобы не вспоминать флаги для tar и не искать, какая команда нужна для .rar или .7z.
  • Пример использования:
    # Распаковать несколько разных архивов одной командой
    extract project.zip backup.tar.gz documents.rar

targz и zipf

  • Назначение:

    • targz: Быстро создать архив .tar.gz.
    • zipf: Быстро создать .zip архив, автоматически исключая ненужные файлы (.git, .DS_Store).
  • Как это работает: Обертки над командами tar и zip с предустановленными оптимальными флагами.

  • Когда использовать: Когда нужно быстро заархивировать проект или каталог для отправки коллеге или для резервного копирования.

  • Пример использования:
    # Заархивировать каталог проекта в my-app.tar.gz
    targz ./my-app

    # Создать zip-архив с исходниками, исключив git
    zipf ./my-app-sources

Часть 2: Сетевые и системные утилиты

doh (DNS over HTTPS)

  • Назначение: Выполнить DNS-запрос через защищенный сервис Google DNS-over-HTTPS и красиво отформатировать ответ.
  • Как это работает: Отправляет запрос с помощью curl и форматирует полученный JSON с помощью jq.
  • Когда использовать: Когда стандартный dig или nslookup заблокирован или вы хотите получить более подробную информацию в удобном виде.
  • Пример использования:
    doh github.com

weather

  • Назначение: Показать краткий прогноз погоды для указанного города (или Москвы по умолчанию) прямо в терминале.
  • Как это работает: Использует сервис wttr.in с помощью curl.
  • Пример использования:
    # Погода в Монреале
    weather Montreal

killg (Kill Grep)

  • Назначение: Принудительно завершить все процессы, чье имя соответствует заданному шаблону.
  • Как это работает: Безопасная обертка над pkill, которая находит и "убивает" процессы.
  • Когда использовать: Когда программа зависла и нужно завершить все ее процессы.
  • Пример использования:
    # Завершить все процессы, связанные с зависшим плеером VLC
    killg vlc

checkport

  • Назначение: Проверить, открыт ли определенный TCP-порт на удаленном хосте.

  • Как это работает: Использует утилиту nc (netcat) с коротким таймаутом для попытки соединения.

  • Когда использовать: Для быстрой диагностики сетевых проблем. Например, чтобы проверить, доступен ли веб-сервер или база данных.

  • Пример использования:
    # Проверить, работает ли веб-сервер на example.com
    checkport example.com 443

    # Проверить, доступен ли сервер PostgreSQL
    checkport db.internal.host 5432

lock

  • Назначение: Заблокировать экран компьютера.
  • Как это работает: Интеллектуально определяет доступную в вашей системе команду для блокировки экрана (xdg-screensaver, loginctl и др.) и выполняет ее.
  • Когда использовать: Когда вы отходите от компьютера и хотите быстро заблокировать сеанс.
  • Пример использования:
    lock

Часть 3: Инструменты разработчика

jnl-unit (Journal Unit)

  • Назначение: Показать логи конкретного сервиса (unit) в systemd и следить за их обновлением в реальном времени.
  • Как это работает: Вызывает journalctl -u [имя_юнита] -f.
  • Когда использовать: Для отладки системных сервисов, таких как nginx, docker, sshd и т.д.
  • Пример использования:
    # Смотреть логи веб-сервера nginx в реальном времени
    jnl-unit nginx.service

dclean (Docker Clean)

  • Назначение: Выполнить быструю очистку системы Docker: удалить остановленные контейнеры, неиспользуемые образы, сети и кэш сборки.
  • Как это работает: Выполняет docker container prune и docker system prune.
  • Когда использовать: Регулярно, чтобы освободить место на диске, которое занимает Docker.
  • Пример использования:
    dclean

mkvenv (Make Virtual Environment)

  • Назначение: Создать новое виртуальное окружение Python, сразу же активировать его и обновить pip.
  • Как это работает: Объединяет три шага: python3 -m venv, source activate и pip install -U pip.
  • Когда использовать: В самом начале работы над любым новым проектом на Python.
  • Пример использования:
    # Создать и активировать окружение для нового проекта
    mkvenv my-django-project-env

Часть 4: Прочие утилиты

transfer

  • Назначение: Легко и быстро загрузить файл или каталог на сервис transfer.sh и получить ссылку для скачивания.

  • Как это работает: Использует curl для загрузки файла. Если передается каталог, он сначала автоматически архивируется в .zip.

  • Когда использовать: Когда нужно быстро поделиться файлом с кем-то, у кого нет доступа к вашему компьютеру. Ссылка действительна 14 дней.

  • Пример использования:
    # Загрузить один файл
    transfer report.pdf

    # Загрузить целый каталог
    transfer ./screenshots

    # Загрузить вывод команды
    ls -l | transfer file-list.txt

up

  • Назначение: Перейти вверх по иерархии каталогов на заданное количество уровней.
  • Как это работает: Генерирует путь вида ../../.. и выполняет cd.
  • Когда использовать: Удобнее, чем печатать cd ../../...
  • Пример использования:
    # Находясь в /home/user/projects/app/src/components
    # Перейти на 3 уровня вверх в /home/user/projects
    up 3

calc

  • Назначение: Простой калькулятор в командной строке с поддержкой чисел с плавающей точкой.

  • Как это работает: Передает математическое выражение утилите bc.

  • Когда использовать: Для быстрых вычислений, не покидая терминал.

  • Пример использования:
    calc "10 / 3"
    # Вывод: 3.3333333333

    calc "(15.5 * 4) + 2"
    # Вывод: 64

Руководство по Git-функциям из bash_functions

Этот документ — подробный разбор продвинутых функций для работы с Git. Они разделены на две категории: функции-комбо для автоматизации рутины и интерактивные функции на базе fzf для мощного поиска и управления.

Часть 1: Функции-комбо для автоматизации 🚀

Эти функции объединяют несколько стандартных команд Git для выполнения частых задач одной короткой командой.

gacp (Git Add, Commit, Push)

Категория Описание
Назначение Добавить все файлы, сделать коммит и отправить изменения на GitHub. Это самая частая последовательность действий.
Как это работает Выполняет git add --all, затем git commit -m "ваше сообщение" и git push.
Когда использовать Когда вы завершили логическую часть работы и хотите быстро сохранить и опубликовать результат.

Пример использования

Представьте, вы закончили работу над формой входа.

Вместо того, чтобы печатать:

git add --all
git commit -m "feat: реализована базовая форма входа"
git push

Вы просто печатаете:

gacp "feat: реализована базовая форма входа"

gnewbranch (Git New Branch)

Категория Описание
Назначение Создать новую ветку, сразу переключиться на нее и опубликовать на GitHub, установив связь для отслеживания.
Как это работает Выполняет git checkout -b <имя_ветки> и затем git push -u origin <имя_ветки>.
Когда использовать В самом начале работы над новой задачей (feature, bugfix).

Пример использования

Вам нужно начать работу над задачей PROJ-123.

Вместо того, чтобы печатать:

git checkout -b feature/PROJ-123
git push --set-upstream origin feature/PROJ-123

Вы просто печатаете:

gnewbranch feature/PROJ-123

gprune (Git Prune)

Категория Описание
Назначение 🧹 Навести порядок в локальном репозитории, удалив все ветки, которые уже были слиты в main или master.
Как это работает Синхронизируется с удаленным репозиторием (git fetch --prune), находит все слитые ветки и безопасно удаляет их через git branch -d.
Когда использовать Регулярно, чтобы локальный репозиторий не захламлялся десятками старых веток.

Пример использования

За неделю вы слили несколько веток. Чтобы очистить локальный репозиторий:

gprune

Вывод будет примерно таким:

Основная ветка: main. Удаление слитых веток...
Deleted branch feature/login (was a1b2c3d).
Deleted branch hotfix/typo (was e4f5g6h).
Очистка завершена.

Часть 2: Интерактивные функции с fzf 🔍

Эти функции превращают командную строку в интерактивное меню с нечетким поиском. Требуют установленной утилиты fzf.

gfb (Git Fuzzy Branch)

Категория Описание
Назначение Интерактивное переключение между ветками с предпросмотром последних коммитов.
Как это работает Показывает отсортированный список веток в fzf. При навигации по списку справа отображаются последние коммиты выбранной ветки.
Когда использовать Когда у вас много веток и вы не помните точное название нужной.

Пример использования

Выполните gfb, начните печатать часть названия ветки, выберите нужную стрелками и нажмите Enter.

gfl (Git Fuzzy Log)

Категория Описание
Назначение Интерактивный просмотр git log с возможностью детального просмотра каждого коммита.
Как это работает Показывает историю коммитов в fzf. В окне предпросмотра отображается git show. <br> Горячие клавиши: Enter для полного просмотра, Ctrl-D для просмотра изменений (diff).
Когда использовать Когда нужно найти определенный коммит в истории или посмотреть, какие изменения он внес.

Пример использования

Выполните gfl, найдите нужный коммит поиском и нажмите Ctrl-D, чтобы увидеть только изменения, которые он принес.

gfa (Git Fuzzy Add)

Категория Описание
Назначение Интерактивное добавление файлов в индекс (git add).
Как это работает Показывает список измененных файлов в fzf. Справа отображается diff для выбранного файла. Можно выбрать несколько файлов через Tab.
Когда использовать Когда вы изменили много файлов, но хотите сделать несколько логически разделенных коммитов.

Пример использования

Выполните gfa, с помощью Tab выберите файлы для первого коммита и нажмите Enter. Они будут добавлены в индекс.

gfc (Git Fuzzy Checkout-file)

Категория Описание
Назначение Интерактивное восстановление одного файла из любого коммита в истории.
Как это работает Сначала вы выбираете коммит в fzf, затем в новом окне fzf выбираете файл из этого коммита для восстановления.
Когда использовать Когда вы случайно удалили или испортили файл и хотите быстро вернуть его рабочую версию.

Пример использования

Выполните gfc, найдите коммит, где файл был в порядке, выберите его, а затем выберите сам файл. Он будет восстановлен в вашей рабочей директории.

gfd (Git Fuzzy Delete-branch)

Категория Описание
Назначение Интерактивное удаление локальных веток.
Как это работает Показывает список веток (кроме main/master и текущей) в fzf. Можно выбрать несколько веток для удаления через Tab.
Когда использовать Как альтернатива gprune, если вы хотите вручную выбрать, какие ветки удалить.

Пример использования

Выполните gfd, выберите с помощью Tab несколько старых веток и нажмите Enter для их удаления.

0