Коллекция однострочников Bash
Приветствую!

Как настроить удобный поиск и запуск команд терминала и сессий SSH в Tmux с помощью плагина FZF смотрите под спойлером:

Собственно, сам список команд:

BASH
  1## =====================
  2## Управление процессами
  3## =====================
  4# Показать топ-5 процессов по потреблению CPU
  5ps --sort=-%cpu -eo user,pid,ppid,state,comm | head -n6
  6# Показать топ-5 процессов по потреблению памяти
  7ps --sort=-%mem -eo user,pid,ppid,state,comm | head -n6
  8# Вывести процессы в виде дерева
  9ps -axf -eo user,pid,ppid,state,comm
 10# Найти родительские процессы зомби
 11ps -eo user,pid,ppid,state,comm | awk 'NR==1 || $4=="Z"'
 12# Показать команду родительского процесса по PID
 13ps -o pid,command --ppid 698
 14# Вывести иерархию cgroups, управляемых systemd
 15systemd-cgls
 16# Вывести иерархию процессов (pstree)
 17pstree -p -t -n -C age
 18# Найти уникальные бинарные файлы, запущенные пользователем
 19for pid in $(ps -u $USER -o pid); do exe=$(readlink -f /proc/$pid/exe 2>/dev/null); if [ "$exe" ]; then echo "$pid: $exe"; fi; done | awk '{print $2}' | sort -u
 20# Показать максимальный лимит памяти для cgroup процесса/сервиса
 21pid=$(systemctl show <service-name> -p MainPID --value); cgroup_path=$(grep '^0::' /proc/$pid/cgroup | cut -d: -f3); cat /sys/fs/cgroup${cgroup_path}/memory.max
 22# Показать максимальный лимит CPU для cgroup процесса
 23pid=<PID>; cgroup_path=$(grep '^0::' /proc/$pid/cgroup | cut -d: -f3); cat /sys/fs/cgroup${cgroup_path}/cpu.max
 24# Показать лимиты ресурсов для процесса (ulimit)
 25cat /proc/<PID>/limits
 26# Найти процессы, использующие указанную точку монтирования
 27for pid in /proc/[0-9]*; do grep -q "/mount/path" "$pid/fd"/* 2> /dev/null && echo "PID: ${pid#/proc/}"; done
 28
 29## ==================
 30## Мониторинг системы
 31## ==================
 32# Получить моментальный снимок процессов (top в пакетном режиме)
 33top -b -n 1
 34# Показать текущее использование CPU (vmstat)
 35vmstat 1 2 | tail -1 | awk '{print 100 - $15 "%"}'
 36# Вывести точки монтирования с использованием >80%
 37df -h | awk '$5 ~ /^8[0-9]%/ {print $6}'
 38# Показать топ-20 крупнейших файлов/директорий
 39du -h / 2> /dev/null | sort -rh | head -n 20
 40# Показать топ-20 крупнейших файлов/директорий (с точными размерами IEC)
 41du -x --block-size=1 / 2>/dev/null | sort -rn | head -n 20 | numfmt --to=iec
 42# Показать использование дискового пространства журналами systemd
 43journalctl --disk-usage
 44# Вывести открытые файлы в указанной директории
 45lsof +D /opt
 46# Показать время запуска системы в формате unixtime
 47date -d "$(uptime -s)" +%s
 48# Вывести топ-10 наиболее часто используемых команд bash
 49history | awk '{print $2}' | sort | uniq -c | sort -rn | head
 50# Вывести топ-10 процессов, использующих swap-память
 51for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | head -n 10
 52# Проверить текущее значение swappiness
 53cat /proc/sys/vm/swappiness
 54# Вывести OOM-оценки и корректировки для процессов
 55printf "PID\tOOM Score\tOOM Adj\tCommand\n"; while read -r pid comm; do [ -f /proc/$pid/oom_score ] && [ $(cat /proc/$pid/oom_score) != 0 ] && printf "%d\t%d\t\t%d\t%s\n" "$pid" "$(cat /proc/$pid/oom_score)" "$(cat /proc/$pid/oom_score_adj)" "$comm"; done < <(ps -e -o pid= -o comm=) | sort -k 2nr
 56# Мониторинг дискового ввода/вывода (iotop)
 57iotop -o -P -d 5
 58# Мониторинг статистики CPU и дисковых устройств (iostat)
 59iostat -x 2
 60# Найти IP-адреса в файле лога (grep)
 61grep -a -E '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log
 62# Показать среднюю загрузку системы (sar)
 63sar -q 1 5
 64
 65## =================================
 66## Управление файлами и директориями
 67## =================================
 68# Заменить текст в файле (с созданием резервной копии)
 69sed -i.bkp 's/old_text/new_text/g' ./file.txt
 70# Вставить новую строку в начало файла
 71sed -i.bkp '1i test_line' ./file.txt
 72# Вставить многострочный блок в начало файла
 73sed -i.bkp '1i test_line:\n    value1\n    value2' ./file.txt
 74# Изменить подстроку в строке, начинающейся с определенного шаблона
 75sed '\|^test_line|s|line|word|'
 76# Найти и установить права 644 для всех файлов
 77find /path -type f -exec chmod 644 {} \;
 78# Найти и установить права 755 для всех директорий
 79find /path -type d -exec chmod 755 {} \;
 80# Поиск файлов с исключением определенных путей
 81find ./ -path ./subpath -prune -o -name 'index.md' -ls
 82# Установить права ACL (Access Control List) для пользователя
 83setfacl -m u:ivan:rwx /opt/mydata
 84# Разрешить цепочку символических ссылок до конечного файла
 85current="/path/to/symlinks"; while [[ -L "$current" ]]; do target=$(readlink "$current"); echo "$current -> $target"; if [[ "$target" == /* ]]; then current="$target"; else current="$(dirname "$current")/$target"; fi; done; echo "Final: $current"
 86# Найти открытые файлы, которые были удалены (но все еще используются)
 87lsof | grep '(deleted)'
 88# Усечь (очистить) содержимое удаленного, но открытого файла
 89truncate -s 0 /proc/<PID>/fd/<FD>
 90
 91## ======================
 92## Архивирование и сжатие
 93## ======================
 94# Создать файл со случайными данными
 95dd if=/dev/urandom of=./file1 bs=50K count=10
 96# Создать второй файл со случайными данными
 97dd if=/dev/urandom of=./file2 bs=50K count=10
 98# Создать tar-архив из файлов и директорий
 99tar -c -f ./archive.tar ./file1 ./file2 ./dir/
100# Создать tar-архив с подробным выводом
101tar -v -c -f ./archive.tar ./file1 ./file2 ./dir/
102# Создать tar-архив, находясь в другой директории
103tar -C /tmp/dir/ -c -f ./archive.tar ./
104# Извлечь содержимое tar-архива
105tar -x -f ./archive.tar
106# Извлечь tar-архив в указанную директорию
107tar -C /tmp/dir/ -x -f ./archive.tar
108# Показать список файлов в tar-архиве
109tar -t -f ./archive.tar
110# Проверить целостность tar-архива
111tar -t -f ./archive.tar &> /dev/null
112# Добавить файл к существующему tar-архиву
113tar -r -f ./archive.tar /etc/passwd
114# Удалить файл из tar-архива
115tar --delete -f archive.tar etc/passwd
116# Создать сжатый gzip tar-архив (.tgz или .tar.gz)
117tar -c -z -f ./archive.tar.gz ./file1 ./file2
118# Создать сжатый bzip2 tar-архив (.tar.bz2)
119tar -c -j -f archive.tar.bz2 ./file1.txt ./file2.txt
120# Создать сжатый xz tar-архив (.tar.xz)
121tar -c -J -f archive.tar.xz ./file1.txt ./file2.txt
122# Создать сжатый zstd tar-архив (.tar.zst)
123tar -c --zstd -f archive.tar.zst ./file1.txt ./file2.txt
124# Создать zstd-архив с максимальным сжатием (через внешний zstd)
125tar -I "zstd -19" -cvf ./archive.tzst ./file* ./dir
126# Создать архив с указанием внешней утилиты сжатия
127tar -v -I "zstd -19" -c -f ./archive.tzst ./file1.txt ./dir
128# Создать tar-архив и направить его в stdout
129tar -c -f - ./file1 ./file2 ./dir/ > ./archive.tar
130# Создать сжатый gzip tar-архив и направить его в stdout
131tar -c -z -f - ./file1 ./file2 ./dir/ > ./archive.tgz
132# Архивировать и сжать данные с помощью внешней утилиты (gzip)
133tar -c -f - ./file1 ./file2 ./dir/ | gzip -9 > ./archive.tgz
134# Архивировать файлы, найденные командой find
135find ./ -name 'file[1-2]' | tar -c -z -f ./archive.tgz -T -
136# Заархивировать, сжать и отправить файлы на удаленный хост для распаковки
137tar -c -z -f - ./dir/ | ssh ivan@test.r4ven.me "tar -C /tmp -x -z -f -"
138# Создать сжатый tar-архив на удаленном хосте и скачать его локально
139ssh ivan@test.r4ven.me "tar -c -z -f - ./file1 ./file2" > ./archive.tgz
140# Скачать и извлечь сжатый tar-архив с удаленного хоста локально
141ssh ivan@test.r4ven.me "cat ./archive.tgz" | tar -C /tmp -x -z -f -
142# Создать сжатый и зашифрованный GPG-архив
143tar -c -z -f - ./file1 ./file2 ./dir/ | gpg --batch --symmetric --passphrase "MyPassword" > ./archive.tgz.gpg
144# Расшифровать GPG-архив и извлечь его содержимое
145gpg -d ./archive.tgz.gpg | tar -x -z -f -
146# Разделить сжатый tar-архив на более мелкие части
147tar -c -z -f - ./dir/ | split -b 200K - ./archive.tgz.part-
148# Объединить разделенные части архива и извлечь его
149cat ./archive.tgz.part-* | tar -x -z -f -
150# Сжать файл с помощью gzip
151gzip ./file1.txt
152# Распаковать gzip-архив
153gunzip ./file1.txt.gz
154# Распаковать gzip-архив (альтернативно)
155gzip -d ./file1.txt.gz
156# Сжать файл, сохранив оригинал
157gzip -k ./file1.txt
158# Сжать файл с максимальным уровнем сжатия gzip
159gzip -9 ./file1.txt
160# Сжать файл с помощью bzip2
161bzip2 ./file1.txt
162# Распаковать bzip2-архив
163bunzip2 ./file1.txt.bz2
164# Распаковать bzip2-архив (альтернативно)
165bzip2 -d ./file1.txt.bz2
166# Сжать файл с помощью bzip2, сохранив оригинал
167bzip2 -k ./file1.txt
168# Сжать файл с максимальным уровнем сжатия bzip2
169bzip2 -9 ./file1.txt
170# Сжать файл с помощью xz
171xz ./file1.txt
172# Распаковать xz-архив
173unxz ./file1.txt.xz
174# Распаковать xz-архив (альтернативно)
175xz -d ./file1.txt.xz
176# Сжать файл с помощью xz, сохранив оригинал
177xz -k ./file1.txt
178# Сжать файл с максимальным уровнем сжатия xz
179xz -9 ./file1.txt
180# Сжать файл с помощью zstd
181zstd ./file1.txt
182# Сжать файл с помощью zstd, сохранив оригинал
183zstd -k ./file1.txt
184# Распаковать zstd-архив
185unzstd ./file1.txt.zst
186# Распаковать zstd-архив (альтернативно)
187zstd -d ./file1.txt.zst
188# Сжать файл с максимальным уровнем сжатия zstd
189zstd -19 ./file1.txt
190# Создать ZIP-архив из файлов и директорий
191zip ./archive.zip ./file1 ./dir/
192# Извлечь содержимое ZIP-архива
193unzip ./archive.zip
194# Показать список файлов в ZIP-архиве
195unzip -l ./archive.zip
196# Добавить файл к существующему ZIP-архиву
197zip ./archive.zip ./file2
198# Создать ZIP-архив без сжатия
199zip -0 ./archive.zip ./file1.txt
200# Создать ZIP-архив с максимальным сжатием
201zip -9 ./archive.zip ./file1.txt
202# Создать 7z-архив из файлов и директорий
2037z a ./archive.7z ./file1 ./dir/
204# Извлечь содержимое 7z-архива
2057z x ./archive.7z
206# Показать список файлов в 7z-архиве
2077z l ./archive.7z
208# Добавить файл к существующему 7z-архиву
2097z a ./archive.7z ./file2
210# Создать 7z-архив без сжатия
2117z a -mx=0 archive.7z ./file1.txt
212# Создать 7z-архив с максимальным сжатием
2137z a -mx=9 archive.7z ./file1.txt
214# Создать RAR-архив из файлов и директорий
215rar a ./archive.rar ./file1 ./dir/
216# Извлечь содержимое RAR-архива
217unrar x ./archive.rar
218# Показать список файлов в RAR-архиве
219unrar l ./archive.rar
220# Добавить файл к существующему RAR-архиву
221rar a ./archive.rar ./file2
222# Создать RAR-архив без сжатия
223rar a -m0 ./archive.rar file1.txt
224# Создать RAR-архив с максимальным сжатием
225rar a -m5 archive.rar file1.txt
226# Создать ZIP-архив для тестирования
227zip -9 ./archive.zip ./file* ./dir
228# Создать 7z-архив для тестирования
2297z a -mx=9 archive.7z ./file* ./dir
230# Создать RAR-архив для тестирования
231rar a -m5 ./archive.rar ./file* ./dir
232
233## ======================
234## Сеть и сетевые утилиты
235## ======================
236# Показать уникальные слушающие TCP/UDP порты
237ss -tuln | awk '{print $5}' | grep -Eo ':[0-9]+' | sort -t: -k2 -n -u
238# Временно запретить ответы на ICMP echo-запросы (ping)
239echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all
240# Начать отслеживание ICMP echo-запросов (iptables)
241iptables -A INPUT -p icmp --icmp-type echo-request -m recent --set --name PING_LIST
242# Ограничить количество ICMP echo-запросов (iptables)
243iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 10 --hitcount 5 --name PING_LIST -j DROP
244# Проверить доступность TCP-порта с помощью curl
245curl -v telnet://10.11.12.13:1234
246# Быстрая проверка доступности TCP-порта через bash
247echo > /dev/tcp/r4ven.me/443 && echo "open" || echo "unavailable"
248# Проверить доступность SSL/TLS порта с помощью openssl
249openssl s_client -connect r4ven.me:443
250# Поднять/опустить сетевой интерфейс
251sudo ip link set dev eth0 down; sudo ip link set dev eth0 up
252# Временно включить пересылку IP-пакетов (маршрутизацию)
253sysctl -w net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1
254# Включить пересылку IP-пакетов постоянно (через sysctl.d)
255echo -e 'net.ipv4.ip_forward = 1\nnet.ipv6.conf.all.forwarding = 1' > /etc/sysctl.d/99-forwarding.conf && sysctl -p /etc/sysctl.d/99-forwarding.conf
256# Выполнить параллельный пинг нескольких хостов
257seq 20 | xargs -P20 -I{} sh -c 'ping -c5 nftables.r4ven.me > out_{}.log 2>&1'
258# Запустить команду с определенными сетевыми возможностями (capabilities)
259sudo capsh --caps="cap_net_raw+ep" -- -c "/path/to/program"
260# Выполнить DNS-запрос (dig) и показать короткий ответ
261dig r4ven.me +short +answer +identify
262# Выполнить DNS-запрос с трассировкой делегирования
263dig r4ven.me +short +trace
264# Выполнить DNS-запрос к указанному серверу имен
265dig @8.8.8.8 r4ven.me +short +answer +identify
266# Проверить статус конкретного TCP-порта (nmap)
267nmap 10.11.12.13 -p 22
268# Проверить статус конкретного UDP-порта (nmap)
269nmap -sU 10.11.12.13 -p 53
270# Запустить простой TCP-сервер (netcat)
271while true; do echo "Listen TCP port 9999..."; nc -l -p 9999 | sed 's/.*/You say: &/'; echo "TCP-connection closed."; done
272# Запустить TCP-сервер с ответом 'pong'
273while true; do nc -l -p 12345 | tee /dev/tty | { read line; echo "pong"; } ; done
274# Запустить простой UDP-сервер (netcat)
275while true; do echo "pong" | nc -u -l -p 9999; done
276# Отправить сообщение TCP-серверу (netcat)
277echo "hello tcp" | nc -v 127.0.0.1 12345
278# Отправить сообщение UDP-серверу (netcat)
279echo "ping" | nc -u -w1 127.0.0.1 9999
280# Запустить UDP-сервер с ответом 'pong' (socat)
281socat -v UDP-RECVFROM:9999,fork SYSTEM:"echo 'pong'"
282# Запустить TCP-сервер с ответом 'pong' (socat)
283socat -v TCP-LISTEN:9999,fork SYSTEM:"echo 'pong'"
284# Отправить сообщение UDP-серверу (socat)
285echo "ping" | socat - UDP:127.0.0.1:9999
286# Отправить сообщение TCP-серверу (socat)
287echo "ping" | socat - TCP:127.0.0.1:9999
288# Создать простую веб-страницу с автообновлением (ncat)
289ncat -lk 8080 -c 'echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n<html><meta http-equiv=\"refresh\" content=\"1\"><pre>$(date)\nONLINE</pre></html>"'
290
291## ========
292## Nftables
293## ========
294# Очистить весь набор правил nftables
295nft "flush ruleset"
296# Добавить таблицу 'filter' в семействе 'inet'
297nft "add table inet filter"
298# Очистить все правила в таблице 'inet filter'
299nft "flush table inet filter"
300# Добавить таблицу 'nat' в семействе 'inet'
301nft "add table inet nat"
302# Очистить все правила в таблице 'inet nat'
303nft "flush table inet nat"
304# Создать набор (set) для частных IPv4-адресов LAN
305nft "add set inet filter lan4 { type ipv4_addr; flags interval; elements = { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16 } }"
306# Создать набор (set) для частных IPv6-адресов LAN
307nft "add set inet filter lan6 { type ipv6_addr; flags interval; elements = { fd00::/8, fe80::/10 } }"
308# Создать набор (set) для доверенных IPv4-адресов
309nft "add set inet filter trusted { type ipv4_addr; elements = { 123.34.56.78 } }"
310# Добавить входную цепочку 'input' с политикой 'drop'
311nft "add chain inet filter input { type filter hook input priority 0; policy drop; }"
312# Добавить цепочку 'forward' с политикой 'drop'
313nft "add chain inet filter forward { type filter hook forward priority 50; policy drop; }"
314# Добавить выходную цепочку 'output' с политикой 'accept'
315nft "add chain inet filter output { type filter hook output priority -200; policy accept; }"
316# Добавить цепочку 'prerouting' для NAT
317nft "add chain inet nat prerouting { type nat hook prerouting priority dstnat; policy accept; }"
318# Добавить цепочку 'postrouting' для NAT
319nft "add chain inet nat postrouting { type nat hook postrouting priority srcnat; policy accept; }"
320# Добавить вспомогательную цепочку 'input_wan'
321nft "add chain inet filter input_wan"
322# Добавить вспомогательную цепочку 'input_lan'
323nft "add chain inet filter input_lan"
324# Добавить цепочку для логирования отбрасываемых пакетов
325nft "add chain inet filter log_drop"
326# Отбрасывать пакеты с недействительным состоянием соединения
327nft "add rule inet filter input ct state invalid drop comment \"Drop invalid connections\""
328# Разрешить установленные и связанные соединения
329nft "add rule inet filter input ct state { established, related } accept comment \"Allow established connections\""
330# Разрешить трафик через интерфейс loopback
331nft "add rule inet filter input iif lo accept comment \"Allow loopback\""
332# Разрешить входящий трафик с доверенных IP-адресов
333nft "add rule inet filter input ip saddr @trusted accept comment \"Allow trusted IPs\""
334# Ограничить скорость ICMP-трафика
335nft "add rule inet filter input meta l4proto icmp icmp type { echo-request, destination-unreachable, time-exceeded } limit rate 10/second accept comment \"ICMP rate limited\""
336# Разрешить необходимый IPv6 ICMP-трафик
337nft "add rule inet filter input meta l4proto ipv6-icmp icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, mld-listener-query, mld-listener-report, mld-listener-reduction, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, mld2-listener-report } accept comment \"Necessary IPv6 ICMP\""
338# Разрешить UDP-трассировку (traceroute)
339nft "add rule inet filter input_wan udp dport 33434-33534 reject comment \"Allow UDP traceroute\""
340# Перенаправить IPv4-трафик из LAN в цепочку 'input_lan'
341nft "add rule inet filter input ip saddr @lan4 jump input_lan comment \"LAN IPv4 processing\""
342# Перенаправить IPv6-трафик из LAN в цепочку 'input_lan'
343nft "add rule inet filter input ip6 saddr @lan6 jump input_lan comment \"LAN IPv6 processing\""
344# Перенаправить IPv4-трафик из WAN в цепочку 'input_wan'
345nft "add rule inet filter input ip saddr != @lan4 jump input_wan comment \"WAN IPv4 processing\""
346# Перенаправить IPv6-трафик из WAN в цепочку 'input_wan'
347nft "add rule inet filter input ip6 saddr != @lan6 jump input_wan comment \"WAN IPv6 processing\""
348# Перенаправить остальной входящий трафик в цепочку 'log_drop'
349nft "add rule inet filter input jump log_drop comment \"Default drop\""
350# Разрешить весь TCP/UDP трафик из LAN
351nft "add rule inet filter input_lan meta l4proto { tcp, udp } accept comment \"Allow all TCP/UDP from LAN\""
352# Разрешить определенные TCP-порты из LAN
353nft "add rule inet filter input_lan tcp dport { 80, 443 } accept comment \"Allowed TCP ports from LAN\""
354# Разрешить определенные UDP-порты из LAN
355nft "add rule inet filter input_lan udp dport { 53, 123 } accept comment \"Allowed UDP ports from LAN\""
356# Отбрасывать новые соединения из LAN с логированием
357nft "add rule inet filter input_lan ct state new jump log_drop comment \"Drop all from LAN with log\""
358# Разрешить SSH из WAN
359nft "add rule inet filter input_wan tcp dport 22 accept comment \"Allow SSH from WAN\""
360# Разрешить определенные TCP-порты из WAN
361nft "add rule inet filter input_wan tcp dport { 80, 443 } accept comment \"Allowed TCP ports from WAN\""
362# Разрешить определенные UDP-порты из WAN
363nft "add rule inet filter input_wan udp dport { 53, 123 } accept comment \"Allowed UDP ports from WAN\""
364# Разрешить DNAT для порта 443 на eth0
365nft "add rule inet filter input_wan iifname \"eth0\" tcp dport 443 accept comment \"DNAT: 443->43443\""
366# Разрешить трафик после DNAT на eth0
367nft "add rule inet filter input_wan iifname \"eth0\" ct status dnat tcp dport 43443 accept comment \"DNAT: 443->43443\""
368# Отбрасывать новые соединения из WAN с логированием
369nft "add rule inet filter input_wan ct state new jump log_drop comment \"Drop all from WAN\""
370# Разрешить установленные и связанные соединения для пересылки
371nft "add rule inet filter forward ct state established,related accept"
372# Разрешить входящую пересылку для интерфейсов K8s (cni)
373nft "add rule inet filter forward iifname \"cni*\" accept comment \"Allow K8s forward in\""
374# Разрешить исходящую пересылку для интерфейсов K8s (cni)
375nft "add rule inet filter forward oifname \"cni*\" accept comment \"Allow K8s forward out\""
376# Разрешить входящую пересылку для интерфейсов K8s (flannel)
377nft "add rule inet filter forward iifname \"flannel.*\" accept comment \"Allow K8s forward in\""
378# Разрешить исходящую пересылку для интерфейсов K8s (flannel)
379nft "add rule inet filter forward oifname \"flannel.*\" accept comment \"Allow K8s forward out\""
380# Разрешить входящую пересылку для интерфейсов K8s (Calico VXLAN)
381nft "add rule inet filter forward iifname \"vxlan.calico\" accept comment \"Allow K8s forward in\""
382# Разрешить исходящую пересылку для интерфейсов K8s (Calico VXLAN)
383nft "add rule inet filter forward oifname \"vxlan.calico\" accept comment \"Allow K8s forward out\""
384# Разрешить входящую пересылку для мостов Docker
385nft "add rule inet filter forward iifname \"br-*\" accept comment \"Allow Docker forward in\""
386# Разрешить исходящую пересылку для мостов Docker
387nft "add rule inet filter forward oifname \"br-*\" accept comment \"Allow Docker forward out\""
388# Разрешить входящую пересылку для мостов KVM/libvirt
389nft "add rule inet filter forward iifname \"virbr*\" accept comment \"Allow VMs forward in\""
390# Разрешить исходящую пересылку для мостов KVM/libvirt
391nft "add rule inet filter forward oifname \"virbr*\" accept comment \"Allow VMs forward out\""
392# Разрешить входящую пересылку для VPN-туннелей (OpenVPN/WireGuard)
393nft "add rule inet filter forward iifname \"tun*\" accept comment \"Allow OC forward in\""
394# Разрешить исходящую пересылку для VPN-туннелей (OpenVPN/WireGuard)
395nft "add rule inet filter forward oifname \"tun*\" accept comment \"Allow OC forward out\""
396# Разрешить входящую пересылку для WireGuard интерфейсов
397nft "add rule inet filter forward iifname \"wg*\" accept comment \"Allow WG forward in\""
398# Разрешить исходящую пересылку для WireGuard интерфейсов
399nft "add rule inet filter forward oifname \"wg*\" accept comment \"Allow WG forward out\""
400# Отбрасывать новые соединения для пересылки с логированием
401nft "add rule inet filter forward ct state new jump log_drop comment \"Drop all forward\""
402# Логировать отбрасываемые пакеты с ограничением скорости
403nft "add rule inet filter log_drop limit rate 5/second log prefix \"NFT-DROP: \" flags all counter comment \"Drop logging\""
404# Отклонять TCP-соединения с RST-пакетом
405nft "add rule inet filter input meta l4proto tcp reject with tcp reset comment \"Reject TCP\""
406# Отклонять UDP-пакеты
407nft "add rule inet filter input meta l4proto udp reject comment \"Reject UDP\""
408# Отклонять пакеты других протоколов с ICMP-сообщением
409nft "add rule inet filter input counter reject with icmpx type port-unreachable comment \"Reject other protocols\""
410# Защита от сканирования портов с ограничением скорости
411nft "add rule inet filter input pkttype host limit rate 5/second counter reject with icmpx type admin-prohibited comment \"Protection from port scanning\""
412# Окончательно отбросить все пакеты в цепочке log_drop
413nft "add rule inet filter log_drop drop comment \"Drop all\""
414# Настроить DNAT: перенаправить порт 443 на 43443
415nft "add rule inet nat prerouting iifname \"eth0\" tcp dport 443 redirect to 43443 comment \"DNAT: 443->43443\""
416# Настроить DNAT: перенаправить порт 443 на 43443 (альтернативный синтаксис)
417nft "add rule inet nat prerouting iifname \"eth0\" tcp dport 443 dnat to :43443 comment \"DNAT: 443->43443 \""
418# Настроить SNAT (маскарадинг) для всего исходящего трафика (кроме loopback)
419nft "add rule inet nat postrouting oifname != lo masquerade comment \"SNAT: NAT processing for all\""
420# Настроить SNAT (маскарадинг) для исходящего трафика через eth0
421nft "add rule inet nat postrouting oifname \"eth0\" masquerade comment \"SNAT: NAT procesing for eth0\""
422# Настроить SNAT (маскарадинг) для исходящего трафика через VPN-туннели
423nft "add rule inet nat postrouting oifname \"tun*\" masquerade comment \"SNAT: NAT procesing for OC\""
424# Вывести весь набор правил nftables
425nft list ruleset
426# Вывести список всех таблиц nftables
427nft list tables
428# Вывести правила конкретной таблицы (inet filter)
429nft list table inet filter
430# Вывести правила конкретной цепочки (inet filter input)
431nft list chain inet filter input
432# Вывести весь набор правил с 'handle' для каждого правила
433nft -a list ruleset
434# Очистить все таблицы и цепочки nftables
435nft flush ruleset
436# Очистить все правила в таблице 'inet filter'
437nft flush table inet filter
438# Удалить таблицу 'inet filter'
439nft delete table inet filter
440# Добавить правило: разрешить SSH на входной цепочке
441nft add rule inet filter input tcp dport 22 accept
442# Вывести правила входной цепочки с 'handle'
443nft -a list chain inet filter input
444# Удалить правило из цепочки по его 'handle'
445nft delete rule inet filter input handle 15
446# Заменить правило в цепочке по его 'handle'
447nft replace rule inet filter input handle 15 tcp dport 2222 accept
448# Загрузить правила nftables из файла
449nft -f /etc/nftables.conf
450# Проверить синтаксис файла правил nftables
451nft -c -f /etc/nftables.conf
452# Сохранить текущий набор правил nftables в файл
453nft -s list ruleset > /etc/nftables.conf
454# Мониторинг событий nftables в реальном времени
455nft monitor
456# Трассировка прохождения пакетов через правила nftables
457nft monitor trace
458# Загрузить правила с отладочной информацией netlink
459nft --debug=netlink -f myrules.nft
460# Заменить существующее правило nftables по его 'handle' (из раздела "Сеть")
461sudo nft replace rule inet filter input handle 23 'tcp dport 2222 accept comment "Allow SSH"'
462# Просмотреть логи nftables в реальном времени (из раздела "Сеть")
463sudo journalctl -k -f -g 'NFT-DROP'
464
465## ==============
466## Захват пакетов
467## ==============
468# Захват пакетов для конкретного хоста и порта
469tcpdump -i any -nn -q dst host 10.11.12.13 and dst port 443
470# Захват пакетов и сохранение их в pcap-файл
471sudo tcpdump -nn -i any host 10.11.12.13 -w ./tcpdump.pcap
472# Захват пакетов и вывод их в текстовый файл
473sudo tcpdump -nn -i any host 10.11.12.13 >> ./tcpdump.txt
474# Просмотр содержимого pcap-файла
475sudo tcpdump -qns 0 -X -r ./tcpdump.pcap | less
476
477## ========================
478## Шифрование и сертификаты
479## ========================
480# Зашифровать tar-архив с помощью OpenSSL (AES-256-CBC)
481tar -czf - /var/log/apt | openssl enc -aes-256-cbc -pbkdf2 -e -out ./logs.tar.gz.enc
482# Расшифровать файл, зашифрованный OpenSSL
483openssl enc -aes-256-cbc -pbkdf2 -d -in ./logs.tar.gz.enc -out ./logs.tar.gz
484# Проверить SSL/TLS-соединение с сервером
485openssl s_client -connect r4ven.me:443
486# Получить и отобразить удаленный SSL/TLS-сертификат
487openssl s_client -connect r4ven.me:443 < /dev/null 2> /dev/null | openssl x509 -text
488# Получить удаленный SSL/TLS-сертификат с указанием ServerName
489openssl s_client -connect r4ven.me:443 -servername r4ven.me < /dev/null 2>/dev/null | openssl x509 -text
490# Просмотреть содержимое локального X.509 сертификата
491openssl x509 -in ./ca-cert.crt -text -noout
492# Сгенерировать самоподписанный SSL/TLS-сертификат
493openssl req -x509 -nodes -days 7300 -newkey rsa:4096 -keyout ./example.com.key -out ./example.crt -subj "/C=RU/ST=Moscow/L=Moscow/O=Example/OU=TEST/CN=example.com"
494# Получить MD5-хеш модуля открытого ключа сертификата
495openssl x509 -noout -modulus -in /var/lib/kubelet/pki/kubelet.crt | openssl md5
496# Получить MD5-хеш модуля закрытого ключа
497openssl rsa -noout -modulus -in /var/lib/kubelet/pki/kubelet.key | openssl md5
498# Создать локальные доверенные TLS-сертификаты с mkcert
499mkcert -cert-file jenkins.local.pem -key-file jenkins.local-key.pem "jenkins.local" "localhost" "127.0.0.1"
500# Вывести список доверенных корневых сертификатов (RHEL/CentOS)
501openssl crl2pkcs7 -nocrl -certfile /etc/pki/tls/certs/ca-bundle.crt | openssl pkcs7 -print_certs -text | grep "Subject:"
502# Вывести список доверенных корневых сертификатов (Debian/Ubuntu)
503openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt | openssl pkcs7 -print_certs -text | grep "Subject:"
504# Добавить новый доверенный сертификат в систему (RHEL/CentOS)
505cp ./org_name.crt /etc/pki/ca-trust/source/anchors/org_name.crt | update-trust extract
506# Добавить новый доверенный сертификат в систему (Debian/Ubuntu)
507cp ./org_name.crt /usr/local/share/ca-certificates/org_name.crt | update-ca-certificates
508# Вывести список доверенных организаций из системного хранилища
509trust list | less
510# Зашифровать файл симметричным ключом с помощью GPG
511gpg --batch --passphrase-file /path/to/password_file --symmetric --cipher-algo AES256 example.txt
512
513## ==================
514## Веб-взаимодействие
515## ==================
516# Скачать файл по URL с помощью curl
517curl -fsSL https://raw.githubusercontent.com/r4ven-me/dots/main/.zshrc -o ~/.zshrc
518# Выполнить HTTP-запрос с трассировкой сетевого взаимодействия
519curl --trace-ascii trace.txt r4ven.me
520# Показать все хосты, к которым подключался curl (включая редиректы)
521curl -s -L -v https://example.com 2>&1 | grep 'Connected to'
522# Отправить текстовое сообщение в Telegram через Bot API
523curl -s -X POST -H 'Content-Type: application/json' -d '{"chat_id": "'"$TG_CHAT_ID"'", "text": "'"${item}: $message"'", "parse_mode": "Markdown"}' "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage"
524# Отправить файл в Telegram через Bot API
525curl -s -X POST -F "chat_id=${TG_CHAT_ID}" -F "document=@${FILE_PATH}" -F "caption=${CAPTION_TEXT}" -F "parse_mode=Markdown" "https://api.telegram.org/bot${TG_BOT_TOKEN}/sendDocument"
526# Активировать универсальный вебхук Jenkins для Git-события
527curl -L -X POST -H "Content-Type: application/json" -d '{"ref":"refs/heads/main","repository":{"full_name":"test/repo"}}' "http://jenkins.example.com/generic-webhook-trigger/invoke?token=12345qwerty"
528
529## =====================
530## Пользователи и группы
531## =====================
532# Добавить новую системную группу
533addgroup --system --gid 1995 zabbix
534# Добавить нового системного пользователя (без пароля и оболочки)
535adduser --system --gecos 'Zabbix monitoring system' --disabled-password --uid 1997 --ingroup zabbix --shell /sbin/nologin --home /opt/zabbix/zabbix_data zabbix
536
537## =======
538## Systemd
539## =======
540# Отредактировать файл юнита systemd (создаст override)
541systemctl edit --full --force unitname.service
542# Показать свойства системного среза (slice)
543systemctl show system.slice
544# Показать все параметры и статус юнита systemd
545systemctl show unit_name
546# Проверить, активен ли юнит systemd
547systemctl is-active --quiet cron
548# Перезапустить юнит systemd с включенным отладочным логированием
549sudo SYSTEMD_LOG_LEVEL=debug systemctl restart systemd-networkd
550# Вывести иерархию cgroups, управляемых systemd (альтернативно)
551sudo systemd-cgls
552# Показать максимальный лимит памяти для юнита systemd
553systemctl show unitname.service -p MemoryMax
554# Установить или изменить лимит памяти для юнита systemd
555systemctl set-property unitname.service MemoryMax=2G
556# Показать использование ресурсов cgroups в стиле top
557sudo systemd-cgtop -d 3
558
559## ============================
560## Производительность и отладка
561## ============================
562# Мониторинг производительности CPU в реальном времени (perf top)
563perf top
564# Получить сводную статистику производительности для программы
565perf stat ./your_program
566# Записать данные профилирования выполнения программы
567perf record -g ./your_program
568# Записать данные профилирования для запущенного процесса
569perf record -g -p $(pidof your_program)
570# Анализировать записанные данные профилирования (perf report)
571perf report ./perf.data
572# Тестирование скорости записи на диск
573sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
574# Тестирование скорости чтения с диска (с очисткой кеша)
575sysctl -w vm.drop_caches=3 && dd if=tempfile of=/dev/null bs=1M count=1024
576# Трассировать системные вызовы выполняемой команды
577strace -f -e execve ls -l
578# Присоединиться к запущенному процессу и трассировать его системные вызовы
579strace -p 123
580# Вывести переменные окружения запущенного процесса
581sudo cat /proc/<pid>/environ | xargs -0 -n1
582
583## ===
584## SSH
585## ===
586# Сгенерировать SSH-ключ Ed25519 без запроса парольной фразы
587ssh-keygen -q -N "" -t ed25519 -f ~/.ssh/id_ed25519_test
588# Изменить комментарий к существующему SSH-ключу
589ssh-keygen -c -f ~/.ssh/id_ed25519_test
590# Вывести публичную часть SSH-ключа из приватного файла
591ssh-keygen -y -f ~/.ssh/id_ed25519
592# Скопировать публичный SSH-ключ на удаленный хост
593ssh-copy-id -i ~/.ssh/id_ed25519 user@host
594# Настроить локальное перенаправление портов SSH
595ssh -q -f -N -L 127.0.0.1:5432:localhost:5432 ivan@test.r4ven.me
596# Настроить временное локальное перенаправление портов SSH
597ssh -q -f -L 127.0.0.1:5432:localhost:5432 ivan@test.r4ven.me sleep 60
598# Полное временное локальное перенаправление портов SSH с опциями
599ssh -q -f -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ExitOnForwardFailure=yes -L 127.0.0.1:5432:localhost:5432 test.r4ven.me -p 2222 -l ivan -i ~/.ssh/id_ed25519_test sleep 60
600# Настроить обратное (удаленное) перенаправление портов SSH
601ssh -q -f -N -R 127.0.0.1:4443:localhost:5001 ivan@test.r4ven.me
602# Удалить запись хоста из файла known_hosts
603ssh-keygen -f ~/.ssh/known_hosts -R 192.168.1.31
604# Синхронизировать файлы и директории по SSH с помощью rsync
605rsync --archive --compress --links --hard-links --xattrs --human-readable --delete -e "ssh -q -o StrictHostKeyChecking=no  -o UserKnownHostsFile=/dev/null -p 2222 -l test" "/path/to/local/source" r4ven.me:"/path/to/remote/destination/"
606
607## ===========
608## Базы данных
609## ===========
610# Получить статус репликасета MongoDB
611mongo -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval "rs.status()"
612# Подсчитать количество первичных узлов в репликасете MongoDB
613mongo --quiet -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval "rs.status().members.filter(m => m.stateStr === 'PRIMARY').length"
614# Подсчитать количество вторичных узлов в репликасете MongoDB
615mongo --quiet -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval "rs.status().members.filter(m => m.stateStr === 'SECONDARY').length"
616# Подсчитать количество нездоровых узлов в репликасете MongoDB
617mongo --quiet -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval "rs.status().members.filter(m => m.health !== 1).length"
618# Проверить успешность подключения к MongoDB и статус репликасета
619mongo --quiet -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval "rs.status().ok"
620# Проверить задержку репликации MongoDB (более 30 секунд)
621mongo --quiet -u root -p "$(awk -F'"' '/auth/ {print $4}' "$MONGO_SHELL")" --eval 'var s = rs.status(); var p = s.members.find(m=>m.stateStr==="PRIMARY").optimeDate; var bad = s.members.filter(m => m.stateStr==="SECONDARY" && Math.abs(p - m.optimeDate) > 30000).length; print(bad);'
622# Создать файл .pgpass для автоматической аутентификации PostgreSQL
623echo 'localhost:5432:mydb:myuser:mypassword' > ~/.pgpass && chmod 0600 ~/.pgpass
624# Войти в консоль PostgreSQL как пользователь postgres
625sudo -u postgres psql -U postgres
626# Установить или изменить пароль пользователя PostgreSQL
627ALTER USER postgres WITH PASSWORD 'your_new_password'\;
628
629## =================================
630## Виртуализация (QEMU/KVM, Proxmox)
631## =================================
632# Установить необходимые инструменты для работы с QCOW2 (qemu-utils, libguestfs-tools)
633
634apt install -y qemu-utils libguestfs-tools
635# Скачать облачный образ QCOW2 Debian 13
636curl https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2 -o debian-13-generic-amd64.qcow2
637# Изменить размер QCOW2-образа диска
638qemu-img resize ./debian-13-generic-amd64.qcow2 20G
639# Настроить QCOW2-образ (обновление, установка пакетов, локали)
640virt-customize -a debian-13-generic-amd64.qcow2 --update --install qemu-guest-agent,locales,zsh,git,curl,neovim,bat,eza,fzf,grc --run-command "echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen" --run-command "echo 'ru_RU.UTF-8 UTF-8' >> /etc/locale.gen" --run-command "locale-gen"
641# Установить права доступа и владельца для файла
642chmod 640 /tmp/.zshrc && chown root: /tmp/.zshrc
643# Скопировать файл с хоста в QCOW2-образ
644virt-copy-in -a ./debian-13-generic-amd64.qcow2 /host/path /guest/path
645# Редактировать файл внутри QCOW2-образа
646virt-edit -a ./debian-13-generic-amd64.qcow2 /guest/path
647# Смонтировать QCOW2-образ диска
648guestmount -i -a ./debian-13-generic-amd64.qcow2 /mnt/qcow2
649# Размонтировать QCOW2-образ диска
650guestunmount /mnt/qcow2
651# Запустить интерактивную оболочку guestfish для QCOW2-образа
652guestfish -i -a ./debian-13-generic-amd64.qcow2
653# Выполнить команду shell внутри QCOW2-образа (через guestfish)
654sh 'grep root /etc/passwd'
655# Вывести содержимое директории внутри QCOW2-образа
656virt-ls -a ./debian-13-generic-amd64.qcow2 /path
657# Просмотреть содержимое файла внутри QCOW2-образа
658virt-cat -a ./debian-13-generic-amd64.qcow2 /path/to/file
659# Скопировать файл из QCOW2-образа на хост
660virt-copy-out -a ./debian-13-generic-amd64.qcow2 /guest/path /host/path
661# Создать tar-архив из содержимого директории внутри QCOW2-образа
662virt-tar-out -a ./debian-13-generic-amd64.qcow2 /path /host/archive.tar
663# Извлечь tar-архив в директорию внутри QCOW2-образа
664virt-tar-in -a ./debian-13-generic-amd64.qcow2 ./archive.tar /guest/path
665# Вывести список файловых систем внутри QCOW2-образа
666virt-filesystems -a ./debian-13-generic-amd64.qcow2
667# Извлечь ядро Linux из QCOW2-образа
668virt-get-kernel -a ./debian-13-generic-amd64.qcow2
669# Прочитать системные логи из QCOW2-образа
670virt-log -a ./debian-13-generic-amd64.qcow2
671# Получить информацию об операционной системе внутри QCOW2-образа
672virt-inspector -a ./debian-13-generic-amd64.qcow2
673# Показать использование дискового пространства внутри QCOW2-образа
674virt-df -a ./debian-13-generic-amd64.qcow2
675# Создать образ виртуальной машины с помощью virt-builder
676virt-builder <os-name>
677# Управлять репозиторием образов для virt-builder
678virt-builder-repository
679# Настроить QCOW2-образ (установка пакетов, добавление SSH-ключа)
680virt-customize -a ./debian-13-generic-amd64.qcow2 --install vim --ssh-inject root:file:id_rsa.pub
681# Подготовить QCOW2-образ для развертывания (очистка, обнуление)
682virt-sysprep -a ./debian-13-generic-amd64.qcow2
683# Уменьшить размер QCOW2-образа, удаляя пустые блоки
684virt-sparsify ./debian-13-generic-amd64.qcow2 <out.qcow2>
685# Изменить размер разделов внутри QCOW2-образа
686virt-resize --expand /dev/sda1 in.qcow2 out.qcow2
687# Установить libguestfs-tools для управления образами в Proxmox
688apt update && apt install -y libguestfs-tools
689# Скачать облачный образ Debian 13 QCOW2
690curl https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2 -o debian-13-generic-amd64.qcow2
691# Изменить размер QCOW2-образа для использования в Proxmox
692qemu-img resize ./debian-13-generic-amd64.qcow2 20G
693# Создать новую виртуальную машину в Proxmox
694qm create 7777 --name "debian13-k8s-template" --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
695# Импортировать QCOW2-образ как диск для ВМ Proxmox
696qm importdisk 7777 ./debian-13-generic-amd64.qcow2 storage --format qcow2
697# Подключить импортированный диск к ВМ как SCSI-устройство
698qm set 7777 --scsihw virtio-scsi-single --scsi0 storage:7777/vm-7777-disk-0.qcow2
699# Установить порядок загрузки ВМ Proxmox
700qm set 7777 --boot order=scsi0
701# Добавить виртуальный диск для Cloud-Init в ВМ
702qm set 7777 --ide0 storage:cloudinit
703# Включить последовательную консоль для ВМ Proxmox
704qm set 7777 --serial0 socket --vga serial0
705# Включить QEMU Guest Agent для ВМ
706qm set 7777 --agent enabled=1
707# Конвертировать ВМ Proxmox в шаблон
708qm template 7777
709# Пересканировать конфигурацию ВМ Proxmox
710qm rescan --vmid 7777
711# Показать полную конфигурацию ВМ Proxmox
712qm config 7777
713# Добавить новую роль пользователя в Proxmox (pveum)
714pveum role add TFUser -privs "Pool.Allocate VM.Console VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.Audit VM.PowerMgmt VM.GuestAgent.Audit Datastore.AllocateSpace Datastore.Allocate Datastore.Audit SDN.Use"
715# Добавить нового пользователя в Proxmox (pveum)
716pveum user add tfuser@pve
717# Назначить роль пользователю Proxmox
718pveum aclmod / -user tfuser@pve -role TFUser
719# Создать токен API для пользователя Proxmox
720pveum user token add tfuser@pve tf --privsep 0
721
722## =============================================
723## Инфраструктура как код (OpenTofu / Terraform)
724## =============================================
725# Инициализировать рабочую директорию OpenTofu с обновлением модулей
726tofu init -upgrade
727# Проверить синтаксис и логику конфигурации OpenTofu
728tofu validate
729# Перенастроить бэкенд OpenTofu с новыми параметрами
730tofu init -reconfigure -backend-config="path=./dev.tfstate"
731# Сгенерировать план выполнения изменений OpenTofu
732tofu plan -var-file=./dev.tfvars
733# Создать план выполнения и сохранить его в файл
734tofu plan -var-file=./dev.tfvars -out ./dev.tfplan
735# Просмотреть сохраненный файл плана OpenTofu
736tofu show ./dev.tfplan
737# Применить изменения, описанные в конфигурации OpenTofu
738tofu apply -var-file=./dev.tfvars
739# Применить изменения с указанным уровнем параллелизма
740tofu apply -var-file=./dev.tfvars -parallelism=2
741# Уничтожить все ресурсы, управляемые конфигурацией OpenTofu
742tofu destroy -var-file=./dev.tfvars
743# Проверить, соответствуют ли файлы OpenTofu стандартному форматированию
744tofu fmt -check
745# Автоматически форматировать файлы конфигурации OpenTofu
746tofu fmt
747# Рекурсивно форматировать файлы конфигурации OpenTofu
748tofu fmt -recursive
749# Включить отладочное логирование для OpenTofu (DEBUG уровень)
750export TF_LOG="DEBUG"
751# Установить путь для файла логов OpenTofu
752export TF_LOG_PATH="tofu.log"
753# Отслеживать логи OpenTofu в реальном времени
754tail -f ./tofu.log
755# Отключить отладочное логирование OpenTofu
756unset TF_LOG TF_LOG_PATH
757
758## ==========================================
759## Контейнеризация (Docker, Kubernetes, Helm)
760## ==========================================
761# Создать кастомную Docker-сеть типа bridge
762docker network create --opt com.docker.network.bridge.name=br-monitoring --opt com.docker.network.enable_ipv6=false --driver bridge --subnet 172.22.22.0/24 --gateway 172.22.22.1 monitoring_network
763# Запустить контейнер и подключить его к существующей сети
764docker run -it --rm --network swarm_network alpine sh
765# Собрать Docker-образ из Dockerfile
766docker build -t r4venme/test .
767# Собрать мультиархитектурный Docker-образ с Buildx
768docker buildx create --use && docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t r4venme/test:1.0 ./
769# Запустить контейнер с сетевыми утилитами, используя ресурсы другого контейнера
770docker run --rm -it --network=container:test --pid container:test wbitt/network-multitool:alpine-extra bash
771# Анализировать содержимое Docker-образа с помощью Dive
772docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest nginx:1.29
773# Получить информацию о различных объектах Kubernetes в namespace
774kubectl -n name_space get pods,svc,pvc,sts,pv -o wide
775# Показать метки (labels) для всех узлов Kubernetes
776kubectl get nodes --show-labels
777# Принудительно удалить все ресурсы в указанном namespace
778kubectl delete all --all -n name_space --force --grace-period=0
779# Проверить синтаксис YAML-манифеста на стороне клиента
780kubectl apply --dry-run=client -f your-manifest.yaml
781# Проверить манифест с API-сервером Kubernetes без применения изменений
782kubectl apply --dry-run=server -f your-manifest.yaml
783# Добавить внешний репозиторий Helm-чартов
784helm repo add gitea-charts https://dl.gitea.com/charts/
785# Поиск чартов в добавленном репозитории Helm
786helm search repo gitea-charts
787# Скачать и распаковать Helm-чарт
788helm pull gitea-charts/gitea --untar
789
790## ==========================
791## Управление версиями (Git)
792## ==========================
793# Инициализировать новый Git-репозиторий и добавить удаленный origin
794git init --initial-branch=main && git remote add origin ssh://git@github.com/r4ven-me/reponame.git
795# Инициализировать Git-репозиторий с настройкой пользователя и origin
796git init --initial-branch=main && git config user.name "Ivan Cherniy" && git config user.email "kar-kar@r4ven.me" && git remote add origin ssh://git@github.com/r4ven-me/reponame.git
797# Добавить, закоммитить и отправить изменения в удаленный репозиторий
798git add . && git commit -m 'upd' && git push
799# Показать красивый, графический лог Git
800git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
801# Создать файлы .gitkeep в пустых директориях репозитория
802find /path/to/repo/ -type d -empty -exec touch {}/.gitkeep \;
803
804## =======================
805## Автоматизация (Ansible)
806## =======================
807# Вывести текущий инвентарь Ansible
808ansible-inventory --list
809# Собрать факты о системе для указанного хоста
810ansible debian12-vpn -m setup -a 'filter=os_family,distribution_version'
811# Запустить плейбук Ansible с передачей дополнительных переменных
812ansible-playbook playbook.yml -e 'user_name=root' -e 'user_home=/root'
813# Выполнить команду shell на удаленном хосте через Ansible
814ansible debian12-vpn -b -m shell -a 'systemctl start service_name'
815
816## ==========================
817## Разное / Системные утилиты
818## ==========================
819# Вывести информацию о логических томах LVM и снимках
820lvs --options lv_name,lv_size,origin,lv_attr
821# Добавить новое задание в crontab текущего пользователя
822{ crontab -l; echo "0 3 * * 0 ls -l &> dirs.txt"; } | crontab -
823# Принудительная перезагрузка системы через SysRq
824echo b > /proc/sysrq-trigger
825# Вывести справку по Magic SysRq Key
826echo h > /proc/sysrq-trigger; grep 'sysrq: HELP' /var/log/kern.log
827# Включить (активировать) определенное ядро CPU
828echo 1 > /sys/devices/system/cpu/cpu2/online
829# Перенаправить весь вывод скрипта в syslog и файл с временными метками
830exec > >(tee >(logger -t $(basename "${BASH_SOURCE[0]}")) | while IFS= read -r line; do echo "$(date +"[%Y-%m-%d %H:%M:%S.%3N]") - $line"; done | tee -a "${BASH_SOURCE[0]%.*}.log") 2>&1
831# Сгенерировать случайную буквенно-цифровую строку длиной 8 символов
832cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1
833# Показать все 256 цветов переднего плана терминала
834for i in {0..255}; do printf "\e[38;5;%sm%03d " "$i" "$i"; (( (i + 1) % 16 == 0 )) && printf "\e[0m\n"; done; printf "\e[0m\n"
835# Показать все 256 цветов заднего плана терминала
836for i in {0..255}; do printf "\e[48;5;${i}m %03d \e[0m" $i; [ $((($i+1)%8)) -eq 0 ] && echo; done
837# Вывести только команды из истории bash (без номеров и даты)
838history | cut -c 26-
839# Проверить доступность Zabbix-агента на хосте
840zabbix_get -s 192.168.1.100 -p 10050 -k agent.ping
841# Скачать пример конфигурации .zshrc
842curl -fsSL https://raw.githubusercontent.com/r4ven-me/dots/main/.zshrc --output /tmp/.zshrc
Нажмите, чтобы развернуть и увидеть больше

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/automation/kollekciya-odnostrochnikov-bash/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша