9 янв. 2014 г.

Отправка почты (e-mail) из консоли Linux

Иногда необходимо отправить письмо из консоли/скрипта в Linux. Сделать это достаточно просто:

echo "Тело письма" | mail -s "Тема письма" recipient@example.com

или, чтобы вставить содержимое тектового файла как тело письма:

mail -s "Тема письма" recipient@example.com < /var/log/some.log

Параметры команды:

-s subject - тема письма
-c email-address 
- адрес для копии
-b email-address - 
адрес для невидимой копии

20 дек. 2013 г.

Linux Out-of-Memory Killer (OOM)

OOM Killer - это компонент ядра Linux, призванный решать проблему недостатка памяти. Известно, что виртуальной памяти может быть бесконечно много (в пределах адресации), а вот физической - вполне конечное число. Ядро выделяет память процессам "с запасом" в сумме превышающую физическую память системы. В основном, всё разруливается нормально (вся выделенная память одновременно редко требуется), но бывает ситуация когда становится нужно памяти больше, чем ее физически есть. И системе тогда нужно завершить какой-то процесс, чтобы продолжить работу. Вот этим и занимается OOM Killer.

Текущая реализация OOM Killer в Linux стремится выбрать наименее важный процесс. Он выбирается среди всех процессов, кроме init и kernel threads, на основе подсчета для всех процессов очков и тот, что набрал больше всех очков - убивается. Алгоритм анализа достаточно сложен и я не буду его приводить здесь.

Бывает, необходимо защитить определенный, важные процессы от "убиения". В конце подсчета очков для процесса, число возводится в степень приоритета, которая может принимать значения -15...15 или -17. "-17" означает, что процесс не будет принудительно завершен вообще. Значение приоритета хранится в файлике /proc/$PID/oom_adj. Т. е. этот файлик создается для каждого процесса и уничтожается с его завершением.

Соответственно, дабы защитить процесс от "убиения", необходимо узнать PID этого процесса и записать в его файл oom_adj значение -17. Например, для процесса sshd, можно использовать команду:

pgrep -f "/usr/sbin/sshd" | while read PID; do echo -17 > /proc/$PID/oom_adj; done

Эта команда для всех процессов демона sshd назначает приоритет. Но нужно быть осторожным с приоритетами - система может вести себя непредсказуемо, если защищенный таким образом процесс займет всю память (скорее всего закончится это т. н. kernel panic). Поэтому рекомендуют ставить минимальный приоритет "-15".

Приведенную выше команду нужно выполнять после запуска процесса, т. е. или в конце стартового скрипта или по cron-у.

Ссылки на более детальную информацию:

19 дек. 2013 г.

Ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Бывает, после установки обновлений и последующей перезагрузки появляется ошибка 0x0000005 при запуске практически всех приложений в Windows 7 x64

Причина кроется в обновлениях KB2859537 и KB2872339 (или одном из них) на некоторых системах  Windows 7 x64.

Но апплет Центра обновлений запустить нельзя, т. к. все 32-битные приложения не запускаются в системе. Чтобы удалить обновления, запускаем командную строку с правами Администратора и удалем обновления командами:

wusa.exe /uninstall /kb:2859537
wusa.exe /uninstall /kb:2872339

Перезагружаемся - и система должна работать как раньше.

Кстати, не забываем скрыть эти обновления после перезагрузки дабы потом случайно опять их не поставить (в Центре обновления Windows правой кнопкой на обновлении - Скрыть обновление)

26 нояб. 2013 г.

Как убрать панель рекламы в KMPlayer 3.7

Неприятное нововведение ожидает поклонников этого очень достойного с технической точки зрения медиа плеера для ОС Windows в версии 3.7. Это - панель с рекламой в правой части окна плеера. Разработчикам надо монетизировать свой продукт, который является бесплатным - безусловно... Но не совсем хороший способ, как по-моему:


Но есть способ убрать эту новую фишку с рекламой.

Запускаем от имени Администратора (Run as administrator) ваш любимый текстовый редактор (Notepad++, например), открываем файл C:\Windows\System32\drivers\etc\hosts и дописываем в конец следующее:

127.0.0.1 player.kmpmedia.net

Рекламная панель пропадает.

Update.

Для KMPlayer версии 3.8+ необходимо вместо добавления в hosts добавить адрес сайта в Опасные в Свойствах обозревателя:

