====== Сборник команд ====== ===== General ===== ==== Info ==== * **free** - объем памяти и объем ее использования, а также использование swap * **uptime** - состояние системы в данный момент, степень ее загруженности и время без перезагрузок * **ps - efx** - все процессы в виде дерева подробно * **who / w** - информация о пользователях находящихся в системе * **htop** - более продвинутый аналог top * smem -t -k -P code -c pss | tail -n 1 - память занимаемая программой "code" ==== Disks ==== * **iostat** - статистика процессора и системы ввода.вывода (iostat -x - подробно) * **hdparm** - информация о жестком диске (hdparm -I /dev/sda) * **df** - информация о дисках * **du** - размер каталогов (du -sh) * **fdisk -l** - просмотреть диски * **cfdisk** - разметка диска * **dd** - копирование и конвертация файлов * ''dd if=/dev/zero of=src/file3 bs=1M count=3'' - создание файла заданного размера * ''sync; dd if=/dev/zero of=/tmp/tempfile bs=1M count=1024; sync'' * ''dd if=/tmp/tempfile of=/dev/null bs=1M count=1024''  - тестирование скорости диска * **bonnie++** - тестирование дисков ==== Network ==== * **vnstat** - a console-based network traffic monitor * **bmon** -  bandwidth monitor and rate estimator * **netstat [-A inet ][-ntalp]** - только интернет сокеты * **netstat -a** - состояние TCP-соединений (как входящих, так и исходящих), таблицы маршрутизации, число сетевых интерфейсов и сетевую статистику по протоколам * ''netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c '' * **route** or **netstat -r** - таблица маршрутизации * **host**, **dig**, **nslookup**, **whois** - информация о DNS и IP * **dig +trace** - вывести трассу DNS * **netcat(nc)** - передача данных через TCP/UDP * ''(echo -e "HTTP/1.1 200 OK\nContent-Type: text/html\n\n Hello World";) | nc -vv -l -p 8080'' * **nmap** - сканирование портов * **ufw** - фаервол (ufw allow 22,  ufw deny 8080) * **curl** - взаимодействие с серверами, POST, GET * **route add -net 10.252.208.0 netmask 255.255.255.224 gw 10.0.10.145** - добавление пути * **iftop -n -i enp5s0** - top сети * Узнаем свой **Ip** и получаем информацию по **Ip**: - ''curl ipinfo.io / curl ifconfig.co / curl ifconfig.co/json'' - ''curl ipinfo.io/188.120.242.62'' - ''geoiplookup 188.120.242.62 (sudo apt install geoip-bin)'' ==== Окружение ==== * **pushd**, **popd** - команда pushd изменяет каталог на указанный, запоминается в стек и потом может быть использована для быстрой обратной навигации * **jobs**, **fg**, **bg** - управление фоновыми процессами (Ctrl+Z - приостанавливается и сворачивается в фон) * **at**, **crontab** - планирование заданий * **tail -f** - слежение за файлом * **lsof** - процессы работающие с портом/сокетом (lsof -i - сетевые) * **set**, **unset**, **env**, **export** - работа с переменными окружения  * **trap** - установка действий на прерывания в bash скрипте (trap 'список команд' сигналы) * **exec** "команда" - передает управление из bash комадне "команда" * **dmidecode** - информация о железе * **xargs basename -a** - имя файла из пути * **useradd** - низкоуровневое добавление пользователя * **adduser** - продвинутое добавление пользователя, домашний каталог, настройки и т.д. * **Ctrl+R** - поиск по истории команд * **stat** - подробная информация о файле * **eval** - выполнение команд записанных с троке ==== Other ==== * **rsync** - репликация, бекап, копирование (rsync -vvaz --delete [--progress][-P]) * **lsb_release -a** - узнать версию Ubuntu * **watch [-n sec] command [args]** -  запускает и следит за программой через определенный промежутки времени * **ps -o lstart 1/uptime** - время запуска машины * **:w !sudo tee %** -  сохранить в vim если забыл sudo * **siege** - нагрузочное тестирование веб сервера * **ls | wc -l** - подсчет количества файлов * **find foldername -mtime 1** - поиск файлов старше 24 часов * **cut -d "" -f 1** - выборка первого столбика, делитель пробел * **ldconfig** - настраивает привязку динамических ссылок * **cat /proc/sys/vm/swappiness** - просмотр процентного соотношения SWAP * **sudo sysctl vm.swappiness=5** - изменение процентного соотношения SWAP * **sudo su -c 'sync; echo 1 > /proc/sys/vm/drop_caches'** - очистка дискового кэша * **convert -delay 20 -loop 0 *.png animation.gif** - создание гифки * **ffmpeg -i frame%03d.png output.gif** - создание гифки * **tee** - читатет из intput и выводит в output и записывает в файл * **tr** - подменить одни символы другими, удалить или сжать * **column** - позволяет выровнять вывод по колонкам ==== Useful combinations ==== * ''sudo cat /var/log/nginx/wiki/access.log | grep -o '^.* -' | grep -o '[0-9\.]*' | sort | uniq -c '' * ''sudo grep -o 'Ban [0-9\.]*' /var/log/fail2ban.log | grep -o '[0-9\.]*' | sort | uniq -c | sort'' ===== Tmux ===== **Tmux** - это терминальный мультиплексор, позволяет на один экран выводить несколько окон, можно отключаться и подключаться к ним не теряя прогресс. * [[https://github.com/tmux/tmux/wiki/Getting-Started|[github.com/tmux] Getting-Started]] * [[https://www.barbarianmeetscoding.com/blog/2019/12/25/jaimes-guide-to-tmux-the-most-awesome-tool-you-didnt-know-you-needed|[barbarianmeetscoding.com] Jaime's Guide to Tmux: The Most Awesome Tool You Didn't know you needed]] # Sessions tmux # Создать новую сессию 0 tmux new -s hello # Создать новую сессию hello tmux detach # (Ctr-b + d) Отключиться от сессии tmux attach (или a) # Подключиться к последней работающей сессии tmux attach -t hello # Подключиться к сессии по имени tmux ls # Список сессий (Ctr-b + s) # Выбрать сессию tmux kill-server # Завершить все сессии tmux kill-session -t hello # Завершить сессию hello # Wndows (Ctr-b + c) # Создать новое окно (Ctr-b + w) # Список окон (Ctr-b + n) # Следующее окно (Ctr-b + p) # Предыдущее окно (Ctr-b + 0) # Окно по номеру # Panes (Панели) (Ctr-b + \") # Поделить горизонтально (Ctr-b + -) # Поделить вертикально (Ctr-b + стрелки) # Переход между панелей (Ctr-b + Ctrl-стрелки) # Изменение размеров панелей (Ctr-b + q-) # Подсветить все панели и перейти на панель n (Ctr-b + z) # Развернуть панель во все окно или сжать # Copy paste Shift + Mouse left button double-click # Copies the double-clicked word Shift + Select using mouse # Copies the selection Shift + Mouse middle button click # Pastes the copied text using above method in the tmux pane ==== Tmux Plugins ==== # TPM Plugin (Ctr-b + I) # install new plugins and refresh Tmux environment (Ctr-b + U) # update plugins (Ctr-b + alt-u) # remove plugins not in plugin list # Resurrect Plugin (Ctr-b + ctrl-s) # Save environment (Ctr-b + ctrl-r) # Restore environment # Continuum Plugin # Continuous saving tmux environment, automatic start tmux, automatic restore ===== Awk ===== * [[https://www.tutorialspoint.com/awk/index.htm|[tutorialspoint.com] Awk Tutorial]] * [[https://www.grymoire.com/Unix/Awk.html|[grymoire.com] A Tutorial and Introduction to AWK]] ll | awk 'BEGIN {print "Hello!"} {print} END {print "Bye!"}' ll | awk -f command.awk awk -v name=Diego 'BEGIN {printf "Name - %s\n", name}' # Шаблоны ll | awk '/git/' # одно ll | awk '/git/ {print}' # и ll | awk '/git/ {print $0}' # тоже (авнозначные комманды) ==== Пример программы на awk ==== #!/usr/bin/awk -f BEGIN { print "type a number"; } { print "The square of ", $1, " is ", $1*$1; print "type another number"; } END { print "Done" } ===== Sed ===== * [[https://alexharv074.github.io/2019/04/16/a-sed-tutorial-and-reference.html|[alexharv074.github.io] A sed tutorial and reference]] * [[https://www.grymoire.com/Unix/Sed.html|[grymoire.com] An Introduction and Tutorial]] * [[https://www.computerhope.com/unix/used.htm|[computerhope.com] Linux sed command]] sed OPTIONS... [SCRIPT] [INPUTFILE...] Options: -e -i -f # read script form file -n # produces output when explicitly told to via the p command # A sed script is a sequence of commands: [ADDR]X[OPTIONS] where, [ADDR] is an optional address specification X is a single-letter command [OPTIONS] are optional options (or flags) accepted by the command. ==== Commands ==== a TEXT # Append text after a line c TEXT # Replace (change) lines with text d # Delete the pattern space; immediately start next cycle i TEXT # Insert text before a line p # Print the pattern space s/REGEXP/REPLACEMENT/[FLAGS] # Match the regular expression REGEXP, if found, replace with REPLACEMENT. y/SRC/DST/ # Transliterate characters which match any of the SRC # with the corresponding character in DST. === Substitute flags === s/REGEXP/REPLACEMENT/[FLAGS] g # Apply the replacement to all matches to the regexp, not just the first NUMBER #Only replace the NUMBERth match of the regexp ==== Example 1 ==== sed -i s/alexander/alex/g /etc/passwd where, [ADDR] = '' X = 's///' [OPTIONS] = 'g' ==== Example 2 ==== sed -i 1,1000d /var/log/messages where, [ADDR] = '1,1000' X = 'd' [OPTIONS] = '' ==== Example 3 ==== sed -n '/roo/{p;p;q;}' /etc/passwd where, [ADDR] = '/roo/' X = '{p;p;q}' - block [OPTIONS] = '' ===== Grep ===== grep [options] pattern [files] Options Description -B : Lines before -A : Lines after -c : This prints only a count of the lines that match a pattern -h : Display the matched lines, but do not display the filenames. -i : Ignores, case for matching -l : Displays list of a filenames only. -n : Display the matched lines and their line numbers. -v : This prints out all the lines that do not matches the pattern -e exp : Specifies expression with this option. Can use multiple times. -f file : Takes patterns from file, one per line. -E : Treats pattern as an extended regular expression (ERE) -w : Match whole word -o : Print only the matched parts of a matching line, with each such part on a separate output line. ===== Find ===== * [[https://www.computerhope.com/unix/ufind.htm|[computerhope.com] Linux find command]] * [[https://www.geeksforgeeks.org/find-command-in-linux-with-examples/|[geeksforgeeks.org] find command in Linux with examples]] * [[https://www.lifewire.com/uses-of-linux-command-find-2201100|[lifewire.com] How to Find a File in Linux Using the Command Line]] * [[https://losst.ru/komanda-find-v-linux|[losst.ru] КОМАНДА FIND В LINUX]] find [папка] [параметры] критерий шаблон [действие] параметры: -type {f,d, b,c,p,l,f} -maxdepth N критерий: -name "file_name" -perm # поиск по правам доступа, например 755 -o # or -and # and (expr1 expr2 / expr1 -a expr2 / expr1 -and expr2) -prune # остановить поиск на текущей директории действие: -exec {} \; Example: find . \( -name "\.git" -o -name "\.mypy_cache" -o -name ".tox" \) -prune -o -print ===== jq ===== * [[https://stedolan.github.io/jq/]] Code examples: jq '.[0:2] | .[] | {requested_at: .requested_at, respond_at: .respond_at}' test.json jq 'map(select(has("respond_at"))) | length' test.json jq 'map(select(.respond_at == "2022-03-16")) | length' test.json jq 'map(select(.requested_at > "2022-03-15")) | length' test.json jq 'map(select(.requested_at > "2022-03-16")) | map(select(has("respond_at"))) | length' test.json jq 'map(select(.requested_at > "2022-03-15")) | map(select(has("respond_at")|not)) | .[0]' test.json jq '.[] | {start_time: (.start_time/1000 | todate), duration: (.end_time - .start_time)}' test.json jq 'map({start_time: (.start_time/1000 | todate), duration: (.end_time - .start_time)})' test.json jq 'map(select(.email|test("^m.*i.*h.*a.*i.*l.*v@gmail\\.com"; "gixp"))) | length' test.json jq 'map(select(has("src_lang"))) | .[] | .src_lang' localization-prod-project_20230504105646.json | sort | uniq -c | sort -k1 -n -r jq '.[0:10] | map(select(has("dst_lang"))) |map(select(has("src_lang"))) | .[] | "\(.src_lang) - \(.dst_lang)"' localization-prod-project_20230504105646.json | sort | uniq -c | sort -k1 -n -r | head -n 20 jq '.[0:10] | map(select(has("dst_lang"))) |map(select(has("src_lang"))) | .[] | "\(.src_lang) - \(.dst_lang | split('-'))"' localization-prod-project_20230504105646.json