Linux: сведения о системе, окружение, время и журналы

Версия системы и ядра, железо, переменные окружения, история команд, дата и время, журнал ядра

Система и ядро

КомандаВариантЧто делает
uname -auname -aВсё сразу: имя хоста, версия ядра, архитектура.
uname -runame -rТолько версия ядра.
uname -muname -mАрхитектура процессора (x86_64, aarch64).
cat /etc/os-releasecat /etc/os-releaseНазвание и версия дистрибутива.
lsb_releaselsb_release -aВерсия дистрибутива (если установлен пакет lsb-release).
hostnamectlhostnamectlИмя, ОС, ядро, виртуализация, тип шасси.
uptimeuptime -pВремя работы в читаемом виде.
who -bwho -bВремя последней загрузки.
systemd-detect-virtsystemd-detect-virtРаботает ли система в виртуальной машине или контейнере.
getconfgetconf PAGESIZE ; getconf LONG_BITСистемные константы (размер страницы, разрядность).

Железо

КомандаВариантЧто делает
lscpulscpuПроцессор: ядра, потоки, частоты, кеши.
nprocnprocКоличество доступных ядер (удобно для make -j$(nproc)).
free -hfree -hОперативная память и swap.
cat /proc/meminfogrep -E "MemTotal|MemAvailable" /proc/meminfoПодробная статистика памяти.
lspcilspci | grep -i ethernetPCI-устройства: сетевые карты, видео, контроллеры.
lsusblsusb -tUSB-устройства в виде дерева.
dmidecodesudo dmidecode -t memoryДанные BIOS и DIMM-модули (нужен root).
sensorssensorsТемпературы и напряжения (пакет lm-sensors).
lshwsudo lshw -shortКраткая сводка всего оборудования.
vmstatvmstat 2 5Загрузка процессора, памяти и ввода-вывода каждые 2 секунды, 5 раз.
iostatiostat -xz 2 3Нагрузка на диски (пакет sysstat).
iotopsudo iotop -oПроцессы, которые сейчас пишут и читают диск.

Модули ядра и dmesg

КомандаВариантЧто делает
lsmodlsmod | grep kvmЗагруженные модули ядра.
modinfomodinfo ext4Описание модуля и его параметры.
modprobesudo modprobe br_netfilterЗагрузить модуль (с зависимостями).
modprobe -rsudo modprobe -r floppyВыгрузить модуль.
sysctlsysctl net.ipv4.ip_forwardТекущее значение параметра ядра.
sysctl -wsudo sysctl -w net.ipv4.ip_forward=1Изменить на время работы.
sysctl --systemsudo sysctl --systemПрименить все файлы из /etc/sysctl.d/.
dmesg -Tsudo dmesg -T | tail -n 50Журнал ядра с человеческим временем.
dmesg -lsudo dmesg -l err,warnТолько ошибки и предупреждения.
dmesg -wsudo dmesg -wСледить за новыми сообщениями ядра.

Переменные окружения и оболочка

КомандаВариантЧто делает
envenv | sortВсе переменные окружения, по алфавиту.
printenvprintenv PATHЗначение конкретной переменной.
echo $VARecho "$HOME $USER $SHELL"Вывести значение переменной (кавычки защищают от разбивки).
exportexport APP_ENV=prodЗадать переменную для текущей сессии и её дочерних процессов.
VAR=value cmdLANG=C sort fileПеременная только для одной команды.
unsetunset APP_ENVУдалить переменную.
setset | grep ^PS1Все переменные оболочки, включая локальные.
$?grep -q root /etc/passwd; echo $?Код возврата последней команды (0 — успех).
$!sleep 10 & echo $!PID последнего фонового процесса.
$$echo $$PID текущей оболочки.
whichwhich -a python3Путь к исполняемому файлу в PATH (все совпадения с -a).
whereiswhereis nginxБинарник, исходники и man-страницы.
typetype llЧто такое команда: алиас, функция, встроенная или бинарник.
sourcesource ~/.bashrcПеречитать файл настроек в текущей сессии.
aliasalias ll='ls -lah'Короткое имя для команды.
unaliasunalias llУбрать алиас.
PATH=export PATH="$HOME/bin:$PATH"Добавить папку в начало поиска команд.

