Перевод сборника команд Unix ToolBox. Часть 2 Система

664

Вторая часть перевода сборника команд Unix ToolBox, написанного Colin Barschel. В этот раз будут рассмотрены команды входящие в категорию «Система».В частности, в этом разделе рассказано как узнать об имеющемся железе, как получить полную статистику о загруженных процессах или использовании оперативной памяти. Узнаете как настроить параметры ядра, задать пароли root и создать пользователя системы. Конечно, здесь не рассказано как получить деньги под залог земли, зато есть порядок команд для восстановления загрузчика GRUB.

Кстати, в этом сборнике приведены команды не только для Linux и для FreeBSD и даже Solaris. Более того, есть весьма любопытные команды относящиеся к конкретным дистрибутивам. В общем, читайте и запоминайте .

Система

Версия операционной системы и ядра
# uname -a # Версия операционной системы и ядра (BSD)
# lsb_release -a # Информация о релизе ( LSB distribution)
# cat /etc/SuSE-release # Версия SuSE
# cat /etc/debian_version # Версия Debian

Используйте /etc/DISTR-release где DISTR= lsb (Ubuntu), redhat, gentoo, mandrake, sun (Solaris) и т.д. . Смотри так-же /etc/issue.

# uptime # Аптайм, время прошедшее с момента запуска системы + текущая нагрузка(LA)
# hostname # Имя хоста
# hostname -i # IP адрес хоста (только для Linux)
# man hier # Документация(man page) по иерархии файловой системы
# last reboot # История перезагрузок(reboot)
Конфигурация железа

Железо определенное ядром при загрузке

# dmesg # Железо, определенное при загрузке
# lsdev # Информация об установлено железе
# dd if=/dev/mem bs=1k skip=768 count=256 | strings -n 30 # Прочитать данные из BIOS
Linux
# cat /proc/cpuinfo # Модель процессора
# cat /proc/meminfo # Физическая память
# grep MemTotal /proc/meminfo # Объем физической памяти
# watch -n1 ‘cat /proc/interrupts’ # Следить за прерываниями
# free -m # Использованная и свободная память (-m для MB)
# cat /proc/devices # Сконфигурированные устройства
# lspci -tv # Устройства PCI
# lsusb -tv # Устройства USB
# lshal # Показать список всех устройств с их свойствами
# dmidecode # Показать информацию из DMI/SMBIOS:, из BIOS
FreeBSD
# sysctl hw.model # Модель процессора
# sysctl hw # Большой список инфы о железе, ветка переменных hw
# sysctl vm # Информация по использованию памяти
# dmesg | grep usable memory # Объем физической памяти
# sysctl -a | grep mem # Различная информация о памяти ядра
# sysctl dev # Сконфигурированные устройства
# pciconf -l -cv # Устройства PCI
# usbdevs -v # Устройства USB
# atacontrol list # Устройства ATA
# camcontrol devlist -v # Устройства SCSI
Нагрузка, статистика, сообщения

Следующие команды применяются для мониторинга текущего состояния системы

# top # Утилита TOP, различная системная информация, процессы, LA
# mpstat 1 # Статистика касающаяся процессора
# vmstat 2 # Статистика виртуальной памяти, дисков и процессора
# iostat 2 # Статистика операций ввода/вывода,I/O
# systat -vmstat 1 # BSD суммарная системная статистика
# systat -tcp 1 # BSD статистика tcp (так-же можно -ip)
# systat -netstat 1 # BSD активные сетевые соединения
# systat -ifstat 1 # BSD сетевой трафик на активных интерфейсах
# systat -iostat 1 # BSD работа процессора и дисков
# tail -n 500 /var/log/messages # Последние 500 сообщений Syslog из файла messeges
# tail /var/log/warn # Системные предупреждения
Пользователи
# id # Показать uid(имя), gid(группу), текущего пользователя
# last # Статистика последних входов в систему
# who # Показать кто в системе в данный момент
# groupadd admin # Создать группу «admin» и пользователя colin (Linux/Solaris)
# useradd -c «Colin Barschel» -g admin -m colin
# usermod -a -G # Добавить существующего пользователя в группу (Debian)
# groupmod -A # Добавить существующего пользователя в группу (SuSE)
# userdel colin # Удалить пользователя colin (Linux/Solaris)
# adduser joe # FreeBSD добавить пользователя joe (интерактивно)
# rmuser joe # FreeBSD удалить пользователя joe (интерактивно)
# pw groupadd admin # FreeBSD создать группу, используя утилиту pw
# pw groupmod admin -m newmember # FreeBSD добавить нового участника в группу
# pw useradd colin -c «Colin Barschel» -g admin -m -s /bin/tcsh # FreeBSD создать пользователя (утилита pw)
# pw userdel colin; pw groupdel admin # FreeBSD удалить пользователя и группу (утилита pw)

Пароли, хранятся в файлк /etc/shadow, для Linux и в /etc/master.passwd для FreeBSD, в зашифрованном виде. Если файл master.passwd был изменен вручную, нужно воспользоваться командой pwd_mkdb -p master.passwd , что-бы пересобрать базу данных.

