Skip to content

asimba/uselets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

Короткие полезности.



Работа с сетью.


Запуск простого ("одноразового") web-сервера для текущей директории.

Требования (зависимости): python

  • python 2.x: python -m SimpleHTTPServer 9000
  • python 3.x: python -m http.server 9000 или python -m http.server --bind <локальный IP адрес привязки> 9000

Примечание: в качестве параметра указывается номер открываемого порта; полезно, когда требуется передать файлы по сети без дополнительных настроек и сервисов.

Перенаправление IPv4 TCP портов в Windows 10.

  • перенаправление: netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
    - где localaddress - локальный IP адрес, localport - локальный порт, destaddress - удалённый (целевой) IP адрес, destport - удалённый (целевой) порт;
  • просмотр правил перенаправления: netsh interface portproxy show all
  • сброс всех правил перенаправления: netsh interface portproxy reset
  • выборочное удаление правил перенаправления: netsh interface portproxy delete v4tov4 listenport=localport listenaddress=localaddress
    - где localaddress - локальный IP адрес, localport - локальный порт;

Примечания: все команды должны выполняться с правами администратора; брандмауэр Windows должен быть выключен или в него должны быть добавлены соответствующие разрешающие правила; хотя правила перенаправления и сохраняются после перезагрузки, но для их работы после перезагрузки иногда требуется перезапуск службы iphlpsvc ("Вспомогательная служба IP") или выполнение сценария со сбросом и повторным внесением правил (к примеру, это можно сделать через штатный планировщик заданий).

Конфигурация bond-интерфейса без поддержки со стороны коммутатора (Linux) (пример).

Конфигурация

source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto bond0
iface bond0 inet manual
    slaves eno1 eno2
    bond-mode balance-alb
    bond-miimon 100
    bond-downdelay 200
    bond-updelay 200
auto xenbr0
iface xenbr0 inet static
        address 192.168.1.8/24
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1 8.8.8.8 8.8.4.4 77.88.8.8 77.88.8.1 1.1.1.1
        bridge_ports bond0
        bridge_stp off
        bridge_waitport 0
        bridge_fd 0

Примечание: настройка для использования в режиме моста с гипервизором Xen; файл "/etc/network/interfaces".

Команды OpenVPN, которые стоит помнить (см. man) (Linux).

  • инициализация (генерация ключей)
easyrsa init-pki
easyrsa gen-dh
easyrsa build-ca nopass
easyrsa gen-req <имя_сервера> nopass
easyrsa sign-req server <имя_сервера>
openvpn --genkey --secret ta.key
  • генерация файла отозванных ключей (по умолчанию данную процедуру требуется повторять раз в 180 дней)
easyrsa gen-crl
  • генерация файла отозванных ключей (вариант для старых версий)
source ./vars
openssl ca -gencrl -keyfile keys/ca.key -cert keys/ca.crt -out keys/crl.pem -config ./openssl.cnf
  • добавление пользователя
easyrsa gen-req <имя_конфигурации_пользователя> nopass
easyrsa sign-req client <имя_конфигурации_пользователя>
  • отзыв сертификата пользователя
easyrsa revoke <имя_конфигурации_пользователя>
easyrsa gen-crl
  • отзыв сертификата пользователя (вариант для старых версий)
source ./vars
./revoke-full <имя_конфигурации_пользователя>
  • для временного игнорирования просроченных пользовательских сертификатов в среде Linux можно использовать связку из утилиты faketime и запуска openvpn через сценарий rc.local
    Пример: /usr/bin/faketime '2020-12-12 12:12:12' /etc/init.d/openvpn start

Пример (шаблон) конфигурации OpenVPN сервера (Linux).

Конфигурация

ignore-unknown-option ncp-ciphers
port 10788
proto tcp
#multihome
#local 192.168.1.1
dev tun
user nobody
group nogroup
ifconfig-pool-persist ipp-tcp.txt
server 10.8.3.0 255.255.255.0
#маршрутизация с другим VPN сервером на этом же хосте
push "route 10.8.2.0 255.255.255.0"
topology subnet
max-clients 2000
ping 10
ping-restart 80
push "ping 10"
push "ping-restart 60"
persist-tun
persist-key
cipher AES-128-CBC
ncp-ciphers AES-128-GCM:AES-128-CBC
auth SHA1
status-version 2
script-security 2
sndbuf 393216
rcvbuf 393216
reneg-sec 2592000
hash-size 1024 1024
max-routes-per-client 1000
verb 2
mute 3
client-to-client
replay-window 128
comp-lzo no
push "comp-lzo no"
status      /var/log/openvpn/openvpn-tcp-status.log
log         /var/log/openvpn/openvpn-tcp.log
log-append  /var/log/openvpn/openvpn-tcp.log
crl-verify /etc/openvpn/keys/crl.pem
<ca>
-----BEGIN CERTIFICATE-----
# ключ (ca)
-----END CERTIFICATE-----
</ca>
key-direction 0
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# ключ (ta)
-----END OpenVPN Static key V1-----
</tls-auth>
<cert>
-----BEGIN CERTIFICATE-----
# ключ (cert)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
# ключ (key)
-----END PRIVATE KEY-----
</key>
<dh>
-----BEGIN DH PARAMETERS-----
# ключ (dh)
-----END DH PARAMETERS-----
</dh>

Пример (шаблон) конфигурации OpenVPN клиента (conf/ovpn).

Конфигурация

client
dev tun
dev-type tun
remote 192.168.1.1 10788 tcp
nobind
persist-tun
cipher AES-128-CBC
auth SHA1
verb 2
mute 3
push-peer-info
ping 10
ping-restart 60
hand-window 70
server-poll-timeout 4
reneg-sec 2592000
sndbuf 393216
rcvbuf 393216
max-routes 1000
remote-cert-tls server
comp-lzo no
key-direction 1
<ca>
# ключ (ca)
</ca>
<tls-auth>
# ключ (ta)
</tls-auth>
<cert>
# ключ (cert)
</cert>
<key>
# клиентский ключ (key)
</key>

