Главная / Разработка

💻 Разработка

Git, Docker, curl, обработка текста, поиск файлов, systemd, передача файлов и сессии.

🌱git — базовое

  • создать репозиторий git init
  • клонировать git clone url
  • статус git status
  • добавить все изменения git add -A
  • коммит git commit -m "message"
  • отправить/забрать изменения git push / git pull
  • сбросить всё до последнего коммита git reset --hard; git clean -f

🌿git — продвинутое

  • история перемещений HEAD, включая после reset git reflog
  • бинарный поиск коммита с багом git bisect start
  • вторая рабочая копия ветки git worktree add ../hotfix branch
  • отложить и вернуть изменения git stash / git stash apply stash@{2}
  • перенести один коммит в другую ветку git cherry-pick commit
  • кто менял конкретные строки git blame -L 10,20 file
  • интерактивная перестройка истории git rebase -i HEAD~5

🐳docker

  • все контейнеры docker ps -a
  • запустить с именем docker run --name name image
  • старт/стоп существующего docker container start/stop name
  • скачать образ docker pull image
  • список образов docker images
  • интерактивный shell внутри docker exec -it name sh
  • удалить контейнер docker rm name
  • логи в реальном времени docker logs -f name
  • кто подключён к сети docker network inspect bridge
  • удалить неиспользуемые volume docker volume prune -a
  • история слоёв образа docker history image
  • билд без кэша docker build --no-cache .

🌐curl

  • GET-запрос curl url
  • следовать редиректам + заголовки curl -L -D - url
  • скачать файл curl -O url
  • form-encoded POST curl -X POST -d 'name=bob' url
  • через прокси с заголовком авторизации curl -k -x http://127.0.0.1:8080 -H 'Authorization: Bearer token' url
  • JSON-тело запроса curl -d '{"name":"bob"}' -H 'Content-Type: application/json' url
  • клиентский сертификат curl -E client.pem --key key.pem -k url
  • подменить DNS для теста curl -v --resolve host:80:127.0.0.1 url

🧮jq / awk / sed

  • форматированный JSON jq '.' file.json
  • все элементы массива jq '.[]' file.json
  • фильтр по условию jq '.[] | select(.key=="value")' file.json
  • пятое поле, разделитель — пробел awk '{print $5}' file
  • последнее поле, разделитель — запятая awk -F, '{print $NF}' file
  • сумма значений в столбце awk '{s+=$1} END{print s}' file
  • каждая третья строка awk 'NR%3==1' file
  • замена, вывод в stdout sed 's/a/b/g' file
  • замена на месте sed -i 's/a/b/g' file
  • только первая строка sed -n '1p' file
  • удалить строки 1-5 sed -i '1,5d' file
  • удалить пустые строки sed -i '/^[[:space:]]*$/d' file

📁find / xargs / parallel

  • по расширению find dir -name '*.ext'
  • директории без учёта регистра find dir -type d -iname '*lib*'
  • с исключением пути find dir -name '*.py' -not -path '*/site-packages/*'
  • по диапазону размера find dir -size +500k -size -10M
  • команда над каждым найденным find dir -name '*.ext' -exec wc -l {} \;
  • удалить пустые файлы/папки find dir -empty -delete
  • аргументы из пайпа в команду cmd | xargs command
  • параллельно, по одному аргументу cmd | xargs -P 10 -n 1 command
  • с плейсхолдером cmd | xargs -I _ command _
  • параллельно на всех ядрах parallel gzip ::: file1 file2
  • 4 задачи из stdin ls *.txt | parallel -j4 gzip
  • на нескольких машинах по ssh parallel -S host1,host2 command ::: arg1 arg2

⏱️systemd

  • все запущенные сервисы systemctl status
  • упавшие юниты systemctl --failed
  • старт/стоп/рестарт/статус systemctl start|stop|restart|status unit
  • автозапуск при загрузке systemctl enable unit
  • перечитать юниты systemctl daemon-reload
  • содержимое юнита / редактирование systemctl cat unit / systemctl edit unit
  • последние строки + слежение journalctl -n 100 -f
  • ошибки прошлой загрузки journalctl -b -1 -p 3
  • логи конкретного юнита journalctl -u unit
  • за период journalctl -S yesterday -U now
  • очистка логов старше 2 дней journalctl --vacuum-time 2d

🧱docker compose

  • поднять все сервисы в фоне docker compose up -d
  • пересобрать образы при старте docker compose up -d --build
  • остановить и удалить контейнеры/сети docker compose down
  • вместе с volume docker compose down -v
  • логи конкретного сервиса docker compose logs -f service
  • выполнить команду внутри сервиса docker compose exec service sh
  • список запущенных сервисов проекта docker compose ps
  • валидация compose-файла docker compose config

🛠️make / Makefile

  • запустить цель по умолчанию make
  • запустить конкретную цель make target
  • показать команды без выполнения make -n target
  • параллельная сборка make -j4
  • игнорировать ошибки в целях make -i
  • список целей (если объявлен .PHONY) grep -E '^[a-zA-Z_-]+:' Makefile

🐍python — venv / pip

  • создать виртуальное окружение python3 -m venv .venv
  • активировать source .venv/bin/activate
  • деактивировать deactivate
  • установить зависимости pip install -r requirements.txt
  • зафиксировать версии pip freeze > requirements.txt
  • установить без кэша pip install --no-cache-dir package
  • поднять локальный HTTP-сервер python3 -m http.server 8000

📦npm / yarn / pnpm

  • установить зависимости из lock-файла npm ci
  • добавить пакет в зависимости npm install package --save
  • запустить скрипт из package.json npm run script
  • список устаревших пакетов npm outdated
  • аудит уязвимостей npm audit
  • аналог на yarn yarn install --frozen-lockfile
  • аналог на pnpm pnpm install --frozen-lockfile

📡Передача файлов и сессии

  • rsync в архивном режиме rsync -a src dst
  • со сжатием и прогрессом rsync -zvhP src dst
  • через нестандартный SSH-порт rsync -e 'ssh -p 2222' --info=progress2 host:src dst
  • копия на удалённый хост scp file host:path
  • копия через jump-host scp -J jump_user@jump_host file target:path
  • подключение с ключом ssh user@host -i key
  • SOCKS-прокси через SSH ssh user@host -D 1080
  • проброс порта ssh user@host -L 9999:example.org:80 -N -T
  • через jump-host ssh user@host -J jump_user@jump_host
  • архив с gzip tar czf out.tar.gz dir
  • распаковать tar xvf archive.tar
  • новая именованная tmux-сессия tmux new -s name
  • список / подключение к сессии tmux ls / tmux attach
  • повтор команды каждые N секунд watch -n 60 command