Архив автора: Scotch

Firewall Vesta

1
vi /etc/sysconfig/iptables
vi /etc/sysconfig/iptables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Generated by iptables-save v1.4.7 on Fri Jun 7 14:37:21 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
#ftp
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
#ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#smtp
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
#pop
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
#dns
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
#http
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
#
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
#vesta
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8083 -j ACCEPT
#ftp passive ports
-A INPUT -p tcp -m state --state NEW -m tcp --dport 12000:12100 -j ACCEPT
#webmin
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Jun 7 14:37:21 2013
# Generated by iptables-save v1.4.7 on Fri Jun 7 14:37:21 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
#ftp
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
#ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#smtp
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
#pop
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
#dns
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
#http
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
#
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
#vesta
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8083 -j ACCEPT
#ftp passive ports
-A INPUT -p tcp -m state --state NEW -m tcp --dport 12000:12100 -j ACCEPT
#webmin
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Jun 7 14:37:21 2013

загрузка при старте

1
chkconfig iptables on
chkconfig iptables on

запуск

1
service iptables start
service iptables start

Разбираем transcend storejet 25m

Моему мобильному диску уже больше четырех лет, работает исправно, но периодически надоедает своими самопроизвольными отключениями.

Надо заметить, что это происходит гораздо чаще, при заполнении диска более 90%

Да и объема в 250Гб порой уже не хватает. Покупкой нового диска я займусь позже, а пока диск переедет в другой контейнер с интерфейсом USB 3.0. Читать далее

Ошибка обновления файлов проводника

Наткнулся на странный глюк — создаешь, переименовываешь или удаляешь файл в проводнике или на рабочем столе, а изменение происходит только после нажатия   обновить из контекстного меня или кнопки F5.

Например, переименовал файл word, щелкаешь на файл, открывается word с ошибкой о не существовании файла.

Помогло создание и запуск reg-файла.

1
2
3
4
5
6
7
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSimpleNetIDList"=dword:00000001
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]
"Max Cached Icons"="12000"
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSimpleNetIDList"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]
"Max Cached Icons"="12000"

Перезагрузка.

ЧПУ для сайта php+mysql часть 1

Копирование полей в базе mysql

Для реализации мне потребовалось создать в базе поле titleEn c английским вариантом русского заголовка страницы title.

в phpmyadmin создаем новое поле titleEn в нужной таблице.

И копируем туда данные из русской версии заголовков:

1
UPDATE `table_name` SET `titleEn`=`title`
UPDATE `table_name` SET `titleEn`=`title`

 Транслитерация заголовков в базе

Для перевода используем простую функцию

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function translitIt($str){
$tr = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d",
"Е"=>"e","Ё"=>"yo","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"yo","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
" "=> "-", "."=> "", "/"=> "-"
);
return strtr($str,$tr);
}
function translitIt($str){
$tr = array(
"А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d",
"Е"=>"e","Ё"=>"yo","Ж"=>"j","З"=>"z","И"=>"i",
"Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
"О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
"У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"c","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
"Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"yo","ж"=>"j",
"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
"ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
"ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
" "=> "-", "."=> "", "/"=> "-"
);
return strtr($str,$tr);
}

После чего убираем лишние символы

1
2
$fl = translitIt($fl);
$fl = preg_replace('/[^A-Za-z0-9_\-]/', '', $fl);}
$fl = translitIt($fl);
$fl = preg_replace('/[^A-Za-z0-9_\-]/', '', $fl);}

Заголовок получает вид: kak-propisat-klyuch-v-standartnoy-signalizacii из исходного Как прописать ключ в стандартной сигнализации

Автоматизируем процесс

Можно создать скрипт, для автоматической замены всего поля таблицы на транслит

Полезные для этого дела запросы к базе:

Вывод всех таблиц в базе database_name

1
$sql = "SHOW TABLES FROM database_name";
$sql = "SHOW TABLES FROM database_name";

Вывод всех полей в таблице table_name

1
$sql = "SHOW COLUMNS FROM `{table_name}`";
$sql = "SHOW COLUMNS FROM `{table_name}`";

и соответственно запись новых значений в поля базы
Обновление в таблице
table_name установить значение поля field равным fieldvalue где значение поля field равно fieldrus(то есть старому значению)