Пример (шаблон) конфигурации сервиса stunnel 4 для использования в связке с OpenVPN (Linux).

Конфигурация

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid    = /stunnel4.pid
output = /stunnel.log
debug  = info
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
[openvpn]
accept     = 443
connect    = 1194
CApath     = certs
CRLpath    = crls
cert       = /etc/stunnel/servercert.pem
key        = /etc/stunnel/serverkey.pem
verify     = 3
verifyPeer = yes
options    = NO_SSLv2
options    = NO_SSLv3
;перенаправление соединения в случае ошибки "рукопожатия"
redirect   = <имя_сервера_для_перенаправления>:80

Пример (шаблон) конфигурации клиентского сервиса stunnel 4 для использования в связке с OpenVPN (Linux).

Конфигурация

debug   = info
output  = /var/log/stunnel4/stunnel.log
pid     = /var/run/stunnel4.pid

[vpn] client = yes accept = 127.0.0.1:1194 connect = <имя_сервера_stunnel_openvpn>:443 options = -NO_SSLv3 cert = /etc/stunnel/clientcert.pem key = /etc/stunnel/clientkey.pem CAfile = /etc/stunnel/servercert.pem verify = 3 verifyPeer = yes

Команды для использования совместно со stunnel 4, которые стоит помнить (см. man) (Linux).

  • генерация серверных ключей
    openssl req -nodes -new -days 3650 -newkey rsa:1024 -x509 -keyout serverkey.pem -out servercert.pem
  • генерация клиентских ключей (аналогично серверным)
    openssl req -nodes -new -days 3650 -newkey rsa:1024 -x509 -keyout clientkey.pem -out clientcert.pem
  • создание хэш-ссылок на клиентские ключи
    Код
    
    #!/bin/sh
    #
    # usage: certlink.sh filename [filename ...]
    for CERTFILE in "$@"; do
      # Убедиться, что файл существует и это сертификат
      test -f "$CERTFILE" || continue
      HASH=$(openssl x509 -noout -hash -in "$CERTFILE")
      test -n "$HASH" || continue
      # использовать для ссылки наименьший итератор
      for ITER in 0 1 2 3 4 5 6 7 8 9; do
        test -f "${HASH}.${ITER}" && continue
        ln -s "$CERTFILE" "${HASH}.${ITER}"
        test -L "${HASH}.${ITER}" && break
      done
    done
    

Вариант сценария добавления пользователя Samba 3 (smbuseradd) (Linux).

Код

#!/bin/bash
if test $1
then
  useradd -M -s /sbin/nologin -p xxxxxxxx -g sambausers -d /mnt/storage/local.hive/exchange $1
  rm -f /opt/chroot.samba/etc/passwd ; ln /etc/passwd /opt/chroot.samba/etc/passwd
  rm -f /opt/chroot.samba/etc/shadow ; ln /etc/shadow /opt/chroot.samba/etc/shadow
  rm -f /opt/chroot.samba/etc/group ; ln /etc/group /opt/chroot.samba/etc/group
  rm -f /opt/chroot.samba/etc/gshadow ; ln /etc/gshadow /opt/chroot.samba/etc/gshadow
  echo $1:$2 | chpasswd
  chroot /opt/chroot.samba /usr/local/bin/smbuseradd $1 $2
  xfs_quota -x -c "limit -u bsoft=64G bhard=64G $1" /mnt/storage
fi
Код

#!/bin/bash
#Код сценария /opt/chroot.samba/usr/local/bin/smbuseradd
if test $1
then
  (echo $2; echo $2) | smbpasswd -s -a $1
  smbpasswd -e $1
  echo $1 = $1 >> /etc/samba/smbusers
  mkdir -m 0757 /mnt/storage/local.hive/exchange/$1
  chown $1.sambausers /mnt/storage/local.hive/exchange/$1
  /etc/init.d/samba restart
fi

Примечание: используется chroot и квоты xfs, аутентификация только по имени пользователя.

Вариант сценария смены пароля пользователя Samba 3 (smbpass) (Linux).

Код

#!/bin/bash
if test $1
then
  echo $1:$2 | chpasswd
  chroot /opt/chroot.samba /usr/local/bin/smbpass $1 $2
fi

Вариант описания сервиса systemd для запуска Samba 3 из chroot окружения (Linux).

Код

[Unit]
  Description=chroot()ed Samba
[Service]
  Type=forking
  RootDirectory=/opt/chroot.samba
  ExecStart=/etc/init.d/samba start
  ExecReload=/etc/init.d/samba restart
  ExecStop=/etc/init.d/samba stop
[Install]
  WantedBy=multi-user.target

Вариант простой конфигурации Samba 4 (Linux).

Конфигурация

[global]
   workgroup = SPB
   netbios name = BackupSrv
   server string = BackupSrv
   dns proxy = no
   hosts allow = 192.168.10. 127.
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   ldap ssl = No
   security = user
   passdb backend = smbpasswd
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   invalid users = root
   guest account = nobody
   map to guest = bad user
   dos charset = 866
   unix charset = utf8
   unix extensions = no
   ntlm auth = yes
   username map = /etc/samba/user.map
[backup]
   comment = Backup
   path = /mnt/share/backup
   valid users = @smbusers
   force group = smbusers
   guest ok = no
   guest only = no
   read only = no
   browseable = yes
   fake oplocks = no
   create mask = 0666
   directory mask = 0777

Пример дополнительной блокировки потенциально опасного содержимого в почтовом сервисе Exim (Linux).

Требования (зависимости): python, ripole, 7z, unace, unrar, сценарий checkx.py
Инструкция: в конфигурацию Exim требуется внести изменения нижеследующего вида (предварительно разместив сценарий в директории "/usr/local/bin")

Конфигурация