Панель управления - Все элементы панели управления - Свойства браузера - Безопасность - Опасные сайты - Сайты - Добавить в зону следующий узел - вставить player.kmpmedia.net - Добавить - Закрыть - ОК

22 нояб. 2013 г.

Полезные Bash Shell команды и однострочные скрипты

Т. к. количество всяких полезный команд и скриптиков для консоли Linux неуклонно растет и всех их не упомнишь, буду записывать сюда что-нибудь эдакое полезное.

Статья будет дополняться.

1. Сделать что-либо со всеми файлами в папке, например, распаковать все zip архивы в текущей папке:

for f in *.zip ; do unzip $f ; done

2. То же самое, только с файлами из поддиректорий текущей. Например, установить rpm пакеты:

for D in *; do [ -d "${D}" ] && yum install ${D}/*.rpm ; done

3. Добавить пользователя в группу:

usermod -a -G group user

4. Как расшарить содержимое папки по протоколу HTTP.
Заходим в нужную папку и выполняем команду:

python -m SimpleHTTPServer 8080

Далее зайдя в браузере по адресу http://ip_of_that_server:8080, мы увидим содержимое с возможностью навигации и скачивания файлов:

5. Получение информации о Virtual Hosts для apache2 в Debian Linux:

apache2ctl -t -D DUMP_VHOSTS

6. Создание файла заданного размера:

truncate -s 14M filename

7. Замена строчек в текстовом файле:

sed -Ei 's/foo|bar|baz/foobar/g' file

Заменить foo, bar или baz на foobar

8. Подмонтировать CD-ROM с указанием типа файловой системы:

mount -t iso9660 /dev/scd0 /media/cdrom

19 нояб. 2013 г.

Анализ падения ядра в Linux (kernel crash dump)

Завалить ядро линукс не так то и просто (если не преднамеренно, конечно), но такое случается... не все баги выловлены, а новые "фишки" приносят новые баги.

Итак, для сохранения дампа при падении ядра в Linux или kernel panic, необходимо настроить сервис kdump и установить несколько дополнительных пакетов.
Сам механизм представляет собой дополнительное маленькое ядро, смысл существования которого состоит в том, чтобы после падения основного ядра системы, перехватить управление, сохранить дамп и перезагрузить систему.

Для Fedora Linux устанавливается всё хозяйство просто командой:

yum install --enablerepo=fedora-debuginfo --enablerepo=updates-debuginfo kexec-tools crash kernel-debuginfo

А вот для Oracle Linux 6.4 чуть сложнее:

yum install crash -y
export DLP="https://oss.oracle.com/ol6/debuginfo"
wget ${DLP}/kernel-uek-debuginfo-`uname -r`.rpm 
wget ${DLP}/kernel-uek-debuginfo-common-`uname -r`.rpm
rpm -Uhv kernel-uek-debuginfo-`uname -r`.rpm kernel-uek-debuginfo-common-`uname -r`.rpm

Команды приведены для текущего ядра системы. Если нужны пакеты для других версий ядра, то нужно указать версию вместо `uname -r`.

Далее, необходимо добавить в конфиг загрузчика (/boot/grub/grub.conf или /boot/efi/EFI/redhat/grub.conf - зависит от того, используется UEFI при загрузке сервера или нет): параметр ядра "crashkernel=128M". Цифра указывает, сколько ОЗУ резервируется под резервное ядро. Через @ можно указать так же смещение в памяти, если необходимо. Например 128M@16 - зарезервирует 128 Мб ОЗУ начиная с физического адреса 0x01000000 (16MB).

18 нояб. 2013 г.

Запуск графических приложений на удаленной Linux-машине с помощью Putty и Xming (export display)

Суть задачи в следующем. Есть у нас сервер, на котором нету X-сервера, только консоль. А нам нужно, к промеру, установить Oracle Solaris Studio и запусктаь ее удаленно. Или какое-то другое приложение, работающее в GUI-режиме.

Для решения этой задачи выполняем следующее.

1. На сервере устанавливаем пакеты xauth и xterm. Например, для Oracle Linux (или другого RHEL):

yum install xauth xterm

2. Также, нужно проверить, включено ли X11 Forwarding в конфигурационном файле SSH-демона:

nano /etc/ssh/sshd_config

X11Forwarding yes

3. Eсли вы заходите с помощью Windows-машины, то вам необходимо установить Xming - X-эмулятор для форточек.  Ну и, собсно, сам Putty - ssh-клиент для Windows.