Что-бы временно запретить вход в систему, всем кроме root, используйте nologin.

# echo «Sorry no login now» > /etc/nologin # (Linux)
# echo «Sorry no login now» > /var/run/nologin # (FreeBSD)
Системные лимиты

Некоторые приложения(Proxy, Web сервера, базы данных) используют большие количества открытых файлов и сокетов, и как правило, установок по-умолчанию им недостаточно.

Linux
Оболочка/скрипт

За лимиты оболочки отвечает ulimit. Текущее состояние можно проверить ulimit -a. Например, что-бы увеличить кол-во открытых файлов с 1024 до 10240 нужно сделать:

# ulimit -n 10240 # Команда верна только в оболочке

Так-же команда ulimit используется в скрипте, что-бы увеличить лимиты только для скрипта.

пользователь/процесс

Лимиты пользователей и процессов устанавливаются в /etc/security/limits.conf. Например:

# cat /etc/security/limits.conf
* hard nproc 250 # Лимит пользовательских процессов
asterisk hard nofile 409600 # Лимит открытых файлов для приложения
Общесистемные

Общесистемные лимиты устанавливаются командой Sysctl. Большинство этих переменных, действуют до перезагрузки, что-бы ограничения остались после ребута, внесите их в файл /etc/sysctl.conf.

# sysctl -a # Показать все системные переменные
# sysctl fs.file-max # Показать максимально-возможное кол-во открытых файлов
# sysctl fs.file-max=102400 # Изменить максимальное кол-во открытых файлов
# cat /etc/sysctl.conf
fs.file-max=102400 # Постоянное значение в файле sysctl.conf
# cat /proc/sys/fs/file-nr # Кол-во используемых файловых дескрипторов
FreeBSD
Оболочка/скрипт

Используйте команду limits в csh или tcsh.

пользователь/процесс

Лимиты по-умолчанию, устанавливаются при входе в систему в файле /etc/login.conf. Неограниченные значение, ограничиваются общесистемными лимитами.

Общесистемные

Во FreeBSD, общесистемные лимиты регулируются так-же как в Linux, командой Sysctl. Постоянные ограничения устанавливаются в файлах /etc/sysctl.conf и /boot/loader.conf. Синтаксис записи аналогичен Linux, но ключи отличаются.

# sysctl -a # Показать все системные переменные
# sysctl kern.maxfiles=XXXX # Максимальное кол-во файловых дескрипторов
kern.ipc.nmbclusters=32768 # Постоянные значения в /etc/sysctl.conf
kern.maxfiles=65536 # типичные значения для Squid
kern.maxfilesperproc=32768
kern.ipc.somaxconn=4096 # TCP очередь, например для apache/sendmail
# sysctl kern.openfiles # Кол-во используемых файловых дескрипторов
# sysctl kern.ipc.numopensockets # Кол-во используемых сокетов
# sysctl -w net.inet.ip.portrange.last=50000 # Верхнее значение диапазона портов, по-умолчанию: 1024-5000
# netstat -m # Статистика сетевых буферов памяти

Подробнее, смотрите Tuning Kernel Limits

Solaris

Следующие значения в /etc/system увеличат максимальное значение файловых дескрипторов на процесс:

set rlim_fd_max = 4096 # Жесткий лимит файловых дескрипторов на один процесс
set rlim_fd_cur = 1024 # Мягкий лимит файловых дескрипторов на один процесс
Runlevel — Режим работы системы / уровень запуска
Linux

Загрузившись, ядро стартует процесс init, который запускает rc, коорый в свою очередь выполняет все скрипты, соответствующего уровня запуска. Скрипты расположены в /etc/init.d и слинкованы в /etc/rc.d/rcN.d, где N, означает уровень запуска.

Уровень запуска по-умолчанию, установлен в /etc/inittab, и как правило имеет значение 3 или 5:

# grep default: /etc/inittab
id:3:initdefault:

Текущий режим работы может быть изменен с помощью все того-же init. Например, перейдем с 3 уровня на 5:

# init 5 # Переходим в режим 5

  • 0 Shutdown and halt
  • 1 Single-User mode (also S)
  • 2 Multi-user without network
  • 3 Multi-user with network
  • 5 Multi-user with X
  • 6 Reboot

Используйте chkconfig для конфигурирования программ, которые должны стартовать при загрузке в соответствующий режим.

# chkconfig —list # Список всех init-скриптов
# chkconfig —list sshd # Показать статус sshd
# chkconfig sshd —level 35 on # Конфигурирование sshd для уровня 3 и 5
# chkconfig sshd off # Отключение sshd для всех уровней

Debian и основанные на нем дистрибутивы, Ubuntu или Knoppix, для управления скриптами Runlevel, используют команду update-rc.d. По-умолчанию, 2, 3, 4 и 5 уровень для старта, и 0, 1 и 6 для останова.

# update-rc.d sshd defaults # Активировать sshd с уровнем запуска по-умолчанию
# update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 . # Непосредственное указание уровней запуска и останова
# update-rc.d -f sshd remove # Запретить sshd для всех уровней
# shutdown -h now (or # poweroff) # Остановить и выключить систему
FreeBSD