---------------------------------------------------------------------
#exim4.conf
---------------------------------------------------------------------
system_filter = /etc/exim4/exim.filter
...
acl_check_mime:
#  deny message = Potentially type mismatch. - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename bin \"$mime_filename\"}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .zip). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.zip$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename zip}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .gz). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.gz$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename gz}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .7z). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.7z$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename 7z}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .rar). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.rar$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename rar}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .ace). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.ace$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename ace}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .docx). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.docx$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename docx}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .doc). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.doc$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename doc}}}\
                             {\N(?i)stop\n\N}}
#  deny message = Potentially executable content (in .pdf). - blocked!
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.pdf$\N}}
       decode = default
       condition = ${if match{${run{/usr/local/bin/checkx.py \
                                    $mime_decoded_filename pdf}}}\
                             {\N(?i)stop\n\N}}
  warn message = X-SS-Suspicious-Flag: YES
       condition = ${if match{$mime_filename}{\N(?i)\.(bat|js|pif|cd|com|exe|lnk|reg|vbs|vbe|jse|msi|ocx|dll|sys|cab|hta|ace|gz|z|jar|xz|ps1|bz2|lzh|uue|001|zipx|arj|iso|appx|appxbundle|msix|msixbundle|ade|mde)$\N}}
---------------------------------------------------------------------
#exim.filter
---------------------------------------------------------------------
if $h_X-SS-Suspicious-Flag: contains "YES" then
  deliver suspicious@suspicious@<имя_сервера>
endif

Отключение/включение всех сетевых интерфейсов (Windows 10/11).

Требования (зависимости): Windows PowerShell
Get-NetAdapter|Disable-NetAdapter -Confirm:$false отключение сетевых интерфейсов
Get-NetAdapter|Enable-NetAdapter -Confirm:$false включение сетевых интерфейсов

Изменение профиля локальной сети (частная, общественная) (Windows 10).

Требования (зависимости): Windows PowerShell
Get-NetConnectionProfile используется для перечисления текущих профилей
Set-NetConnectionProfile -Name "<Название Вашей сети>" -NetworkCategory <Private|Public> используется для смены профиля

Принудительное использование proxy-сервера для всех программ (Windows 10/11).

Требования (зависимости): Windows PowerShell
netsh winhttp set proxy <proxy>:<port> используется для задания адреса proxy-сервера
netsh winhttp reset proxy используется для сброса адреса proxy-сервера

Синхронизация времени с удалённым сервером из командной строки (Windows).

net time \\<сервер> /set /y
Пример: net time \\192.168.0.1 /set /y

Блокирование доступа в интернет для всех программ, при сохранении доступа в локальную сеть (Windows).

Требования (зависимости): Windows Firewall, PowerShell
New-NetFirewallRule -DisplayName "block-internet" -Direction Outbound -RemoteAddress Internet -Action Block

Отправка почтового сообщения администратору системы при успешном входе в систему по протоколу SSH (Linux).

Инструкция: в директории "/etc/profile.d/" требуется разместить исполняемый файл сценария с инжеследующим содержанием:

Код

if [ -n "$SSH_CLIENT" ]; then
    TEXT="$(date): ssh login to ${USER}@$(hostname -f)"
    TEXT="$TEXT from $(echo $SSH_CLIENT|awk '{print $1}')"
    echo $TEXT|mail -s "ssh login (hive)" root
fi

Синхронизация содержимого локальной директории с директорией расположенной на удалённом сервере по протоколу SSH (Linux) (пример).

Требования (зависимости): rsync, предварительная генерация ключа "id_rsa" на принимающей стороне, обновление файла "authorized_keys" на отдающей стороне и файла "known_hosts" на принимающей стороне.

Код

#!/bin/bash
if [ -f /var/tmp/remote-dump ]; then
    echo "Still running..."
    exit 0
fi
touch /var/tmp/remote-dump
bpath=/etc/backup.keys
spath=/mnt/backup/system.images/
sshcm='ssh -Tx24 -i '$bpath'/id_rsa'
rsopt='-aHEAXxz4W --del --numeric-ids --stats -e '
rscmd='rsync '$rsopt"'"$sshcm"'"
[email protected]
eval $rscmd $bserv:$spath /mnt/backups/server.pool/
rm -f /var/tmp/remote-dump

Примечание: "bpath" - параметр указывает на путь к директории, в которой хранятся ключ и исполняемый скрипт; "spath" - параметр указывает на путь к исходной директории на удалённом сервере; "bserv" - IP-адрес удалённого сервера; "/mnt/backups/server.pool/" - локальная директория ("принимающая").

Разрешение доступа в сеть (NAT) в CentOS 7.

firewall-cmd --zone=public --add-masquerade --permanent

Разрешение доступа в сеть (NAT) с использованием iptables (Debian Linux).

Команды

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#ens33 - интерфейс локальной сети
iptables -A INPUT -i ens33 -j ACCEPT
iptables -A OUTPUT -o ens33 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
#ens32 - интерфейс внешней сети
iptables -A INPUT -i ens32 -j ACCEPT
iptables -A OUTPUT -o ens32 -j ACCEPT
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -i ens33 -o ens32 -j ACCEPT
iptables -A FORWARD -i ens32 -o ens33 -j REJECT
iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE

Работа с дисками/разделами/файловыми системами.


Команды LVM, которые стоит помнить (см. man) (Linux).

  • pvs , pvcreate , pvremove
  • vgs , vgcreate , vgremove
  • lvs , lvcreate , lvremove, lvextend
  • vgcfgbackup -f ./lvm-structure-%s.txt
  • vgcfgrestore -f ... {VG}

Создание архивированного образа файловой системы EXT3/EXT4, расположенной на томе LVM (Linux).

Требования (зависимости): xz-utils, dump

Код

#!/bin/bash
backup_path=./
vg_group=/dev/system
lvm_volume=host-root
lvremove -f $vg_group/$lvm_volume-snap
lvcreate -L4G -s -n $lvm_volume-snap $vg_group/$lvm_volume
fsck -yvf $vg_group/$lvm_volume-snap
dump -0uf $backup_path/$lvm_volume.dump $vg_group/$lvm_volume-snap
lvremove -f $vg_group/$lvm_volume-snap
xz -9 $backup_path/$lvm_volume.dump

