Вход и осмотр
Кто я, где я
# whoomi - кто я
# echo $USER - кто я
# groups - группы
# id - текуший юзер
# set - переменные окружения
# hostname - имя текущего сервера
# pwd - текущяя дериктория
# ls - список файлов
# ls -l - список файлов в длинном формате
# ls -la - список файлов в длинном формате + скрытые
Кто здесь
# w - открытые сесии
# who - открытые сесии
# wall - послать всем сообщение
Что здесь
# uname - - help - имя ядра, имя машины, имя операционки, проц память и тд.
# echo $PATH - пути где ищутся программы
# df - - help - информация о файловой систем
# df -h - по людски
# df -i - inode -блоки, метаинформация о файлах
# cat /etc/issue -имя дистрибутива
# cat /proc/cpuinfo - информация о процессоре
# cat /proc/meminfo - информация о памяти
# lspci - информация об pci устройствах
# lsusb - информация о USB
Информация о системе
Каталоги
/etc - локальные настройки
/home - каталоги пользователя
/bin - базовые утилиты
/sbin - сервисные утилиты
/usr - общая часть программ
/var - изменяемые файлы (логи, очериди, базы, кешы)
Специальные файлы
/dev/null - черная дыра
/dev/zero - источник нулей
/dev/random, /dev/unrandom - источник случайных чисел
Сбор информации о системе
# top - список работающих в системе процессов и информацию о них.
# dstat - позволяет просматривать все ресурсы системы в режиме реального времени.
# iostat - входит в набор пакета sysstat и служит для определения проблемных мест, которые связаны с жестким диском.
# mstat - статистика отчетов, связанных с процессорами.
# df - список всех файловых систем
# mount - для монтирования файловых систем.
# lscpu - собирает информацию о архитектуре процессора из sysfs.
# lspci - печатает в стандартный вывод детальную информацию о всех PCI шинах и устройствах на них.
# dmidecode - получить информациzя о bios, system, baseboard, chassis, processor, memory, cache, connector, slot.
# systat - пакет iostat - утилита для отслеживания диска
# strace ls - посмотреть вызов ls
# strace -p 1 - что делает процесс с pid 1 (systemd)
# strace -c -p 1 - набрать статистику
# kill -l - посмотреть список сигналов
# free - использование памяти
# apropos nginx - информация о программе
Настройки системы
Эмулятры терминала
tmux
screen
Настройки пользователя
# adduser -m -g user1 - добавить пользователя
# addgroups group1 - добавить группу
# usermod - редактирование пользователя
# usermod -a -G группа пользователь - добавляем юзера в группу
# su - user1 - переход на user1
# root - id 0 - /etc/{shadow, passwd, group}
# no root - не могут открывать сокеты на портах меньше 1024
# vipw - редактировать вручную /etc/passwd
# vipw - s - редактировать вручную /etc/shadow
Ограничения пользователей
# ulimit -a - посмотреть ограничения
# /etc/scurity/limits.conf - лимиты пользователей
hard - жесткий лимит, задается для пользователя выше которого он не сможет поднять мягкий
soft - мягкий, лимит с которым по умолчанию пользователь поподает в систему и может его поднять не выше жесткого
# /etc/login.defs - умолчания пользователей
# /etc/skel/ - каталоги и файлы для новых пользователей
/proc/<pid>/limits
prlimit - -pid 1 - -nofile+65536:65536 - изменение лимитов запущеного процесса
Проверить существование сущьности в системе
getent passwd root - существует пользователь root
пуеуте пкщгз root - существует группа root…
PAM настройка аунтификации
/etc/pam.d
# sudo Конфиг visudo /etc/sudoers
Алиасы
# alias s=`ssh root@site.ua` - создание алиаса
# alias -вывод всех алиасов
Настройки hostname
# hostname - посмотреть имя
# hostname новоеимя - дать новое имя
# hostname > /etc/hostname - перезаписать
# reboot - перезапустить систему
Настройка сети
# /etc/network/interfaces - настройка интерфейсов
# ifconfig - ifup/ifdown - работа с интерфейсом
# ipcalc - калькулятор сети
# ip --help
# ip addr - информация о интерфейсах
# if det link dev eth0 up/down
# iproute - маршруты по умолчанию
Типы интерфейсов
loopback - петля 127.0.0.1
dummy - конфигурация ip для не постоянных интерфейсов типа ipsec когда он падает заменяет dummy
bridge - софтовый свич или мост
bond - складывание в пачку нескольких физических интерфейсов как для увелечение ширины канала так и для отказоустойчивости
tunels - организация часных сетей по верх публичных
Настройка Дата\Время
# date ММДДччмм - установка времени вручную
# /etc/ntp.conf - ntp сервера
# /etc/init.d/ntp start - сервер ntp
# ntpdate ntp@.zenon.net - установка даты через сервер времени
# date - - date `16723 days ago` - сколько дней прошло с 16723
# /etc/localtime - текущая таймзона
# /usr/share/zoneinfo/ - все временные зоны
#hwclock -w - синхронизация времени с биос
Настройка Crontab
crontab -e - редактировать
crontab -r - удалить
user - пользовательский
dom - day of month
dow - day of week
минута, час, день месяца, месяц, день недели
m h dom m dow command
5 1 12 6 * echo test > /dev/null
system - системный
m h dom m dow user command
Настройка DNS
# /etc/resolv.conf
# /etc/hosts
# /etc/nsswitch.conf - что смотрим первым делом DNS иди Files
# ps ax | grep named - смотрим dns-сервер
Работа с системой
Инструменты
Класификация инструментов
Общие системные
|
vmstat
lstat
sar
|
Tcpdump
systemtap
|
|
Счетчики
|
Ps
top
|
Strace
gdb
|
Трассировка |
На каждый процес
Счетчики в ls /proc/
#vmstat 1 10 - использование системы
#pidstat -p 3110 1 - использование системы конкретным процессом (по pid)
#sar -q 1 4 - использование системы
#sar -B 1 4 - статистика пейджинга
#vakgrind ./script.sh - тест сколько памяти съест программа
Диск
iostat -xmt 1 10 - использование диска
iotop - top диска
smartctl -a dev/sda1 - состояние диска
blkid - UUID файловой системы
blockdev - - report - информация по устройствам
sar -d - процессы диска
pidstat -d - статистика по процессам на диске
Сеть
Round-Trip Time - время за которое пакет доходит до клиента и обратно
First-Byte Latency - включает в себя Round-Trip Time плюсвремя на обработку запроса
Пробускная сбособность - измеряется в байтах и пакетах
netstat -s - статистика сети
netstat - i - статистика с ошибками
ifconfig - ошибки, дропы и т. д.
Iftop - top загрузки сети
sar -n DEV 1 - статистика интерфейса
sar -n EDEV 1 - ошибки итрефейса
Анализаторы пакетов
tcpdump
wireershark
tsharck
dumpcapairodump-ng
Автоматизация
Puppet
Salt Stack
Ansible
Chef
CFEngine
Контроль целосности (система обнаружения вторжений)
tripwire
aide
Резервное копирование
tar
rsync/rdiff/dublicity
моментальные снимки - lvm snapshot, btrfs snapshot, NetApp
pgdump,mysqldump
Amanda, Bacula
NETSTAT
netstat -i - список интерфейсов
netstat -r - таблица маршрутизации
netstat -b <interval> - in/out пакеты на интерфейсе
netstat -d <interval> - drop пакетов
netstat -Latn - listen queue для слушающих tcp сокетов BSD
netstat -ql eth0 - статистика очередей на интерфейсе
TCPDUMP
tcpdump -i <interface> [options] <expresion>
expresion - выражение, фильтрующее пакеты
tcpdump -i eth0 tcp port 80
tcpdump -i eth0 -n tcp port 80
tcpdump -i en1 tcp port 443 and host olx.ua
tcpdump -i eth0 `host olx.ua and (tcp port 80 or tcp port 443)`
GDB
gdb <program> <coredump>
bt - back trace
fr - текуший frame
print -
ltrace - посмотреть системные вызовы программы
STRACE
strace -tt - timestamp
strace -c - count time
strace -f - follow fork
strace -o - out file
strace -ff - multiple files
strace -p - pid
strace -e - filter
Файлы и Каталоги
Права на файлы
Права доступа
chmod 666
File Type OwnerGroupOther Users
4 2 1 4 21 421
---------------------------- --------------------------- -----------------------
7 7 7
- rw -rw - r - - 1 root root file.txt
тип файлов (- фаил, d директория, s сокет)
права пользователя
права группы
права остальных
rwx - read, write, eXecute
-rwsr - s стикибит показывает программа будет выполняться от пользователя которому принадлежит (например -rwsr-xr-x 1 root root — смогут выполнить все но исполнение будет от root)
Все директории должны иметь права 775, а файлы 664, поэтому:
find /var/www/ -type d -exec chmod 755 {} \; - Наийти и поменять права на все директории в каталоге
find /var/www/ -type f -exec chmod 644 {} \; - Найти и поменять права на все файлы в каталоге
Поиск файла
#ls - если знаем где лежит + grep
#find -name фильтр по имени, -type тип d директория f фаил
#locate - поиск файлов по базе системы
#which - поиск исполнимого файла пр.(which ping)
Просмотр файлов
# cat - смотреть писать в фаил
# cat | less
# less - пейджер просмотр по строчно
# more - пейджер просмотр по странично
Создать фаил
# cat > file
# touch file
Создать каталог
# mkdir
-v - подробный вывод
-p - создает все элементы пути (пр. /etc/new_dir1/new_dir2/new_dir3)
Копирование Файла или Каталога
# cp
-v - подробный вывод
-r - копировать каталоги рекрусивно
-p - сохранять разрешения
Навигация
# cd~ - домой
# cd.. - на уровень выше
# cd - в предыдушюю
# pushd
Удаление
# rm
# shred - без возможности востановления
Сменить расширение файла
# mv index.{html,php} - изменили html на php
Читать Писать dd
dd if=/dev/zero of=./testfile1 bs=1k - читаем нули пишем в фаил блоками по 1 кб
Потоки
STDIN, STDOUT, STDERR - потоки ввода вывода и ошибок программ
# ps ax - список всех процессов
# ps ax | grep программа - фильтрация
# ps aux | grep программа - от кого выполняется
# tree - дублирует данные полученые из stdin в фаил и stdout
# which программа - покажет где исполнимый фаил
Задачи в фоне
# ^Z(Ctrl + Z) - увести программу в фон
# bg - продолжить выполнение в фоне
# fg - достать из фоа
# jobs - список фоновых задач
# fg N - достать задачу номер N
# kill %“номер задачи“ - убить процесс
& - в конце команды уводит сразу в фон (dd if=./file1 of=./file2 &)
Инструменты отладки
file /bin/ls - информация о программе
ldd /bin/ls - информация о подгружаемых библиотеках
strace -e open /bin/ls - показует вызовы библиотек (попытки открыть фаил)
ltrece - показует системные вызовы
systemtap - нужно изучить
Пакеты
Управление пакетами
apt-get cache - найти пакет в
apt-get install - установить пакет
apt-get remove - удалить пакет
apt-get purge - удалить пакет и все конфиги и зависимости
apt-cache showpkg - база установленных пакетов
apt-cache search - поиск по базе репозиториев
dpkg -i - установить пакет
dpkg -l - листинг пакетов
dpkg -r - удалить пакет
dpkg-query - база установленных пакетов
dpkg -L - выводит содержимое установленного пакета
gpg --keyserver keys.gnupg.net --recv-keys (key) - добавление ключа
Сбор пакета
# file install - описание как собирать и от чего зависит
# memcached-1.0 - кэш значение-ключ
# tar xzf /memcached.tar.gz - распаковка
# ./configure - -help | less - читаем мануал
# ./configure - -prefix=/opt/memcached_1.0 - ставим в папку, смотрим зависимости
# echo $? - возвращает ответ последней команды, если 0 то все хорошо
# make - собираем (-j4 -собираем в 4 потока)
# make install - устанавливаем
# ./memcached -d -unoubody - запускаем с демонизацией от noubody не очень удобно
# find . -iname ``*init`` - смотрим есть ли скрипт иницыализации, если есть
# cp memcached-init /etc/init.d/memcached - ложим скрипт в автозапуск, нужно подправить пути
Свой скрипт
#!/bin/bash
# Provides:memcached
# Required-Start:
# Requider-Stop:
# Default-Start:2 3 4 5
# Default-Stop:
# Short-Description: memcached daemon
MEMC=/opt/memcached_1.0/bin/memcached
MEMC_OPTS=``-d -u noubody -m 64 -P /tmp/memcached.pid``
start (){
echo -n ``starting: ``
$MEMC $MEMC_OPTS
if [ $& == 0 ]; then
echo ok
else
echo fail
fi
}
stop (){
echo -n ``stopping: ``
kill $(cat /tmp/memcached.pid) >/dev/null 2>$1
if [ $& == 0 ]; then
echo ok
else
echo fail
fi
}
restart (){
stop
start
}
status (){
ps -p $(cat /tmp/memcached.pid) >/dev/null 2>$1
if [ $& == 0 ]; then
echo memcached running
else
echo mamcached is not running
fi
]
$1
# update-rd.d memcached defoults - включение в автозапуск
Жизнь пакета в системе
# raw - управление контракт, самая близкая к NIC
# mangle - изменение заголовка пакета
# nat - изменение заголовка пакет, NAT
# filter - фильтрация пакетов
SSH
Вход по ключам
# ssh-keygen - генерация ключей (публичный для сервера, приватный локально) можно запаролить в Win puttygen
# cat /путь к публичному ключу/ключь.pub Копируем содержимое
# ssh -l server.ua соеденяемся с серваком
# ls -ld .ssh ищем каталог .ssh (разрешение должны быть 700) если нет то создаем
# echo `жмем энтер вставляеться содержимое буфера` > > authorized_keys перенаправляем в фаил
# chmod g-w authorized_keys убираем права на запись для группы
# cat .ssh/id_rsa.pub | s — l user cat > > `` .ssh/authorized_keys`` - копирование файла
Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.
Вариант №2
# ssh-keygen -t rsa - генерация ключа
Чтобы принять настройки по умолчанию, нажмите Enter. Ключи будут созданы в ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.
# cd ~/.ssh - переходим в каталог
Следующая команда скопирует открытый ключ на удаленный сервер:
# ssh-copy-id - удаленный_хост
Дополнительно
# ssh -p номер_порта удаленный_хост
# ssh удаленный_хост нужная_команда
# scp file1.zip root@192.168.0.2:/home2/ - вход на хост по ключу
Работа с DNS
# host google.com - опрашивает DNS сервера
# nslookup google.com - опрашивает DNS сервера
# dig google.com - опрашивает DNS сервера
#f or u in host nslookup dig; do $u goole.com; done - запустим сразу все утилиты
# lsattr /etc/resolv.conf - посмотреть атрибут файла если i(imutable)
# chattr -i /etc/resolv.conf - убираем атрибут меняем фаил
# chattr +i /etc/resolv.conf - возвращаем на место
# /etc/nscd.conf - настройка соответствий DNS
валидировать фаил /etc/hosts
# nscd -i host - способ первый или
# /etc/nscd stop - останавливаем демон
# rm -rvf /var/cache/nscd* - чистим кэш
# /etc/nscd stop - запускаем демон
A - сопостовление имени ip адресу
TTL - время жизни записи в кэше
NS - DNS сервера которые обслуживают это доменное имя
CNAME - псевдоним
SOA - где хранится достоверый источник информации о этой зоне
DNS использует 53 порт и протоколы UDP/TCP (TCP когда ответ превышает 512 байт)
DNS клиенту нужно разрешить входящий трафик с порта 53 на порты 1024-65535 UDP/TCP
Настройка на примере BIND (/etc/bind)
acl - списки адресов контроля доступа
опции
listen-on - список слушающих сокетов
recursion - разрешение или запрет рекурсивных запросов
forwardes - сервера которые обрабатывают рекурсивные запросы к которым наш сервер может обращаться
allow-query - список адресов чьи запросы нужно обрабатывать
allow-recursion - список адресов которым разрешена рекурсия
Зоны
hint-зона``.`` - адреса корневых серверов
обслуживаемые зоны
view (SplitDNS)
math-clients - клиенты обслуживаемые данным view
math-destination - локальные адреса обслуживаемые данным view
Демоны
Демон = ppid 1
# nouhab - утилита для демонизации процессов
# ps axu - список процессов
# ps axu | grep joxi - найти процесс
# kill 2020 - убить процесс по pid
Логи
syslog.d - демоны логов
/etc/rsyslog.conf - фаил конфигурации
#grep kernel syslog - все сообщения ядра
#grep sudo auth.log
logratate - утилита ротации логов
tail -f /var/log/messages - Просмотр логов Linux, в реальном времени
grep -i error /var/log/messages - Выводим только ошибки из /var/log/messages
/var/log/messages - содержит глобальные системные логи
/var/log/dmesg - содержит сообщения, полученные от ядра
/var/log/auth.log - содержит информацию об авторизации пользователей
/var/log/boot.log - Содержит информацию, которая регистрируется при загрузке системы.
/var/log/daemon.log - Включает сообщения от различных фоновых демонов
/var/log/kern.log - Тоже содержит сообщения от ядра
/var/log/lastlog - Отображает информацию о последней сессии всех пользователей. Это нетекстовый файл, для его просмотра необходимо использовать команду lastlog.
/var/log/maillog /var/log/mail.log - журналы сервера электронной почты
/var/log/user.log - Информация из всех журналов на уровне пользователей.
/var/log/Xorg.x.log - Лог сообщений Х сервера.
/var/log/alternatives.log - Информация о работе программы update-alternatives. Это символические ссылки на команды или библиотеки по умолчанию.
/var/log/btmp - лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp
/var/log/cups - Все сообщения, связанные с печатью и принтерами.
/var/log/anaconda.log - все сообщения, зарегистрированные при установке сохраняются в этом файле
/var/log/yum.log - регистрирует всю информацию об установке пакетов с помощью Yum.
/var/log/cron - Всякий раз когда демон Cron запускает выполнения программы, он записывает отчет и сообщения самой программы в этом файле.
/var/log/secure - содержит информацию, относящуюся к аутентификации и авторизации. Например, SSHd регистрирует здесь все, в том числе неудачные попытки входа в систему.
/var/log/wtmp или /var/log/utmp - системные логи Linux, содержат журнал входов пользователей в систему. С помощью команды wtmp вы можете узнать кто и когда вошел в систему.
/var/log/faillog - лог системы linux, содержит неудачные попытки входа в систему. Используйте команду faillog, чтобы отобразить содержимое этого файла.
/var/log/mysqld.log - файлы логов Linux от сервера баз данных MySQL.
/var/log/httpd/ или /var/log/apache2 - лог файлы linux11 веб-сервера Apache. Логи доступа находятся в файле access_log, а ошибок в error_log
/var/log/lighttpd/ - логи linux веб-сервера lighttpd
/var/log/conman/ - файлы логов клиента ConMan,
/var/log/mail/ - в этом каталоге содержатся дополнительные логи почтового сервера
/var/log/prelink/ - Программа Prelink связывает библиотеки и исполняемые файлы, чтобы ускорить процесс их загрузки. /var/log/prelink/prelink.log содержит информацию о .so файлах, которые были изменены программой.
/var/log/audit/ - Содержит информацию, созданную демоном аудита auditd.
/var/log/setroubleshoot/ - SE Linux использует демон setroubleshootd (SE Trouble Shoot Daemon) для уведомления о проблемах с безопасностью. В этом журнале находятся сообщения этой программы.
/var/log/samba/ - содержит информацию и журналы файлового сервера Samba, который используется для подключения к общим папкам Windows.
/var/log/sa/ - Содержит .cap файлы, собранные пакетом Sysstat.
/var/log/sssd/ - Используется системным демоном безопасности, который управляет удаленным доступом к каталогам и механизмами аутентификации.
FIREWALL
# /etc/network/iptables
# iptables-save - сохранение правил
# iptables-save - сохранить правило
# iptables-restore < /patch/iptables_save - востановить правило
# iptables -vnL - просмотр какие правила фильтрации есть
# iptables -A(вставить правило в начало цепочки) IN_SSH(цепочка) source(192.168.2.0/24) -j(действие) ACCEPT(разрешаем) / iptables -A IN_SSH source 192.168.2.0/24 -j ACCEPT
Утилиты
Редактор vi
i,a - режим вставки (перед символом, после символа)
esc — выйти из режима вставки
^, $ - начало конец строки
dw, d6, d$, dd — удалить (слово, 6 символов, все до конца строки, строку)
yy, y6 — скопировать строку, скопировать 6 строк
p — вставить строку
x, wq — выйти с сохранением
h,j,k,l — навигация
sed — заменяет много на много, можно с потока
Shell
* - маска
(1..10)
Циклы
Утилита awk
# root:x:0:0:root:/root:/bin/bash
# awk -F: `{if ($3 == 0) {print}}` /etc/passwd - выведет строки с 0
-F: разделитель, если поле 3 = 0 то вывести на экран
Утилиты для работы с сетью
# tcpdump - слушаем пакеты на интерфейсе
# tcpdump -ni eth0 port 22 — слушаем интерфейс на порту 22, работает до фаервола
# tcpdump -ni eth0 proto 1 — слушаем интерфейс на протоколе ICMP
# /etc/protocols — фаил с протоколами
# /etc/services — фаил с TCP/UDP протаколами
Пример с фильтром
# tcpdump -ni eth1 port not \(22 or 23 or 24 \) and \( proto \(1 or 17 \) \) and host not 192.168.1.1 - слушаем все кромеме порта 22, 23, 24 по протоколу TCP, UDP и сключаем трафик с подсети 192.168.1.1
# netstat -natup — кто висит на портах TCP/UDP
# ngrep -W byline -d eth1 - альтернатива tcpdump, можно отловить любой текстовый протокол
sudo ngrep -q -W byline "search" host autotrend.ua and port 80
ngrep -Wbyline -d lo ```` port 9000 - что прилитает на порт в текстовом формате
# netstat -n -a — просмотр открытых сокетов в системе
netstat -n -a -t | grep ^tcp | wc -l - посчитать строки с TCP
netstat -n -a -t | grep ^tcp | awk `{print $(NF)}` | sort | uniq -c - посчитать строки с TCP вывести на экран последнее отсортировать и сложить
netstat -nat - информация о TCP
netstat -nau - информация о UDP
netstat -s - Статистика пример netstat -s | grep -i error или fail
netstat -nr - информация о роутах
# ss - информация о сокетах альтернатива netstat
# ping - эхо запрос на хост
# traceroute - маршрут к удаленному хосту
# mtr --report --report-cycles 5 google.com - альтернатива treceroute
mtr 8.8.8.8 - просмотр в режиме реального времени
# arp -na - просмотр таблицы мак адресов
# ip ro - маршрут по умолчанию
# curl -I http://* - работа с url
# lsof -i :80 - проверить занят 80 порт
# netstat -nlt | grep :80 - проверить занят 80 порт
HTTP and ICMP протоколы
# telnet google.com 80 - обращаемся к гугл
GET / HTTP/1.1 - просим корневую страницу
# host: google.com - у гугла
Утилиты DNS
#dig MX google.com @8.8.8.8 - спрашиваем MX запись для google.com у 8.8.8.8 (ANY все записи )
#host -t A google.com 8.8.8.8 - спрашиваем у 8.8.8.8 о A записи у google.com (можно MX, SOA, TXT и т.д)
#nslookup
> server 8.8.8.8 - переключили DNS на 8.8.8.8
> google.com - отдаст ответ
Почта
MTA - агент передачи сообщений smtp (postfix, sendmail, qmail)
MDA - агент доставки сообщений POP/IMAP (courier-imap, dovecot)
MUA - почтовый клиент (WebMail, Outlook, Thunderbird)
Emmiter - только отправляет
SmartHost/Relay - отсылает во вне
MailService - отправляет принимает
SMTP (Simple Mail Transfer)
25/tcp - smtp
465/tcp - smtps
HELO/EHLO - приветствие
MAIL FROM - указание отправителя
RCPT TO - указание получателя
DATA - указание что дальше пойдет тело письма
AUTH - аунтификация
Коды ответов сервера
2хх - Положительный ответ
4хх - временная (мягкая) ошибка
5хх - постоянная (жесткая) ошибка
POP3/IMAP Протоколы получения почты
POP3 - Post office Protocol v3
IMAP - Internet Message Access Protocol
Postfix
/etc/postfix
main.cf - основные параметры
master.cf - управление процессами
/var/spool/postfix - очереди
Управление
mailq - показать очередь
postsuper - управление очередью
postfix - управление сервисом
postconf - просмотр конфига
Основные параметры конфига
myhostname - как будет представляться сервер
mydestination - для кого будет принимать почту
myorigin - домен по умолчанию
mynetworks - список адресов с которых разрешено принимать и релеить почту
inet_interface - где слушаем
virtual_*_maps - виртуальные домены
WEB
HTTP
Protocol user information host port path query string(key=value) anchor
http://user:password@www.example.com:80/search?q=term&lang=en#results
Коды ответа HTTP
1xx - служебные сообщения
2xx - запрос обработан успешно
3хх - редиректы
301 - постоянный редирект, кешируемый браузерами навсегда
302 - временный редирект. Цель редиректа указывается в заголовке Location
304 - нет изменений(работает в сочетании с заголовком клиента if-Modified-Since)
4хх - ошибки клиента
400 - некорректныйзапрос
401 - требуется авторизация
402 - необходимо заплотить
403 - доступ запрещен
404 - страница не найдена
5хх - ошибки сервера
500 - внутренняя ошибка сервера, перезапрашивать бесполезно
502 - апстрим (напр. Сервер приложений) недоступен
503 - внутренняя ошибка сервера (можно перезапросить)
504 - истекло время ожидания от апмстрима
crt
Прочитать сертификат
# openssl asn1parse -in autotrend.crt | less
LAMP
nginx - event-based
apche - process-based, thread-based, event-based
process-based - для одного соединения нужен один процес, apche не работает ни с чем, кроме mpm-worker (proces-based aoache)
Apache
# apache2ctl configtest - тест конфигурации
Listen - [addr:]port - которые слушать
ServerName - основное имя сервера
ServerAlias - дополнительные имена сервер
NameVirtualHost - на каких Listen-портах обрабатывать VirtualHost`ы
VirtualHost - контекст виртуального сервера
include - включение в текущий контекст файла с директивами
LogFormat - описание формата лога
CustomLog - форматированный лог доступа
ErrorLog - лог ошибок
Nginx
worker_processes - кол-во рабочих процессов
error_log - лог ошибок
pid,user,include*
events - worker_connections
http - контекст http-server`а
access_log,log_format
server - контекст виртуального сервера
server_name, listen, root, location
# nging -t - проверка конфигурации
ngix и apache
a) nginx на 80 порту обрабатывает запросы к статическим файлам динамика отдается apache.
b) nginx на 80 порту все отдает apache, используется для разгрузки от медленных клиентов
# egrep -v `^(#|$)` apache2.conf - убрать закоментированные и пустые строки и вывести на экран
Scripts and MySQL
MySQL - по умолчанию TCP\3306
MyISAM - файловая
InnoDB - БД
MEMORY - в памяти
BLACKHOLE - для ведения бинарного лога
Параметры:
log-bin - для бинарных логов и Point-in-Time восстановления
port - порт на котором сидит MySQL
bind-address - адресс на котором работает сервер
table_cache - кэш открытых таблиц
thread_cache - размер кэша потоков
qury_cache* - управление query кэшем
для MYISAM
key_buffer - размер памяти выделенной для индексов
для InnoDB
innodb_buffer_pool_size - выделенная память
innodb_file_per_table - хранить данные таблиц в отдельных файлах(фаил на таблицу)
Репликация
Master→Slave
1 мастер может иметь много слэйвов
1 слэйв может получать данные только от одного мастера в один момент
однопоточная
Statment based
команда изменяющая данные на мастере выполняется на слэйве
Row-based
между серверами идет обмен выполниными изменениями
Настройки репликации
mysqlbinlog /var/log/mysql.bin.000001 - просмотр бинарных логов
log-bin - ведение бинарных логов
server-id - идентификатор сервера
Команды
change master to master_server=`host`, master_user=`user`, master_password=`pass`, master_log_file=`file`, master_log_pos=1234;
show master status;
show slave status;
show global variables; - показать текущие настройки
show global variables like `%log%`; - посмотреть настройки лога
show processlist;
kill `id`; - убить запрос по id с processlist
Диагностика
mysqladmin
processlist
ping
status
mysql
show global status
show [full] processlist
show databases
show tables
show table status
Обслуживание
Резервное копирование
mysqldump -A -p > all.sql
lvmsnapshot
percona
Прочее
mysqlcheck/mysql
analyze (-a) / ANALYZE table
optimize (-o) / OPTIMIZE table
check / CHECK table
repair (-r)
myisamchk
Администрирование
CREATE DATABASE name [charset=CHSET] - создать
ALERT DATABASE - поменять
CREATE TABLE - создать
ALERT TABLE - поменять
GRANT priv ON db.tbl TO user@host [IDENTIFIED by `password`]; - дать права
SHOW GRANTS - посмотреть права
REVOKE priv ON db.tbl FROM user@host - отобрать права
(CREATE|DROP) USER - создать удалить пользователя
/etc/mysql/debian.cnf - хранит настройку системного юзера debian-sys-main
Репликация
На мастере
/etc/mysql/my.cnf
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
mysql> grand replication slave on *.* to repl@``%`` identified by `password`;
mysql>flush privileges;
mysqldump -A - - mastar-data=1 -p > slave.sql - дамп для репликации
копируем на slave сервер
На слейве
/etc/mysql/my.cnf
#bind-address127.0.0.1 - коментируем
server_id = 2
log_bin = /var/log/mysql/mysql-bin.log
cat ~root/slave.sql | mysql -p
mysql>CHANGE MSTER TO MASTER_LOG_FILE=`mysql-bin.00001`, MASTER_LOG_POST=551769,MASTER_HOST=`192.12.10.11,master_user=`repl`,master_password=`password` - строка из slave.sql, меняем host user pass
mysql>show slave status\G;
mysql>start slave;
Python
Настройка для vim
echo filetype plugin indent on »
~/.vimrc
mkdir -p ~/.vim/ftplugin/
cat <<EOF > ~/.vim/ftplugin/pyton.vim
setlocal tabstop=4
setlocal softtabstop=4
setlocal shiftwidth=4
setlocal textwidth=80
setlocal smarttab
setlocal expandtab
EOF
CGI — скрипты
#!/bin/bash
echo -e `Content-type: text/html;\r\n\r\n` # посылаем заголовок
cat <<ENDHTML
<html>
<body>
Hello word!
</span>
<span style="color:#ff0000;">$(w)</span>
<span style="color:#ff0000;">
</body>
</html>
ENDHTML
nginx+fast-cgi(php5-fpm)
/etc/php5/fpm/php.ini - настройка
register_global = off - создание глобальных переменных из get-параметров должна быть off
display_Errors = off - вывод ошибок (off - все ошибки должны быть в логах)
/etc/php5/fpm/php-fpm.conf - конфигурация
-------------------------------------------------/var/www/domain.ua--------
server {
listen 80 default;#nginx
server_name domain.ua;
location / {
proxy_pass http://127.0.0.1:81#nginx запросы отдает apache
proxy_set_header Host $http_host;#
}
location ~ ^.*\.html$ {
root varvhosts/vdomain.ua/www;#nginx запросы к статическим html отдает сам
}
location ~ ^.*\.phtml$ {
root varvhosts/vdomain.ua/www;#nginx запросы к php
include etcnginx/fastcgi_params;# отдает fast-cgi
fastcgi_params SCRIPT_FILENAME $request_filename;
fastcgi_pass 127.0.0.1:9000;
}
}
/etc/nginx/conf.d/fastcgi_params
script bash пример работы с массивом аргументами строки
#!/bin/bash
PREFIX=ARG
for arg in ``$@``
do
echo ``${PREFIX}: $arg``
#continue
if [ -f ``$arg`` ] ; then
echo ``${arg} is a file``
elif [ -d ``$arg`` ] ; then
echo ``${arg} is a dir``
elif [-L``$arg``]; then
echo ``${arg} is a link``
fi
done
|