Table of Contents

Сніпети

На цій сторінці зібрано скрипти та конфігураційні приклади, які не підходять для окремих статей. Деякі з них — це твіки або однорядкові HOWTO, інші — просто цікаві речі для запуску.

Система

Створити навантаження на CPU на 100%

Є багато причин створити навантаження на CPU, одна з менш серйозних — гратися з тригером heartbeat:

cat /dev/urandom | gzip > /dev/null

Примітка: Цей скрипт стискає нескінченний потік випадкових бітів і відкидає результат. Рівень стиснення змінити не можна, тому можливо доведеться запустити кілька екземплярів скрипта для підвищення середнього навантаження.

Показати команду з параметрами запущеного процесу

Зазвичай для цього використовують команди top або ps, але версія з BusyBox може обрізати довгі команди, щоб вмістити їх у ширину термінала.

ps w

або

cat /proc/<PID>/cmdline

Примітка: Замініть <PID> на ідентифікатор процесу.

Промпт

Кольори

Редагуйте змінну PS1 у файлі /etc/profile:

export PS1='\[\e[1;31m\]\u@\h:\w\$ \[\e[0m\]'

Це дає червоний промпт (корисно для root-користувача). Інші користувачі можуть мати, наприклад, зелений. Докладніше — тут.

Сесія Screen

Корисно показувати назву сесії screen, якщо ви в ній. Порада: додайте кольорів. Приклад для сесії pts-0:

local SCREEN_SESSION_NAME=$(screen -ls | sed -n 's|[^a-z]*[0-9][0-9]*\.\([a-zA-Z][a-zA-Z0-9-]*\).*Attached.*|/\1|p')
export PS1="\u@\h${SCREEN_SESSION_NAME}:\w\\$ "

Червоне тло, якщо попередня команда завершилась з помилкою

export PS1="\$([ \$? -ne 0 ] && echo \\\[\\\e[41m\\\])\u@\h:\w\\$\[\e[0m\] "

Надіслати файл у веб через CLI

cat /etc/config/some.conf | nc paste.dyndns.org 1234

Отримати статус моста

devstatus br-lan
cat /sbin/devstatus
#!/bin/sh
. /usr/share/libubox/jshn.sh
DEVICE="$1"
 
[ -n "$DEVICE" ] || {
	echo "Usage: $0 <device>"
	exit 1
}
 
json_init
json_add_string name "$DEVICE"
ubus call network.device status "$(json_dump)"

Як видно, використовується бібліотека jshn.

Бездротова мережа

Кнопка перемикання WiFi

[ -s /var/state/wireless ] && wifi down || wifi up

Розблокування всіх WiFi-регіонів для Atheros

Пакунки

Створити локальну копію пакунків

Якщо ви використовуєте trunk, корисно мати локальну копію пакунків, бо нові версії можуть порушити сумісність з ядром:

wget -r -np http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/

Архітектура — ar71xx. Знадобиться ~300 MB вільного місця.

Еліптичні криві в OpenSSH

ECC добре підходить для пристроїв із низькою продуктивністю. Наприклад, ключ RSA на 15360 біт потребує 9.1 с для входу, а ECDSA на 521 біт — лише 1.7 с. Різниця менш помітна при коротших ключах. Для використання:

  1. скомпілюйте libopenssl без опції NO-EC
  2. зберіть openssh-server і openssh-keygen із цією бібліотекою
  3. ssh-keygen -t ecdsa -b 521

Повторне встановлення пакунків після оновлення прошивки

Якщо зберегти список пакунків перед оновленням, можна швидко встановити все назад за допомогою скрипта з цієї теми.

USB

Тест продуктивності накопичувача

Спочатку встановіть hdparm. Потім знайдіть пристрій, зазвичай це /dev/sda1 або подібне:

opkg update && opkg install hdparm
hdparm -t /dev/sda1

Див. також Бенчмарки USB і Продуктивність файлових систем.

LED

LED для активності IPv6

Миготіння при активності у тунелі Hurricane Electric 6in4. Приклад із файлу /etc/config/system:

config 'led' '6in4_led'
        option 'name' '6in4'
        option 'sysfs' 'tl-wr1043nd:green:qss'
        option 'trigger' 'netdev'
        option 'mode' 'link tx rx'
        option 'dev' '6in4-wan6'

Примітка: детальна конфігурація — тут.

Налаштування банера

Усі зміни виконуються в /etc/profile. Скрипти додаються після cat /etc/banner.

Показати активні сесії screen

Для користувачів screen. Приклад виводу:

3 Screen sessions: pts-0, snort, iperf

Скрипт:

local screenlabel=$(screen -ls | sed -n 's|^\([0-9][0-9]*\) Socket.*| \1 Screen sessions: |p')
screen -ls | sed -n 's|[^a-z]*[0-9][0-9]*\.\([a-zA-Z][a-zA-Z0-9-]*\).*|\1|p' | sed -e "s|^|${screenlabel}|" -e :a -e N -e 's|\n|, |' -e ta

Примітка: змінна screenlabel містить кількість сесій і текст. Якщо це не потрібно, можна спростити.

Показати доступну ентропію

Менш корисний скрипт, але все ж:

Entropy: 143/4096
echo " Entropy:" $(cat /proc/sys/kernel/random/entropy_avail)/$(cat /proc/sys/kernel/random/poolsize)