Примечание: "backup_path" - директория для хранения архива, "vg_group" - группа томов, "lvm_volume" - наименование архивируемого тома. Восстановление осуществляется аналогичным образом при помощи комады "restore".

Создание архивированного образа тома LVM для последующего дифференциального резервирования (Linux).

Требования (зависимости): rdiff, lz4

Код

#!/bin/bash
backup_path=./system.images
vg_group=/dev/system
lvm_volume=srv1c-disk
if [ -f $backup_path/$lvm_volume ]; then
   cat  $backup_path/$lvm_volume | lz4 -z -1 -BD > $backup_path/$lvm_volume.before-`date +%Y-%m-%d`.lz4
   rm -f $backup_path/$lvm_volume
fi
if [ -f $backup_path/$lvm_volume.signature ]; then
   cat  $backup_path/$lvm_volume.signature | lz4 -z -1 -BD > $backup_path/$lvm_volume.before-`date +%Y-%m-%d`.signature.lz4
   rm -f $backup_path/$lvm_volume.signature
fi
lvremove -f $vg_group/$lvm_volume-snap
lvcreate -L16G -s -n $lvm_volume-snap $vg_group/$lvm_volume
dd if=$vg_group/$lvm_volume-snap of=$backup_path/$lvm_volume bs=64M
rdiff -b 262144 -I 67108864 -O 67108864 -- signature $backup_path/$lvm_volume $backup_path/$lvm_volume.signature
lvremove -f $vg_group/$lvm_volume-snap

Примечание: "backup_path" - директория для хранения архива, "vg_group" - группа томов, "lvm_volume" - наименование архивируемого тома. Способ подходит для разделов фиртуальных машин (параметры блоков "rdiff" подобраны для тома размером 256 GiB).

Создание дифференциальной резервной копии для архивированного образа тома LVM (см.выше) (Linux).

Требования (зависимости): rdiff, lz4

Код

#!/bin/bash
backup_path=./system.images
vg_group=/dev/system
lvm_volume=srv1c-disk
# удаление дельта файлов старше 60 дней
# find $backup_path -name "*.delta.*" -type f -mtime +60 -exec rm -f {} \;
lvremove -f $vg_group/$lvm_volume-snap
lvcreate -L16G -s -n $lvm_volume-snap $vg_group/$lvm_volume
rdiff -b 262144 -I 67108864 -O 67108864 -- delta $backup_path/$lvm_volume.signature $vg_group/$lvm_volume-snap - | lz4 -z -1 -BD > $backup_path/$lvm_volume.`date +%Y-%m-%d-%H:%M:%S`.delta.lz4
lvremove -f $vg_group/$lvm_volume-snap

Примечание: "backup_path" - директория для хранения архива, "vg_group" - группа томов, "lvm_volume" - наименование архивируемого тома. Способ подходит для разделов фиртуальных машин (параметры блоков "rdiff" подобраны для тома размером 256 GiB).

Восстановление дифференциальной резервной копии архивированного образа тома LVM (см.выше) (Linux).

Требования (зависимости): rdiff, lz4

Код

#!/bin/bash
backup_path=./system.images
lvm_volume=srv1c-disk
time_stamp=2019-10-02-14:50:18
lz4cat $backup_path/$lvm_volume.$time_stamp.delta.lz4 | rdiff -b 262144 -I 67108864 -O 67108864 -- patch $backup_path/$lvm_volume - $backup_path/$lvm_volume.new
dd of=$vg_group/$lvm_volume if=$backup_path/$lvm_volume.new bs=64M

Примечание: "backup_path" - директория хранения архива, "lvm_volume" - наименование тома, "time_stamp" - метка времени восстанавливаемой копии.

Пример конфигурации iSCSI-цели (служба tgt) (Linux).

/etc/tgt/conf.d/iscsi-base.conf

<target iqn.2020-12.local:lun1>
backing-store /dev/xvda3
initiator-address 192.168.10.1
incominguser iscsi-user q7n8TNnzLsv7
outgoinguser iscsi-target vUD6YXvz7Klb
</target>

Пример (шаблон) сценария резервного копирования файлов с использованием службы Volume Shadow Copy (Windows 10).

Требования (зависимости): 7-Zip Extra

backupcycle.cmd

@echo off

cd /d "%~dp0"

set drv=C:
set src=\Windows\System32\config set pfx=registry

set tdr=%drv%temp set mnt=%tdr%\mount set bak=%tdr%\backup set log=%~dp0backup.log

rem echo %drv% rem echo %src% rem echo %tdr% rem echo %mnt% rem echo %bak% rem echo %log%

rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! mkdir %bak% rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

