Часть 4. Терминал Linux
⠀В данной статье рассматриваются следующие группы команд: информация о системе, сеть, прочее.
Содержание
Информация о системе
bash <(wget -qO- -o /dev/null yabs.sh)
⠀Скрипт отображает основную информацию о системе и проверяет скорость чтения и записи дисков, пропускную способность интернет соединения и производительность системы. По умолчанию тестируется всё.
bash <(wget -qO- yabs.sh) опции
-f
/-d
— пропустить тестирование дисков;-i
— пропустить тестирование скорости интернета;-g
— пропустить тестирование производительности системы;-4
— при тестировании производительности использовать Geekbench 4, вместо Geekbench 5.
# Полное тестирование bash <(wget -qO- -o /dev/null yabs.sh)
# Протестировать только диски bash <(wget -qO- -o /dev/null yabs.sh) -ig # Протестировать только скорость интернета bash <(wget -qO- -o /dev/null yabs.sh) -dg # Протестировать только производительность системы bash <(wget -qO- -o /dev/null yabs.sh) -di
df
⠀Отображает информацию об использовании дискового пространства.
df опции устройство
df -h
nvme
⠀Позволяет контролировать и управлять NVMe накопителями. Наиболее полезная и часто используемая функция — чтение SMART (состояние накопителя).
sudo apt install nvme-cli -y
nvme команда диск
# Список NVMe дисков nvme list
# Чтение SMART жирнала 1-ого диска nvme smart-log /dev/nvme0
free
⠀Отображает информацию об использовании оперативной памяти.
df опции
free -h
lscpu
⠀Отображает информацию о характеристиках процессора.
lscpu
cat /etc/*-release
⠀Отображает информацию об операционной системе.
cat /etc/*-release
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS" NAME="Ubuntu" VERSION="20.04.3 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 20.04.3 LTS" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal
htop
⠀Отображает информацию о потреблении системных ресурсов и позволяет управлять процессами.
sudo apt install htop -y
htop
⠀В верхней части отображена информация о системе:
1-…
— нагрузка на каждый поток процессора:- Синий цвет — процессы низкого приоритета;
- Зелёный — процессы обычных пользователей;
- Красный — системные процессы;
- Голубой — процессы виртуализации.
Mem
— общий и используемый объём оперативной памяти:- Зелёный цвет — используемая память;
- Синий — память, используемая буферами;
- Жёлтый — память, выделенная под кэш.
Swp
— размер файла подкачки и используемый объём;Tasks
— статистика по процессам;Load average
— средние значения нагрузки за последние 1, 5, 15 минут;Uptime
— время работы системы с момента запуска.
⠀В нижней части отображена информация о каждом процессе:
PID
— ID процесса;USER
— владелец процесса;PRI
— внутренний приоритет ядра;NI
— NICE приоритет от 19 (низкий приоритет) до -20 (высокий приоритет);VIRT
— потребляемая виртуальную память;RES
— потребляемая физическая память;SHR
— потребляемая общая память;S
— состояние:CPU%
— сумма потреблений каждого потока процессора (максимально100*количество_потоков
);MEM%
— потребляемый в текущий момент процент оперативной памяти;TIME+
— время работы процесса с момента запуска;Command
— команда, запустившая процесс.
⠀Для удобства управления утилитой и процессами, помимо поддержки мыши, присутствуют горячие клавиши.
Ctrl+C
/q
/F10
— закрыть htop;H
(Shift+h)
— скрыть потоки процессов, оставить только сами процессы;↑
/↓
— перемещение по списку процессов;F9
/k
— завершить процесс, на котором находится курсор, или помеченные процессы (необходимо выбрать сигнал выхода, обычно2 SIGINT
);F4
/\
— сортировка процессов (скрыть все, кроме найденных);F3
//
— поиск процессов (подсвечивать по очереди найденные);F6
— выбрать по какому столбцу сортировать;P
— сортировка по задействованию процессора;M
— сортировка по задействованию оперативной памяти;I
— инвертировать сортировку;u
— сортировать процессы исходя из выбранного пользователя;Пробел
— пометить/снять пометку с процесса;U
(Shift+u)
— снять все пометки с процессов.
uptime
- Текущее время;
- Время работы системы с момента запуска;
- Количество залогиненных пользователей;
- Средние значения нагрузки за последние 1, 5, 15 минут.
uptime
00:00:00 up 91 days, 9:24, 1 user, load average: 0.13, 0.23, 0.36
Сеть
ss
⠀Отображает статистику сетевых подключений.
ss опции ss опции | grep шаблон
-p
— вывести информацию о процессах, использующих сокеты (порты);-n
— использовать цифровые представления сокетов вместо имён служб (например22
вместоssh
);-t
— TCP сокеты;-u
— UPD сокеты;-l
— показать только прослушиваемые сокеты.
# Открытые порты ss -tulpn
# Найти среди открытых портов начинающиеся на 3303 ss -tulpn | grep :3303
⠀iptables
управляет сетевым трафиком. iptables-persistent
сохраняет правила (по умолчанию правила сбрасываются при перезагрузке сервера).
sudo apt install iptables iptables-persistent -y
iptables команда цепочка условие -j действие
INPUT
— входящие пакеты (когда кто-то обращается к серверу);OUTPUT
— исходящие пакеты (когда сервер обращается к кому-то);FORWARD
— проходящие пакеты (когда проходят через сервер, но не предназначены ему).
-p
— сетевой протокол (TCP, UDP, ICMP или ALL);-s
— адрес отправителя пакетов;-d
— адрес источника назначения;--dport
— порт назначения;--sport
— порт источника.
# Все правила iptables -L
# Открыть один порт iptables -A INPUT -p tcp --dport 9091 -j ACCEPT # Открыть диапазон портов iptables -A INPUT -p tcp --dport 9001:9004 -j ACCEPT# Сохранить все правила sudo netfilter-persistent save # Очистить все правила iptables -F
ufw
⠀Брандмауэр, фильтрующий сетевой трафик.
sudo ufw команда аргументы
status
— посмотреть состояние и действующие правила;enable
— включить брандмауэр и добавить его в автозагрузку;reload
— перезапустить брандмауэр;reset
— сбросить все настройки до состояния по умолчанию;allow
— добавить разрешающее правило;deny
— добавить запрещающее правило (отправителю отправляется пакет с уведомлением об ошибке);reject
— добавить отбрасывающее правило (входящий пакет отбрасывается, а отправителю ничего не отсылается);delete
— удалить правило;disable
— отключить брандмауэр и удалить его из автозагрузки.
# Проверить состояние sudo ufw status
# Выключен Status: inactive # Включен Status: active ...
# Включить брандмауэр sudo ufw enable
⠀Чтобы избежать потерю подключения к серверу, необходимо открыть 22 порт командой ниже.
# Открыть порт для любого протокола sudo ufw allow 22 sudo ufw allow 9090 # Открыть порт только для TCP протокола sudo ufw allow 9090/tcp # Открыть порт только для UPD протокола sudo ufw allow 9090/upd # Разрешить исходящий и запретить входящий трафик sudo ufw allow out 9090/upd sudo ufw deny in 9090/upd # Удалить правило sudo ufw delete allow out 9090/upd sudo ufw delete deny in 9090/upd # Перезапустить брандмауэр sudo ufw reload # Отключить брандмауэр sudo ufw disable
speedtest-cli
⠀Проверяет пропускную способность интернет соединения.
sudo apt install speedtest-cli -y
speedtest-cli опции
speedtest-cli --simple
Ping: 14.596 ms Download: 789.05 Mbit/s Upload: 534.10 Mbit/s
ping
⠀Проверяет доступность удалённого узла (IP или домен) в сети. В частности используется для проверки подключения интернета.
ping опции адрес_узла
ping www.google.com
Прочее
echo
echo опции текст
-n
— не делать перевод строки в конце текста;-e
— обрабатывать символы, экранированные обратной косой чертой (новая строка, табуляция, цвета и т. д.).
echo "Hello world!"
Hello world!
echo "Hello\nworld!"
Hello\nworld!
echo -e "Hello\nworld!"
Hello world!
echo "Hello world!"
Hello world!
text="world! ..." echo "Hello $text"
Hello world! ...
printf
⠀Выводит текст в терминал по аналогии с printf()
из языка программирования C. Имеет больший функционал по сравнению с echo
. В отличие от echo
по умолчанию не делает перевод строки в конце текста.
printf формат аргументы
- Обычные символы — просто выводятся как есть;
- Символы с обратной косой чертой — обрабатываются и выводятся:
- Преобразования типов — заменяются аргументами и выводятся:
printf "Hello world!\n"
Hello world!
printf "%s\n" "Hello world!"
Hello world!
printf "%d\n" "666"
666
# Округлить число с плавающей точкой printf "%.2f\n" 3.1415926535
3.14
printf "%.1f\n" "6.66"
6.7
# Округление до целого числа printf "%.0f\n" 6.66
7
printf "%s\t%d\t%.2f\n" "Hello world!" "666" 3.1415926535
Hello world! 666 3.14
text="Hello world!" int="666" pi=3.1415926535 printf "%s\n%d\n%.2f\n" "$text" "$int" "$pi"
Hello world! 666 3.14
git
⠀Система контроля версий и совместной разработки проектов. В основном используется для работы с GitHub.
sudo apt install git -y
git опции команда аргументы
clone
— скачать указанный репозиторий на сервер;pull
— обновить локальный проект на основе внесённых изменений в источнике;branch
— управление ветками проекта;checkout
— переключиться между ветками;clean
— удалить неиспользуемые проектом файлы.
# Клонировать репозиторий git clone https://github.com/SecorD0/utils.git
# Клонировать репозиторий в папку с другим названием git clone https://github.com/SecorD0/utils.git pack_of_utils
# Для использования команд ниже необходимо перейти в директорию # с проектом или указывать для каждой путь в опции -C cd utils # Посмотреть текущую ветку git branch
* main
# Посмотреть все ветки git branch -a
* main remotes/origin/HEAD -> origin/main remotes/origin/main
# Обновить локальные файлы git pull# Переключиться на другую ветку git checkout test # Удалить неиспользуемые проектом файлы git clean
tmux
⠀Позволяет запускать несколько сессий на одном сервере. Можно провести аналогию с несколькими окнами в Windows. При отключении от сервера активные процессы в сессиях не прекращают работу.
- Сессия — ещё один терминал сервера (1 сервер = 1+ сессии);
- Окно — ещё один «рабочий стол» сессии (1 сессия = 1+ окно);
- Панель — область для работы в окне (1 окно = 1+ панелей).
sudo apt install tmux -y
tmux команда опции аргументы
new
— создать новую сессию;attach
— подключиться к существующей сессии;detach
— отключиться от текущей сессии;ls
— список открытых сессий;rename-session
— переименовать сессию;kill-session
— завершить сессию;kill-server
— завершить все сессии.
-t
— название или часть названия сессии, к которой будет применяться действие;-s
— название создаваемой сессии.
⠀Для управления активными окнами существуют горячие клавиши, для их использования необходимо нажать сочетание клавиш Ctrl+B
с включённой английской раскладкой, а затем нажать горячую клавишу.
d
— отключиться от текущей сессии (аналог командыtmux detach
);%
— разделить текущую панель по горизонтали;"
— разделить текущую панель по вертикали;←
/↑
/→
/↓
— перейти на панель, находящуюся в стороне, куда указывает стрелка;Ctrl+стрелка
— изменить размер текущей панели;o
— перейти на следующую панель;;
— переключаться между текущей и предыдущей панелью;x
— закрыть текущую панель;c
— открыть новое окно;w
— выбрать окно из списка;0-9
— открыть окно по его номеру;,
— переименовать текущее окно.
# Создать сессию tmux new -s session # Отключиться командой от текущей сессии tmux detach # Список сессий tmux ls # Переименовать сессию tmux rename-session -t session session1 # Подключиться к сессии tmux attach -t sess tmux attach -t session1 # Закрыть активную панель (закрывает окно и сессию, если панель одна) exit # Завершить последнюю сессию tmux kill-session # Завершить определённую сессию tmux kill-session -t session1 # Завершить все сессии tmux kill-server
date
⠀Позволяет работать с датой и временем. По умолчанию используется часовой пояс, установленный на сервере.
date опции +формат
%H
— часы (00…23
);%M
— минуты (00…59
);%S
— секунды (00…59
);%a
— день недели словом в короткой форме (Mon
);%A
— день недели словом в длинной форме (Monday
);%b
— месяц словом в короткой форме (Jan
);%B
— месяц словом в длинной форме (January
);%d
— день месяца (01…31
);%m
— месяц числом (01…12
);%y
— две последних цифры года (22
);%Y
— полный год (2022
);%j
— день года (001...366
);%q
— квартал года (1…4
);%Z
— аббревиатура временной зоны (UTC
,CET
,MSK
);%n
— новая строка;%t
— знак табуляции;%D
— дата в формате%m/%d/%y
;%T
— время в формате%H:%M:%S
.
date
Sat 01 Jan 2022 12:00:00 AM CET
date -u
Fri 31 Dec 2021 11:00:00 PM UTC
# UNIX Timestamp to DATE date -d "@1640991600"
Sat 01 Jan 2022 12:00:00 AM CET
date +"%H:%M:%S %d.%m.%y"
00:00:00 01.01.22
date -d "@1640991665" +"%H:%M:%S %d.%m.%y"
00:01:05 01.01.22
date -d "2 days" +"%H:%M:%S %d.%m.%y"
00:00:00 03.01.22
# Изменить часовой пояс TZ="Europe/Moscow" date -d "@1640991665" +"%H:%M:%S %d.%m.%y"
02:01:05 01.01.22
Читать далее
⠀В пятой, заключительной, части рассматриваются операторы, запуск скриптов, а также скрипты нашей команды.
Полезные ссылки
Losst | Пингвинус | Часовые пояса
Благодарности
Losst, Пингвинус — разнообразные статьи по Linux
Команда 1package — написание статьи