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

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

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

BASH
  1## Process Management
  2# показать топ-5 процессов по CPU
  3ps --sort=-%cpu -eo user,pid,ppid,state,comm | head -n6
  4# показать топ-5 процессов по памяти
  5ps --sort=-%mem -eo user,pid,ppid,state,comm | head -n6
  6# показать дерево процессов
  7ps -axf -eo user,pid,ppid,state,comm
  8# показать зомби-процессы
  9ps -eo user,pid,ppid,state,comm | awk '$4=="Z" {print $3}'
 10# показать команду родительского процесса
 11ps -o pid,command --ppid 698
 12# показать дерево cgroups systemd
 13systemd-cgls
 14# показать иерархию процессов в виде дерева
 15pstree -p -t -n -C age
 16# вывести исполняемые бинарники всех процессов пользователя
 17for 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
 18
 19## System Monitoring
 20# показать точки монтирования с заполнением >80%
 21df -h | awk '$5 ~ /^8[0-9]%/ {print $6}'
 22# показать топ-20 по использованию диска
 23du -h / 2> /dev/null | sort -rh | head -n 20
 24# показать открытые файлы в директории
 25lsof +D /opt
 26# показать аптайм в unixtime
 27date -d "$(uptime -s)" +%s
 28# показать топ-10 команд из истории bash
 29history | awk '{print $2}' | sort | uniq -c | sort -rn | head
 30# показать процессы, использующие swap
 31for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | head -n 10
 32# показать значение swappiness
 33cat /proc/sys/vm/swappiness
 34# показать OOM score для процессов
 35printf "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
 36# мониторинг IO активности
 37iotop -o -P -d 5
 38# извлечь IP-адреса из лога
 39grep -a -E '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log
 40
 41## Scheduling
 42# добавить задание в cron
 43{ crontab -l; echo "0 3 * * 0 ls -l &> dirs.txt"; } | crontab -
 44
 45## Networking
 46# показать прослушиваемые порты
 47ss -tuln | awk '{print $5}' | grep -Eo ':[0-9]+$' | sort -t: -k2 -n -u
 48# игнорировать ICMP-пинги
 49echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all
 50# iptables: отслеживать ICMP-запросы
 51iptables -A INPUT -p icmp --icmp-type echo-request -m recent --set --name PING_LIST
 52# iptables: ограничить ICMP-запросы
 53iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 10 --hitcount 5 --name PING_LIST -j DROP
 54# nftables: заменить правило
 55nft replace rule inet filter input handle 23 'tcp dport 2222 accept comment "Allow SSH"'
 56# проверить порт через curl
 57curl -v telnet://10.11.12.13:1234
 58# проверить порт через echo
 59echo > /dev/tcp/r4ven.me/443 && echo "open" || echo "unavailable"
 60# проверить порт через openssl
 61openssl s_client -connect r4ven.me:443
 62
 63## Packet Capture
 64# захват пакетов по хосту и порту
 65tcpdump -i any -nn -q dst host 10.11.12.13 and dst port 443
 66# захват пакетов в файл
 67sudo tcpdump -nn -i any host 10.11.12.13 -w ./tcpdump.pcap
 68# захват пакетов в stdout
 69sudo tcpdump -nn -i any host 10.11.12.13 >> ./tcpdump.txt
 70# чтение pcap дампа
 71sudo tcpdump -qns 0 -X -r ./tcpdump.pcap | less
 72
 73## Encryption / Certificates
 74# зашифровать tar через openssl
 75tar -czf - /var/log/apt | openssl enc -aes-256-cbc -pbkdf2 -e -out ./logs.tar.gz.enc
 76# расшифровать файл через openssl
 77openssl enc -aes-256-cbc -pbkdf2 -d -in ./logs.tar.gz.enc -out ./logs.tar.gz
 78# подключиться к серверу через openssl
 79openssl s_client -connect r4ven.me:443
 80# показать сертификат удалённого сервера
 81openssl s_client -connect r4ven.com:443 < /dev/null 2> /dev/null | openssl x509 -text
 82# показать альтернативный сертификат
 83openssl s_client -connect r4ven.me:443 -servername r4ven.me < /dev/null 2>/dev/null | openssl x509 -text
 84# показать локальный сертификат
 85openssl x509 -in ./ca-cert.pem -text -noout
 86# зашифровать файл через GPG
 87gpg --batch --passphrase-file /path/to/password_file --symmetric --cipher-algo AES256 example.txt
 88
 89
 90## DNS / Network Tools
 91# запрос через dig (по умолчанию)
 92dig r4ven.me +short +answer +identify
 93# запрос через альтернативный DNS
 94dig @8.8.8.8 r4ven.me +short +answer +identify
 95# nmap: проверка TCP порта
 96nmap 10.11.12.13 -p 22
 97# nmap: проверка UDP порта
 98nmap -sU 10.11.12.13 -p 53
 99