echo ================================================================================>>%log% echo %date% %time% : Starting backup task.>>%log% echo ================================================================================>>%log% echo %date% %time% : Removing the old mount point.>>%log% echo -------------------------------------------------------------------------------->>%log% rmdir %mnt% >nul 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Creating the temporary backup directory.>>%log% echo -------------------------------------------------------------------------------->>%log% for /f "tokens=" %%c in ('date /t') do (set dt=%%c) for /f "tokens=" %%c in ('time /t') do (set tm=%%c) set tmp=%dt%%tm% set datestr=%tmp:/=-% set datestr=%datestr: =-% set datestr=%datestr::=-% set datestr=%datestr:.=-% set bakname=%pfx%-backup-%datestr% mkdir %bak%%bakname% >>%log% 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Deleting all of the specified volume's shadow copies.>>%log% echo -------------------------------------------------------------------------------->>%log% vssadmin.exe delete shadows /for=%drv% /all /quiet >>%log% 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Creating new shadow copy.>>%log% echo -------------------------------------------------------------------------------->>%log% wmic shadowcopy call create Volume='^"%drv%^"' >>%log% 2>&1 setlocal enabledelayedexpansion echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Searching the name of the new shadow copy.>>%log% echo -------------------------------------------------------------------------------->>%log% vssadmin.exe list shadows /for=%drv% >>%log% 2>&1 for /F "delims=" %%c in ('vssadmin.exe list shadows /for^=%drv% ^| findstr /c:GLOBALROOT') do set sw=%%c set "find=* \?" call set sw=%%sw:!find!=\?%% mklink /D %mnt% %sw%\ >>%log% 2>&1 endlocal set src=%src:"=% set mnt=%mnt:"=% set src=%mnt%%src% echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Copying requested source files.>>%log% echo -------------------------------------------------------------------------------->>%log% robocopy %src% %bak%%bakname% /e /copyall /xj /xjd /xjf /ns /nc /nfl /ndl /np >>%log% 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Packing the temporary backup directory.>>%log% echo -------------------------------------------------------------------------------->>%log% 7za a -t7z -ms=on -m0=LZMA2 -mx9 -mmt=4 -scsUTF-8 -ssc "%bak%%bakname%.7z" "%bak%%bakname%" echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Removing the mount point.>>%log% echo -------------------------------------------------------------------------------->>%log% rmdir %mnt% >>%log% 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Removing the temporary backup directory.>>%log% echo -------------------------------------------------------------------------------->>%log% takeown /r /skipsl /f %bak%%bakname% /d y >nul 2>&1 rd /q /s %bak%%bakname% >>%log% 2>&1 echo -------------------------------------------------------------------------------->>%log% echo %date% %time% : Deleting all of the specified volume's shadow copies.>>%log% echo -------------------------------------------------------------------------------->>%log% vssadmin.exe delete shadows /for=%drv% /all /quiet >>%log% 2>&1 echo ================================================================================>>%log% echo %date% %time% : Finished.>>%log% echo ================================================================================>>%log%

rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! move "%bak%%bakname%.7z" "%~dp0%bakname%.7z" rd /q /s %tdr% rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Очистка журнала USN NTFS из командной строки (Windows).

fsutil usn deletejournal /n c:

Стандартная очистка дисков из командной строки (Windows).

Требования (зависимости): PowerShell, cleandisk.ps1
powershell -ExecutionPolicy Bypass -command "cleandisk.ps1"

Удаление временных файлов для всех пользователей из командной строки (Windows).

Требования (зависимости): PowerShell, cleartemp.ps1
powershell -ExecutionPolicy Bypass -command "cleartemp.ps1"

Удаление файлов созданных ранее текущей даты на заданное количество дней из командной строки (Windows).

forfiles /P <"Путь к директории для поиска файлов"> /S /M *.<Расширение имён файлов> /D -<Количество дней> /C "cmd /c del /q @path"


Системные операции.


Пример генерации пароля (Linux).

cat /dev/urandom|head -c9|base64
Примечание: длину пароля можно менять, задавая параметр "-с".

Очистка кэшей файловых систем и очистка файла/раздела подкачки (Linux).

Код

#! /bin/sh
sync; echo 1 > /proc/sys/vm/drop_caches
swapoff -a; sudo swapon -a

Команды systemd, которые стоит помнить (см. man) (Linux).

systemctl list-units
systemctl status <имя_службы>
systemctl restart <имя_службы>
systemctl start <имя_службы>
systemctl stop <имя_службы>
systemctl enable <имя_службы>
systemctl disable <имя_службы>
systemctl daemon-reload
journalctl
#journalctl --list-boots равнозначно who -b

Примечание: см. также файл "/etc/sysctl.d/*-sysctl.conf" (переменные "vm.swappiness=5" и "vm.vfs_cache_pressure=2000").

Команды Xen (xl), которые стоит помнить (см. man) (Linux) (примеры).

  • xl create <config_file>
  • xl destroy <Domain>
  • xl list
  • xl usbctrl-attach master-host version=3 ports=8
  • xl usb-list master-host
  • xl usbdev-attach master-host hostbus=1 hostaddr=3 controller=1 port=1
  • xen-create-image --hostname=example-host --memory=1024mb --vcpus=1 --scsi --size=16G --swap=512mb --lvm=system --ip=192.168.0.2 --gateway=192.168.0.1 --netmask=255.255.255.0 --nameserver="192.168.0.1 8.8.8.8"--nodhcp --pygrub --dist=stretch

Команды Virsh, которые стоит помнить (см. man) (Linux) (примеры).

  • virsh domxml-from-native xen-xl master-host.cfg > master-host.xml
  • virsh create master-host.xml
  • virsh define master-host
  • virsh autostart master-host
  • virsh autostart master-host --disable
  • virsh undefine master-host
  • virsh list
  • virsh list --all
  • virsh list --autostart
  • virsh create master-host
  • virsh start master-host
  • virsh shutdown master-host

Генерация случайного MAC-адреса для сетевого интерфейса Xen DomU (Linux).

Требования (зависимости): random_mac.py
python ./random_mac.py

Пример конфигурации Xen для паравиртуальной гостевой системы Linux (Linux).

Конфигурация

name        = 'i-host'
#для генерации uuid можно использовать  dbus-uuidgen
#uuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
bootloader = 'pygrub'
vcpus       = '1'
memory      = '1024'
root        = '/dev/xvda2 ro'
disk        = [
                  'phy:/dev/system/i-host-disk,xvda2,w',
                  'phy:/dev/system/i-host-swap,xvda1,w',
                  'phy:/dev/storage/i-base,xvda3,w',
              ]
