Команды
Основные команды для администрирования 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
, но это более старая команда, которая в основном используется для скриптов, потому что не предусматривает интерактивную работу с системой
Про 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
- показывает на каком порту открыт sshss -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, но headjournalctl
- утилита для просмотра логов служб, управляемыхsystemd
-u <service_name>
- просмотр логов конкретной службы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 -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 — проверять при загрузке).
Пример строки
blkid
- выводит информацию о всех блочных устройствах, включая UUIDmount
- используется для подключения файловых систем (например, жестких дисков, флешек) к определенным точкам монтирования в файловой системе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>
Квантификатор, он указывает сколько раз в строке встречается символ или группа символов
*
- любое количество символов+
- один и более символов?
- 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, но headjournalctl
- утилита для просмотра логов служб, управляемыхsystemd
-u <service_name>
- просмотр логов конкретной службы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
- для принудительной ротации логов