100
101## Docker
102# создать docker-сеть
103docker 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
104# подключиться к сети контейнером
105docker run -it --rm --network swarm_network alpine sh
106# собрать docker-образ
107docker build -t r4venme/test .
108# сборка multiarch образа
109docker buildx create --use && docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t r4venme/test:1.0 .
110# запустить multitool контейнер
111docker run --rm -it --network=container:test --pid container:test wbitt/network-multitool:alpine-extra bash
112
113## Git
114# инициализировать репозиторий и добавить remote
115git init --initial-branch=main && git remote add origin ssh://git@github.com/r4ven-me/reponame.git
116# инициализировать git с конфигом пользователя
117git 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
118# отправить изменения в репозиторий
119git add . && git commit -m 'Upd' && git push
120
121## File Management
122# заменить текст в файле на месте
123sed -i.bak 's/old_text/new_text/g' file.txt
124# изменить права на файлы
125find /path -type f -exec chmod 644 {} \;
126# изменить права на директории
127find /path -type d -exec chmod 755 {} \;
128# установить ACL для пользователя
129setfacl -m u:ivan:rwx /opt/mydata
130
131## Web
132# скачать файл через curl
133curl -fsSL https://raw.githubusercontent.com/r4ven-me/dots/main/.zshrc -o ~/.zshrc
134# трассировка HTTP-запроса
135curl --trace-ascii trace.txt r4ven.me
136
137## Users and groups
138# добавить системную группу
139addgroup --system --gid 1995 zabbix
140# добавить системного пользователя
141adduser --system --gecos 'Zabbix monitoring system' --disabled-password --uid 1997 --ingroup zabbix --shell /sbin/nologin --home /opt/zabbix/zabbix_data zabbix
142
143## Systemd
144# отредактировать unit-файл
145systemctl edit --full --force unitname.service
146# показать параметры system.slice
147systemctl show system.slice
148# показать параметры юнита
149systemctl show unit_name
150# проверить статус службы
151systemctl is-active --quiet cron
152# перезапустить службу с отладкой
153sudo SYSTEMD_LOG_LEVEL=debug systemctl restart systemd-networkd
154# показать cgroups systemd
155sudo systemd-cgls
156# top по cgroups
157sudo systemd-cgtop -d 3
158
159## Sysrq
160# показать справку SysRq
161echo h | sudo tee /proc/sysrq-trigger | grep 'sysrq: HELP' /var/log/kern.log
162# выполнить перезагрузку через SysRq
163echo b > /proc/sysrq-trigger
164
165## Ansible
166# получить факты узла
167ansible debian12-vpn -m setup -a 'filter=os_family,distribution_version'
168# запустить playbook с переменными
169ansible-playbook playbook.yml -e 'user_name=root' -e 'user_home=/root'
170# запустить команду оболочки
171ansible debian12-vpn -b -m shell -a 'systemctl start service_name'
172
173## Asciinema
174# записать сессию терминала
175asciinema rec demo.cast
176# конвертировать запись в GIF
177agg demo.cast demo.gif --theme nord --font-family 'Hack Nerd Font Mono' --line-height 1.3 --font-size 18
178
179## Proc
180# трассировка exec команд
181strace -f -e execve ls -l
182# подключиться к PID через strace
183strace -p 123
184# показать переменные окружения процесса
185sudo cat /proc/<pid>/environ | xargs -0 -n1
186
187## Logging
188# перенаправить вывод в лог с отметкой времени
189exec > >(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
190
191## SSH
192# прямое пробрасывание порта
193ssh -q -f -N -L 127.0.0.1:5432:localhost:5432 ivan@test.r4ven.me
194# временное пробрасывание порта
195ssh -q -f -L 127.0.0.1:5432:localhost:5432 ivan@test.r4ven.me sleep 60
196# временное пробрасывание с ключом и опциями
197ssh -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
198# обратное пробрасывание порта
199ssh -q -f -N -R 127.0.0.1:4443:localhost:5001 ivan@test.r4ven.me
200
201## Misc
202# сгенерировать псевдослучайную строку
203cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1
Нажмите, чтобы развернуть и увидеть больше

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

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

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

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

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

Начать поиск

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

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