1
$editfl = mysql_query ("UPDATE table_name SET field='fieldvalue' WHERE field='fieldrus'");
$editfl = mysql_query ("UPDATE table_name SET field='fieldvalue' WHERE field='fieldrus'");

Далее

Теперь мы имеем валидный адрес для каждой страницы сайта, к которому мы можем обращатся через базу и настроить красивые url’ы через rewrite_modeule apache. to be continued…

 

Информер погоды через openweathermap.org

Наткнулся на набор бесплатных картинок с погодными условиями. Пришла в голову мысль сделать информер погоды со своими иконками погоды. С яндексом подружить не удалось, но попался сайт http://openweathermap.org/. Есть открытый API, многое правда самому пришлось додумывать)

Узнаем id нужного города, получаем xml файл с погодой,  закидываем данные в массив, раскладываем данные по переменным.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$city2_id=524901; // id города openweather.org
$data_file2="http://api.openweathermap.org/data/2.5/weather?id=$city2_id&mode=xml&lang=ru&units=metric"; // адрес xml файла
$data_file2 = file_get_contents($data_file2,0); //получаем данные о погоде из xml файла
$xml2 = new SimplexmlElement($data_file2); //помещаем данные в массив
$city2= $xml2->city[name];//забиваем необходимые данные в переменные
$temperarure = $xml2->temperature[value];
$weather_id = $xml2->weather[number];
$weather_icon = $xml2->weather[icon];
$weather_type = $xml2->weather[value];
$pressure = $xml2->pressure[value];
$humidity = $xml2->humidity[value];
$sunrise = $xml2->city->sun[rise];
$sunset = $xml2->city->sun[set];
$windspeed = $xml2->wind->speed[value];
$windcode = $xml2->wind->direction[code];
?>
<?
$city2_id=524901; // id города openweather.org
$data_file2="http://api.openweathermap.org/data/2.5/weather?id=$city2_id&mode=xml&lang=ru&units=metric"; // адрес xml файла
$data_file2 = file_get_contents($data_file2,0); //получаем данные о погоде из xml файла
$xml2 = new SimplexmlElement($data_file2); //помещаем данные в массив
$city2= $xml2->city[name];//забиваем необходимые данные в переменные
$temperarure = $xml2->temperature[value];
$weather_id = $xml2->weather[number];
$weather_icon = $xml2->weather[icon];
$weather_type = $xml2->weather[value];
$pressure = $xml2->pressure[value];
$humidity = $xml2->humidity[value];
$sunrise = $xml2->city->sun[rise];
$sunset = $xml2->city->sun[set];
$windspeed = $xml2->wind->speed[value];
$windcode = $xml2->wind->direction;
?>

Выполняем нужные преобразования  с данными,

1
2
3
4
5
6
7
8
<?
if ($temperarure>0) {$temperarure='+'.$temperarure;}// Если значение температуры положительно, для наглядности добавляем "+"
$pressure = $pressure * 0.75006375541921; //переводим из hPa в mmHg
$pressure = round($pressure); //округляем
$temperarure = round($temperarure);
$sunrise = date('H:i',strtotime("+4 hours", strtotime($sunrise)));//меняем формат даты и прибавляем 4 часа
$sunset = date('H:i',strtotime("+4 hours", strtotime($sunset)));
?>
<?
if ($temperarure>0) {$temperarure='+'.$temperarure;}// Если значение температуры положительно, для наглядности добавляем "+"
$pressure = $pressure * 0.75006375541921; //переводим из hPa в mmHg
$pressure = round($pressure); //округляем
$temperarure = round($temperarure);
$sunrise = date('H:i',strtotime("+4 hours", strtotime($sunrise)));//меняем формат даты и прибавляем 4 часа
$sunset = date('H:i',strtotime("+4 hours", strtotime($sunset)));
?>

Формируем вывод и выводим все это дело

