В этом посте буду для себя собирать короткие заметки касательно Ubuntu.
Содержание
- Запуск графических приложений от имени
root:
откройте диалог запуска GNOME сочетанием клавиш Alt+F2 и введите "gksudo имя_приложения" - Установка пакета: "sudo apt-get install имя_пакета", но лучше использовать "sudo aptitude install имя_пакета" - у этой команды больше плюсов (логи, поиск, лучшее отслеживание связей, есть графический интерфейс)
- Обновление: обновление индексов репрозиториев - "sudo aptitude update"; непосредственная установка всех доступных обновлений - "sudo aptitude safe-upgrade".
- Определения типа файла: "file имя_файла"
- Импорт ключа репрозитория: "sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 12345678". Эта команда запросит ключ 12345678 с сервера ключей Ubuntu и добавит его в систему. Собственно, имя ключа всегда выглядит как 8 буквенно-цифровых символов, поэтому если вам дано только оно, то для импортирования ключа вы вполне можете использовать эту команду, изменив 12345678 на нужное значение.
- Добавление репрозитория: добавлять PPA с Launchpad можно так же легко и через терминал, пример: "sudo add-apt-repository ppa:tualatrix/ppa"
- Набор проприетарных пакетов: кодеков, Flash-плагин от Adobe, RAR и тп.: ubuntu-restricted-extras
- Монтирование разделов: в файле /etc/fstab. Записи о всех смонтированных дисках попадают в специальный файл /etc/mtab, формат записей этого файла такой же, как у /etc/fstab. Если надо добавить запись для какого-то раздела винчестера в fstab просто зайдите на него через меню «Переход», при этом он автоматически смонтируется в подкаталог /media и следовательно запись о нём появится в mtab. Откройте mtab, найдите нужную строчку (тут диски именуются обычным способом) и скопируйте в fstab, заменив имя диска на его uuid и точку монтирования на желаемую. Кроме того, если в качестве ФС в mtab записано fuseblk, то при копировании необходимо подставить вместо этого значения имя своей файловой системы.
- Текстовый редактор: gedit
- Узнать
uuid
для нужного вам раздела: "ls -l /dev/disk/by-uuid" или более информативный "sudo blkid" - Добавление ntfs-раздела в fstab: можно воспользоваться утилитой ntfs-config
- Структура папок:
- / корневой каталог
- /bin стандартные программы Linux (cat, cp, ls, login и т.д.)
- /boot каталог загрузчика, содержит образы ядра и Initrd, может содержать конфигурационные и вспомогательные файлы загрузчика
- /dev файлы устройств
- /etc конфигурационные файлы системы
- /home домашние каталоги пользователей
- /lib библиотеки и модули
- /lost+found восстановленные после некоректного размонтирования файловой системы файлы и каталоги
- /misc может содержать все, что угодно, равно как и каталог /opt
- /mnt обычно содержит точки монтирования
- /proc каталог псевдофайловой системы procfs, предоставляющей информацию о процессах
- /root каталог суперпользователя
- /sbin каталог системных утилит, выполнять которые имеет право пользователь root
- /tmp каталог для временных файлов
- /usr пользовательские программы, документация, исходные коды программ и ядра
- /var постоянно изменяющиеся данные системы, например, спулы системы печати, почтовые ящики, протоколы, замкИ и т.д.
- Занятое и свободное дисковое пространство:
- По всем дискам: df -h
- Просуммировать и показать размер определенной категории: du -hs /path/to/directory
- А так показать размер всех категорий и файлов в текущей категории: du -hsc *
- ncdu - утилита которая больше всего мне понравилась. Устанавливаем и запускаем либо без параметров - тогда отобразит информацию по текущей папке и подпапкам, либо в качестве параметра указываем путь который нужно проанализировать.
- Выключение на виртуальной машине: halt -p
- Текстовый редактор: nano
- Выделение текста: Ctrl-^ и дальше перемещение курсора
- Скопировать выделенный текст: Alt-6
- Если текст выделен и нажать F9, то он удаляется
- Запуск с параметром -c показывает номера строк во время перемещения курсором
- Undo и Redo (отмена и повтор), работают если запустить с параметром -u. Комбинации: Alt-U - undo, Alt-E - redo
- Поиск - ctrl-W, повторный поиск того же текста Alt-W
- Замена - ctrl-\
- Создать текстовый файл:
- touch /адрес/файла.txt
- echo 'bla' > filename.txt
- Переход в конец файла при просмотре через F3 в MC - сочетание клавиш Shift+G
Веб серверы Apache, NGINX
Apache:
- Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 16.04 - кратко и понятно, ее и использовал
- Установка lamp Ubuntu 16.04 - в качестве альтернативы предыдущей инструкции, рассматривается настройка виртуальных хостов
- Установка и настройка Apache, PHP, MySQL в Ubuntu. Часть 2 - еще одна инструкция, подробно разжевывается
- Как установить веб-сервер Apache2 php mysql phpmyadmin на Ubuntu - не читал, но вдруг пригодиться =)
- Как настроить в Apache поддержку HTTP/2 на Ubuntu 16.04 - поможет настроить http2, но есть ошибки в тексте, лучше читать английскую версию: How To Set Up Apache with HTTP/2 Support on Ubuntu 16.04
- How to uninstall and remove Apache2 on Ubuntu or Debian
NGINX:
- nginx.org/ru/ - официальный сайт nginx
- Включаем HTTP/2 в NGINX для сайта - ничего сложного, немного поправить конфиг
- Встроенные переменные nginx
- TLS, SSL, HTTPS:
- Создание самоподписанного сертификата и включение https в nginx
- How To Secure Nginx with Let's Encrypt on Ubuntu 16.04
- Let's Encrypt и nginx: настройка в Debian и Ubuntu - более толковая инструкция на хабре
- Redirect all HTTP requests to HTTPS with Nginx - эта запись помогла корректно настроить переадресацию
- digitalocean.com: How To Configure OCSP Stapling on Apache and Nginx - стоит обратить внимание на команду openssl, которая может проверить правильную конфигурацию OCSP stapling, вводить ее нужно дважды, в первый раз она может отдавать пустой результат, во второй раз (при корретной настройке веб-сервера) результат с информацией
- Настройка OCSP Stapling на серверах Apache и Nginx
- Optimizing HTTPS on Nginx - кратко основные настройки по оптимизации https
- Хабр: Настраиваем HTTPS-сервер на nginx - описывает также параметры, удобно когда это в одном месте, а не в разных
- Кеширование:
- Настройка Nginx fastcgi_cache для WordPress
- Настройка кэширования FastCGI в Nginx
- Set Up Nginx FastCGI Cache to Reduce WordPress Server Response Time
- Nginx. Кеширование с помощью fastcgi_cache
- How to Easily Create RAM Disk on Debian, Ubuntu, Linux Mint, CentOS - будем сохранять файлы кэша на RAM Disk
- tmpfs - этот тип файловой системы используется в RAM Disk
- Nginx Helper - плагин wordpess, который сможет очищать нужные файлы кэша если произошло какое-то обновление контента
- Использование модуля ngx_cache_purge для очистки кэша FastCGI - нам понадобится пересобрать nginx с этим модулем, чтобы использовать очистку в плагине пунктом выше
- ngx_cache_purge - модуль на гитхабе
NGINX + PHP-FPM
- Installing Nginx with PHP 7 and MySQL 5.7 (LEMP) on Ubuntu 16.04 LTS - использовал эту инструкцию
- Установка nginx and php7-fpm
- Веб-сервер на основе Nginx и PHP-FPM - инструкция с официального сайта ubuntu
- Установка и настройка: Nginx + php5-fpm - хабр
- Очень шустрый блог на WordPress при помощи связки nginx + PHP-FPM + MariaDB + Varnish - хабр
- PHP-FPM: Process Management - запись с видео-роликом, в котором очень доступно объясняется как конфигурируються процессы в PHP-FPM
- Install PHP 7.1 with Nginx on Ubuntu 16.04
NGINX + WordPress
- How To Install WordPress with Nginx on Ubuntu 14.04
- How To Install WordPress with LEMP on Ubuntu 16.04
- codex.wordpress.org/Nginx
- How to Solve WordPress Could Not Create Directory
- Youtube: Could not create directory wordpress fixed - wordpress permissions fix - Linux
- nginx.com: wordpress
- Как настроить Nginx для WordPress?
- Ошибка "The email could not be sent. Possible reason: your host may have disabled the mail() function" решается коммандой: sudo apt-get install postfix
Переадресация с www на не www
Пример конфига:
server { server_name elims.org.ua www.elims.org.ua; return 301 https://elims.org.ua$request_uri; } server { listen 443 ssl http2; server_name www.elims.org.ua; ssl_certificate /etc/nginx/ssl/elims_org_ua.chained.crt; ssl_certificate_key /etc/nginx/ssl/elims_org_ua.key; return 301 https://elims.org.ua$request_uri; } server { root /var/www/html; server_name elims.org.ua; listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/elims_org_ua.chained.crt; ssl_certificate_key /etc/nginx/ssl/elims_org_ua.key; ... Остальные инструкции ...... }
Убираем лишние слешы
Например https://test.com//////blog///ubuntu-zametki//
#replace merge_slashes' behavior with "redirect_slashes" merge_slashes off; location ~* "(//+)" { rewrite ^(.*?)(//+)(.*)$ $1/$3; rewrite ^ $uri permanent; }
SSL замечание: This server supports weak Diffie-Hellman (DH) key exchange parameter
Генерируем ключ не менее 2048 бит:
cd /etc/nginx/ openssl dhparam -out dhparam.pem 2048
Создастся файл /etc/nginx/dhparam.pem
В конфигурационном файле nginx добавляем строку:
ssl_dhparam /etc/nginx/dhparam.pem;
Увеличить время хранения логов nginx
Для этого нужно увеличить количество лог-файлов в ротации логов. Для этого открываем файл /etc/logrotate.d/nginx и в строке rotate 14, поменяйте цифру 14 на нужную. Цифра означает какое количество файлов сохраняется. 1 файл = 1 день.
Ошибка 413 Request Entity Too Large
В файле nginx.conf, в секцию http
, добавить или изменить:
client_max_body_size 100m;
Директива client_max_body_size задаёт максимально допустимый размер тела запроса клиента, указываемый в строке "Content-Length" в заголовке запроса. Если размер больше заданного, то клиенту возвращается ошибка "Request Entity Too Large" (413). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Подробнее
Защита php файлов паролем
Создаем файл .htpasswd с логином и паролем, вводим команду:
printf "Тут_Логин:`openssl passwd -apr1`\n" >> .htpasswd
После ввода команды дважды запросится пароль, которым защищаем наши файлы
Конфиг для нужной локации:
location ~ /test/.+.php$ { root /var/www/; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; }
Осталось перезапустить веб-сервер: service nginx restart
Приоритет Nginx Location
Пример конфига:
location = / { # matches the query / only. [ configuration A ] } location / { # matches any query, since all queries begin with /, but regular # expressions and any longer conventional blocks will be # matched first. [ configuration B ] } location /documents/ { # matches any query beginning with /documents/ and continues searching, # so regular expressions will be checked. This will be matched only if # regular expressions don't find a match. [ configuration C ] } location ^~ /images/ { # matches any query beginning with /images/ and halts searching, # so regular expressions will not be checked. [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { # matches any request ending in gif, jpg, or jpeg. However, all # requests to the /images/ directory will be handled by # Configuration D. [ configuration E ] }
Отрабатывает в таком приоритете:
- = (exactly) : location = /path
- ^~ (forward match) : location ^~ /path
- ~ (regular expression case sensitive) : location ~ /path/
- ~* (regular expression case insensitive) : location ~* .(jpg|png|bmp)
- / : location /path
Подсмотрел на stackoverflow.com.
Обновление NGINX с 1.10 до 1.12
Обновляемся в Ubuntu 16.04 LTS со стабильной ветки nginx 1.10 до 1.12:
- Делаем резервную копию файлов на всякий случай:
- sudo mkdir /etc/nginx-backup/
- sudo cp -r /etc/nginx/* /etc/nginx-backup/
- sudo apt-get install software-properties-common
- nginx=stable
- sudo add-apt-repository ppa:nginx/$nginx
- sudo apt-get update
- apt-get dist-upgrade
- Важно: там где спрашивает затирать ли конфиги - не затирайте (по умолчанию)
- Важно: в существующий конфиг /etc/nginx/nginx.conf добавляем строку: include /etc/nginx/modules-enabled/*.conf; после строки pid /run/nginx.pid;
- sudo service nginx restart
- подсмотрел тут
Pfsense
- doc.pfsense.org: Configuring pfSense Hardware Redundancy (CARP) - про настройку отказоустойчивого кластера
- doc.pfsense.org: High Availability
- xakep.ru: Поднимаем непотопляемый шлюз при помощи CARP/pfsync
- howtoforge.com: How To Configure A pfSense 2.0 Cluster Using CARP
- blogs.technet.microsoft.com: Configuring PfSense as a Reverse Proxy for Lync Web Services - пригодится если нужно повторить публикацию веб-сервера с url-мапингом, как на ISA\TMG
Zend OPcache
Хабр: Обзор расширения OPCache для PHP - толковая статья, которая детально расписывает работу OPcache
Проверить текущие настройки opcache можно командой:
php -i | grep opcache
Конфигурирование опций Opcache происходит в файле php.ini
Для применения опций нужно перезапустить веб-сервер и php, в связке nginx + php 7 fpm это команда:
sudo service nginx restart && sudo service php7.0-fpm restart
Опции OPcache
- opcache.enable (значение по умолчанию 1) — включение/выключение OPcache.
- opcache.enable_cli (значение по умолчанию 0) — включение OPcache при вызове PHP из коммандной строки.
- opcache.memory_consumption (значение по умолчанию 64) — размер используемой памяти (в мб.) для хранения прекомпилированного PHP-кода.
- opcache.interned_strings_buffer (значение по умолчанию 4) — количество памяти для пула строк в мегабайтах.
- opcache.max_accelerated_files (значение по умолчанию 2000) — максимальное количество ключей в хэш-таблице OPcache. Число должно быть простым и быть больше, чем те, что приведены в примере: 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793. Допустимы числа между 200 и 1000000.
- opcache.max_wasted_percentage (значение по умолчанию 5) — максимальный процент замусоренной памяти для запланированного перезапуска.
- opcache.use_cwd (значение по умолчанию 1) — при включении добавляет текущую рабочую директорию в ключ скрипта для предотвращения возникновения колизий между файлами с одинаковым именем.
- opcache.validate_timestamps (значение по умолчанию 1) — появляется возможность обнуления OPcache вручную или перезапуском веб-сервера для того, чтобы привести в актуальное состояние данных об изменениях в файлах. Частота проверки управляется параметром opcache.revalidate_freq.
- opcache.revalidate_freq (значение по умолчанию 2) — через какой промежуток времени (в секундах) проверять изменения временных меток для поддержания данных в памяти в актуальном состоянии, где 1 — проверка с периодичностью раз в секунду, 0 — постоянная проверка.
- opcache.file_update_protection (значение по умолчанию 2) — предотвращает кэширование файлов, которые были изменены меньше, чем в указанное время (в секундах). Эта возможность защищает частично обновленные файлы от кэширования.
- opcache.revalidate_path (значение по умолчанию 0) — включение или отключение оптимизации поиска файлов в include_path, если поиск файлов выключен и будет найден закэшированный файл, используемый в include_path, файл не будет найден повторно. Таким образом, если файл с именем, попадающийся где-либо еще в include_path, он не будет найден.
- opcache.save_comments (значение по умолчанию 1) — если выключено, все комментарии PHPDoc будут удалены из кода с целью уменьшения размера оптимизированного кода. Не рекомендуется отключение этого параметра.
- opcache.load_comments (значение по умолчанию 1) — если выключено, то комментарии PHPDoc не будут загружаться из общей памяти.
- opcache.fast_shutdown (значение по умолчанию 0) — если включено, будет использоваться последовательность быстрых выключений для оптимизированного кода.
- opcache.enable_file_override (значение по умолчанию 0) — при включении OPcache будет проверять наличие закэшированного файла при вызовах file_exists(), is_file() и is_readable().
- opcache.optimization_level (значение по умолчанию 0xffffffff) — битовая маска, в которой каждый бит включает или отключает в соответствующие проходы OPcache.
- opcache.inherited_hack (значение по умолчанию 1) — включение этого хака при ошибках вида can't redeclare class. По умолчанию возможность отключена, т.е оптимизация активирована. В PHP-5.3+ этот хак не требуется.
- opcache.dups_fix (значение по умолчанию 0) — включайте при появлении ошибок вида Can't redeclare class.
- opcache.blacklist_filename — месторасположение списка файлов, к которым запрещен доступ для OPcache (поддерживаются маски). Каждый такой файл является текстовым файлом, в котором хранятся имена файлов, которые не требуется кэшировать, размещение имени каждого файла с отдельной строки. Имя файла может содержать полный путь, либо префикс.
- opcache.max_file_size (значение по умолчанию 0) — позволяет исключать большие файлы из кэширования. По умолчанию кэшируются все файлы.
- opcache.consistency_checks (значение по умолчанию 0) — проверять контрольную сумму кэша каждое N-ое количество запросов. По умолчанию параметр имеет значение 0, что отключает проверки. Подсчет контрольной суммы снижает производительность.
- opcache.force_restart_timeout (значение по умолчанию 180) — время ожидания (в секундах) перед перезагрузкой в случае недоступности кэша. После истечение времени ожидания OPcache перезапускает процессы, которые были все это время заблокированы.
- opcache.error_log — определение названия и местоположения лога ошибок OPcache. При пустом значении ошибки выводятся в консоль.
- opcache.log_verbosity_level (значение по умолчанию 1) — все ошибки OPcache отправляет в лог-файл веб-сервера. По умолчанию логируются только критические ошибки (0) и обычные ошибки (1). Дополнительно можно включить предупреждения (2), информационные сообщения (3) или отладочную информацию (4).
- opcache.preferred_memory_model — предпочитаемся модель общей памяти.
- opcache.protect_memory (значение по умолчанию 0) — защита общей памяти от несанкционированной записи во время выполнения.
- opcache.restrict_api (значение по умолчанию пустая строка) — разрешение вызова API-функций OPcache из PHP-скриптов, путь к которым начинается тем, что указано в строке. По умолчанию пустое значение означает запрет на все.
Пример конфигурации opcache
zend_extension=/usr/lib64/php/modules/opcache.so opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_file_size = 1M opcache.interned_strings_buffer = 8 opcache.max_accelerated_files = 7963 opcache.fast_shutdown = 1 opcache.revalidate_freq = 0 opcache.use_cwd = 1
MySQL
Остановка и запуск MySql в Ubuntu 16.04:
- sudo /etc/init.d/mysql stop
- sudo /etc/init.d/mysql start
Ошибка "Host is not allowed to connect to this MySQL server" говорит о том, что у вводимому пользователю не разрешено подключаться к базе с текущего IP. Решается командами:
- mysql -u root mysql -p - логинимся в базу под рутом базы
- GRANT ALL PRIVILEGES ON database.* TO username@"%" IDENTIFIED BY 'password' WITH GRANT OPTION; - тут "%" означает с любого IP. database, username, password - нужно вводить свои
- FLUSH PRIVILEGES; - перезагружаем таблицу разрешенний
- exit; - выходим
Резервное копирование
#определенной базы: mysqldump --opt -u [username] -p[password] [dbname] > [backupfile.sql] #несколько баз: mysqldump --opt -u [username] -p[password] --databases [dbname_1] [dbname_2] ... > [backupfile.sql] #всех баз: mysqldump --opt -u [username] -p[password] --all-databases > [backupfile.sql] #с сжатием: mysqldump --opt -u [username] -p[password] [dbname] | gzip -9 > [backupfile.sql] #пример: mysqldump --opt -u root -phere_password my_db | gzip -9 > my_db_backup.sql.gz
Сменить пароль пользователю базы:
#командой в консоли: SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here'); #запросом в базе данных: UPDATE mysql.user SET Password=PASSWORD('new-password-here') WHERE USER='user-name-here' AND Host='host-name-here';
Запросить значение переменной:
#MySQL 5.0+ SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; #MySQL 5.1+ SELECT variable_value FROM information_schema.global_variables WHERE variable_name = 'innodb_buffer_pool_size';
Поменять движок базы на archive без удаления таблицы:
Это поможет обойти ошибку
ERROR 1022 (23000): Can't write; duplicate key in table '#sql-1b51_1'
CREATE TABLE copy LIKE original; ALTER TABLE copy ENGINE=archive; INSERT INTO copy SELECT * FROM original ORDER BY id; DROP TABLE original; RENAME TABLE copy TO original;
Получить значение из json в базе, которая его не поддерживает:
SELECT DISTINCT( substring(столбец, locate('"city":',столбец)+8, locate('","', столбец, locate('"city":',столбец))-locate('"city":',столбец)-8) ) FROM таблица
Остальное:
- Создать базу: CREATE DATABASE имя_базы DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- Создать пользователя и дать доступ к базе: GRANT ALL ON имя_базы.* TO 'имя_пользователя'@'localhost' IDENTIFIED BY 'пароль';
- Посмотреть список баз: show databases;
- Посмотреть список пользователей: select * from mysql.user;
- Посмотреть права пользователя elimS с любого хоста: SHOW GRANTS FOR 'elimS'@'%';
- Подключиться к базе на удаленном хосте: mysql -h your-dbserver.us-east-1.rds.amazonaws.com -u elimS -p
- ruhighload.com: Выбор типов данных в Mysql - важно для столбцов назначить правильный тип данных, это даст хорошую оптимизацию по объему
- habr: Настройка и оптимизация MySQL сервера - список полезных настроек и их предназначение
- ruhighload.com: Оптимальная настройка Mysql - советы по установке тех или иных значений в настройках
- ruhighload.com: my.cnf для 4 Гб памяти - пример конфига MySQL с оптимальными настройками для сервера с 4 Гб ОЗУ
- ruhighload.com: Индексы в MySQL - индексы помогают ускорить выполнение запросов
- Для мониторинга работы сервера удобно использовать phpMyAdmin, интерес представляют вкладки Состояние и Переменные. Дополнительно phpMyAdmin дает советы по тюнингу тех или иных переменных в зависимости от параметров работы сервера.
- Установка MySQL 8 на Ubuntu 18.04 LTS - помогло это: после того как полностью снес MySQL и Apache2. Перед этим проапгрейдил Ubuntu с 16.04 до 18.04.
- Если не дает подключиться к базе данных с удаленного хоста убедитесь что в файле /etc/mysql/mysql.conf.d/mysqld.cnf закомментирована строка bind-address = 127.0.0.1. Если не закомментирована, то закоментируйте: #bind-address = 127.0.0.1 и перезапустите MySql сервис: sudo /etc/init.d/mysql restart
- 32 совета для ускорения MySQL запросов - рекомендую быстро пробежаться по советам, вдруг подвернется что вы можете у себя оптимизировать.
- Microsoft SQL Server Type Mapping
- Делаем дамп (бэкап) базы данных, используя утилиту mysqldump
- w3schools.com: SQL Left JOIN - если у нас есть два множества элементов и мы хотим выбрать подмножество элементов которые есть в левом множестве 1, но нет в правом 2:
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name WHERE table1.column_name IS NULL;
Ротация логов через Logrotate
Устанавливаем дистрибутив Logrotate, если он еще не установлен.
В папке /etc/logrotate.d/ создаем конфиг для своего скрипта\приложения.
Пример конфига apache2:
$ more /etc/logrotate.d/apache2 /var/log/apache2/*.log { weekly # ротация раз в неделю missingok # отсутствие файла не является ошибкой rotate 52 # сохраняется последние 52 ротированных файла compress # сжимать ротируемый файл delaycompress # сжимать предыдущий файл при следующей ротации # (т.е. файл *.log.1 будет не сжат, а *.log.2 и далее сжатыми) notifempty # не обрабатывать пустые файлы create 640 root adm # сразу после ротации создать пустой файл с заданными правами и пользователем sharedscripts # скрипты prerotate/postrotate будут выполнены только один раз # не зависимо от количества журналов, подходящих под заданный шаблон postrotate # скрипт будет выполнен сразу после ротации if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }
После создания конфиг файла нужно проверить что все работает, команда без реальных изменений (запуск в отладочном режиме):
sudo logrotate -d /etc/logrotate.d/your_config
Если все ок, тогда запускаем ротацию:
sudo logrotate -v -f /etc/logrotate.d/your_config
После этого ротация будет происходить автоматически
Подсмотрел на debianworld.ru: Ротация логов с помощью logrotate в Debian / Ubuntu
Анализ логов
- uniq — утилита, можно вывести или отфильтровать повторяющиеся строки
- -u Выводить только те строки, которые не повторяются на входе.
- -d Выводить только те строки, которые повторяются на входе.
- -с Перед каждой строкой выводить число повторений этой строки на входе и один пробел.
#MAX количество запросов с IP (список IP-адресов, с которых наблюдается наибольшее количество запросов): cat access_log | awk '{print $1}' | sort | uniq -c | sort -n | tail #если хотим пробежаться по за архивированным файлам и вывести по ним общую статистику: zcat access_log.* | awk '{print $1}' | sort | uniq -c | sort -n | tail #Платформа система клиента cat */access_log | awk '{print $13}' | sort | uniq -c | sort -n | tail #Коды ответов сколько cat */access_log | awk '{print $9}' | sort | uniq -c | sort -n | tail #Еще несколько примеров онлайн анализа логов, с подсчетом строк tail -F /var/log/nginx/access.log | awk -v awk_var=0 -v awk_var2=0 '{++awk_var} / 302 / {{++awk_var2} print awk_var2" of "awk_var" ALL 302: "$0"\n"}' tail -F /var/log/nginx/access.log | awk -v awk_var=0 '{++awk_var} {print awk_var" All Requests: "$0"\n"}' tail -F /var/log/nginx/access.log | awk -v awk_var=0 '/ 200 / && /POST/ && !/\/check-imei/ {{++awk_var} print awk_var" POST 200, not imei: "$0"\n"}' tail -F /var/log/nginx/access.log | awk -v awk_var=0 '/ 200 / && / \/sell/ {{++awk_var} print awk_var" ALL 200 for /sell pages: "$0"\n"}' tail -F /var/log/nginx/access.log | awk -v awk_var=0 '/HTTP\// && /GET \/sell/ {{++awk_var} print awk_var" All GET for /sell: "$0"\n"}'
Подсмотрел тут
Резервное копирование Ubuntu
- help.ubuntu.ru: Резервное копирование системы
- habrahabr.ru: Настройка резервного копирования в Ubuntu
- losst.ru: Резервное копирование Ubuntu
- 8host.com: РЕЗЕРВНОЕ КОПИРОВАНИЕ И ВОССТАНОВЛЕНИЕ ДАННЫХ REDIS В UBUNTU 14.04
Замеряем скорость сайта через curl
#смотрим скорость загрузки в секундах: curl -s -w %{time_total}\\n -o /dev/null https://elims.org.ua #более подробный отчет: curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null https://elims.org.ua #вывод команды: Lookup time: 1.510 (время на преобразование доменного имени в IP) Connect time: 1.664 (время на подключение к удаленному серверу по TCP) PreXfer time: 2.376 (время на ‘обмен рукопожатиями’ - установка сессии) StartXfer time: 3.074 (Время на все действия, вплоть до начала передачи первого байта данных) #еще более подробные, с детализацией по редиректам и ssl curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null https://elims.org.ua
- AppCon time (time_appconnect) - Время, в секундах, с начала замера, до завершения соединения/рукопожатия по протоколу SSL/SSH и пр. с удаленным хостом (Добавлено в curl 7.19.0)
- Redirect time (time_redirect) - Время, в секундах, затраченное на редиректы, включая name lookup, connect, pretransfer и transfer. ‘time_redirect’ показывает суммарное время всех редиректов. (Добавлено в curl 7.12.3)
Подсмотрел тут
Узнаем свой внешний IP через curl
Поможет одна из команд:
curl ifconfig.me curl ip.appspot.com curl icanhazip.com curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//' curl -x user:password@192.193.194.145:1234 icanhazip.com #используем прокси
Доступ только к sftp по ключу и паролю к определенной папке
- Создаем пользователя: "sudo adduser elimS" - будет предложено указать пароль, остальные вопросы можно игнорировать нажатием Enter
- Генерируем и прописываем SSH ключ:
- Генерируем:
- для генерации ключей использовал PuTTYgen
- выбираем тип ключа RSA (он же SSH2-RSA) и жмем Generate
- двигаем мышкой на окном утилиты.
- сохраняем публичную и приватную часть через кнопки Save public key и Save private key
- утилиту пока не закрываем
- Прописываем на сервере с созданным пользователем:
- вводим "su - elimS" - теперь мы в домашней директории нового пользователя
- создаем папку для ключа и назначаем права, команды: "mkdir ~/.ssh" и "chmod 700 ~/.ssh"
- создаем файл и заполняем его публичной частью ключа
- nano ~/.ssh/authorized_keys - открыли файл для создания
- копируем в него текст из открытой утилиты PuTTYgen, из блока "Public key for pasting into OpenSSH authorized_keys file:". Текст который выделен на скриншоте ниже:
- Жмем CTRL-X для закрытия файла и y для сохранения, после Enter
- ограничиваем доступ к файлу с ключем: "chmod 600 ~/.ssh/authorized_keys"
- выходим для возврата к root, команда "exit"
- Генерируем:
- Разрешаем подключаться только к sftp (отключаем консоль ssh) и указываем корневую папку выше которой заходить нельзя:
- открываем файл конфига ssh: "sudo nano /etc/ssh/sshd_config"
- находим строку "Subsystem sftp /usr/lib/openssh/sftp-server", ее коментурием (ставим спереди знак решетки #) или удаляем
- вместо упомянутой выше строки пишем: Subsystem sftp internal-sftp
- В самый конец файла добавляем и сохраняем:
Match User elimS X11Forwarding no AllowTcpForwarding no AllowAgentForwarding no PermitTunnel no ForceCommand internal-sftp ChrootDirectory %h #разрешаем доступ только к домашнему каталогу
- Перезапускаем ssh: sudo service ssh restart
- Назначаем права домашней папке командами:
- chown root:elimS /home/elimS
- chmod 750 /home/elimS
- В домашней папке созданного пользователя можно создать папку для файлов и дать ей права:
- mkdir /home/elimS/files
- chown elimS:elimS /home/elimS/files
- chmod 755 /home/elimS/files
- Если нужно дать доступ к папке которая находится за пределами домашнего каталога, монтируем эту папку в домашнюю и даем ей права, например:
- mkdir images - создали папку в домашней
- mount --bind /var/www/site.com/images/ /home/elimS/images/ - смонтировали
- chmod 777 /var/www/site.com/images
- find /var/www/site.com/images -type f -exec chmod 664 {} +
- find /var/www/site.com/images -type d -exec chmod 777 {} +
- При подключении sftp client'ом указываем закрытую часть ключа, логи авторизации можно смотреть так: tail /var/log/auth.log -f
- Ошибка "fatal: bad ownership or modes for chroot directory "/home/%username%"" может выскакивать по той причине, что в ChrootDirectory указана не та папка, или для нее прописаны не те права
Kali
Обновляем
sudo apt-get clean sudo apt-get update sudo apt-get upgrade sudo apt-get -f install sudo apt-get dist-upgrade
Ccылки:
- Анонимное Сканирование Портов: Nmap + Tor + ProxyChains
- kali.tools: ProxyChains-NG - перенаправляем через тор или цепочку прокси
- kali.tools: sqlmap - сканируем базу на уязвимости
- nmap - сканер портов
- nmap --script=smb-os-discovery 1.2.3.4 - пытаемся определить ОС
- nmap -v -O --osscan-guess 1.2.3.4 - или так
- proxychains nmap -sV 192.168.1.1 -A -v - сканируем через tor
- nmap -sn 192.168.1.0/24 - сканируем сеть на наличие хостов
- nmap -p- -sV -v 192.168.1.1 - сканируем порты, и пытаемся определить сервисы
- nmap -p 1-65535 -sV -sS -v -T4 192.168.1.1 - сканируем порты и пытаемся определить сервисы
- tools.kali.org: uniscan - сканер вебсайта на уязвимости
- uniscan -u https://example.com -qwedsgj
- uniscan -u 1.2.3.4 -gj - неплохо собирает информацию
- uniscan-gui - с интерфейсом
- /usr/share/uniscan/report - сюда кладутся отчеты
- youtube.com: How to find website vulnerabilities with Uniscan
- tools.kali.org: Tool: Oscanner
- tools.kali.org: WPScan (kali.tools) - сканируем WordPress
- XSS Сканеры:
- XSSer – мощный сканер, умеет использовать разные методы внедрения и обхода фильтрации, автоматизированный инструмент по поиску уязвимых к XSS сайтов (по доркам). Умеет внедрять полезную нагрузку для реальной атаки;
- XssPy – умеет находить все страницы сайта (в том числе и на субдоменах) и проверять все элементы ввода на этих страницах;
- BruteXSS – положительной особенностью этого инструмента является полное исключение ложных срабатываний.
- youtube.com: Kali Linux 2016 2 How to pass all traffic through TOR
- OWASP Zap - предустановлен, есть Gui, комплексный сканер веб-сайта. Тут не плохо расписано
- OpenVas - использовал наш офицер безопасности Костя
- Arachni
- youtube.com: Arachni Web Scanner - Web Scanner на уязвимости
- Через Proxy: раз, два
- Запуск:
- cd /root/Desktop/arachni-1.5.1-0.5.12/bin/ - переходим в папку
- ./arachni_web
- ./arachni_rpcd - запускаем из второго терминала в той же папке
- в браузере заходим на localhost:9292
- для входа по умолчанию логин admin@admin.admin и пароль administrator
- Альтернативы Kali - обзор альтернатив на хабре
- BlackArch - вроде как второй по популярности после kali, тут блогер попытался сравнить с kali, а тут русскоязычный сайт посвященный BlackArch
- Parrot Security OS - на хабре запись о нем
- Pentest Box - большой набор утилит под windows для пентеста, просто инсталируем, виртуальная машина не нужна. Тут обзор Pentest Box на хабре.
- Словари - много разных, регулярно обновляемых словарей.
Остальное
- Автоматическое обновление ubuntu:
- help.ubuntu.com: AutomaticSecurityUpdates - несколько методов как можно настроить автоматическое обновление, один из них это пакет: unattended-upgrades
- wiki.debian.org: UnattendedUpgrades - тут мне кажется наиболее четко описано как включить автоматические обновление при помощи пакета unattended-upgrades
- Лог автоматической установки находится по адресу: /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
- help.ubuntu.ru: Автоматические обновления - еще немного на русском языке
- How to Increase the size of a Linux LVM by expanding the virtual machine disk - расширение корневого раздела\диска используя возможности LVM
- Если SSH сессия обрывается: How to disable SSH timeout. Правда я пока обошелся другим советом: в самом putty, в настройках connection указал seconds between keepalives = 30. Проблему решило.
- Какие сетевые порты и какими сервисами сейчас открыты: sudo netstat -ltunp или sudo netstat -anp
- Монтирование:
- mount -t ext4 /dev/sdd1 /usr/data
- -t ext4 — файловая система подключаемого диска
- /dev/sdd1 — подключаемый раздел
- /usr/data — папка куда подключается наш раздел (нужно предварительно создать)
- umount /dev/sdd1 - размонтирование
- Если Mount пропадает после перезагрузки:
- mount /dev/sdc1 /media/work
- tail -1 /etc/mtab >> /etc/fstab
- mount -t ext4 /dev/sdd1 /usr/data
- Просмотр содержимого текстовых файлов в gz-файле:
- аналог cat - zcat resume.txt.gz
- аналог grep - zgrep 'тут_ищем_что_то' access_log_1.gz
- аналог grep с regex: egrep 'regex1|regex2' access_log_1.gz
- Тестирование веб-сервера под нагрузкой, пример команды: ab -c 1000 -t 30 -C PHPSESSID=123 https://test.com - 1000 потоков в течении 30 секунд запрашивают страницу https://test.com указав в куки PHPSESSID=123
- CRON
- посмотреть лог запуска задач - grep CRON /var/log/syslog
- добавить задачу для текущего пользователя:
- crontab -e - откроется конфиг для редактирования
- */2 * * * * php /home/elimS/test.php >> /home/elimS/logs/test.log - раз в две минуты запускать php-скрипт с перенаправлением вывода в лог-файл
- посмотреть список задач текущего пользователя: crontab -l
- crontab.guru - онлайн сервис который поможет составить нужное правило запуска задач по крону
- Как разукрасить консоль - может пригодится, если у вас запущено сразу несколько сессий на разные хосты, и Вы не хотите их между собой спутать
- Добавить отметки времени в консоли:
- открываем файл: nano ~/.bashrc
- добавляем строку: export PROMPT_COMMAND="echo -n \[\$(date '+%Y-%m-%d %H:%M:%S')\]\ "
- изменения будут после перелогинивания, либо перезапуска консоли
- Перенаправление вывода в файл и на экран одновременно: some_command parameters | tee -a logfile.txt
- Слушаем весь трафик кроме своего айпи по ssh: sudo tcpdump -n -i eth0 not host 1.2.3.4
- Посмотреть ACL права на папку: getfacl directory
- Смотрим список прослушиваемых портов и какие сервисы слушают:
- netstat -ap tcp | grep -i "listen"
- sudo lsof -PiTCP -sTCP:LISTEN
- Обновляемся:
- sudo apt-get update - обновляем список пакетов
- sudo apt-get upgrade - обновляем установленные пакеты до последних версий
- sudo apt-get dist-upgrade - обновляем затронутые зависимости пакетов, добавляя или удаляя при необходимости, могут обновиться пакеты, которые не обновились в результате apt-get upgrade
- OpenVPN
- How to run sudo command without a password on a Linux or Unix
- tail -qF *.log: -q to hide the file names and -F, as Arcege pointed out, to let tail follow the name rather than the descriptor because my log files are being rotated
- Varnish:
- Install Apache2 With Varnish Support On Ubuntu 16.04 LTS Server
- How To Configure Magento Varnish Cache With 1.8.1 And Above
- Varnish: Important command line arguments
- How to find out if Varnish is working on your site
- How to speed up Apache with Varnish HTTP cache on Ubuntu 16.04 LTS
- How to Install Varnish on Ubuntu Server 16.04
- How to set up Varnish on Ubuntu 16
- How to Install Varnish and Apache2 on Ubuntu 16
- Оптимизация Magento
- Компиляция и установка программ из исходников
- Скачать git-проект в папку (подсмотренно): git clone https://github.com/<user name>/<repository name> <different name>
- Найти php.ini - команда php --ini
- Посмотреть информацию о процессорах:
- less /proc/cpuinfo
- lscpu
- nproc
- Поиск вхождения текста в файлы (подсмотрено тут): grep --exclude-dir={'session','cache'} -rnwi '/var/www/html/' -e "elims"
- -r или -R - рекурсивно по папкам
- -n - отображает номер строки
- -w - должно быть целым словом, а не частью
- -i - регистронезависиммый
- архивируем по маске: tar -zcvf /home/elims/reports/reports201812.tar.gz /home/elims/reports/*201812*.csv
- Исправление зависимостей, Unmet dependencies:
- sudo apt-get clean - удаляем кеш пакетов
- sudo apt-get autoremove - удаляем осиротевшие пакеты
- sudo apt-get update - обновляем список пакетов
- sudo apt-get -f install - исправляем зависимости
- Как включить swap на ubuntu 18.04
- Создание разделов с помощью fdisk
- переносим home на отдельный диск:
- обязательно делаем бекап системы!
- mount /dev/sda2 /mnt
- cp -av /home/* /mnt
- mv /home /old.home
- mkdir /home
- umount /dev/sda2
- mount /dev/sda2 /home
- rm -rf /old.home
- Разделы жесткого диска и файловые системы, структура папок
- Меняем ip на статический в Ubuntu LTS 18.04
- Если при попытке пинговать, обращаться к ipv6 получаем ошибку "connect: Network is unreachable", пробуем установить: sudo apt-get install miredo - утилита для работы с Teredo — протоколом для передачи IPv6 пакетов через IPv4 сети.
- Очистка диска если забилось /usr/src/*linux-headers*:
- Чистим /tmp - сносим файлы (не папки), к которым не доступались более 10 дней: sudo find /tmp -type f -atime +10 -delete
- Быстро удаляем много файлов по маске (хабр): find /home/elims/ -name "*.png" -type f -exec rm -v {} \;
- Перемещаем файлы старше 500 дней: find /var/www/uploads/ -mtime +500 -print -exec mv '{}' /home/elimS/backup/ \;
Почта
Для отправки письма из командной строки с указанием отправителя, необходимо после получателя добавить перед адресом отправителя последовательность символов: "-- -f"
Пример:
$ mail -s "Test Message Subject" user@yourmaildomain.com -- -f from_user@yourmaildomain.com
Это будет работать в centos, в debian или ubuntu нужно указывать так:
# echo "Test Message Body" | mail -s "Test Message Subject" получатель@gmail.com -aFrom:отправитель@elims.org.ua
Можно также указать имя отправителя:
# echo "Test Message Body" | mail -s "Test Message Subject" получатель@gmail.com -aFrom:Имя_отправителя\<Отправитель@elims.org.ua\>
Обратите внимание, что мы экранируем угловые скобки.
Для отправки письма с вложениями нужно использовать mutt (apt-get install mutt):
mutt -s "Hello World" -a /home/user/attach_file.zip elims@elims.org.ua < home/user/mail_text_body.txt
Centos: exim + dovecot и добавление в белый список спам защиты
В конфиге exim смотрим на строку
hostlist skipsmtpcheck_hosts = net-iplsearch;/etc/skipsmtpcheckhosts
и редактируем файл /etc/skipsmtpcheckhosts, указываем ip-сети отправителей для исключения:
10.20.30.40/27 1.2.3.4/32
перед этим заглянуть в файл /etc/trustedmailhosts - посмотреть чтобы там не были уже прописаны эти адреса
и перезапускаем сервис: /scripts/restartsrv_exim
Полезные ссылки касательно почты:
- Прием и отправка почты из командной строки - еще некоторые примеры можно посмотреть в записи
- Postfix - официальная документация
- digitalocean: How To Install and Configure Postfix on Ubuntu 16.04
- digitalocean: How to Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 16.04
- postfix.org: Postfix Configuration Parameters - описание всех параметров которые можно указать в файле конфигурации main.cf
- help.ubuntu.ru: Почтовый сервер Postfix - базовый пример настройки почтового сервера
- Postfix +Gmail:
- Configure Postfix to Use Gmail SMTP on Ubuntu
- Configure Postfix to use Gmail as a Mail Relay - описываются настройки для разных ОС
- Релей через Gmail — Linux Mint/Ubuntu/Debian - кратко, но по делу
- How to configure Postfix with Google Apps Gmail - тут также упоминается как нужно настроить Gmail Apps
- serverfault.com: Configure postfix to use Google Apps SMTP relay in a Google Compute Engine instance - примеры конфигураций
- DKIM, SPF и PTR: как настроить почту чтобы не попасть в спам
- How to Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 16.04
- How to change smtp port number 25 in postfix
- How to configure MailEnable to send emails on Google Cloud Platform or Azure instance?
- GoogleCloud: Sending Email with Mailgun
- GoogleCloud: Sending Email from an Instance
- How to receive email on Google Compute Engine
Оптимизируем изображения
sudo find /var/www/wp-content/uploads/ -type f -name "*.jpg" -exec jpegoptim --strip-all '{}' \;
sudo find /var/www/wp-content/uploads/ -type f -name "*.jpg" -exec jpegoptim -m81 --strip-all '{}' \;
#-m81 - уровень сжатия, оптимальный для google speed insight
sudo find -name *.png -exec optipng -o3 '{}' \;
# -o3 - уровень сжатия, может быть от 1 до 7
Полезная ссылка:
- How to optimize JPEGs, PNGs, and GIFs from the CLI - jpegoptim, OptiPNG, Gifsicle
Filezilla SFTP Upload: permission denied - устраняется ошибка двумя командами:
sudo chmod -R 775 /var/www/Адрес_к_папке sudo usermod -a -G www-data your_username
Пример копирования файлов между серверами
sudo rsync -e "ssh -i /home/user/temp/key.pem" -avzh /var/www/html/. ubuntu@172.11.7.3:/home/ubuntu/temp rsync -rvh -e "ssh -p 22222" user@1.2.3.4:/var/www/. /var/www scp -P 22222 -rp user@1.2.3.4:/var/www/catalog.zip /var/www rsync -rvh /var/www/src/. --rsync-path="sudo rsync" -e "ssh -p 22" ваш_логин@1.2.3.4:/var/www/dst
Посмотреть кто сожрал место
mount | grep sda1
If /dev/sda1 is mounted on / ("root"):
du --max-depth=1 --human-readable / | sort --human-numeric-sort
For instance, if your username is ubuntu and you want to inspect your home directory:
du -d1 -h /home/ubuntu | sort
-h
Cмотрим занимаемое место в (-s) папках корня (/*) в читаемом виде (-h):
sudo du -s -h /* | sort -h
Утилита ncdu мне больше всего понравилась:
If you want to scan a full filesystem, your root filesystem, for example, then you’ll want to use ncdu -x /
Смена имени хоста
Необходимо два файла:
- /etc/hostname - в этом файле указать новое имя хоста
- /etc/hosts - в этом файле добавить или изменить строчку, которая следует после 127.0.0.1 localhost:
127.0.0.1 localhost
127.0.1.1 новое_имя
Адрес 127.0.0.1 используется для преобразования localhost в ip, а адрес 127.0.1.1 для преобразования имени хоста в ip.
И после этого перегрузится.
Если нужно без перезагрузки, то на вот тут на askubuntu.com есть различные варианты без перезагрузки, но я их не тестил.
В очередь на прочтение:
Курсы интуит
1. Программирование для Linux. Профессиональный подход (2003/PDF)
rutracker.org/forum/viewtopic.php?t=3815723
2. Основы работы с ОС Linux (2008/PDF)
rutracker.org/forum/viewtopic.php?t=3906760
3. Linux. Системное программирование (2008/PDF)
rutracker.org/forum/viewtopic.php?t=3910453
4. Инструменты в Linux для программистов из Windows (2011/PDF)
rutracker.org/forum/viewtopic.php?t=3912102
5. Введение в Linux (2007/PDF)
rutracker.org/forum/viewtopic.php?t=4116263
6. Unix и Linux. Руководство системного администратора (2012/DjVu)
rutracker.org/forum/viewtopic.php?t=4137584
rutracker.org/forum/viewtopic.php?t=11741
help.ubuntu.ru/wiki/главная
Прочтено:
- 2012.10.08 Руководство по переходу на Ubuntu 10.04 LTS «Lucid Lynx» Неворотин Вадим. 1 сентября 2010. 179 стр. - help.ubuntu.ru/manual
IPTABLES
Блокировка исходящего трафика проходящего через мой домашний роутер
- iptables -I FORWARD -s 192.168.1.215 -j DROP - блокируем исходящий трафик с IP в локальной сети
- iptables -D FORWARD -s 192.168.1.215 -j DROP - удаляем блокировку
- iptables -L - смотрим список правил
Посмотреть в читабельном виде только http headers через tcpdump:
sudo tcpdump -A -s 10240 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | egrep --line-buffered "^........(GET |HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " | sed -r 's/^........(GET |HTTP\/|POST |HEAD )/\n\1/g'
подсмотрено тут: serverfault.com
Полезные ссылки:
- CPU Load: когда начинать волноваться
- Find Number of CPU Cores Command
- Yum, шпаргалка
- Linux: примеры использования rsync