vif         = [ 'mac=00:16:3e:0a:ab:53,bridge=xenbr0' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Пример конфигурации Xen для гостевой системы Windows Server 2008 (Linux).

Конфигурация

type = 'hvm'
name = 'master-host'
#для генерации uuid можно использовать  dbus-uuidgen
#uuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
xen_platform_pci = 1
viridian = 1
memory = 16384
vcpus = 4
maxvcpus = 4
pae=1
nx=1
hap=1
hpet=1
acpi = 1
apic = 1
vif = [ 'mac=00:16:3e:ef:8e:65,ip=192.168.1.1,type=vif,rate=10Gb/s,bridge=xenbr0' ]
disk = ['phy:/dev/system/master-disk,sda,rw']
device_model_version = 'qemu-xen'
boot='c'
hdtype='ahci'
localtime=1
sdl=0
serial='pty'
usbdevice='tablet'
stdvga=1
vga='stdvga'
videoram=32
gfx_passthru=0
vkb=[ 'backend-type=qemu' ]
vnc=1
# IP адрес Dom-0 (host система)
vnclisten='192.168.1.8'
vncdisplay=1
vncpasswd='XXXXXXX'
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Пример конфигурации Xen для гостевой системы Windows Server 2012 R2 (Linux).

Конфигурация

type = 'hvm'
name = 'srv1c-host'
#для генерации uuid можно использовать  dbus-uuidgen
#uuid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
xen_platform_pci = 1
viridian = 1
memory = 32768
vcpus = 8
maxvcpus = 8
pae=1
nx=1
hap=1
hpet=1
acpi = 1
apic = 1
vif = [ 'mac=00:16:3e:f0:f5:b8,ip=192.168.1.2,type=vif,rate=10Gb/s,bridge=xenbr1' ]
disk = ['phy:/dev/system/srv1c-disk,hda,rw']
device_model_version = 'qemu-xen'
boot='dc'
hdtype='ide'
localtime=1
sdl=0
serial='pty'
usb=1
usbctrl=['type=devicemodel,version=3,ports=8']
usbdev=['hostbus=1,hostaddr=3,controller=0,port=1',]
usbdevice='tablet'
stdvga=1
vga='stdvga'
videoram=32
gfx_passthru=0
vkb=[ 'backend-type=qemu' ]
vnc=1
# IP адрес Dom-0 (host система)
vnclisten='192.168.1.8'
vncdisplay=2
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

Очистка всех журналов событий из командной строки (Windows).

Требования (зависимости): PowerShell
wevtutil el | Foreach-Object {wevtutil cl "$_"}

Получение информации о материнской плате из командной строки (Windows).

wmic baseboard get product,Manufacturer,version,serialnumber
wmic csproduct get name
wmic bios get serialnumber

Отключение Windows Defender ("Защитник Windows") (Windows 10/11).

Требования (зависимости): PowerShell, ddef-binary-x86_64

Потребуется выполнить на свой страх и риск ddef64.exe из прилагающегося архива.

Комплексное решение: отключение (снижение активности) Windows Defender (Windows 10/11), удаление bloatware, отключение телеметрии и автообновлений Windows 10/11.

Требования (зависимости): PowerShell, w11fixes-binary-x86 или w11fixes-binary-x86_64

Потребуется выполнить на свой страх и риск fixes32.exe (или fixes64.exe) из прилагающегося архива, предварительно, если потребуется, отключив антивирусную проверку всех типов в "Защитнике Windows" и подтвердив выполнение в открывшемся окне защиты SmartScreen ("Подробнее"->"Выполнить в любом случае"). После утвердительного ответа на запрос об очистке будет выдан запрос "Контроля учётных записей", требуется также ответить утвердительно. После этого система будет трижды перезагружена (причём первый раз в безопасном режиме). Между перезагрузками следует воздержаться от совершения каких-либо действий с компьютером. Рекомендуется после завершения работы программы проверить настройки конфиденциальности. В случае необходимости скачивания обновлений Windows потребуется перевести в автоматический режим запуска и включить следующие службы: Служба оркестратора обновлений (UsoSvc), Фоновая интеллектуальная служба передачи (BITS), Центр обновления Windows (wuauserv).

Примечание: сценарий тестировался на Windows 10 22H2 (версии 10.0.19045.4529) и Windows 11 23H2 (версии 10.0.22631.3737).

Обход требований наличия модуля TPM 2.0 и включенного режима SecureBoot во время установки Windows 11.

На установочном носителе Windows 10 заменить файл install.esd на соответствующий ему файл с установочного носителя Windows 11. Затем следует отключить компьютер от сети и запускать установку с модифицированного на предыдущем шаге носителя.

Обход требования подключения к сети во время установки Windows 11.

При появлении запроса на подключение к сети Интернет следует нажать комбинацию клавиш Shift F10, а затем в открывшемся окне командной строки выполнить следующее: taskkill /F /IM oobenetworkconnectionflow.exe
В случае установки Windows 11 22H2 следует нажать комбинацию клавиш Shift F10, а затем в открывшемся окне командной строки выполнить следующее: oobe\bypassnro

Установка сертификатов российских удостоверяющих центров (Windows 10/11).

Требования (зависимости): ru-certs-202403
Потребуется выполнить на свой страх и риск ru-certs-202308.exe из прилагающегося архива.
Примечание: набор сертификатов подготовлен на основании перечня аккредитованных УЦ по данным портала уполномоченного федерального органа в области использования электронной подписи ( Портал УФО ) за август 2023 года.


Работа с файлами.


Архивация всех директорий в текущей директории из командной строки (Windows).

Требования (зависимости): 7-Zip
Архив 7z: for /d %f in (*) do 7z a -t7z -ms=on -m0=LZMA2 -mx9 -mmt=4 -scsUTF-8 -ssc "%~pnf.7z" "%~pnxf"
Архив zip: for /d %f in (*) do 7z a -tzip -m0=Deflate -mx9 "%~pnxf.zip" "%~pnxf"

Проверка целостности архива (7z) из командной строки (Linux).

Требования (зависимости): 7-Zip
for filename in *.7z; do if 7z t "$filename" 2>&1 > /dev/null; then echo $filename passed; else echo $filename failed; fi; done

Создание/проверка(/восстановление исходных данных) файлов с информацией для восстановления (parchive/par2) из командной строки (Linux).

Требования (зависимости): par2
Создание: par2 c -n1 -u -r100 <имя_исходного_файла>.par2 <имя_исходного_файла>
Пример: par2 c -n1 -u -r100 source.tar.gz.par2 source.tar.gz
Примечание: значение параметра "r" - количество (в процентах) информации для восстановления, при 100% можно полностью восстановить отсутствующий исходный файл.
Проверка: par2 v <имя_исходного_файла>.par2
Пример: par2 v source.tar.gz.par2
Восстановление исходных данных: par2 r <имя_исходного_файла>.par2
Пример: par2 r source.tar.gz.par2


Работа с документами.


Разбиение PDF-файла на отдельные страницы (Windows).

Требования (зависимости): pdftk (PDFtk free)
pdftk <имя_файла> burst
Пример:pdftk source.pdf burst
Требования (зависимости): qpdf
qpdf --split-pages=1-z <имя_файла> <префикс_имён_файлов_результата>.pdf
Пример:qpdf --split-pages=1-z source.pdf page.pdf
Требования (зависимости): ghostscript
Linux: gs -dNOPAUSE -dBATCH -sDEVICE=png16m -r200 -sOutputFile="page-%d.png" <имя_исходного_файла>
Windows: gswin64c -dNOPAUSE -dBATCH -sDEVICE=png16m -r200 -sOutputFile="page-%d.png" <имя_исходного_файла>
Windows (со сглаживанием): gswin64c -dNOPAUSE -dBATCH -sDEVICE=png16m -r200 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dDOINTERPOLATE -sOutputFile="page-%d.png" <имя_исходного_файла>

Примечание: значение параметра "-r" ("разрешение") стоит варьировать в диапазоне от 72 до 600; в результате данной операции отдельные страницы сохранаются в формате PNG.

Склеивание PDF-файла из отдельных файлов страниц в текущей директории (Windows).

Требования (зависимости): qpdf
qpdf --empty <имя_файла_результата> --pages *.pdf 1-z --
Пример:qpdf --empty destination.pdf --pages *.pdf 1-z --

Пакетное преобразование (сжатие) PDF-файлов (отдельных файлов страниц!) в текущей директории в чёрно-белые с установкой разрешения 200DPI (Windows).

Требования (зависимости): ImageMagick, python, img2pdf
for %f in (*.pdf) do magick convert -density 200 -colorspace Gray -normalize -compress group4 "%~nxf" "%~nf.tif"
for %f in (*.tif) do img2pdf.py -d 200 -o "%~pnf.pdf" "%~pnxf"

Пакетное преобразование (сжатие) PDF-файлов (отдельных файлов страниц!) в текущей директории с установкой разрешения 200DPI (Windows).

Требования (зависимости): ghostscript, ImageMagick, python, img2pdf, mozjpeg
for %f in (*.pdf) do magick convert -density 200 -compress none "%~pnxf" ppm:- | cjpeg-static -sample 2x2 -dct int -optimize -progressive -quality 75 -outfile "%~pnf.jpg"
for %f in (*.jpg) do img2pdf.py -d 200 -o "%~pnf.pdf" "%~pnxf"

Примечание: значение параметра "quality" ("качество") стоит варьировать в диапазоне от 70 до 90; хорошо подходит для больших сканированных изображений (размер файлов может быть уменьшен в несколько раз, но с векторными файлами ситуация обратная).


Примечание: для аналогичной операции с переводом всех страниц к 8-ми битной цветовой палитре следует использовать (дополнительные зависимости: zopflipng):
for %f in (*.pdf) do gswin64c -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png16m -dDOINTERPOLATE -r200 -sOutputFile="%~pnf.png" "%~pnxf"
for %f in (*.png) do magick convert %~nxf -density 200 +dither -colors 256 -alpha off PNG8:"%~nf_8bit.png"
for %f in (*_8bit.png) do do zopflipng --lossy_8bit --lossy_transparent --always_zopflify "%~pnxf" "%~pnf-z.png"
for %f in (*-z.png) do img2pdf.py -d 200 -o "%~pnf.pdf" "%~pnxf"
Примечание: для аналогичной операции с применением формата сжатия JPEG2000 следует использовать (дополнительные зависимости: ghostscript, openjpeg):
for %f in (*.pdf) do gswin64c -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png16m -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dDOINTERPOLATE -r200 -sOutputFile="%~pnf.png" "%~pnxf"
for %f in (*.png) do magick convert -density 200 -fuzz 10%% -alpha off -fill white -opaque white -units pixelsperinch "%~pnxf" "%~pnf-f.png"
for %f in (*-f.png) do opj_compress -q 40 -i %~pnxf -o %~pnf-jp2.jp2
for %f in (*.jp2) do img2pdf.py -d 200 -o "%~pnf.pdf" "%~pnxf"

Пакетное преобразование DOCX-файлов в текущей директории в формат PDF (Windows).

Требования (зависимости): Microsoft Office 2013 или новее, docx2pdf.js
for %f in (*.docx) do cscript //nologo "docx2pdf.js" "%~pnxf" или docx2pdf.cmd

Пакетное преобразование RTF-файлов в текущей директории в формат PDF (Windows).

Требования (зависимости): Microsoft Office 2013 или новее, rtf2pdf.js
for %f in (*.rtf) do cscript //nologo "rtf2pdf.js" "%~nxf" или rtf2pdf.cmd

Пакетное удаление фона в PDF-файлах (отдельных файлах страниц!) в текущей директории с установкой разрешения 300DPI (Windows).

Требования (зависимости): ImageMagick, python, img2pdf, mozjpeg
for %f in (*.pdf) do magick convert -density 300 -fuzz 10%% -fill white -opaque white -units pixelsperinch -compress none "%~pnxf" ppm:- | cjpeg-static -sample 2x2 -dct int -optimize -progressive -quality 85 -outfile "%~pnf.jpg"
for %f in (*.jpg) do img2pdf.py -d 300 -o "%~pnf.pdf" "%~pnxf"
Примечание: для аналогичной операции с переводом всех страниц в градации серого следует использовать:
for %f in (*.pdf) do magick convert -density 300 -fuzz 10% -fill white -opaque white +dither -fx "(r+g+b)/3" -colorspace Gray -separate -average -strip +profile "*" "%~nxf" ppm:- | cjpeg-static -dct int -optimize -grayscale -quality 65 -outfile "%~pnf.jpg"
Примечание: значение параметра "fuzz" соответствует уровню "фонового шума".

Удаление аннотаций из PDF-файлов (Linux).

Требования (зависимости): pdftk pdftk <имя_исходного_файла> output - uncompress | sed '/^\/Annots/d' | pdftk - output <имя_результирующего_файла> compress
Пример:pdftk in.pdf output - uncompress | sed '/^\/Annots/d' | pdftk - output out.pdf compress
Примечание: обычно используется для удаления комментариев "AutoCAD SHX".

Удаление аннотаций из PDF-файлов (Windows).

Требования (зависимости): pdftk (PDFtk free), sed, stripannot
stripannot.cmd <имя_исходного_файла> <имя_результирующего_файла>
Пример:stripannot.cmd in.pdf out.pdf
Примечание: обычно используется для удаления комментариев "AutoCAD SHX".

Удаление всего текста из PDF-файлов (Linux/Windows).

Требования (зависимости): ghostscript
Linux: gs -o <имя_результирующего_файла> -sDEVICE=pdfwrite -dFILTERTEXT <имя_исходного_файла>
Windows: gswin64c -o <имя_результирующего_файла> -sDEVICE=pdfwrite -dFILTERTEXT <имя_исходного_файла>
Пример:gswin64c -o output.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf

Удаление парольной защиты от редактирования текста в PDF-файлах (Linux/Windows).

Требования (зависимости): ghostscript
Linux: gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=<имя_результирующего_файла> -f <имя_исходного_файла>
Windows: gswin64c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=<имя_результирующего_файла> -f <имя_исходного_файла>
Пример:gswin64c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf -f input.pdf

Пакетное изменение размеров файлов изображений в текущей директории (Windows).

Требования (зависимости): ImageMagick, mozjpeg
for %f in (*.jpg) do magick convert -strip -colorspace RGB -filter LanczosRadius -distort Resize "<ширина>>" -distort Resize ">x<высота>" -colorspace sRGB -compress none "%~pnxf" ppm:- | cjpeg-static -sample 2x2 -dct int -optimize -progressive -quality 85 -outfile "%~pnf-1.jpg"
Пример:for %f in (*.jpg) do magick convert -strip -colorspace RGB -filter LanczosRadius -distort Resize "1280>" -distort Resize ">x960" -colorspace sRGB -compress none "%~pnxf" ppm:- | cjpeg-static -sample 2x2 -dct int -optimize -progressive -quality 85 -outfile "%~pnf-1.jpg"
Примечание: значение параметра "quality" ("качество") стоит варьировать в диапазоне от 70 до 90.

Пакетное преобразование файлов изображений в формате PNG, находящихся в текущей директории, в формат JPEG (Linux).

Требования (зависимости): ImageMagick, mozjpeg
find . -name \*.png -type f -exec bash -c 'magick convert -compress none {} ppm:- | cjpeg -sample 2x2 -dct int -optimize -progressive -quality 100 -outfile {}.jpg' \;
Примечание: значение параметра "quality" ("качество") стоит варьировать в диапазоне от 70 до 90.

Создание страниц с миниатюрами файлов изображений для всех поддиректорий в текущей директории (Windows).

Требования (зависимости): ImageMagick
for /d %d in (*) do magick montage -limit thread 6 -limit file 64 -limit memory 8192Mib -limit map 16384MiB -define registry:temporary-path=..\temp -pointsize 10 -label "%wx%h\n%t" -tile 10x10 -geometry 164x162+1+0 -density 200 -units pixelsperinch "%~npxd\*.png" "..\thumbs\%~nxd.png"

Примечание: параметр "temporary-path" - путь к директории для хранения временных файлов, параметр "tile" - количество миниатюр по горизонтали и вертикали, страницы в данном примере генерируются для "png" файлов, результат размещается в директории "..\thumbs%~nxd.png"

Пакетная генерация файлов скринлистов для всех "mp4" файлов в текущей директории (Windows) (пример).

Требования (зависимости): movie thumbnailer (mtn)
for %f in (*.mp4) do mtn -c 4 -r 4 -j 100 -o .jpg -P -w 1200 -Z -D6 "%~pnxf"

Пакетное преобразование видео файлов (Windows) (пример).

Требования (зависимости): ffmpeg, GPAC MP4Box, movie thumbnailer (mtn)

Код

@echo off
for %%f in (in\*.wmv,in\*.avi,in\*.mp4,in\*.mkv,in\*.flv) do (
echo "%%~dpnxf"
ffmpeg -i "%%~dpnxf" -hide_banner -an -filter_complex "scale=1280:720:flags=lanczos,setdar=16/9,setsar=1/1,unsharp,hqdn3d=2:1:2" -c:v libx264 -b:v 2000k -x264opts frameref=15:fast_pskip=0 -pass 1 -passlogfile tmp\mp4 -preset slow -threads 4 -f rawvideo -y -r film NUL
ffmpeg -i "%%~dpnxf" -hide_banner -c:a aac -b:a 128k -ar 44100 -filter_complex "scale=1280:720:flags=lanczos,setdar=16/9,setsar=1/1,unsharp,hqdn3d=2:1:2" -c:v libx264 -b:v 2000k -x264opts frameref=15:fast_pskip=0 -pass 2 -passlogfile tmp\mp4 -preset slow -threads 4 -y -r film "tmp\out.mp4"
mp4box -isma -inter 500 -add "tmp\out.mp4" -new "out\%%~nf.mp4"
mtn -c 4 -r 4 -j 100 -o .jpg -O out -P -w 1200 -Z -D6 "out\%%~nf.mp4"
del /q tmp\tmp.h264 tmp\mp4-0.log tmp\mp4-0.log.mbtree tmp\out.mp4
)

Скачивание комплектов документации завершённых проектов из личного кабинета СПб ГАУ "Центр государственной экспертизы".

Требования (зависимости): Python 3.x.x и PyQt 6.x.x или Node.js 18.x.x и Electron 26.x.x
Для скачивания комплектов документации завершённых проектов из личного кабинета СПб ГАУ ЦГЭ можно воспользоваться одним из наборов скриптов expget.