Всякие системные и просто нужные компьютерные фичи. Настройка софта, иногда восстановление железа, и прочее, что входит в сферы интересов от эникейшика до «full stack admin’а». В придачу — симулятор системного администратора.
Сегодня последняя пятница июля, значит... — сегодня ТОТ САМЫЙ ДЕНЬ!!! Хочу поздравить всех системных администраторов по профессии и по призванию с их профессиональным и заслуженным праздником!
Желаю профессиональных свершений, космического терпения, недюжего юмора, стабильного высокоскоростного доступа в интернет, чтобы в жизни не было сбоев, вирусов и багов. Ваш нелёгкий труд требует достаточно знаний и опыта.
Пускай мониторы приветливо светятся, вирусы и ошибки лечатся, вопросы легко решаются.
Здоровья вам и побольше сил, чтобы каждый из вас легко любого «трояна» победил.
После переезда моего сайта на VDS’ку шум раздолбанного вентилятора Asus EEE PC 710 перестал меня беспокоить, но теперь периодически вываливается screen-сессия, в которой крутится демон опроса и наполнения БД новостей TTRSS (чаще всего демон отваливался с ошибкой 12 «недостаточно памяти», но иногда и сам процесс скрина отъезжал).
Показать
Для повторного запуска я сначала стартовал сам скрин
screen -S reader
нажимал Enter и уже в нём запускал демона:
php <путь к скрипту демона>/update_daemon2.php
Теперь, если я вижу, что сессия скрина пропала, то стартую её заново и в ней автоматом запускаю демона:
screen -dmS reader sh && screen -S reader -X stuff "php <путь к скрипту демона>/update_daemon2.php^M"
Осталось написать демона, который будет контролировать работу запущенного демона.
Для получения списка устройств, работающих в моей домашней сети (получивших IP от моего DHCP-сервера на своём сетевом интерфейсе), я использую самописный скрипт (смесь PHP и BASH’а). Он отрабатывает около 10 секунд, за это время сканируется сеть для выявления ответивших MAC’ов.
Концепцию можно улучшить, например, переписать его полностью на BASH’е и по cron’у вызывать, допустим, раз в пять минут, пусть он пишет MAC’и наличных сетевых устройств в файл/базу, а WEB-скрипт просто читает оттуда актуальные данные при открытии страницы.
Показать
<?php
// задаю необходимые переменные
$home_iface='eth0'; // интерфейс, посредством которого система включена в домашнюю сеть
$lan='192.168.120.0/24'; // определитель домашней сети (или её гостевого сегмента)
$temp_file='/tmp/dev.tmp'; // путь к временному файлу
// функция анализа и вывода MAC'а на странице
function DrawDevice() { ... }
// получаю MAC интерфейса $home_iface
$home_mac=exec("sudo ifconfig {$home_iface} | grep 'HWaddr' | awk '{print $5}'");
// отображаю его на странице
DrawDevice(trim($home_mac));
// удаляю временный файл, если он есть
if(file_exists($temp_file))exec("rm -f {$temp_file}");
// сканирую сетевой диапазон $lan
exec("fping {$lan} -age -r 1 >/dev/null 2>/dev/null");
// вычленяю устройства с ответившими MAC'амм
// и записываю во временный файл,
// можно писать в базу данных для получения динамики
exec("ip n | grep 'lladdr' | awk '{print $5}' > {$temp_file}",$h);
// получаю список ответивших MAC'ов из временного файла
$h=file_get_contents($temp_file);
// и удаляю его
if(file_exists($temp_file))exec("rm -f {$temp_file}");
$mac=array();
// убираю из списка символы новой строки
$mac=explode("\n",$h);
// в цикле вывожу MAC'и
foreach($mac as$host){DrawDevice($host);}
?>
Требования:
1. в системе должен быть установлен пакет fping (или любой другой с аналогичной функциональностью, например nmap);
2. пользователь, от которого запущен WEB-сервер, обычно www-data, можно проверить командой
должен иметь возможность выполнения команды ifconfig от имени суперпользователя (sudo ifconfig) или запускать эту утилиту непостредственно по пути её расположения, обычно /sbin/ifconfig, можно проверить командой
Моя жена меня приятно удивила. Она теперь знает в IT больше меня! Конечно, не во всех сферах, в определённой, а именно — в IPv6. Вчера она зарегалась на сайте Hurricane Electric, где есть определённая система ранжирования — сначала Newbie, затем (при условии захода на их сайт с помощью туннельного брокера) — Enthusiast, затем — Explorer, и т. д.
Сейчас у неё статус «энтузиаст», надеюсь, что скоро станет «эксплорером», для этого надо написать им письмо с почтовика, выходящего в инет только по IPv6 через этого туннельного брокера.
BASH (bourne again shell) — командная среда, используемая по умолчанию во многих современных Linux-дистрибутивах. Если используется ОС из семейства Linux, то, скорее всего, используется и bash. Ниже приведены команды, опции настройки и разные трюки, придающие пользователю терминала более комфортную среду для работы (в BASH).
Показать
Настройка автодополнения и поиска в ~/.inputrc
Для одинарного нажатия Tab при автодополнении в ~/.inputrc (или в /etc/inputrc для всех пользователей)
set show-all-if-ambiguous On
Вывод по клавишам ↑ и ↓ из истории только тех команд, которые начинаются с уже набранных букв
Список исключений — через двоеточие, можно использовать шаблоны.
Эвристическое исправление ошибок а именах директорий
shopt -s cdspell
Звуковой сигнал при запуске оболочки
export PROMPT_COMMAND="echo -ne '\a'"
можно использовать по разнному, например — включить мигание окна KiTTY.
Для того, чтобы не разрывать многострочные команды, используется
shopt -s cmdhist
Если вписать
export HISTTIMEFORMAT='%d %h %Y %H:%M:%S '
то в истории будут записаны дата и время выполнения команды.
Использование регистронезависимых масок файлов
shopt -s nocaseglob
Тогда, к примеру
ls *.jpg
выведет не только *.jpg, но и *.JPG.
Хитрости BASH
Возврат в предыдущую директорию
cd -
При нажатии ESC и сразу за этим . (в терминологии *nix — Meta.) в строку подставится последний использованный объект. Например, если первой строкой набрано
ls /home/smbdy/logs
во второй наберите
rm ESC .
получите
rm /home/smbdy/logs
Реализация ввода пользовательского пароля с проверкой:
переименует ’file-with-long-name-typed-with-tab-completion.txt’ в файл с именем ’old-file-with-long-name-typed-with-tab-completion.txt’.
Функция быстрого переименования расширений
renamer() {
local fn
for fn in *."$1"; do
mv "$fn" "${fn%.*}"."$2"
done
}
Пример: renamer doc txt — переименует все доки в txt’шники в текущем каталоге.
Если определить функцию command_not_found_handle (), то можно обрабатывать ситуацию «команда не найдена». До выдачи сообщения о не обнаруженной команде bash поместит в $1 введенную строку и выполнит код этой функции. При этом, если функция возвращает код завершения 127, то сообщение о ненайденной команде будет выведено на экран.
Для добавления алиаса с автоприменением определяем новый алиас в ~/.bash_aliases
alias editalias=’edit ~/.bash_aliases && source ~/.bash_aliases’
Имейте в виду, что для работы алиасов из этого файла он должен быть явно включён в вашем ~/.bashrc:
Иногда требуется записать все, что вы вводите в терминале, для того чтобы самому запомнить, что и как делали или передать кому-то другому для анализа или обучения, или просто записать терминальную сессию вместо записи видео с захватом экрана. Все привыкли пользоватся скриншотами и записью видео с экрана. Есть даже мануалы, как делать скрины в голой консоли.
Однако существует интересный способ, как делать «видеозапись команд» в консоли без лишних телодвижений (я не говорю обо всяких доставляемых ttyrec, termrec & ipbt). Выполните в терминале, к примеру, следующие команды:
Показать
script -t 2> timing -a ttyoutput
pwd
cd /
pwd
cd -
pwd
exit
После команды exit запись с терминала прервётся и с помощью команды
scriptreplay timing ttyoutput
можно воспроизвести записанные действия и ответы системы. Для выхода можно использовать комбинацию клавиш Ctrl + D в обычном шеле или набрать exit или logout в csh (если переменная ignoreeof не задана — то Ctrl + D тоже сработает).
Для вывода списка вводимых команд без проигрывания всех действий с установленными временными интервалами достаточно ввести команду
awk '/@/' ttyoutput
А чтобы получить полный список вводимых команд и ответы интерпретатора:
awk '/./' ttyoutput
Можно даже интерактивно передавать вводмые команды, например — с помощью ключа
‒f (‒‒flush)
один пользователь вводит команды в терминал
mkfifo ttyoutput2; script -f ttyoutput2
другой — наблюдает за операциями в реальном времени с помощью
cat ttyoutput2
Сетевой обмен между удалёнными машинами можно организовать с помощью утилиты netcat.
P. S. Команды script и scriptreplay входят в пакет util-linux, поставляемый вместе с операционной системой (по крайней мере в Linux, хотя впервые утилита script появилась в системе 3.0BSD), поэтому они доступны сразу после установки системы.
P. P. S. Альтернативы — уже упоминавшиеся termrec, ipbt, ttyrec/ttyplay — имеет сходный функционал, есть утилита ttycast, осуществляющая широковещательную передачу команд терминального сеанса в реальном времени.
Также существуют такие утилиты: TermRecord@github — пишет в html и воспроизводит в браузере.
Для тестовых задач создал две виртуалки в Виртуалбоксе — сервер и клиент. Обе виртуалки ставил с образа диска Debian 9.3.0 Netinst CD с архитектурой amd64). Виртуальная машина ’server’ выступает в роли DHCP-, DNS- и прокси-сервера, а также шлюза для машины ’client’. Выкладываю тут последовательность действий, чтобы потом не забыть и использовать в дальнейшем. Действия рутинные, доступны в любом мануале, но для быстроты воспроизведения собрал их здесь вместе.
Делаю автовход в любой консоли (по аналогии с сервером), для этого прописываю автологинящегося пользователя в файле /lib/systemd/system/getty@.service:
ExecStart=-/sbin/agetty --noclear -a <юзер> %I $TERM
Устроил для блога ревизию — все длинные статьи спрятал под спойлер, ведь ката в Эгее нет в принципе, разработчик объяснил причину этого в своей статье.
Реализацию спойлера подсмотрел у других, у себя реализовал следующим образом:
Показать
В файле /user/extras/header-pre.tmpl.php прописал следующие строки:
hljs.tabReplace нужен для того, чтобы табуляции в коде заменялись на пробелы. highlight.js сам определяет на каком языке написан код, но можно явно указывать язык, добавляя class к тегу pre.
Оказывается, есть специальный RFC5737, описывающий 3 блока IP-адресов, зарезервиорованных для примеров, использования в описаниях спецификаций и в документации. Эти блоки суть 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2), 203.0.113.0/24 (TEST-NET-3).
Так же указывается, что раньше для этого использовался блок 128.66.0.0/16, однако, в виду того, что он не упомянут в списке богонов в RFC3330 — его можно использовать как обычно, но с определённой осторожностью.
Права народная мудрость: Век живи — век учись (а дураком помрёшь)
Список из нескольких десятков утилит командной строки. Некоторые из них малоизвестны, некоторые весьма полезны, с некоторыми пока непонятно... Установка большинства из них производится штатным диспетчером пакетов вашей ОС.
Идея (и список) взята мной отсюда, творчески переработана, сгенерены новые скриншоты, переведено (с вариациями) на русский. Утилиты ставил на Debian 9 в Virtualbox’е (скрин).
Показать
dstat & sar
htop, atop & glances
iostat, vmstat, ifstat и мрого чего ещё в одном
Мониторинг процессов, памяти и ввода/вывода
slurm
ttyrec & ipbt
Визуализирует трафик сетевого интерфейса во времени
Запись и проигрывание терминальных сеансов
vim & emacs
rsync
Редакторы настоящих программеров
Синхронизация файлов и ФС через SSH
screen, dtach, tmux, byobu
mtr
Пусть ваши терминальные сессии остаются живы
Трассировка маршрута 2.0
multitail
socat & netpipes
Просмотр нескольких файлов журналов в одном окне
Простое перенаправление всего в/из сокетов
tpp
iftop, iptraf & nethogs
Просмотр презентаций PowerPoint в терминале
Анализаторы сетевого трафика
xargs & parallel
siege & tsung
Планирование и выполнение задач с консольного ввода
Консольные инструменты для нагрузочного тестирования
duplicity & rsyncrypto
ledger
Инструменты шифрованного резервного копирования
Бухгалтерия в терминале
nethack & slash’em
taskwarrior
Пока что самые сложные игры на планете
Консольный todo
lftp
curl
Есть FTPS. Может зеркалить, типа как rsync
Любимый всеми HTTP-инструмент
ack, ag (silver searcher), pt
rtorrent & aria2
Лучшие grep’ы для исходников
Торрентокачалки для командной строки
calcurse & remind + wyrd
ttytter & earthquake
Системы календарей
Модные клиенты модного Твитера
У меня нет (и никогда не будет) аккаунта в Твитере, поэтому картина не информативна. I do not have (and never will be) account on Twitter, so the picture is not informative.