Перейти к содержанию

Команды

Основные команды для администрирования Linux#

Настройка сервера#

  • groups username - группы пользователя
  • addgroup <groupname> - добавить группу
  • adduser <username> - добавить пользователя
  • usermod -aG <groupname> <username> - добавить пользователя в группу без удаления его из других групп
  • su -: если добавить - (или --login), это переключит вас на пользователя root и загрузит окружение (все переменные окружения будут инициализированы для пользователя root), как если бы вы вошли в систему как root
  • lsb_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, но это более старая команда, которая в основном используется для скриптов, потому что не предусматривает интерактивную работу с системой

Про 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 будет управлять зависимостями

Лучше использовать высокоуровневый пакетный менеджер (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
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, но head
  • journalctl - утилита для просмотра логов служб, управляемых 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 самых болших файлов в системе
  • \; - вызывает команду для каждого файла по очереди;
  • + - вызывает команду один раз с множеством файлов, что значительно ускоряет процесс, особенно при большом числе найденных файлов.

  • 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> - к каким группам приналежит пользователь
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, который содержит информацию о том, какие файловые системы должны автоматически монтироваться при загрузке системы.

Про 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 в директорию /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

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>
Квантификатор, он указывает сколько раз в строке встречается символ или группа символов
  • * - любое количество символов
  • + - один и более символов
  • ? - 0 или 1 символ
  • {n} - встречается n раз
  • cat <filename> | grep "^<pattern1>.*<pattern2>$" - <pattern2> в конце строки (из-за $)
  • cat <filename> | grep -P "restrict(ed|ing)" - ну понятно
Флаги 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, но head
  • journalctl - утилита для просмотра логов служб, управляемых 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 - сколько места занимают логи на диске, собираемые journalctl
  • sudo 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 - для принудительной ротации логов