## Основные команды для администрирования Linux ### Настройка сервера - `groups username` - группы пользователя - `addgroup ` - добавить группу - `adduser `- добавить пользователя - `usermod -aG ` - добавить пользователя в группу без удаления его из других групп - `su -`: если добавить - (или --login), это переключит вас на пользователя root и загрузит окружение (все переменные окружения будут инициализированы для пользователя root), как если бы вы вошли в систему как root - `lsb_release -a` или `hostnamectl` - версия ОС (и не только) ### Пакетный менеджер (apt) - `apt remove --purge ` или `apt purge ` - удаляет сам пакет и все связанные с ним конфиги - `apr remove ` - удаляет пакет - `apt autoremove` - используется для удаления пакетов, которые были автоматически установлены в качестве зависимостей для других пакетов, но больше не нужны - `apt update` - скачивает список пакетов и их версий с серверов репозиториев, но **не устанавливает и не обновляет пакеты**. - `apt upgrade` - обновляет все установленные пакеты до последних доступных версий, основываясь на информации, полученной с помощью `apt update`, однако эта команда не устанавливает новые пакеты или не удаляет старые. Если для обновления пакета требуются новые зависимости, они не будут установлены. - `apt full-upgrade` - не только обновляет пакеты, но и может устанавливать новые зависимости и удалять старые пакеты, если это необходимо для завершения обновления - `sudp apt install ` - устанавливает пакет - `supo apt search ` - поиск пакета по имени - `apt show ` - инфо о пакете - `apt autoclean` - для удаления старых неиспользуемых файлов - `apt clean` - APT хранит загруженные .deb файлы в кэше на диске, чтобы очистить этот кэш. Эта команда удаляет все файлы в dir `/var/cache/apt/archives/` - `/etc/apt/sources.list` - основной файл, где перечислены все репозитории. Этот файл указывает, откуда APT будет загружать пакеты. - `/etc/apt/sources.list.d/` - в этот каталог можно добавлять дополнительные файлы для подключения новых репозиториев. > Есть ещё `apt-get`, но это более старая команда, которая в основном используется для скриптов, потому что не предусматривает интерактивную работу с системой 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 ` - устанавливает пакет из репозитория - `dnf remove ` - удаляет пакет - `dnf upgrade` - обновляет систему - `dnf search ` - поиск пакета - `rpm -ivh .rpm` - установка rpm пакета - `rpm -e .rpm` - удаления пакета - `rpm -Uvh .rpm` - обновление пакета, если он не установленЮ он установится - `rpm -qi ` - просмотр информации о пакете - `rpm -V ` - проверка целостности пакета - `rpm -ql ` - список файлов в пакете - `dnf install .rpm` - установка rpm пакета через dnf, dnf будет управлять зависимостями !!! tip "Лучше использовать высокоуровневый пакетный менеджер (apt, dnf)" Высокоуровневые пакетные менеджеры (например, dnf, apt) удобнее и безопаснее, поскольку автоматически управляют зависимостями, работают с репозиториями, проверяют конфликты и целостность пакетов, одним словом, упрощают обновление ПО. При работе с rpm, dpkg требуется самостоятельная работа с зависимостями и есть вероятность накосячить с установкой, а если ПО требует дополнительные библиотеки, их придётся ставить отдельно. ### Сеть - `ifconfig` - сетевые интерфейсы + статистика - `ping` - проверка доступности хоста - `traceroute` - путь пакетов от сервера к серверу (промежуточные маршрутизаторы) (`mtr` покажет путь в лайве) - `nslookup`, `dig @ ` - инфа о 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 ```bash # Включаем фаерволл sudo ufw enable # Отключить фаерволл sudo ufw disable # Перезагрузить ufw reload # Не пускать входящий трафик ufw default deny incoming # Пускать исходящий ufw default allow outgoing # Разрешить доступ ко всем портам с определённого IP-адреса ufw allow from # Разрешить доступ к порту ufw allow # Разрешить доступ к порту с определённого IP-адреса sudo ufw allow from to any port # Чтобы запретить - deny вместо allow # Показать состояние ufw и активные правила ufw status verbose # Показать правила с нумерацией ufw status numbered # Удалить правило по номеру ufw delete # Интерфейсы sudo ufw allow in on eth0 sudo ufw allow out on eth0 # Удалить правило (будут применены настройки по умолчанию) ufw delete allow / # удалить разрешение ufw delete deny / # удалить запрет # Сброс всех правил sudo ufw reset # Логи ufw sudo tail -f -n 100 /var/log/ufw.log # Изменить уровень логирования sudo ufw logging # Разрешить доступ к порту с определённого ip sudo ufw allow from to any 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 сервере - `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, но head - `journalctl` - утилита для просмотра логов служб, управляемых `systemd` - `-u ` - просмотр логов конкретной службы ```bash 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` - подробно про проц --- - `tar` - работа с архивами - `-cvf` - создать архив - `-xvf` - извлечь архив - `-z` - использовать сжатие `gzip` ```bash 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* не будет создан ### Система - `lsof` - Команда lsof (List Open Files) в Linux используется для отображения списка открытых файлов в системе. В Linux (и Unix-подобных системах) практически все является файлом, включая сетевые соединения и устройства. - `lsof` - просмотр всех открытых файлов - `lsof -u username` - файлы открытые конкретным пользователем - `lsof -p 1234` - поиска файлов открытых определённым процессом - `lsof -i :80` - соединения по конкретному порту - `lsof /dev/sda1` - файлы использующие определённое устройство или файловую систему - `lsof | grep ` - Если файл заблокирован и его нельзя удалить или переместить, `lsof` покажет, какой процесс его использует - `strace` - системные вызовы --- - `killall -s 9 ` - убивает все процессы в названием 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 &` - если закроем терминал команда продолжит выполняться - `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 2>/dev/null` - `grep -A 10 <файл>` - вывести 10 строк после найденного совпадения ### Диски - `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` - используется для подключения файловых систем (например, жестких дисков, флешек) к определенным точкам монтирования в файловой системе ```bash mount [OPTIONS] ``` - `mount /dev/sda1 /mnt` - это монтирует раздел /dev/sda1 в директорию /mnt - `mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы - `df -Th` - информация о файловых системах и их типах - `du -sh * | sort -rh` - размеры файлов и директорий в текущей (по убыванию) - `lsblk -d -o name,rota` - 1 это HDD (жесткий диск). - 0 это SSD (твердотельный накопитель) > диск с названием sr* это cd привод - `lsscsi` - отображает устройства, подключенные через интерфейс SCSI