====== Сборник команд ======
===== 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