История команд

КомандаВариантЧто делает
historyhistory | tail -n 30Последние 30 команд с номерами.
history | grephistory | grep dockerПоиск по истории.
!n!245Повторить команду с номером 245.
!string!sshПовторить последнюю команду, начинающуюся с ssh.
!!sudo !!Повторить предыдущую команду с sudo.
!$cp conf.yml !$.bakПоследний аргумент предыдущей команды.
history -chistory -cОчистить историю текущей сессии.
HISTCONTROLexport HISTCONTROL=ignorebothНе сохранять команды с пробела и повторы.
Ctrl+RCtrl+RПоиск по истории в реальном времени.

Дата, время и календарь

КомандаВариантЧто делает
datedateТекущие дата и время.
date +%Fdate +%F_%H-%MФормат для имён файлов.
date -udate -uВремя UTC.
date -ddate -d "2 days ago" +%FОтносительная дата.
date -d @date -d @1700000000Перевод Unix-времени в дату.
timedatectltimedatectl statusЧасовой пояс, синхронизация NTP.
timedatectl setsudo timedatectl set-timezone Europe/MoscowСменить часовой пояс.
timedatectl ntpsudo timedatectl set-ntp trueВключить синхронизацию времени.
calcal -3Календарь на три месяца.
timetime ./job.shЗамерить время выполнения команды.
sleepsleep 30Пауза.
watchwatch -n 2 'df -h /'Повторять команду каждые 2 секунды.

Пользователи в системе и загрузка

КомандаВариантЧто делает
wwКто в системе и что делает, средняя нагрузка.
top -bn1top -bn1 | head -15Снимок загрузки без интерактивного режима.
loadavgcat /proc/loadavgСредняя нагрузка за 1, 5 и 15 минут.
journalctl --list-bootsjournalctl --list-bootsСписок загрузок, для анализа падений.
last rebootlast reboot | head -5История перезагрузок.

Перенаправление и вывод

КомандаВариантЧто делает
>cmd > out.txtВывод в файл с перезаписью.
>>cmd >> out.txtДописать в конец файла.
2>cmd 2> errors.txtТолько ошибки (stderr) в файл.
2>&1cmd > all.log 2>&1Ошибки и вывод в один файл.
&>cmd &> all.logТо же, короткая запись в bash.
/dev/nullcmd > /dev/null 2>&1Выбросить вывод.
<sort < names.txtВзять ввод из файла.
<<EOFcat <<EOF > conf.txt ...Многострочный ввод прямо в команде (heredoc).
|ps aux | grep nginxПередать вывод в другую команду.
>(diff <(sort a) <(sort b)Подстановка процесса: вывод как файл.

Пример: быстрый отчёт о сервере

echo "== Система =="; hostnamectl | head -6
echo "== Ядро =="; uname -r
echo "== Память =="; free -h | head -2
echo "== Диски =="; df -hT -x tmpfs -x devtmpfs
echo "== Нагрузка =="; uptime
echo "== Упавшие службы =="; systemctl --failed --no-pager
echo "== Ошибки ядра за сутки =="; sudo journalctl -k -p err --since "24 hours ago" --no-pager | tail -n 20
Переменные окружения с паролями и токенами нельзя передавать в командной строке: они видны в ps aux и в истории. Используйте файлы с ограниченными правами (chmod 600) или менеджер секретов. Команда history -c не удаляет уже записанный файл истории, для этого существует ~/.bash_history.
Чтобы не потерять полезные команды, добавьте в ~/.bashrc строку shopt -s histappend. Тогда история дописывается в файл, а не перезаписывается при закрытии каждой сессии.