FreeBSD использует другой подход к процессу загрузки, нежели SysV (Linux, etc). Последний этап загрузки (Single user с ХServer или без него), настроен в /etc/ttys. Все скрипты расположены в /etc/rc.d/ и в /usr/local/etc/rc.d/ для сторонних производителей ПО. Запуск системных сервисов настраивается в /etc/rc.conf и /etc/rc.conf.local. Поведение по-умолчанию, задано в /etc/defaults/rc.conf. Скрипты реагируют на start | stop | status.

# /etc/rc.d/sshd status
sshd is running as pid 552.
# shutdown now # Перключиться в однопользователский режим
# exit # Вернуться в многопользовательский режим
# shutdown -p now # Выключить систему
# shutdown -r now # Перезагрузить

Процесс init может быть использован для управления установленным состоянием уровня. Например init 6, перезагрузит систему.

  • 0 Остановить систему и выключить (сигнал USR2)
  • 1 Перейти в Single user (сигнал TERM)
  • 6 Перезагрузить машину (сигнал INT)
  • c Блокировать последующие входы в систему (сигнал TSTP)
  • q Перечитать ttys(5) файл (сигнал HUP)

Сброс пароля root
Linux, способ раз

В загрузчике (lilo или grub), введите следующие опции:

init=/bin/sh

Ядро смонтирует корневую файловую систему, init запустит системный шелл(bash)
Используйте команду passwd, что-бы изменить пароль root и перезагрузитесь. Если после загрузки, корневой раздел файловой системы смонтировался в режиме read only (только чтение), перемонтируйте его в rw, для чтения/записи:

# mount -o remount,rw /
# passwd # или удалите пароль root (/etc/shadow)
# sync; mount -o remount,ro / # синхронизация перед монтированием в read only
# reboot
FreeBSD, способ раз

На экране загрузчика выберите Single user(опция 4), перемонтируйте корневую файловую систему в rw, используя утилиту passwd установите новый пароль для root.

# mount -u /; mount -a # перемонтирует корневую fs в режим rw
# passwd
# reboot
Unix и FreeBSD и Linux, способ два

Некоторые Unix системы, могут не дать вам исполнить вышеописанные трюки. Решение проблемы в том, что-бы смонтировать корневую файловую систему из другой OS (типа загрузочного CD) и сменить пароль.

  • Загрузитесь с LiveCD или установочного диска в режиме восстановления.
  • Найдите корневой партишн с помощью fdisk, например fdisk /dev/sda
  • Смонтируйте его и используйте chroot:

# mount -o rw /dev/ad4s3a /mnt
# chroot /mnt # сдкелать /mnt корневой файловой системой
# passwd
# reboot
Сборка ядра (компиляция)
Linux
# cd /usr/src/linux
# make mrproper # Очистка, включая файлы конфигурации
# make oldconfig # Повторно использовать старые конфиги, если есть
# make menuconfig # xconfig (Qt) или gconfig (GTK)
# make # Создание сжатого образа ядра
# make modules # Компиляция модулей
# make modules_install # Установка модулей
# make install # Установка ядра
# reboot
FreeBSD

При необходимости, обновите исходники системы (в /usr/src) csup, для FreeBSD 6.2 и выше:

# csup

Я использую следующий конфиг для csup:

*default host=cvsup2.ru.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_7
*default delete use-rel-suffix
src-all

Что-бы изменить настройки ядра, скопируйте конфигурационный файл GENERIC под други именем и отредактируйте его под себя.

# cd /usr/src/sys/i386/conf/
# cp GENERIC MYKERNEL
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL

Переустановка всей операционной системы:

# make buildworld # Собрать мир ( мир — все что не ядро)
# make buildkernel KERNCONF=MYKERNEL # Сборка ядра (построение), как делали ранее
# make installkernel KERNCONF=MYKERNEL # Установить ядро
# reboot
# mergemaster -p # Сравнить только необходимые уонфиги
# make installworld # Установить мир
# mergemaster -i -U # Обновить все конфигурационные и другие файлы
# reboot

При незначительных изменениях в исходных текстах, можно использовать ключ NO_CLEAN=yes, что-бы избежать пересборку всего дерева исходников.

# make buildworld NO_CLEAN=yes # Не удалять старые объектные файлы
# make buildkernel KERNCONF=MYKERNEL NO_CLEAN=yes
Модули ядра
Linux
# lsmod # Показать все модули загруженные в ядро
# modprobe isdn # Загрузить модуль (в данном случае isdn)
FreeBSD
# kldstat # Списоз загруженных модулей
# kldload crypto # Загрузить модуль (здесь crypto)
Восстановление загрузчика grub
# mount /dev/sda6 /mnt # монтировать Linux partion на /mnt
# mount —bind /proc /mnt/proc # монтировать подсистему proc в /mnt
# mount —bind /dev /mnt/dev # монтировать устройства в /mnt
# chroot /mnt # сменить корневую директрорию на Linux partition
# grub-install /dev/sda # переустановить grub со старыми опциями