date: форматирование времени в bash

date в скриптах обычно используют только для метки времени в логах — date +%F и забыли. На деле команда умеет парсить произвольные даты, считать разницу между ними и выводить в любом формате без внешних утилит. date +"%Y-%m-%d %H:%M:%S" — свой формат вывода вместо дефолтного date -d "2 days ago" — относительные даты на человеческом языке (GNU date) date -d "@1720000000" — конвертировать unix-timestamp в читаемую дату date +%s — обратно, текущее время в unix-timestamp, удобно для арифметики date -d "2026-07-13 + 1 month" — арифметика над датами без ручного подсчёта дней в месяце #bash #linux ...

July 13, 2026 · llexa

Vim с нуля #6: сессии, метки и регистры

Открывать заново десяток файлов и панелей после каждого перезапуска vim — трата времени. Сессии, метки и регистры решают это по-разному: одна команда сохраняет весь layout, другая мгновенно прыгает к нужной строке, третья хранит текст между операциями копирования. :mksession! ~/.vim/session.vim — сохранить открытые окна, вкладки и позицию курсора; vim -S ~/.vim/session.vim — восстановить один в один ma — поставить метку a на текущей строке, `a — прыгнуть к ней (метки A-Z работают между файлами) "ayy — скопировать строку в именованный регистр a, "ap — вставить из него, не перезаписывая обычный буфер :reg — посмотреть содержимое всех регистров сразу #vim #linux ...

July 13, 2026 · llexa

fc: редактирование и повтор команд из истории bash

fc (fix command) — встроенная команда bash для просмотра, редактирования и повторного выполнения команд из истории. Менее известна, чем !! или стрелка вверх, но решает то, что им не под силу. Без аргументов fc открывает последнюю команду в $FCEDIT (или $EDITOR), даёт поправить и сразу выполняет отредактированный вариант — удобно, когда опечатка не в конце команды, а где-то в середине длинной строки. Основные варианты: fc -l — список последних 16 команд с номерами fc -l -20 — последние 20 команд fc 15 20 — открыть диапазон команд 15–20 в редакторе одним блоком fc -s old=new — быстрая замена подстроки в последней команде и повтор, без редактора fc -s — просто повторить последнюю команду #bash #linux ...

July 12, 2026 · llexa

Две кнопки sysadmin'а

Знакомый выбор в пятницу вечером. #linux #sysadmin #юмор

July 12, 2026 · llexa

dd: образ диска и тест скорости

dd копирует байты блоками напрямую, минуя файловую систему — поэтому им снимают образы дисков побайтово и меряют реальную скорость I/O в обход кэша. Снять образ диска целиком: dd if=/dev/sda of=/mnt/backup/sda.img bs=4M status=progress Восстановить из образа: dd if=/mnt/backup/sda.img of=/dev/sda bs=4M status=progress Тест скорости записи в обход page cache: dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct status=progress Размер блока (bs) сильно влияет на результат — мелкий блок вроде 512 занижает скорость, 4M ближе к реальной пропускной способности диска. Тестовый файл после проверки не забыть удалить. #linux #disks ...

July 11, 2026 · llexa

nohup, disown, setsid: процесс без терминала

Закрыл SSH-сессию — и долгий процесс упал вместе с ней, получив SIGHUP. nohup, disown и setsid решают эту проблему по-разному: один игнорирует сигнал заранее, другой отвязывает уже запущенный процесс от shell, третий сразу создаёт для процесса отдельную сессию. Заранее защитить процесс от SIGHUP: nohup ./long-task.sh & Если процесс уже запущен в фоне текущего шелла: disown -h %1 Полная изоляция — без управляющего терминала с самого начала: setsid ./long-task.sh < /dev/null &> /tmp/task.log & setsid создаёт новую сессию, поэтому даже disown не нужен — процесс изначально не привязан к терминалу. Это то, что systemd и tmux используют под капотом для демонизации. ...

July 11, 2026 · llexa

xxd, hexdump, base64: бинарная инспекция из терминала

Иногда файл нужно смотреть не как текст, а как последовательность байт — определить формат по сигнатуре, найти повреждение или передать бинарник туда, где ждут только текст. Первые байты файла — обычно там сигнатура формата: xxd -l 16 file.bin Канонический hex-дамп: hexdump -C file.bin | head Бинарный файл текстом — например, для JSON или email-вложения: base64 -w0 file.bin > file.b64 base64 -d file.b64 > file.bin xxd дополнительно умеет обратное преобразование (xxd -r) — удобно поправить пару байт прямо в hex-дампе и собрать файл обратно. ...

July 11, 2026 · llexa

borg: дедупликация вместо голого tar

tar + cron работает, но каждый полный бэкап занимает столько же места, сколько предыдущий, а инкременты вручную собирать неудобно. borg дедуплицирует контент на уровне блоков — повторяющиеся куски между снапшотами не хранятся дважды, при этом каждый снапшот выглядит как полный. apt install borgbackup borg init --encryption=repokey /mnt/backup/repo borg create /mnt/backup/repo::'{hostname}-{now}' /etc /var/www /home borg list /mnt/backup/repo borg extract /mnt/backup/repo::myhost-2026-07-10T09:00:00 borg prune --keep-daily=7 --keep-weekly=4 /mnt/backup/repo Ключ шифрования (repokey) хранится внутри репозитория — держи отдельную копию passphrase, без неё восстановление невозможно. ...

July 10, 2026 · llexa

nethogs: кто жрёт канал прямо сейчас

iftop и nload показывают трафик по соединениям и интерфейсам, но не отвечают на вопрос “какой процесс это жрёт”. nethogs группирует трафик именно по PID — сразу видно виновника, без ручного сопоставления портов через ss. apt install nethogs # по умолчанию слушает все интерфейсы sudo nethogs # конкретный интерфейс sudo nethogs eth0 # несколько интерфейсов sudo nethogs eth0 wg0 Горячие клавиши внутри интерфейса: m — переключить единицы (KB/s ↔ MB/s) s — сортировка по отправленному r — сортировка по принятому q — выход Требует root (или CAP_NET_ADMIN) — читает трафик напрямую с интерфейса. ...

July 10, 2026 · llexa

sqlite3: работа с базой из терминала

SQLite часто прячется внутри других инструментов (та же tmux-workbench из недавней серии хранила индекс сессий в SQLite-файле). Открыть такую базу и посмотреть, что внутри, можно прямо из терминала — без GUI-клиентов вроде DB Browser. sqlite3 app.db .tables -- список таблиц .schema sessions -- структура конкретной таблицы .headers on -- показывать заголовки колонок .mode column -- вывод в столбик, а не через | SELECT * FROM sessions LIMIT 5; .dump > backup.sql -- полный дамп базы в SQL .import data.csv table -- импорт CSV в существующую таблицу .quit Файл базы — это просто файл на диске: cp app.db app.db.bak — тоже валидный бэкап, если в момент копирования нет активных транзакций. ...

July 10, 2026 · llexa