Часть 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 — написание статьи