<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Каморка Archевода</title>
	<atom:link href="http://akulikov.org.ua/feed" rel="self" type="application/rss+xml" />
	<link>http://akulikov.org.ua</link>
	<description>Видео уроки, статьи, обзоры</description>
	<lastBuildDate>Mon, 23 Jan 2012 11:16:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Всех с наступающим Новым Годом!</title>
		<link>http://akulikov.org.ua/news/359-%d1%81_%d0%bd%d0%be%d0%b2%d1%8b%d0%bc_%d0%b3%d0%be%d0%b4%d0%be%d0%bc.htm</link>
		<comments>http://akulikov.org.ua/news/359-%d1%81_%d0%bd%d0%be%d0%b2%d1%8b%d0%bc_%d0%b3%d0%be%d0%b4%d0%be%d0%bc.htm#comments</comments>
		<pubDate>Fri, 30 Dec 2011 15:23:55 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[новый год]]></category>
		<category><![CDATA[поздравления]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=359</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/usb-christmas-heating-gloves.jpg"><img class="aligncenter  wp-image-360" title="usb-christmas-heating-gloves" src="http://akulikov.org.ua/wp-content/uploads/2011/12/usb-christmas-heating-gloves.jpg" alt="" width="480" height="360" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/news/359-%d1%81_%d0%bd%d0%be%d0%b2%d1%8b%d0%bc_%d0%b3%d0%be%d0%b4%d0%be%d0%bc.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>В помощь сис.админу: Скрипт автоматического бэкапа MySQL и FTP</title>
		<link>http://akulikov.org.ua/archevod/319-script-automatic-backup-mysq-ftp.htm</link>
		<comments>http://akulikov.org.ua/archevod/319-script-automatic-backup-mysq-ftp.htm#comments</comments>
		<pubDate>Wed, 21 Dec 2011 11:42:10 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Bash-скриптинг]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cut]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[wget]]></category>
		<category><![CDATA[бэкап]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=319</guid>
		<description><![CDATA[Уже ранее писал об этой проблеме. Знания были не высоки, проблема решалась не всегда корректно, скрипт писался как всегда &#171;на коленках&#187;, потому теперь, поняв что к чему и как могу показать следующий вариант, так сказать версию 2.0 Стоит отметить, что при написании скрипта почерпнул много нового и интересного тогда, ещё когда скрипт лишь был на стадии [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/remote-backup.jpg"><img class="alignleft size-thumbnail wp-image-322" title="remote-backup" src="http://akulikov.org.ua/wp-content/uploads/2011/12/remote-backup-150x150.jpg" alt="" width="150" height="150" /></a>Уже <a title="Создаём локальный бекап своего сайта (bash, бекап ftp и mysql)" href="http://akulikov.org.ua/archevod/154-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d1%91%d0%bc-%d0%bb%d0%be%d0%ba%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b1%d0%b5%d0%ba%d0%b0%d0%bf-%d1%81%d0%b2%d0%be%d0%b5%d0%b3%d0%be-%d1%81%d0%b0%d0%b9%d1%82%d0%b0-ba.htm" target="_blank">ранее</a> писал об этой проблеме. Знания были не высоки, проблема решалась не всегда корректно, скрипт писался как всегда &#171;на коленках&#187;, потому теперь, поняв что к чему и как могу показать следующий вариант, так сказать версию 2.0 <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Стоит отметить, что при написании скрипта почерпнул много нового и интересного тогда, ещё когда скрипт лишь был на стадии написания, так и сейчас, когда правил и дописывал. Изменений не так много, но пожалуй их стоит описать:<span id="more-319"></span></p>
<ol>
<li>Изменение команды wget , дописаны необходимые параметры, исправлены старые.</li>
<li>Убрана функция &#171;progressfilt&#187; за ненадобностью</li>
<li>Вывод во время бэкапа ftp  теперь более информативен (показываются лишь директории и файлы, которые синхронизированы)</li>
<li>Исправлены мелкие недочёты и ошибки</li>
</ol>
<p>Что ж, а вот и он собственно, скрипт:</p>
<pre class="code">#!/bin/bash
#**********************************************************#
#                                                          #
# Copyright AKulikov.org.ua 2011-*                         #
# Author: Angel Kulikov                                    #
# License: GPLv2                                           #
#                                                          #
# Скрипт для создания бэкапа. Синхронизируем все файлы с   #
# ftp, а так же не забываем про БД                         #
#                                                          #
#**********************************************************#
echo "=================================================================" 

MyUSER="mysql_user_name" # MySQL USERNAME
MyPASS="mysql_user_pass" # MySQL PASSWORD
MyHOST="mysql_data_host" # MySQL Hostname
FTPHOST="ftp_date_host"  # FTP Hostname
FTPUSER="ftp_user_name"  # FTP USERNAME
FTPPASS="ftp_user_pass"  # FTP PASSWORD

# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql) -w --reconnect"
MYSQLDUMP="$(which mysqldump) -v --force --single-transaction --dump-date --create-options --quick --extended-insert --debug-info --debug-check --skip-lock-tables --set-charset --allow-keywords --max-allowed-packet=64M"
#CHOWN="$(which chown)"
#CHMOD="$(which chmod)"
GZIP="$(which gzip)"

# Backup Dest directory, change this if you have someother location
DEST="/куда/сохранять/бэкап/"

# Main directory where backup will be stored
MBD="$DEST/mysql/"
TMP="$DEST/tmp/"

# Get hostname
HOST="$MyHOST"#"$(hostname)"

# Get data in dd-mm-yyyy format
NOW="$(date +"%Y.%m.%d")"
dtm="date +%Y.%m.%d %H:%M:%S"
# File to store current backup file
FILE=""
# Store list of databases
DBS=""

# DO NOT BACKUP these databases
IGGY=" information_schema, databases, --------------, show, information_schema"

echo "$($dtm) ::Начинаем фоновое копирование сайта и баз данных::"
echo

[ ! -d $MBD ] &amp;&amp; mkdir -p $MBD || :
[ ! -d $TMP ] &amp;&amp; mkdir -p $TMP || :
[ ! -d "$DEST/ftp/" ] &amp;&amp; mkdir -p "$DEST/ftp/" || :

# Only root can access it!
#$CHOWN -hR root $DEST
#$CHMOD 0644 $DEST
echo "$($dtm) ::Устанавливаем права на дирректорию и вложенные в неё файлы::"
echo

# Get all database list first
echo "$($dtm) ::Подключаемся к базе и получаем листинг::"
echo
DBS="$($MYSQL --user=$MyUSER --host=$MyHOST --password=$MyPASS -Bse 'show databases')"

for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
	for i in $IGGY
	do
	    [ "$db" == "$i" ] &amp;&amp; skipdb=1 || :
	done
    fi

    if [ "$skipdb" == "-1" ] ; then
	FILE="$TMP/$db.$MyHOST.$NOW.$(date +%s).gz"

	# do all inone job in pipe,
	# connect to mysql using mysqldump for select mysql database
	# and pipe it out to gz file in backup dir <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
        echo "$($dtm) ::Начинаем дамп базы $db::"
	echo
        $MYSQLDUMP --user=$MyUSER --host=$MyHOST --password=$MyPASS $db | $GZIP -9 &gt; $FILE
        echo "$($dtm) ::Выполнили бекап и сжатие::"
	echo
    fi
done

CT=$NOW.$(date +%s);
echo "$($dtm) ::Проводим архивацию баз::"
echo
tar -C $TMP/ -czpvf - . | cat &gt; $TMP/../db_backup_$CT.tgz
rm -r $TMP/* --interactive=never
mv $TMP/../db_backup_$CT.tgz $MBD/
rm -r $TMP
echo "$($dtm) ::Архивация выполнена::"
echo

cd $DEST
echo "$($dtm) ::Начинаем выполнения бекапа сайта::"
echo

wget -m --ftp-user=$FTPUSER --ftp-password=$FTPPASS ftp://$FTPHOST  -r -nv -c 2&gt;&amp;1 | cut -d ' ' -f 4
tar -C $DEST/$FTPHOST/ -czpvf - . | cat &gt; $DEST/ftp_backup_$CT.tgz
mv $DEST/ftp_backup_$CT.tgz "$DEST/ftp/"
rm -r $DEST/$FTPHOST/
echo "$($dtm) ::Бекап выполнен. Завершаем работу::"
echo "================================================================="</pre>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/319-script-automatic-backup-mysq-ftp.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Защита данных: Оригинальный вариант защиты от SQL-инъекций и XSS</title>
		<link>http://akulikov.org.ua/archevod/314-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-%d0%be%d1%80%d0%b8%d0%b3%d0%b8%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82-%d0%b7.htm</link>
		<comments>http://akulikov.org.ua/archevod/314-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-%d0%be%d1%80%d0%b8%d0%b3%d0%b8%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82-%d0%b7.htm#comments</comments>
		<pubDate>Tue, 20 Dec 2011 20:52:38 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[xss]]></category>
		<category><![CDATA[безопасность]]></category>
		<category><![CDATA[защита]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=314</guid>
		<description><![CDATA[Суть техники сводится в подстановке в SQL-запросах всех данных в base64-представлении и таким образом нет смысла использовать какие либо парсеры/анализаторы используемых в SQL-запрос данных (placeholders и т.д.) Все это можно грубо описать строкой типа: SELECT * from users where user_name=base64_decode('YWt1bGlrb3Y=') где base64_decode — функция декодирования из base64, релализуемая конкретной БД. В base64 отстуствуют спецсимволы и [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/TextMateIcon.png"><img class="alignleft size-thumbnail wp-image-315" title="TextMateIcon" src="http://akulikov.org.ua/wp-content/uploads/2011/12/TextMateIcon-150x150.png" alt="" width="150" height="150" /></a>Суть техники сводится в подстановке в SQL-запросах всех данных в base64-представлении и таким образом нет смысла использовать какие либо парсеры/анализаторы используемых в SQL-запрос данных (placeholders и т.д.)</p>
<p>Все это можно грубо описать строкой типа:</p>
<pre class="code">SELECT * from users where user_name=base64_decode('YWt1bGlrb3Y=')</pre>
<p>где base64_decode — функция декодирования из base64, релализуемая конкретной БД.</p>
<p>В base64 отстуствуют спецсимволы и следовательно никаких угроз нашему запросу от вносимых в него данных не будет. Нет необходимости как-то экранировать или изменять входные данные. Достаточно закодировать их в base64 и передать в запросе.<span id="more-314"></span></p>
<p>Техника применима также и на клиентской стороне — если надо убрать данные в кавычки например в обработчике событий либо же в js. Разкодировка из base64 может быть выполнена прямо в js когда необходимо получить оригинальные данные.</p>
<p>С моей точки зрения метод гениален. Недостатков (по моему мнению) два — увеличение памяти под хранимые таким образом переменные составит 30% (особенность base-64 кодирования), а также повышение нагрузки на сервер из-за необходимости кодирования входных параметров (считаю что можно пренебречь), и нагрузки на сервер БД из-за необходимости разкодирвания (а вот этим я думаю пренебречь не получится).<br />
Однако чтобы быть точным — необходимо делать опыты</p>
<p>Приношу автору огромную благодарность. Жаль, не смог найти сайт, откуда взял замечательный пример&#8230;</p>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/314-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-%d0%be%d1%80%d0%b8%d0%b3%d0%b8%d0%bd%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82-%d0%b7.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3G Internet: Как настроить 3g соединение при помощи netcfg (ArchLinux, Интертелеком)</title>
		<link>http://akulikov.org.ua/archevod/308-3g-internet-intertelecom-netcfg-linux.htm</link>
		<comments>http://akulikov.org.ua/archevod/308-3g-internet-intertelecom-netcfg-linux.htm#comments</comments>
		<pubDate>Tue, 20 Dec 2011 20:24:57 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Настройка системы]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[intertelecom]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[netcfg]]></category>
		<category><![CDATA[pcmcia]]></category>
		<category><![CDATA[ppp]]></category>
		<category><![CDATA[sprint]]></category>
		<category><![CDATA[интертелеком]]></category>
		<category><![CDATA[модем]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=308</guid>
		<description><![CDATA[Всё та же история. Есть модем, но вот только не USB-брелок, а конкретная карточка pcmcia. Модель 3G модем Sierra AirCard 597E ExpressCard , скажу по секрету &#8212; брал у друга попробовать. У него Интертелеком, платит больше ста за безлим. Ну тут была ни была, напросился попробовать, ведь и самого &#171;жаба давит&#187;, хочется быть в седле, а [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/new-2-bel2.jpg"><img class="alignleft size-thumbnail wp-image-309" title="new-2-bel2" src="http://akulikov.org.ua/wp-content/uploads/2011/12/new-2-bel2-150x150.jpg" alt="" width="150" height="150" /></a>Всё та же история. Есть модем, но вот только не USB-брелок, а конкретная карточка pcmcia. Модель <strong>3G модем Sierra AirCard 597E ExpressCard , </strong>скажу по секрету &#8212; брал у друга попробовать. У него Интертелеком, платит больше ста за безлим. Ну тут была ни была, напросился попробовать, ведь и самого &#171;жаба давит&#187;, хочется быть в седле, а с тем интернетом что был (домашний от киевстара) &#8212; нервов не напасёшься. Вообщем решил попробовать, каково это быть 3g&#8217;анутым <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Вообщем, подключаю карточку к своему ноуту, запускаю мой излюбленный netcfg и &#171;voila&#187; (по-нашему &#8212; &#171;вуаля&#187; ), ничего не пашет. Сел, почесал репу, вспомнил что подключение у меня ведь нет. А я пытаюсь &#171;стучаться&#187; к ним при помощи киевстаровского. Опять же сел, всё так же почесал репу&#8230; Почитал пару форумов и тут на меня снизошло просветление: <span id="more-308"></span></p>
<p>Оказывается у них там много приколов. Вообщем, для начала опять же создаём файл ppp-соединения:</p>
<pre class="code">$ sudo nano /etc/ppp/peers/3g_intertelecom

debug
/dev/ttyUSB0
921600
crtscts
noipdefault
ipcp-accept-local
lcp-echo-interval 30
lcp-echo-failure 5
usepeerdns
noauth
nodetach
user 'IT'
password 'IT'
connect "/usr/sbin/chat -s -S -V -t 60 -f /etc/ppp/peers/dialup.chat"</pre>
<p>Строго прошу не судить, разбил на два файла, вот второй:</p>
<pre class="code">$ sudo nano /etc/ppp/peers/dialup.chat
'' ''
'' 'ATZ'
'OK' 'ATS7=60'
'OK' 'ATQ0V1E1S0=0&amp;C1&amp;D2+FCLASS=0'
'OK' 'ATD #777'
'CONNECT' ''</pre>
<p>Ну так же не забываем для netcfg настройки забить:</p>
<pre class='code'>$ sudo nano /etc/network.d/3g_intertelecom
#
# Network Profile
#
DESCRIPTION="Intertelecom 3G"
CONNECTION='ppp'
INTERFACE='ignore'
PEER='3g_new' #это имя файла в /etc/ppp/peers/
PPP_TIMEOUT=10
PREUP='sleep 1'
POST_UP='sleep 1 &#038;&#038; echo "nameserver 8.8.8.8" >> /etc/resolv.conf &#038;&#038; route add default dev ppp0'
POST_DOWN='sleep 2'
</pre>
<p>Вот собственно и всё <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Правда бывает иногда, часов в 8 утра (кажется), когда выбивает 3,1-мегабитный инет (у них по акции всю ночь шпарится скорость от 1мбита до 3,1) бывают приколы. То интернет не хочет заново подключаться, то ещё какие-то проблемы. Вообщем, пользовался я их инетом двое суток, был более менее доволен.</p>
<p>Для подключения как обычно:</p>
<pre class='code'>$ sudo netcfg -r 3g_intertelecom</pre>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/308-3g-internet-intertelecom-netcfg-linux.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3G Internet: Как настроить 3g соединение при помощи netcfg (ArchLinux, Киевстар)</title>
		<link>http://akulikov.org.ua/archevod/300-3g-internet-netcfg-kyivstar-netcfg-linux.htm</link>
		<comments>http://akulikov.org.ua/archevod/300-3g-internet-netcfg-kyivstar-netcfg-linux.htm#comments</comments>
		<pubDate>Tue, 20 Dec 2011 19:59:18 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Настройка системы]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[bash. киевстар]]></category>
		<category><![CDATA[modem]]></category>
		<category><![CDATA[netcfg]]></category>
		<category><![CDATA[интернет]]></category>
		<category><![CDATA[модем]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=300</guid>
		<description><![CDATA[Добрый вечер. Сегодня я вас потешу тем, чем сам пользуюсь уже давно. Почему не задумывался написать такую статью раньше &#8212; хз. Вообщем суть следующая: 1) есть 3g-модем от Киевстар, купленный у них за 99грн (на модеме лейбл диджуса, взял лишь из-за флехи) 2) есть готовая система ArchLinux 3) есть утилитка netcfg 4) моооооре желания пользоваться [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/1132.jpg"><img class="alignleft size-thumbnail wp-image-301" title="1(132)" src="http://akulikov.org.ua/wp-content/uploads/2011/12/1132-150x150.jpg" alt="" width="150" height="150" /></a>Добрый вечер. Сегодня я вас потешу тем, чем сам пользуюсь уже давно. Почему не задумывался написать такую статью раньше &#8212; хз. Вообщем суть следующая:</p>
<p>1) есть 3g-модем от Киевстар, купленный у них за 99грн (на модеме лейбл диджуса, взял лишь из-за флехи)</p>
<p>2) есть готовая система ArchLinux</p>
<p>3) есть утилитка netcfg</p>
<p>4) моооооре желания пользоваться интернетом на природе <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-300"></span></p>
<p>На деле всё не кажется таким уж и простым. Создадим файл с настройками ppp-соединения:</p>
<pre class="code">$ sudo nano /etc/ppp/peers/3g_kyivstar

connect "/usr/sbin/chat -v \
TIMEOUT 35 \
ABORT '\nBUSY\r' \
ABORT '\nERROR\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nNO CARRIER\r' \
ABORT '\nNO DIALTONE\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
ABORT '\nUsername/Password Incorrect\r' \
'' \rAT \
OK 'AT+CGDCONT=1,\"IP\",\"www.djuice.com.ua\"' \
OK ATD*99***1# \
CONNECT \c \
"
/dev/ttyUSB0
115200
#460800
crtscts
noauth
#novj
#novjccomp
#nobsdcomp
#nopcomp
#noaccomp

usepeerdns
defaultroute
user "djuice"
password djuice
ms-dns 8.8.8.8
ms-dns 8.8.8.8</pre>
<p>Уже проще, не правда ли? Теперь идём строить каркас для netcfg, но для начала установим его, если этого не сделали ранее:</p>
<pre class="code">$ yaourt -S netcfg

или

$ pacman -S netcfg</pre>
<p>Тут уж всё на ваш вкус <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ну что ж, установили, теперь берёмся за каркас:</p>
<pre class="code">$ sudo nano /etc/network.d/3g_kyivstar

#
# Network Profile
#
DESCRIPTION="Kyivstar 3G"
CONNECTION='ppp'
INTERFACE='ignore'
PEER='3g' #это имя файла в /etc/ppp/peers/
PPP_TIMEOUT=10
PREUP='sleep 1' # что бы не заедало подключение
POST_UP='sleep 1 &amp;&amp; echo "nameserver 8.8.8.8" &gt;&gt; /etc/resolv.conf' # для уверенности
POST_DOWN='sleep 2' # что бы не заедало подключение</pre>
<p>Ну что, а теперь пробуем, подключаем модем, дожидаемся пока он подключится и:</p>
<pre class="code">$ sudo netcfg -r 3g_kyivstar</pre>
<p>Если всё выполнили верно &#8212; интернет у Вас уже появился <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/300-3g-internet-netcfg-kyivstar-netcfg-linux.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: xargs, как быть, чего не миновать?</title>
		<link>http://akulikov.org.ua/news/272-linux-xargs-%d0%ba%d0%b0%d0%ba-%d0%b1%d1%8b%d1%82%d1%8c-%d1%87%d0%b5%d0%b3%d0%be-%d0%bd%d0%b5-%d0%bc%d0%b8%d0%bd%d0%be%d0%b2%d0%b0%d1%82%d1%8c.htm</link>
		<comments>http://akulikov.org.ua/news/272-linux-xargs-%d0%ba%d0%b0%d0%ba-%d0%b1%d1%8b%d1%82%d1%8c-%d1%87%d0%b5%d0%b3%d0%be-%d0%bd%d0%b5-%d0%bc%d0%b8%d0%bd%d0%be%d0%b2%d0%b0%d1%82%d1%8c.htm#comments</comments>
		<pubDate>Mon, 19 Dec 2011 09:31:16 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Bash-скриптинг]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[xargs]]></category>
		<category><![CDATA[ликбез]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=272</guid>
		<description><![CDATA[Не так давно я сидел и думал &#171;пора бы заняться ликбезом, изучить комманды и наконец понять, что за утилита эдакая, xarg&#187;. А время &#171;бежит&#187;, день сменяется днём. В один из скучных рабочих будней я решил что пришло время разбираться. Первое, что заметил, это то, что &#171;man&#187; к утилите &#8212; довольно загадочный, и с первого раза [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/linux-books.jpg"><img class="alignleft size-thumbnail wp-image-274" title="linux-books" src="http://akulikov.org.ua/wp-content/uploads/2011/12/linux-books-150x150.jpg" alt="" width="150" height="150" /></a>Не так давно я сидел и думал &#171;пора бы заняться ликбезом, изучить комманды и наконец понять, что за утилита эдакая, xarg&#187;. А время &#171;бежит&#187;, день сменяется днём. В один из скучных рабочих будней я решил что пришло время разбираться. Первое, что заметил, это то, что &#171;man&#187; к утилите &#8212; довольно загадочный, и с первого раза понять мне его не удалось. Статья на &#171;википедии&#187; разъяснений тоже не добавила, даже, наверно, скорее всего запутала, по этим причинам мне в голову пришла идея провести своё собственное &#171;расследование&#187;, которое позже превратилось в эту статью. Как известно, пока объясняешь и сам поймёшь <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-272"></span></p>
<p>Итак, xargs, как быть, чего не миновать?</p>
<p>xargs это утилита командной строки, позволяющая вызвать любую команду с аргументами, взятыми из стандартного вывода. Причём аргументы можно передать все сразу, а можно группировать по несколько штук. Изучать мы будем xargs версии 4.4.2.<br />
Версию можно проверить следующим образом:</p>
<pre class="code">$ xargs --version
xargs (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b</pre>
<p>Так же, по рекомендации &#171;man-а&#187; будем использовать только новые аргументы, не помеченные как deprecated(испорченные; ведь лучше сразу привыкать работать правильно).</p>
<p>Итак первое, что стоит понять, это то, как данная утилита обрабатывает входящий поток и разделяет его на аргументы/переменные. Есть несколько режимов, которые зависят от опций:</p>
<p>1. Обычный или стандартный. В котором по умолчанию разделителем аргументов считается любой пробельный символ, например: пробел, табуляция, вертикальная табуляция или перевод строки. Но как и в командной оболочке можно использовать &#171;&#187; или \ что бы предотвратить разбиение аргумента.</p>
<p>2. Обычный, с группированием. Режим, который включается при использовании параметра -L. Практически идентичен предыдущему, исключением является то, что xargs запоминает, какой аргумент на какой строке находится. Так же, если строка оканчивается пробелом или табуляцией, следующая строка будет считаться продолжением текущей строки.</p>
<p>3. Построчный. Включается при использовании опции -I или -0. При этом вся строка считается одним целым аргументом, несмотря на пробелы и табуляции внутри. Для -I концом строки является символ &#8216;\n&#8217; а для -0 символ &#8216;\0&#8242;</p>
<p>Проведём несколько испытаний, что бы лучше понять и усвоить всё это:</p>
<p>Вот мы получили вывод файла /etc/group</p>
<pre class="code">$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin
adm:x:4:root,daemon
tty:x:5:
disk:x:6:root,akulikov
lp:x:7:daemon
mem:x:8:
kmem:x:9:
wheel:x:10:root
ftp:x:11:akulikov
mail:x:12:akulikov
uucp:x:14:smsd
log:x:19:root,akulikov
utmp:x:20:
locate:x:21:
rfkill:x:24:
smmsp:x:25:
http:x:33:akulikov
games:x:50:akulikov
network:x:90:akulikov
video:x:91:akulikov
audio:x:92:akulikov
optical:x:93:akulikov
floppy:x:94:akulikov
storage:x:95:akulikov
scanner:x:96:akulikov
power:x:98:akulikov
nobody:x:99:akulikov
users:x:100:akulikov
dbus:x:81:
avahi:x:84:
camera:x:97:
usbmux:x:140:
gdm:x:120:akulikov
rtkit:x:133:
dnsmasq:x:999:
ntp:x:87:
vboxusers:x:108:
mysql:x:89:
bumblebee:x:1000:
plugdev:x:1001:akulikov
smsd:x:1002:
networkmanager:x:1003:akulikov</pre>
<p>Смотрим на обычную обработку при использовании xargs:</p>
<p>Тот же список, но в одну строку:</p>
<pre class="code">cat /etc/group | xargs
root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin adm:x:4:root,daemon tty:x:5: disk:x:6:root,akulikov lp:x:7:daemon mem:x:8: kmem:x:9: wheel:x:10:root ftp:x:11:akulikov mail:x:12:akulikov uucp:x:14:smsd log:x:19:root,akulikov utmp:x:20: locate:x:21: rfkill:x:24: smmsp:x:25: http:x:33:akulikov games:x:50:akulikov network:x:90:akulikov video:x:91:akulikov audio:x:92:akulikov optical:x:93:akulikov floppy:x:94:akulikov storage:x:95:akulikov scanner:x:96:akulikov power:x:98:akulikov nobody:x:99:akulikov users:x:100:akulikov dbus:x:81: avahi:x:84: camera:x:97: usbmux:x:140: gdm:x:120:akulikov rtkit:x:133: dnsmasq:x:999: ntp:x:87: vboxusers:x:108: mysql:x:89: bumblebee:x:1000: plugdev:x:1001:akulikov smsd:x:1002: networkmanager:x:1003:akulikov</pre>
<p>Обычный режим с группировкой по строкам не отличается от предыдущего на этом этапе.</p>
<p>Теперь группируем по два элемента в одной строке:</p>
<pre class="code">cat /etc/group | xargs -L 2
root:x:0:root bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon sys:x:3:root,bin
adm:x:4:root,daemon tty:x:5:
disk:x:6:root,akulikov lp:x:7:daemon
mem:x:8: kmem:x:9:
wheel:x:10:root ftp:x:11:akulikov
mail:x:12:akulikov uucp:x:14:smsd
log:x:19:root,akulikov utmp:x:20:
locate:x:21: rfkill:x:24:
smmsp:x:25: http:x:33:akulikov
games:x:50:akulikov network:x:90:akulikov
video:x:91:akulikov audio:x:92:akulikov
optical:x:93:akulikov floppy:x:94:akulikov
storage:x:95:akulikov scanner:x:96:akulikov
power:x:98:akulikov nobody:x:99:akulikov
users:x:100:akulikov dbus:x:81:
avahi:x:84: camera:x:97:
usbmux:x:140: gdm:x:120:akulikov
rtkit:x:133: dnsmasq:x:999:
ntp:x:87: vboxusers:x:108:
mysql:x:89: bumblebee:x:1000:
plugdev:x:1001:akulikov smsd:x:1002:
networkmanager:x:1003:akulikov</pre>
<p>Параметр -d указывает на то, что будет являться у нас разделителем:</p>
<pre class="code">$ echo "Привет:мир" | xargs -d ':'
Привет мир</pre>
<p>Мы видим что в выводе у нас два аргумента &#8212; &#171;Привет&#187; и &#171;мир&#187;.</p>
<p>Строку &#171;Привет:мир&#187; , мы разделили с помощью разделителя &#171;:&#187;</p>
<p>С деление входного потока на аргументы кажется разобрались, переходим к подстановке параметров.</p>
<p>Итак, xarg после своих опций ждёт команду, которую и будет выполнять. Все входящие аргументы разбиваются на группы, после чего заданная команда вызывается для каждой группы, и в неё передаются все аргументы из этой группы.</p>
<p>Теперь рассмотрим, как формируются группы.</p>
<p>1. Если опций нет, то группа одна, в неё попадают все аргументы из потока ввода. Группа бесконечного размера, так сказать <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>2. Опция -L n задаёт группировку по строкам. В команду передаются аргументы находящиеся на n строках. С ней мы разобрались ранее.</p>
<p>3. Группировка по аргументам, задаваемая опцией -n x. Тут всё прозрачно: аргументы группируются по x штук и передаются в команду. Что бы было понятнее, покажу на примере с использованием -d :</p>
<pre class="code">$ cat /etc/group | xargs -n 2 -d ':'

root x

0 root

bin

x 1

root,bin,daemon

daemon x

2 root,bin,daemon

sys

x 3

root,bin

adm x

4 root,daemon

tty

x 5

disk x

6 root,akulikov

lp

x 7

daemon

mem x

8

kmem

x 9

wheel x

10 root

ftp

x 11

akulikov

mail x

12 akulikov

uucp

x 14

smsd

log x

19 root,akulikov

utmp

x 20

locate x

21

rfkill

x 24

smmsp x

25

http

x 33

akulikov

games x

50 akulikov

network

x 90

akulikov

video x

91 akulikov

audio

x 92

akulikov

optical x

93 akulikov

floppy

x 94

akulikov

storage x

95 akulikov

scanner

x 96

akulikov

power x

98 akulikov

nobody

x 99

akulikov

users x

100 akulikov

dbus

x 81

avahi x

84

camera

x 97

usbmux x

140

gdm

x 120

akulikov

rtkit x

133

dnsmasq

x 999

ntp x

87

vboxusers

x 108

mysql x

89

bumblebee

x 1000

plugdev x

1001 akulikov

smsd

x 1002

networkmanager x

1003 akulikov</pre>
<p>3. Режим с подстановкой &#8212; опция -I. Для начала надо напомнить, что в данном режиме аргументы из потока ввода разбираются по особому. Каждая строка это один целый аргумент, склеивание строк не производится. Во вторых, у опции -I имеется параметр &#8212; строка, которая заменяется в команде на аргумент:</p>
<pre class="code">echo -e "A B\nC D" | xargs -I _ echo '=_+_='
=A B+A B=
=C D+C D=</pre>
<p>Легко заметить, что символ _ задан как строка подстановки аргумента, которая используется в команде 2 раза. Так же видно, что аргументы выделяются целыми строками, и пробел не влияет на разбор. Команда вызывается для каждого аргумента.</p>
<p>С подстановкой всё. Рассмотрим оставшиеся важные опции<br />
-r &#8212; не выполнять команду, если нет аргументов:</p>
<pre class="code">$ cat /dev/null | xargs echo "=_+_=$1"
=_+_=</pre>
<p>сравним с таким:</p>
<pre class="code">$ cat /dev/null | xargs -r echo "=_+_=$1"
$</pre>
<p>Как видим, во втором случае команда не выполнилась.</p>
<p>-p &#8212; xargs будет запрашивать подтверждение на выполнение каждой команды.</p>
<p>Тем, кому интересно, как можно применить утилиту в &#171;боевом режиме&#187; , думаю понравится следующая строчка:</p>
<pre class='code'>
find / -iname '*~' | xargs rm
</pre>
<p>Как только вы имеете перечень файлов в виде списка, вы можете делать с ними всё, что вам заблагорассудится. Строка крайне проста и создана для того, чтобы отыскивать в дереве файловой системы backup-файлы по шаблону &#8216;*~&#8217;, и передавать пути найденных файлов программе rm.</p>
<p>На этом, думаю можно завершить мой небольшой мануал. Он оказался не совсем коротким, зато, надеюсь понятным <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/news/272-linux-xargs-%d0%ba%d0%b0%d0%ba-%d0%b1%d1%8b%d1%82%d1%8c-%d1%87%d0%b5%d0%b3%d0%be-%d0%bd%d0%b5-%d0%bc%d0%b8%d0%bd%d0%be%d0%b2%d0%b0%d1%82%d1%8c.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: Bash, милый bash..</title>
		<link>http://akulikov.org.ua/archevod/253-linux-bash-%d0%bc%d0%b8%d0%bb%d1%8b%d0%b9-bush.htm</link>
		<comments>http://akulikov.org.ua/archevod/253-linux-bash-%d0%bc%d0%b8%d0%bb%d1%8b%d0%b9-bush.htm#comments</comments>
		<pubDate>Sun, 18 Dec 2011 10:29:35 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Bash-скриптинг]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Настройка системы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bashrc]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[cut]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[midnight commander]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[консоль]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=253</guid>
		<description><![CDATA[Порой, необходимо достать какую-то часть текста с сайта. Но так лень заходить на сайт, искать &#171;кусок&#187; кода или цифры. Бывает даже не сообразишь, что сделал ошибку, но её заметишь лишь по истечению времени. Я предлагаю выход из этого положения. В моём случае, мне было необходимо заходить на сайт проекта midnight-commander&#8217;а , находить текущую версию и, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/1.0.jpg"><img class="alignleft size-thumbnail wp-image-254" title="bash" src="http://akulikov.org.ua/wp-content/uploads/2011/12/1.0-150x150.jpg" alt="" width="150" height="150" /></a>Порой, необходимо достать какую-то часть текста с сайта. Но так лень заходить на сайт, искать &#171;кусок&#187; кода или цифры. Бывает даже не сообразишь, что сделал ошибку, но её заметишь лишь по истечению времени.</p>
<p>Я предлагаю выход из этого положения.</p>
<p>В моём случае, мне было необходимо заходить на сайт проекта midnight-commander&#8217;а , находить текущую версию и, при её изменении &#8212; пересобирать пакет, выкладывать его в AUR, отписываться друзьям, что бы они обновились.</p>
<p>Как вы заметили, действий очень много, а так хочется, набрав в консоли одну команду &#8212; получить готовый результат. Так родилась эта статья:<span id="more-253"></span></p>
<p>Цель &#8212; получить последнюю версию с сайта midnight-commander&#8217;а. Последняя версия &#8212; это набор цифр, которые упоминаются по всей веб-странице. Но при всём этом нужно получить определённый кусок текста и выбрать именно из него эти цифры и выдать их на экране.</p>
<p>Приступаем. Сайт проекта - <a href="https://www.midnight-commander.org/">https://www.midnight-commander.org/</a> , здесь используется соединение по https. Выбор чем доставать текст страницы был прост. Во-первых &#8212; соединение шифрованное, https, с ним я из командной строки ещё не работал, но помню что есть такая &#171;штука&#187; как CUrl.. Так же помню и то, что эта &#171;штука&#187; с этим соединением работает &#8212; пробуем:</p>
<pre class="code">$ curl https://www.midnight-commander.org/
&gt;&gt; curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
&gt;&gt; error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
&gt;&gt; More details here: http://curl.haxx.se/docs/sslcerts.html
&gt;&gt;
&gt;&gt; curl performs SSL certificate verification by default, using a "bundle"
&gt;&gt; of Certificate Authority (CA) public keys (CA certs). If the default
&gt;&gt; bundle file isn't adequate, you can specify an alternate file
&gt;&gt; using the --cacert option.
&gt;&gt; If this HTTPS server uses a certificate signed by a CA represented in
&gt;&gt; the bundle, the certificate verification probably failed due to a
&gt;&gt; problem with the certificate (it might be expired, or the name might
&gt;&gt; not match the domain name in the URL).
&gt;&gt; If you'd like to turn off curl's verification of the certificate, use
&gt;&gt; the -k (or --insecure) option.</pre>
<p>Мы получили ответ CURL о том, что для этой страницы необходимо использовать параметр &#171;-k&#187;. Читаем что это означает:</p>
<pre class="code">$ curl --help
&gt;&gt; -k, --insecure Allow connections to SSL sites without certs (H)</pre>
<p>Что означает &#8212; &#171;Разрешить подключения к SSL-сайтам без сертификатов&#187;.</p>
<p>Проверяем:</p>
<pre class="code">$ curl https://www.midnight-commander.org/
&gt;&gt; {Вывод html-текста страницы}</pre>
<p>Вот мы решили главную проблему. Теперь нам предстоит получить именно эту строку, где находится упоминание, о текущей версии.</p>
<p>При просмотре сайта мы получаем &#8212; &#171;Latest released version: 4.8.1; what&#8217;s new.&#187; , в этой строке содержится текущая версия данной программы. Пробуем получить эту строку, заведомо зная где &#171;динамический текст&#187;, а где &#171;статический&#187;. К примеру, я могу предположить, что &#187;Latest released version:&#187; &#8212; не изменится, таким образом я строю запрос:</p>
<pre class="code">$ curl -k https://www.midnight-commander.org/ | grep 'Latest released version:'
&gt;&gt; % Total % Received % Xferd Average Speed Time Time Time Current
&gt;&gt; Dload Upload Total Spent Left Speed
&gt;&gt;100 15652 100 15652 0 0 22742 0 -Latest released version: 4.8.1; &lt;a href="/wiki/NEWS-4.8.1"&gt;what's
&gt;&gt; new &lt;/a&gt;.
&gt;&gt; -:--:-- --:--:-- --:--:-- 24610
</pre>
<p>Я получаю в выводе то что мне было необходимо + вывод получения страницы. Это не хорошо, мне необходим только вывод. Читая help по данной команде, легко можно обнаружить параметр</p>
<pre class="code">-s, --silent        Silent mode. Don't output anything
# Режим тишины. Не выводить ничего.</pre>
<p>Это то, что нам требовалось. Пробуем:</p>
<pre class="code">$ curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:'
&gt;&gt; Latest released version: 4.8.1; &lt;a class="wiki" href="/wiki/NEWS-4.8.1"&gt;what's new&lt;/a&gt;.&lt;br /&gt;</pre>
<p>Вот теперь, другое дело. Теперь смотрим, как можно получить именно те цифры, которые здесь указаны ( 4.8.1 , на момент написания статьи &#8212; актуальная версия)</p>
<p>Вспоминаем про команду :</p>
<pre class="code">$ cut -d ':' -f 2
# Разрезать по разделителю ":" и показать вторую часть.</pre>
<p>Пробуем:</p>
<pre class="code">$ curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:' | cut -d ':' -f 2
&gt;&gt;  4.8.1; &lt;a href="/wiki/NEWS-4.8.1"&gt;what's new&lt;/a&gt;.&lt;br /&gt;</pre>
<p>Ну что ж, уже лучше. Теперь нам нужно избавиться от той части, которая находится после числа:</p>
<pre class="code">$ curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:' | cut -d ':' -f 2 | cut -d ';' -f 1
&gt;&gt; 4.8.1</pre>
<p>Теперь, уже перед самым концом, украшаем вывод избавляясь от пробела(ов):</p>
<pre class="code">$ curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:' | cut -d ':' -f 2 | cut -d ';' -f 1 | cut -d ' ' -f 2
&gt;&gt; 4.8.1</pre>
<p>Вот мы и получили то, что нам было необходимо <img src='http://akulikov.org.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Мы можем заметить, что получившаяся строка очень велика, можно запихнуть всё это в bash-файл:</p>
<pre class="code">
#!/bin/bash
curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:' | cut -d ':' -f 2 | cut -d ';' -f 1 | cut -d ' ' -f 2
</pre>
<p>Или на крайний случай, можно создать alias в .bashrc , как сделал это я:</p>
<pre class="code">
alias mc-ver="curl -sk https://www.midnight-commander.org/ | grep 'Latest released version:' | cut -d ':' -f 2 | cut -d ';' -f 1 | cut -d ' ' -f 2"
</pre>
<p>Таким образом, при вызове команды mc-ver , получаем необходимый нам вывод.</p>
<p>Так же, если вам необходимо не перезапуская терминал получить свежий .bashrc , выполните команду:</p>
<pre class="code">
$ source ~/.bashrc
</pre>
<p>Успехов.</p>
<h2 style="text-align: right;"><em>С ув. Ангел Куликов</em></h2>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/253-linux-bash-%d0%bc%d0%b8%d0%bb%d1%8b%d0%b9-bush.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пакетостроение: mc 4.8.1 (+ обновление по git)</title>
		<link>http://akulikov.org.ua/archevod/243-%d0%bf%d0%b0%d0%ba%d0%b5%d1%82%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%bd%d0%b8%d0%b5-mc-4-8-1-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be-git.htm</link>
		<comments>http://akulikov.org.ua/archevod/243-%d0%bf%d0%b0%d0%ba%d0%b5%d1%82%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%bd%d0%b8%d0%b5-mc-4-8-1-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be-git.htm#comments</comments>
		<pubDate>Thu, 15 Dec 2011 14:23:09 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[latest git]]></category>
		<category><![CDATA[mc]]></category>
		<category><![CDATA[midnight commander]]></category>
		<category><![CDATA[pkgbuild]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=243</guid>
		<description><![CDATA[Вышла новая версия консольного файлового менеджера Midnight Commander 4.8.1 Основные изменения с версии 4.8.0: Основное (панели) Опциональное использование функции posix_fallocate64() для резервирования места на носителе перед копированием; Ускорение запуска; Поддержка событий мыши в широких терминалах (223 столбца и более). VFS Добавлена точка выхода из временной панелизации (&#171;..&#187;). Редактор Подсветка синтаксиса исходников Lex/Flex (расширение .l) обрабатываются [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/300px-Midnight-commander-4.7.0-pre4-ru.png"><img class="alignleft size-thumbnail wp-image-244" title="300px-Midnight-commander-4.7.0-pre4-ru" src="http://akulikov.org.ua/wp-content/uploads/2011/12/300px-Midnight-commander-4.7.0-pre4-ru-150x150.png" alt="" width="150" height="150" /></a>Вышла новая версия консольного файлового менеджера Midnight Commander 4.8.1</p>
<p>Основные изменения с версии 4.8.0:</p>
<p>Основное (панели)</p>
<p>Опциональное использование функции posix_fallocate64() для резервирования места на носителе перед копированием;<br />
Ускорение запуска;<br />
Поддержка событий мыши в широких терминалах (223 столбца и более).<br />
VFS<span id="more-243"></span></p>
<p>Добавлена точка выхода из временной панелизации (&#171;..&#187;).<br />
Редактор</p>
<p>Подсветка синтаксиса исходников Lex/Flex (расширение .l) обрабатываются файлом yxx.syntax. Реализована полная подсветка синтаксиса ключевых слов в файлах Yacc/Bison;<br />
Обновление файлов подсветки синтаксиса:<br />
lua.<br />
Прочее</p>
<p>Обновление скинов:<br />
sand256;<br />
xoria256.<br />
Добавлена возможность указать каталог для хранения пользовательских настроек (по умолчанию: XDG-стандарт);<br />
Несколько обновлений для подсветки файлов в filehighlight.ini<br />
А также множество багфиксов.</p>
<p>Данный релиз будет базовым для новой стабильной ветки: 4.8.1.x</p>
<p>Ну и собственно PKGBUILD:</p>
<pre class="code">

# AKulikov aka akm74 

pkgname=mc-latest
pkgver=20111215
pkgrel=1
pkgdesc="GNU Midnight Commander is a s-lang based file manager"
url="http://midnight-commander.org/"
arch=('i686' 'x86_64')
license=('GPL')
depends=('glib2' 'slang' 'perl')
makedepends=('git' 'pkgconfig' 'automake' 'autoconf' 'cvs')
conflicts=('mc' 'mc-cvs' 'mc-fork-svn' 'mc-mp' 'mc-slavz' 'mc-suse')
provides=('mc')

_gitroot="git://midnight-commander.org/git/mc.git"
_gitname="mc"

build() {
    cd ${srcdir}

    msg "Connecting to the git repository..."
    if [ -d ${srcdir}/${_gitname} ]; then
        cd ${_gitname}
        git pull origin
    else
        git clone --depth 1 ${_gitroot}
    fi
    msg "Checkout GIT done or server timeout"

    rm -rf ${srcdir}/${_gitname}-build
    cp -r  ${srcdir}/${_gitname} ${srcdir}/${_gitname}-build
    cd ${srcdir}/${_gitname}-build

    ./autogen.sh

    export MCREVISION="$(git describe --tags)"

    msg "Configuring..."
    ./configure                     \
        --prefix=/usr               \
        --sysconfdir=/etc           \
        --libexecdir=/usr/lib       \
        --enable-background         \
        --enable-network            \
        --enable-netcode            \
        --enable-charset            \
        --enable-nls                \
        --with-vfs                  \
        --with-edit                 \
        --with-screen=slang         \
        --without-x                 \
        --without-samba             \
        --without-gpm-mouse         \
        --without-gnome             \
        --without-debug             \
        --without-included-gettext  \
        --disable-dependency-tracking

    msg "Start make..."
    make || return 1
    make DESTDIR=${pkgdir} install || return 1
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/243-%d0%bf%d0%b0%d0%ba%d0%b5%d1%82%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%bd%d0%b8%d0%b5-mc-4-8-1-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d0%be-git.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: iptables.. iptables&#8230;</title>
		<link>http://akulikov.org.ua/archevod/231-linux-iptables-iptables.htm</link>
		<comments>http://akulikov.org.ua/archevod/231-linux-iptables-iptables.htm#comments</comments>
		<pubDate>Tue, 13 Dec 2011 11:31:48 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Bash-скриптинг]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Настройка системы]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[netfilter]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[настройки]]></category>
		<category><![CDATA[скрипт]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=231</guid>
		<description><![CDATA[Очередной скрипт, до ума будет доводиться ещё не один раз. Суть в том, что бы в одном скрипте прописывать все правила, давая им описания. После запуска скрипта, делается бэкап старых правил, файл сохраняется в указанную папку. Таким образом, мы получаем новые правила + забэкапленные старые. Вынесены переменные, для указания wifi и lan устройства. На будущее, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/firewall.png"><img class="alignleft size-thumbnail wp-image-234" title="firewall" src="http://akulikov.org.ua/wp-content/uploads/2011/12/firewall-150x150.png" alt="" width="150" height="150" /></a>Очередной скрипт, до ума будет доводиться ещё не один раз. Суть в том, что бы в одном скрипте прописывать все правила, давая им описания. После запуска скрипта, делается бэкап старых правил, файл сохраняется в указанную папку. Таким образом, мы получаем новые правила + забэкапленные старые.<br />
Вынесены переменные, для указания wifi и lan устройства. На будущее, планируется полный пересмотр скрипта, а пока что:<span id="more-231"></span><br />
<br style='clear:both;' /></p>
<pre class="code">#!/bin/bash
#**********************************************************#
#                                                          #
# Copyright AKulikov.org.ua 2011-*                         #
# Author: Angel Kulikov                                    #
# License: GPLv2                                           #
#                                                          #
# Скрипт автоматического добавления правил для iptables, с #
# предбэкапом старых.                                      #
#                                                          #
#**********************************************************#
# Для единоразового получения прав:
#--------------------------------------------------
sudo echo
#--------------------------------------------------
IPTABLES='sudo iptables'
FILE="~/iptables/iptables.$(date +%s)"
cnt=0
cnt=`echo $(($cnt+1)) `

LAN='lan0'
WLAN='wlan0'

SAVE_IPTABLES="sudo iptables-save &gt; $(echo $FILE)"
echo "   .------------------------------------.   "
echo "..::         Настройка IPTABLES         ::.."
echo "--------------------------------------------"
echo "# $cnt. Сохраняем в $(echo $FILE)"
eval "$SAVE_IPTABLES"

# удаляем все имеющиеся правила
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Удаляем все имеющиеся правила"
$IPTABLES -F
$IPTABLES -X

# Создаём цепочки по группам пакетов:
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Создаём цепочки по группам пакетов:"
$IPTABLES -N allowed
$IPTABLES -N bad
$IPTABLES -N icmp_packets
$IPTABLES -N udp_packets
$IPTABLES -N tcp_packets

# Разделяем пакеты по типам:
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Разделяем пакеты по типам:"
echo "#  ::TCP::"
$IPTABLES -A INPUT -p tcp -j tcp_packets
$IPTABLES -A OUTPUT -p tcp -j tcp_packets
$IPTABLES -A FORWARD -p tcp -j tcp_packets
echo "#  ::UDP::"
$IPTABLES -A INPUT -p udp -j udp_packets
$IPTABLES -A OUTPUT -p udp -j udp_packets
$IPTABLES -A FORWARD -p udp -j udp_packets
echo "#  ::ICMP::"
$IPTABLES -A INPUT -p icmp -j icmp_packets
$IPTABLES -A OUTPUT -p icmp -j icmp_packets
$IPTABLES -A FORWARD -p icmp -j icmp_packets

# Для wifi по hostapd разрешаем всё:
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Для wifi по hostapd разрешаем всё:"
$IPTABLES -A INPUT -s 10.42.0.0/24 -i $WLAN -j ACCEPT
$IPTABLES -A OUTPUT -s 10.42.0.0/24 -o $WLAN -j ACCEPT
$IPTABLES -A FORWARD -s 10.42.0.0/24 -i $WLAN -j ACCEPT
$IPTABLES -A FORWARD -s 10.42.0.0/24 -o $WLAN -j ACCEPT

# Пишем свои правила
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Пишем свои правила"

echo "#  ::Правила начальных разрешений::"
$IPTABLES -A icmp_packets -j ACCEPT
$IPTABLES -A udp_packets -j ACCEPT
$IPTABLES -A tcp_packets -j ACCEPT
$IPTABLES -A allowed -j ACCEPT
$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -p icmp -m icmp --icmp-type 12 -j ACCEPT

echo "#  ::Правила начальных запретов::"
$IPTABLES -A bad -j DROP
$IPTABLES -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
$IPTABLES -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
$IPTABLES -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$IPTABLES -A INPUT -p tcp -m connlimit --connlimit-above 10 -j DROP
$IPTABLES -A INPUT -p udp -m connlimit --connlimit-above 10 -j DROP 

#Для icmp:
echo "#  ::Правила для icmp::"
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m limit --limit 30/min --limit-burst 8 -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j DROP
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -m recent --name ping_limiter --set

# Ограничиваем новые соединения:
echo "#  ::Ограничиваем новые соединения::"
$IPTABLES -N SECURITY
$IPTABLES -A SECURITY -p tcp --syn -m limit --limit 5/s -j RETURN
$IPTABLES -A SECURITY -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 5/s -j RETURN
$IPTABLES -A SECURITY -p udp -m limit --limit 5/s -j RETURN
$IPTABLES -A SECURITY -p icmp -m limit --limit 5/s -j RETURN
$IPTABLES -A SECURITY -j DROP

#  Обрабатываем главную цепочку:
echo "#  ::Обрабатываем главную цепочку::"
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i lo -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -i $LAN -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -i $WLAN -m state --state NEW -j SECURITY
$IPTABLES -A INPUT -j DROP

# Пишем свои правила
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Вывод текущих настроек:"
echo "#-------------------------------------------#"
sudo iptables-save | grep '-' | grep -iv ':' | grep -iv '# ' | sed 's/-A/# -A/'
echo "#-------------------------------------------#"

# Сохраняем новые настройки:
cnt=`echo $(($cnt+1)) `
echo "# $cnt. Сохраняем новые настройки:"
sudo rc.d save iptables | sed 's/:: /#  :: /' | sed 's/\[BUSY\]//' | sed 's/\[DONE\]/Сохранение выполнено./' | sed 's/Saving IP Tables//' | sed 's/        //'
# Удаление двух последних строк sed 'N;$!P;$!D;$d'</pre>
<p style="text-align: right;"><strong>С ув. Ангел Куликов</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/231-linux-iptables-iptables.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: Скрипт автоматического выключения компьютера, по достижению определённого заряда батареи</title>
		<link>http://akulikov.org.ua/archevod/227-linux-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b3%d0%be-%d0%b2%d1%8b%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f.htm</link>
		<comments>http://akulikov.org.ua/archevod/227-linux-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b3%d0%be-%d0%b2%d1%8b%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f.htm#comments</comments>
		<pubDate>Tue, 13 Dec 2011 11:17:07 +0000</pubDate>
		<dc:creator>Ангел Куликов</dc:creator>
				<category><![CDATA[*nix]]></category>
		<category><![CDATA[Archевод]]></category>
		<category><![CDATA[Bash-скриптинг]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[down]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[выключение]]></category>
		<category><![CDATA[ноутбук]]></category>
		<category><![CDATA[скрипт]]></category>

		<guid isPermaLink="false">http://akulikov.org.ua/?p=227</guid>
		<description><![CDATA[Многословие здесь наверно излишне. Друг попросил помощи со скриптом. Мы его дружно &#171;откромсали&#187;, подрихтовали, оттестировали.. Проверку он прошёл успешно. Так что, кому интересно, вот он: #!/bin/bash #**********************************************************# # # # Copyright AKulikov.org.ua 2011-* # # Author: Angel Kulikov # # License: GPLv2 # # # # Скрипт автоматического выключения компьютера, по дости- # # жению [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://akulikov.org.ua/wp-content/uploads/2011/12/ca949dda173af622746634723fdcf950.jpg"><img class="alignleft size-thumbnail wp-image-228" style="border: 1px #a2a2a2 solid;" title="ca949dda173af622746634723fdcf950" src="http://akulikov.org.ua/wp-content/uploads/2011/12/ca949dda173af622746634723fdcf950-150x150.jpg" alt="" width="150" height="150" /></a>Многословие здесь наверно излишне.</p>
<p>Друг попросил помощи со скриптом. Мы его дружно &#171;откромсали&#187;, подрихтовали, оттестировали.. Проверку он прошёл успешно. Так что, кому интересно, вот он:<span id="more-227"></span><br />
<br style='clear:both' /></p>
<pre class="code">
#!/bin/bash
#**********************************************************#
#                                                          #
# Copyright AKulikov.org.ua 2011-*                         #
# Author: Angel Kulikov                                    #
# License: GPLv2                                           #
#                                                          #
# Скрипт автоматического выключения компьютера, по дости-  #
# жению определённого количества процентов заряда батареи. #
#                                                          #
# Script to automatic turn off computer, when achieve      #
# a certain percentage of the battery.                     #
#                                                          #
#**********************************************************#

LIMIT=20 # shutdown when less than 20% power
BATPWR=100

while [ $LIMIT -le $BATPWR ]; do
     BATPWR=$(acpi -b | cut -d ' ' -f 4 | sed 's/%,//')
      # wait 30 seconds to next battery check
     sleep 30
done

if [ $BATPWR -le $LIMIT ]; then
     shutdown -h now
fi

exit 0
</pre>
<p style="text-align: right;"><strong>С ув. Ангел Куликов</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://akulikov.org.ua/archevod/227-linux-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b3%d0%be-%d0%b2%d1%8b%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