1
2
3
4
5
6
<?
$title = "Город: ".$city2."\n".
$weather_type." \nДавление: ".$pressure." мм рт. ст.\nВетер: ".$wind[trim ($windcode)].", ".$windspeed." м/с \nВлажность: ".$humidity."% \nВосход: ".$sunrise."\nЗакат: ".$sunset;//формируем данные для вывода в title картинки
echo ("<img src=\"/blocks/weather/images/$weather_icon.png\" alt=\"$weather_type\" title=\"$title\" >"); //путь к кртинкам должен быть абсолютным
echo ("$temperarure<sup>o</sup>C<br>");//выводим все безобразие
?>
<?
$title = "Город: ".$city2."\n".
$weather_type." \nДавление: ".$pressure." мм рт. ст.\nВетер: ".$wind[trim ($windcode)].", ".$windspeed." м/с \nВлажность: ".$humidity."% \nВосход: ".$sunrise."\nЗакат: ".$sunset;//формируем данные для вывода в title картинки
echo ("<img src=\"/blocks/weather/images/$weather_icon.png\" alt=\"$weather_type\" title=\"$title\" >"); //путь к кртинкам должен быть абсолютным
echo ("$temperarure<sup>o</sup>C<br>");//выводим все безобразие
?>

Стандартные картинки подменяем своим, не меняя имени.

13d 11d 10n 10d 09n 09d04n 04d 03n 03d 02n 02d 01n 01d

У меня получилось вот так:

1
http://web.scgarage.ru/blocks/weather/index.php
http://web.scgarage.ru/blocks/weather/index.php

При наведении на иконку, отображается дополнительная информация.

Команды консоли *Nix

Собираю команды, для их запоминания

История авторизации

1
last
last

Cron

1
crontab -u user  -l
crontab -u user  -l

посмотреть cron задания для пользователя

Пользователи

1
useradd user_name
useradd user_name

создать

1
passwd user_name
passwd user_name

 поменять пароль

1
useradd -G groupname user_name
useradd -G groupname user_name

 добавить в группу

1
groupadd groupname
groupadd groupname

 создать группу

Загрузка процессора и пямяти

1
top
top
1
htop
htop

(yum install htop)

Поиск

1
find / -name config -print
find / -name config -print
Команда означает следующее: искать файлы с именем config (-name config), начиная с каталога / (первый параметр команды find) и выводить имена файлов на экран (аргумент -print). Отмечу, что поиск рекурсивный, то есть при поиске просматриваются все вложенные директории. Как видите все просто. Теперь рассмотрим синтаксис команды и перейдем к обзору ее основных аргументов.

поиск в файлах

1
find /путь/ -type f -exec grep "текст" {} \;
find /путь/ -type f -exec grep "текст" {} \;
1
grep -rl 'текст' /путь/
grep -rl 'текст' /путь/

Создание символьной ссылки

1
ln -s куда_указывает где_размещается
ln -s куда_указывает где_размещается

Просмотр свободной памяти

1
free -m
free -m

и

1
cat /proc/meminfo
cat /proc/meminfo

Сделать скрипт исполняемым

1
sudo chmod +x script.sh
sudo chmod +x script.sh

или

1
sudo chmod 755 script.sh
sudo chmod 755 script.sh

Права на папки

сменить права на все файлы в папке scotch

1
chmod -R 755 /home/scotch
chmod -R 755 /home/scotch

сменить владельца и группу для каталога

chown -R scotch:users /home/scotch

Удалить каталог

со всем содержимым

1
rm -rf /dir1 /dir2
rm -rf /dir1 /dir2

Свободное место на дисках

1
df -h
df -h

Отображение размера всех папок

1
du -sh *
du -sh *

Размер папок от корня

1
du -hx --max-depth=1 /
du -hx --max-depth=1 /

Тип ФС

1
df -T
df -T

Информация о жестких дисках

1
fdisk -l
fdisk -l

Просмотр файлов без комментариев

1
grep -v -E "^;|^$" /usr/local/lib/php.ini
grep -v -E "^;|^$" /usr/local/lib/php.ini

или так:

1
 grep -v -E "#|^$" /usr/local/apache2/conf/httpd.conf
 grep -v -E "#|^$" /usr/local/apache2/conf/httpd.conf

^# и #. Первое это все строки начинающиеся с #, второе все строки содержащие #.

Просмотр размера папок

1
du -sh *
du -sh *

Информация о системе

1
sensors
sensors
1
dmidecode -t 4 
dmidecode -t 4 

— информация о процессоре

1
dmidecode -t 17
dmidecode -t 17

— информация о памяти

1
dmesg | grep CPU
dmesg | grep CPU

— информация о процессоре

Автоматизация юзабилити чистой OS

Наткнулся на полезный сервис: выбираем необходимые программы, нажимаем кнопку и получаем готовый инсталлятор программ актуальных версий.

Адрес: http://ninite.com

пробуем)

2013-05-17_105639

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