Система

]]>Железо]]> / ]]>Статистика]]> / ]]>Пользователи]]> / ]]>Системные лимиты]]> / ]]>Уровни запуска]]> / ]]>Пароль root]]> / ]]>Сборка ядра]]> / ]]>Модули ядра]]> / ]]>Загрузчик grub]]>

Версия операционной системы и ядра

# 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 со старыми опциями