36 KiB
Основные команды для администрирования Linux
Настройка сервера
groups username
- группы пользователяaddgroup <groupname>
- добавить группуadduser <username>
- добавить пользователяusermod -aG <groupname> <username>
- добавить пользователя в группу без удаления его из других группsu -
: если добавить - (или --login), это переключит вас на пользователя root и загрузит окружение (все переменные окружения будут инициализированы для пользователя root), как если бы вы вошли в систему как rootlsb_release -a
илиhostnamectl
- версия ОС (и не только)
Пакетный менеджер (apt)
apt remove --purge <packege_name>
илиapt purge <packege_name>
- удаляет сам пакет и все связанные с ним конфигиapr remove <packege_name>
- удаляет пакетapt autoremove
- используется для удаления пакетов, которые были автоматически установлены в качестве зависимостей для других пакетов, но больше не нужныapt update
- скачивает список пакетов и их версий с серверов репозиториев, но не устанавливает и не обновляет пакеты.apt upgrade
- обновляет все установленные пакеты до последних доступных версий, основываясь на информации, полученной с помощьюapt update
, однако эта команда не устанавливает новые пакеты или не удаляет старые. Если для обновления пакета требуются новые зависимости, они не будут установлены.apt full-upgrade
- не только обновляет пакеты, но и может устанавливать новые зависимости и удалять старые пакеты, если это необходимо для завершения обновленияsudp apt install <packege_name>
- устанавливает пакетsudo apt install ./имя_пакета.deb
- устанавливает .deb пакетsupo apt search <packege_name>
- поиск пакета по имениapt show <packege_name>
- инфо о пакетеapt autoclean
- для удаления старых неиспользуемых файловapt clean
- APT хранит загруженные .deb файлы в кэше на диске, чтобы очистить этот кэш. Эта команда удаляет все файлы в dir/var/cache/apt/archives/
/etc/apt/sources.list
- основной файл, где перечислены все репозитории. Этот файл указывает, откуда APT будет загружать пакеты./etc/apt/sources.list.d/
- в этот каталог можно добавлять дополнительные файлы для подключения новых репозиториев.
Есть ещё
apt-get
, но это более старая команда, которая в основном используется для скриптов, потому что не предусматривает интерактивную работу с системой
!!! note "Про apt"
apt работает поверх более низкоуровневого инструмента dpkg
, который непосредственно устанавливает .deb
пакеты.
dpkg -i package_name.deb
- для установки.deb
пакетаapt --fix-broken install
- если возникли проблемы с зависимостями
Пакетный менеджер (dnf, rpm)
-
dnf install https://example.com/package-file.rpm
- установка rpm пакета напрямую из ссылки -
dnf install <packege_name>
- устанавливает пакет из репозитория -
dnf remove <packege_name>
- удаляет пакет -
dnf upgrade
- обновляет систему -
dnf search <packege_name>
- поиск пакета -
rpm -ivh <package_name>.rpm
- установка rpm пакета -
rpm -e <package_name>.rpm
- удаления пакета -
rpm -Uvh <package_name>.rpm
- обновление пакета, если он не установленЮ он установится -
rpm -qi <package_name>
- просмотр информации о пакете -
rpm -V <package_name>
- проверка целостности пакета -
rpm -ql <package_name>
- список файлов в пакете -
dnf install <package_name>.rpm
- установка rpm пакета через dnf, dnf будет управлять зависимостями
!!! tip "Лучше использовать высокоуровневый пакетный менеджер (apt, dnf)" Высокоуровневые пакетные менеджеры (например, dnf, apt) удобнее и безопаснее, поскольку автоматически управляют зависимостями, работают с репозиториями, проверяют конфликты и целостность пакетов, одним словом, упрощают обновление ПО. При работе с rpm, dpkg требуется самостоятельная работа с зависимостями и есть вероятность накосячить с установкой, а если ПО требует дополнительные библиотеки, их придётся ставить отдельно.
Сеть
-
ifconfig
- сетевые интерфейсы + статистика -
ping
- проверка доступности хоста -
traceroute
- путь пакетов от сервера к серверу (промежуточные маршрутизаторы) (mtr
покажет путь в лайве) -
nslookup
,dig @<dns-server> <dns-name>
- инфа о DNS сервере -
cat /etc/ssh/sshd_config | grep Port
- показывает на каком порту открыт ssh -
ss -tulpn
- информация о текущих сетевых соединениях и портах -
curl ifconfig.me
- узнать публичный ip машины -
curl -Lv domain.ru
- получить html страницу (v
- подробный вывод,L
- разрешает редиректы) -
curl -v telnet://127.0.0.1:22
- доступность порта -
tcpdump -i any port 9100 -nn
- пакеты через порт -
iptables -L
- правила файрвола (показывает все цепочки (chains) и правила для них)iptables -L -v
- подробный выводiptables -L --line-numbers
iptables -L -t nat
- позволяет указать конкретную таблицу для просмотра. Например, для просмотра правил NAT ??? tip "ufw
- удобная надстройка над iptables" Чаще используют в Ubuntu и Debian
# Включаем фаерволл sudo ufw enable # Отключить фаерволл sudo ufw disable # Перезагрузить ufw reload # Не пускать входящий трафик ufw default deny incoming # Пускать исходящий ufw default allow outgoing # Разрешить доступ ко всем портам с определённого IP-адреса ufw allow from <IPv4> # Разрешить доступ к порту ufw allow <port> # Разрешить доступ к порту с определённого IP-адреса sudo ufw allow from <IPv4> to any port <port> # Чтобы запретить - deny вместо allow # Показать состояние ufw и активные правила ufw status verbose # Показать правила с нумерацией ufw status numbered # Удалить правило по номеру ufw delete <number> # Интерфейсы sudo ufw allow in on eth0 sudo ufw allow out on eth0 # Удалить правило (будут применены настройки по умолчанию) ufw delete allow <port>/<protocol> # удалить разрешение ufw delete deny <port>/<protocol> # удалить запрет # Сброс всех правил sudo ufw reset # Логи ufw sudo tail -f -n 100 /var/log/ufw.log # Изменить уровень логирования sudo ufw logging <low/medium/high> # Разрешить доступ к порту с определённого ip sudo ufw allow from <IPv4> to any port <port> # Пресеты # Вывести список пресетов sudo ufw app list # Открыть все соединения, которые нужны Nginx sudo ufw allow "Nginx Full" # Удалить правило для пресета sudo ufw delete allow "Nginx Full"
-
iperf3
- для измерения скорости передачи данных -
speedtest-cli
- спидтестspeedtest-cli --list
- список серверовspeedtest-cli --server SERVER_ID
-
fuser 9095/tcp
- проверить доступность порта -
ethtool enp0s3
- диагностика сетевого интерфейса на физическом уровне (ethtool enp0s3
- статистика) -
arp -a
- arp таблица (ip -> mac) -
ip route
- таблица маршрутизации -
resolvectl status
- инфо о днс -
cat /etc/resolv.conf
- инфо о днс -
ip -4 route get 8.8.8.8
- используется для отображения маршрута, который система выберет для достижения указанного ip (какой интерфейс будет использован, через какой шлюз пойдёт трафик и с какого ip)
База
cp -p
- сохранить атрибуты файлов (время создания, права, владельца)cp -v
- выводить информацию о каждом копируемом файлеmv -v
- подробный вывод при перемещении.chmod 644 /etc/passwd
- изменение прав доступа к файлам и директориямchown root:root /etc/hosts
- изменение владельца и группыps -aux
- выводит список всех процессов с информацией о пользователях, загрузке, времени и командахps -ef
- полная информация о процессах с идентификаторами владельцевpstree
- дерево процессовps aux --sort=-%mem | head -n 10
- первые 10 процессов по потреблению памятиkill -9 1234
- принудительное завершене процесса (1234 — PID процесса)top -o %CPU
- сортировка процессов по указанному полю (например, по CPU)shift + v
в top - процессы в древовидной структуре с отображением дочерних процессов1
- нагрузка на поток (логическое ядро)
useradd -m username
- добавление нового пользователя (-m
- создание домашнего каталога)passwd username
- установка или изменение пароля пользователяusermod -aG username
- добавить пользователя в группуsudo
groupadd developers
- создание новой группы
ifconfig
- информация о сетевых интерфейсахss -tulpn
- информация о сетевых соединенияхping
- проверка доступности хостаtraceroute
- через какие маршрутизаторы проходит пакет до хостаnslookup
,dig @<dns-server> <dns-name>
- инфа о DNS сервереcurl -Lv domain.ru
- получить html страницуcurl -v telnet://127.0.0.1:22
- доступность портаtcpdump -i any port 9100 -nn
- пакеты через этот порт
tail -f /var/log/*
- логи (-f
- обновление в реальном времени)head
- как tail, но headjournalctl
- утилита для просмотра логов служб, управляемыхsystemd
-u <service_name>
- просмотр логов конкретной службы
journalctl -u nginx
journalctl -u nginx -f
- просмотр логов в реальном времениjournalctl -n 100
- последние 100 строкjournalctl --since "2024-10-03 12:00:00" --until "2024-10-03 14:00:00"
- логи за конкретный периодjournalctl -p err
- можно показывать только ошибки- emerg (0): Аварийные сообщения.
- alert (1): Требуют немедленных действий.
- crit (2): Критические ошибки.
- err (3): Ошибки.
- warning (4): Предупреждения.
- notice (5): Важные события.
- info (6): Информационные сообщения.
- debug (7): Отладочные сообщения.
journalctl -xe
- x (или --catalog) — выводит дополнительные объяснения (аннотации) к некоторым сообщениям журнала, помогает понять детали ошибок или предупреждений, предлагая описания и возможные решения, если такие есть.
- e (или --pager-end) — открывает журнал в режиме постраничного просмотра и сразу прокручивает его до конца, показывая самые последние записи.
less -S
- не переносит на новую строкуdmesg -T
- логи ядра системы/var/log/dmesg
- логи загрузки ядра (только загрузки ядра! dmesg - все логи ядра)
df -h
- информация о дискахdf -i
- инодыdu
- отображение размера файлов и каталогов-s
- отображает только итоговый размер--max-depth=1
- выводит размер каталога и его подкаталогов
du -sh /tml
- размер директорииsmartctl -a /dev/sda
- смарт отчет диска, генерит сам дискfree -m
- оперативная памятьcat /proc/meminfo
- подробно про памятьcat /proc/cpuinfo
- подробно про процsudo find / -type f -exec du -h {} + | sort -rh | head -n 15
- 15 самых болших файлов в системе !!! info ""\;
- вызывает команду для каждого файла по очереди;+
- вызывает команду один раз с множеством файлов, что значительно ускоряет процесс, особенно при большом числе найденных файлов.
tar
- работа с архивами-cvf
- создать архив-xvf
- извлечь архив-z
- использовать сжатиеgzip
tar -xvfz backup.tar.gz /var/www
tar -zxvf apache-activemq-6.1.3-bin.tar.gz -C /opt
- распаковать в каталогtar -zxvf apache-tomcat-9.0*tar.gz -C /opt/_Tomcat/application1-8080 --strip-components=1
- каталог apache-tomcat-9.0* не будет созданtar -czvf logs_archive.tar.gz log1.log log2.log log3.log
- создать архив.tar.gz
tar -tzvf logs_archive.tar.gz
- просмотр содержимого архива
Screen
screen -L -Logfile mylog.txt -S mysession
- запуск новой сессии скрин, лог будет писаться в каталог, из которого запустилиscreen
(-a
- писать лог уже в существующий в лог файл)
Чтобы выйти из сессии, нажать Ctrl + A
, затем D
(detach). Это вернет в основной терминал, оставив сессию screen
работать в фоновом режиме.
screen -ls
- просмотр активных сессийscreen
screen -r mysession
- вернуться к сессииexit
- завершить сессию
Система
lsof
- Команда lsof (List Open Files) в Linux используется для отображения списка открытых файлов в системе. В Linux (и Unix-подобных системах) практически все является файлом, включая сетевые соединения и устройства.lsof
- просмотр всех открытых файловlsof -u username
- файлы открытые конкретным пользователемlsof -p 1234
- поиска файлов открытых определённым процессомlsof -i :80
- соединения по конкретному портуlsof /dev/sda1
- файлы использующие определённое устройство или файловую системуlsof | grep <filename>
- Если файл заблокирован и его нельзя удалить или переместить,lsof
покажет, какой процесс его использует
strace
- системные вызовы
-
killall -s 9 <hello>
- убивает все процессы с названиемhello
(-s
- тип сигнала) -
w
- залогиненые пользователи и времяuptime
-
whoami
- имя залогиненного пользователя -
uptime
- сколько работает система без перезагрузки-s
- время запуска-p
- время работы системы
-
reboot now
- перезагрузка системы -
shutdown now
- выключить компьютер -
watch "some command"
- переодически запускает команду -
lscpu
- информация о процессоре -
lspci
- информация об устройствах подключенных к pci шине -
lsusb
- информация об usb-устройствах
Разное
alt .
- перебирает последние аргументы из истории команд (history
), если аргументов нет, то перебирает сами командыctrl R
- поиск команд изhistory
!!
ctrl A
- перемещение курсора в началоctrl E
- перемещение курсора в конецctrl U
- вырезает всё, что СЛЕВА от курсора (ctrl Y
- вставить)ctrl W
- выразает 1 слова, СЛЕВА от курсора (ctrl Y
- вставить)ctrl K
- вырезает всё, что СПРАВА от курсора (ctrl Y
- вставить)cd -
перейти в предыдущую директорию^restart^status
- замена с ... на ... в последней выполненной команде&
- в конце команды и команды будет выполняться в фоновом режимеnohup <command> &
- если закроем терминал команда продолжит выполнятьсяnl
- какcat
, но еще выводит номера строкctrl L
-clear
reset
- используется для сброса настроек терминала и очистки экрана
cd
- вернуться в домашнюю директориюtouch file{4..13}
mkdir dir_{a..f}
cp -iv file1 dir1/file2
- (-i
) спрашиваем будем ли перезаписыватьcp -nv
- не перезаписыватьcp -a source_file destination_directory/
- Опция-a
эквивалентна комбинации нескольких опций:-d
(сохраняет символические ссылки),-p
(сохраняет права доступа, владельца и временные метки), и-r
(рекурсивно копирует каталоги).cp -vu
- пропустить совпадающие файлы, а скопировать только файлы новее или отсутствующиеcp /etc/fstab{,.bkp}
==cp /etc/fstab /etc/fstab.bkp
stat file
- Размер файла (Size): В байтах.
- Тип файла: Обычный файл, каталог и т. д.
- Права доступа (Access): Права на чтение, запись и выполнение для владельца, группы и других пользователей.
- Идентификаторы пользователя и группы (UID/GID): Идентификатор владельца и группы.
- Время изменения (Modify): Дата и время последнего изменения содержимого файла.
- Время последнего доступа (Access): Когда файл был последний раз открыт.
- Время изменения метаданных (Change): Когда были изменены права или метаданные файла.
- Номер inode: Уникальный номер файла в файловой системе.
kill -l
- список возможных сигналов/etc/passwd
- инфо о пользователях в системеhtop -p
- процесс на таком-то портуtruncate -s 0 /var/log/messages
find / -name <pg_config> 2>/dev/null
wc -l <file_name>
- количетсво строк в файлеcat <file_name> | column
- для форматирования текста в виде таблицы
chmod u+s
- устанавливает бит setuid на файлcat /etc/passwd
- список пользователейcat /etc/group
- список группid
- список пользователей, группid <user_name>
- проверить наличие пользователя в системеgroups <user_name>
- к каким группам приналежит пользователь
??? info "Set User ID" setuid (Set User ID) — это специальный бит прав доступа в Unix/Linux, который позволяет исполняемому файлу запускаться с привилегиями владельца файла, а не пользователя, который его запускает
Без setuid: программа запускается с правами текущего пользователя.
С setuid: программа запускается с правами владельца файла (часто — root), независимо от того, кто её запустил.
zip <final_file_name> <file_1> <file_2> <file_N>
(-r
- рекурсивное сжатие,-v
- подробный вывод)zip -u <final_file_name> <file_N+1>
- добавление файлов к существующему архивуunzip -l <final_file_name>
- проверить содержимое zip-архиваgzip -c <file_name>
- сохранить оригинальный файл после сжатияunzip <file_name> -d <dir_name>
- извлечь файлы в указанный каталогunzip -l <file_name>
- посмотреть содержимое файла без распаковкиgunzip <file_name>
- не сохраняет исходный архивgunzip -c <file_name>
- распаковывает сжатый .gz файл и выводит его содержимое в стандартный вывод (stdout), без удаления оригинального сжатого файла
Диски
-
fdisk -l
- Показывает список всех подключенных устройств (жестких дисков, SSD и т.д.).
- Отображает размер дисков, типы разделов, точки монтирования.
- Полезно для диагностики, перед созданием или изменением разделов.
-
lsblk
- показывает дерево всех подключенных устройств, их разделы, точки монтирования. (-f
- для более детальной информации о файловых системах,-p
- полные пути к устройствам,-d
- показывает только диски, без разделов,-J
- результат в виде json) -
cfdisk <устройство>
- команда для работы с разделами диска -
mkfs.<тип файловой системы> <устройство>
- для создания файловой системы на разделе диска, форматирует указанный раздел с выбранной файловой системой -
/etc/fstab
- это файл конфигурации в Linux, который содержит информацию о том, какие файловые системы должны автоматически монтироваться при загрузке системы. !!! tip "Проfstab
" Каждая строка в/etc/fstab
описывает один файловый раздел и содержит следующие поля:- Файл устройства (например, /dev/sda1 или UUID диска).
- Точка монтирования (например, /, /home, /mnt/data).
- Тип файловой системы (например, ext4, ntfs, swap).
- Опции монтирования (например, defaults, noatime, ro).
- Параметр для dump (обычно 0, определяет необходимость резервного копирования).
- Параметр для проверки на ошибки (fsck) (0 — не проверять, 1 — проверять при загрузке).
Пример строки
UUID=3b14dabe-6a1a-4a1b-9e41-3d9b26b6ef1f / ext4 defaults 0 1
-
blkid
- выводит информацию о всех блочных устройствах, включая UUID -
mount
- используется для подключения файловых систем (например, жестких дисков, флешек) к определенным точкам монтирования в файловой системе
mount [OPTIONS] <DEVICE> <MOUNTPOINT>
mount /dev/sda1 /mnt
- это монтирует раздел /dev/sda1 в директорию /mntmount -t ext4 /dev/sda1 /mnt
- подключить с указанием типа файловой системыdf -Th
- информация о файловых системах и их типахdu -sh * | sort -rh
- размеры файлов и директорий в текущей (по убыванию)lsblk -d -o name,rota
- 1 это HDD (жесткий диск).
- 0 это SSD (твердотельный накопитель)
диск с названием sr* это cd привод
lsscsi
- отображает устройства, подключенные через интерфейс SCSI
Grep
cat <filename> | grep -A 10 "<pattern>"
- вывести 10 строк ПОСЛЕ найденного совпаденияcat <filename> | grep -B 10 "<pattern>"
- вывести 10 строк ПЕРЕД найденным совпаденияcat <filename> | grep "^<pattern>"
- начинается с<pattern>
cat <filename> | grep "^<pattern1>.*<pattern2>"
-.*
любое количество символом между<pattern1>
и<pattern2>
??? info "Квантификатор, он указывает сколько раз в строке встречается символ или группа символов"
- *
- любое количество символов
- +
- один и более символов
- ?
- 0 или 1 символ
- {n}
- встречается n раз
cat <filename> | grep "^<pattern1>.*<pattern2>$"
-<pattern2>
в конце строки (из-за$
)cat <filename> | grep -P "restrict(ed|ing)"
- ну понятно
??? info "Флаги grep" Если не работает корректная регулярка, добавить один из этих флагов
- `-P` - Perl совместисые регулярки
- `-E` - расширенные регулярки
- `i` - игнорировать регистр
- `w` - только целые слова
- `x` - совпадение всей строки
cat <filename> | grep -P "May 2 08:5(3|4|5):"
- ну понятноgrep --text -A 1000000 "2025-02-23 13:00:00" catalina.out > cut.log
- вывести1000000
строк после"2025-02-23 13:00:00"
sort file.txt | uniq -d
- вывести дублирующиеся строки в файле
Логирование
tail -f /var/log/*
- логи (-f
- обновление в реальном времени)head
- как tail, но headjournalctl
- утилита для просмотра логов служб, управляемыхsystemd
-u <service_name>
- просмотр логов конкретной службы
journalctl -u nginx
journalctl -u nginx -f
- просмотр логов в реальном времениjournalctl -n 100
- последние 100 строкjournalctl --since "2024-10-03 12:00:00" --until "2024-10-03 14:00:00"
- логи за конкретный периодjournalctl -p err
- можно показывать только ошибки- emerg (0): Аварийные сообщения.
- alert (1): Требуют немедленных действий.
- crit (2): Критические ошибки.
- err (3): Ошибки.
- warning (4): Предупреждения.
- notice (5): Важные события.
- info (6): Информационные сообщения.
- debug (7): Отладочные сообщения.
journalctl -xe
- x (или --catalog) — выводит дополнительные объяснения (аннотации) к некоторым сообщениям журнала, помогает понять детали ошибок или предупреждений, предлагая описания и возможные решения, если такие есть.
- e (или --pager-end) — открывает журнал в режиме постраничного просмотра и сразу прокручивает его до конца, показывая самые последние записи.
less -S
- не переносит на новую строкуdmesg -T
- логи ядра системы/var/log/dmesg
- логи загрузки ядра (только загрузки ядра! dmesg - все логи ядра)sudo journalctl --disk-usage
- сколько места занимают логи на диске, собираемые journalctlsudo journalctl --vacuum-size=1G
- задаёт максимально допустимый размер для хранимых на диске логовsudo journalctl --vacuum-time=1years
- задаёт максимально допустимое время для хранимых на диске логовtail -f
следит за файлом и выводит новые строки по мере их добавления в файл. Однако, если файл будет удалён и создан заново (например, при ротации логов),tail -f
перестанет отслеживать файл, потому что он будет считать, что файл исчез.tail -F
делает то же самое, но в случае удаления файла и его создания заново,tail -F
продолжит отслеживать файл. Это полезно для логов, так как они могут быть перезаписаны, но вы хотите продолжать их отслеживать, несмотря на изменения имени файла или его создание заново.
/var/log/messages
— общие системные сообщения, включая ошибки ядра, службы и аппаратные события (в CentOS)./var/log/syslog
— аналог messages в Debian/Ubuntu, содержит системные логи и логи демонов.dmesg -T
- логи ядра системы/var/log/dmesg
- логи загрузки ядра (только загрузки ядра! dmesg - все логи ядра)/var/log/secure
— логи аутентификации, попыток входа, работы sudo (RHEL/CentOS)./var/log/auth.log
— аналог в Debian/Ubuntu, логи SSH, sudo и других служб аутентификации
Logrotate
Logrotate - это системная утилита Linux, которая управляет автоматической ротацией и сжатием лог-файлов.
Пример конфига logrotate
/var/log/messages {
size 100M # Ротация, если размер превышает 100 МБ
rotate 10 # Хранить до 10 архивов
compress # Сжимать старые файлы
delaycompress # Откладывать сжатие на один цикл
missingok # Игнорировать, если файл отсутствует
notifempty # Пропускать пустые файлы
sharedscripts # Пост-скрипт выполняется один раз для всех лог-файлов
postrotate # HUP позволяет rsyslog подхватить новые файлы логов.
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
logrotate -d /etc/logrotate.d/app
- для проверки конфигурацииlogrotate -f /etc/logrotate.d/app
- для принудительной ротации логов