<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5859890337560558536</id><updated>2024-09-01T14:22:49.262-07:00</updated><category term="coding"/><category term="configuration"/><category term="net"/><category term="bash"/><category term="terminal"/><title type='text'>*nix и программирование.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5859890337560558536.post-911126927248457770</id><published>2011-02-26T03:24:00.000-08:00</published><updated>2011-02-26T09:58:54.743-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="coding"/><category scheme="http://www.blogger.com/atom/ns#" term="net"/><title type='text'>Сокеты. Пример создания простого сетевого приложения (клиента и сервера) с использованием TCP.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Почти все приложения которые взаимодействуют с сетью используют библиотеку, поддерживаемую операционной системой, - &lt;b&gt;сокеты&lt;/b&gt; (&lt;b&gt;sockets&lt;/b&gt;). Ее реализации бывают разными, но в целом принцип работы везде одинаков.&lt;br /&gt;
&lt;div&gt;Далее в качестве примера рассмотрим сервер получения времени и клиент к нему. Скорее всего, вам уже известно, что такое клиент и сервер, но вкратце объясню. Грубо говоря, &amp;nbsp;клиент - сетевое приложение которое обращается к серверу с каким то запросом. А сервер - сетевое приложение, которое обрабатывает запросы от клиентов. Зачастую, сервер - приложение которое запущено как демон, то есть после загрузки в память операционной системы, не завершается, а ждет какого-то события и потом его&amp;nbsp;обрабатывает. Так же следует знать, что обычно один клиент обращается всего лишь к одному серверу, но сервер, может одновременно обрабатывать запросы нескольких клиентов, хотя в этой схеме бывают и исключения (&lt;i&gt;например, adc-клиент&lt;/i&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Сервер времени и даты использует протокол &lt;b&gt;TCP&lt;/b&gt;. Вот код такого простого сервера:&lt;/div&gt;&lt;pre&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;sys/socket.h&amp;gt; // собственно, сокеты&lt;/div&gt;&lt;div&gt;#include &amp;lt;string.h&amp;gt; // отсюда мы берем memset()&lt;/div&gt;&lt;div&gt;#include &amp;lt;resolv.h&amp;gt; // тут объявлены структуры&amp;nbsp;sockaddr&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt; // snprintf()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;#define BUFSIZE 128 // максимальный размер буфера под выводимую строку&lt;/div&gt;&lt;div&gt;#define LISTENQ 256 // максимальный размер очереди клиентов&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;#define bzero(x,y) memset((x),0,(y)) // макрос позволяющий пользоваться bzero вместо memset&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;{ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int listenfd, connfd; // дескрипторы сокетов&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct sockaddr_in servaddr; // структура, которой задается адрес сокета&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char buff[BUFSIZE]; // массив чаров. Туда будет помещаться строка, которую сервер отдаст клиенту&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;time_t ticks; // сюда будет помещено время в секундах&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;listenfd = socket(AF_INET, SOCK_STREAM, 0); // просим операционную систему создать для нас сокет протокола IPv4 (AF_INET) / TCP (SOCK_STREAM). Эта функция вернет дескриптор сокета.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;bzero(&amp;amp;servaddr, sizeof(servaddr)); // зануляем память структуры, это необходимо. Использовать bzero вместо memset сложилось исторически, еще с появления сокетов на BSD. Хотя разницы нет.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;servaddr.sin_family = AF_INET; // структура для IPv4&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;servaddr.sin_addr.s_addr = htonl(INADDR_ANY); // задаем адрес&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;servaddr.sin_port = htons(1313); // задаем порт. Стандартно для сервера времени - 13, но его от обычного пользователя мы не сможем использовать.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;bind(listenfd, (struct sockaddr*)&amp;amp;servaddr, sizeof(servaddr)); // &quot;привязываем&quot; сокет к адресу и порту&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;listen(listenfd, LISTENQ); // говорим операционной системе ожидать подключений к нашему сокету&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(;;) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;connfd = accept(listenfd, (struct sockaddr*) NULL, NULL); // когда клиент подключается к серверу, то операционная система создаст сокет. Собственно этой функцией и задаем подключение клиентов, она возвращает дескриптор на новый сокет клиента&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ticks = time(NULL); // получаем текущее время в секундах&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;snprintf(buff, sizeof(buff), &quot;%.24s\er\en\n&quot;, ctime(&amp;amp;ticks)); // переводим секунды в удобный для восприятия формат&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;send(connfd, buff, strlen(buff), 0); // отправляем данные (на самом деле ничего не отправляется тут)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;close(connfd); // закрываем соединение&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;Предупреждаю, что возвращаемые значения функций там не обрабатываются, а они возвращают 0 или номер ошибки. Поэтому, если у вас эта программа не будет работать, то скорее всего в работе какой-то функции возникает ошибка. Хорошим тоном, будет создать для всех функций обвертки и проверять в них возвращаемые значения, если функция вернет не ноль, то выводить ошибку и завершать программу.&lt;/div&gt;&lt;div&gt;Еще хочу сказать про функцию &lt;b&gt;send&lt;/b&gt;, казалось бы, по названию можно подумать что она что-то там куда-то отправляет, но это не так. На самом деле она всего лишь помещает данные в буфер &lt;b&gt;TCP&lt;/b&gt; (этот буфер уникальный для каждого порта) операционной системы, а уже она будет что-то там пытаться отправить. То есть, ничто не может гарантировать успешную отправку данных.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ну что, компилируем (обратите внимание, никакие динамические библиотеки подключать не надо), запускаем, программа &quot;висит&quot;. Хорошо. Пробуем подключиться с помощью &lt;b&gt;telnet&lt;/b&gt;:&lt;/div&gt;&lt;pre&gt;&lt;div&gt;$ telnet 127.0.0.1 1313&lt;/div&gt;&lt;div&gt;&lt;div&gt;Trying 127.0.0.1...&lt;/div&gt;&lt;div&gt;Connected to 127.0.0.1.&lt;/div&gt;&lt;div&gt;Escape character is &#39;^]&#39;.&lt;/div&gt;&lt;div&gt;Sat Feb 26 15:46:12 2011&lt;/div&gt;&lt;div&gt;Connection closed by foreign host.&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;Все работает!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Далее напишем клиент:&lt;/div&gt;&lt;pre&gt;&lt;div&gt;&lt;div&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;string.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;resolv.h&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;#define BUFSIZE 128&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;#define bzero(x,y) memset((x),0,(y))&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt;&lt;div&gt;{ &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int connfd;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;struct sockaddr_in servaddr;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char buff[BUFSIZE];&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char servIP[] = &quot;127.0.0.1&quot;; // задаем IP адрес сервера&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;connfd = socket(AF_INET, SOCK_STREAM, 0);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;bzero(&amp;amp;servaddr, sizeof(servaddr));&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;servaddr.sin_family = AF_INET;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;inet_pton(AF_INET, servIP, &amp;amp;servaddr.sin_addr); // заполняем поле адреса (32 бита) с помощью&amp;nbsp;функции inet_pton&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;servaddr.sin_port = htons(1313);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;connect(connfd, (struct sockaddr*)&amp;amp;servaddr, sizeof(servaddr)); // подключаемся к серверу&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;recv(connfd, buff, BUFSIZE, 0); // получаем данные от сервера (вернее получаем данные из буфера TCP)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;printf(&quot;%s&quot;, buff);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;close(connfd);&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;Здесь, так же, обработки ошибок нет. Я не стал их делать, чтобы не загромождать код, ведь, это всего лишь примеры.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Кстати, IP адрес и порт которые помещаются в&amp;nbsp;&lt;b&gt;struct sockaddr_in&lt;/b&gt; должны иметь сетевой порядок следования байтов. Для этого пользуются специальными функциями преобразования:&lt;/div&gt;&lt;div&gt;&lt;b&gt;htons&lt;/b&gt; (&lt;i&gt;host TO net short&lt;/i&gt;) - для преобразования порта.&lt;/div&gt;&lt;div&gt;&lt;b&gt;htonl&lt;/b&gt; (&lt;i&gt;host TO net long&lt;/i&gt;) - для преобразования адресов.&lt;/div&gt;&lt;div&gt;Функция &lt;b&gt;inet_pton&lt;/b&gt; преобразует массив символов (&lt;i&gt;строку&lt;/i&gt;) в адрес (&lt;i&gt;32 бита для IPv4&lt;/i&gt;) с сетевым порядком.&lt;/div&gt;&lt;div&gt;В функциях &lt;b&gt;connect&lt;/b&gt;, &lt;b&gt;bind&lt;/b&gt; и &lt;b&gt;accept&lt;/b&gt; делается преобразование типа к &lt;b&gt;struct sockaddr&lt;/b&gt; для их совместимости с различными протоколами &lt;b&gt;IP&lt;/b&gt;. Подробно об этом не буду говорить, скажу лишь, то, что это преобразование нужно делать.&lt;/div&gt;&lt;div&gt;Возможно, вы заметили что в коде клиента нет функции &lt;b&gt;bind&lt;/b&gt;. Но ведь клиенту тоже нужен порт, с которого он будет отправлять данные? Дело в том, что &lt;b&gt;bind&lt;/b&gt; можно и не делать, если так, то операционная система назначит порт для клиента автоматически.&lt;br /&gt;
Кстати, полное описание, прототипы, возвращаемые и значения всех функций можно найти в &lt;b&gt;man&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Это были всего лишь основы. Если вам интересно сетевое программирование, то очень советую &amp;nbsp;почитать книгу&amp;nbsp;&lt;i&gt;UNIX Network Programming (рус. UNIX. Разработка сетевых приложений),&amp;nbsp;&lt;/i&gt;автор W. R. Stevens. В ней все очень подробно расписывается, как про сокеты так и про устройство основных протоколов интернета.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/911126927248457770/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://easy-unix.blogspot.com/2011/02/tcp.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/911126927248457770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/911126927248457770'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/2011/02/tcp.html' title='Сокеты. Пример создания простого сетевого приложения (клиента и сервера) с использованием TCP.'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5859890337560558536.post-6202948108772703069</id><published>2011-02-16T04:51:00.000-08:00</published><updated>2011-02-17T10:52:02.034-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="coding"/><title type='text'>[bash] Выбор случайного файла из директории.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Как-то раз, мне понадобился скрипт который бы сам выбирал рандомные файлы из директории. Собственно, я написал его и сейчас выложу здесь.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
На для начала разберемся как будем это делать.&amp;nbsp;Итак, на входе подается список директорий, в которых лежат нужные нам файлы. Собираем файлы и пихаем в массив. Перемешиваем все файлы в массиве (тогда при последовательном обходе они станут случайными). И все. Очень просто. На самом деле мой скрипт немного сложнее, но весь алгоритм такой.&lt;br /&gt;
&lt;br /&gt;
Вот код:&lt;br /&gt;
&lt;div&gt;&lt;pre&gt;#!/bin/bash

onSIGINT() { # создаем функцию которая будет завершать вечный цикл
&amp;nbsp;&amp;nbsp; &amp;nbsp;echo &quot;SIGINT received, bye bye!&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;exit 0
}
trap &#39;onSIGINT&#39; INT # трап, вызывающий эту функцию на SIGINT

regexType=&quot;posix-egrep&quot; # переменная указывающая на то, какие регулярные выражения будет использовать утилита find
regex=&quot;.*\.(mp3|flac)$&quot; # сам шаблон регулярного выражения
depth=&quot;u&quot; # глубина поиска. u [unlimited] - не ограничена, может быть числом

if [[ $# -eq 0 ]]; then # проверка. Если не получили аргументов, то выводим хелп и выходим
&amp;nbsp;&amp;nbsp; &amp;nbsp;echo &quot;Usage: $0 [-d DEPTH] DIR1 [DIR2 [DIR3 [...]]]&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;exit 0
fi

index=0
for i in `seq 1 $#`; do # цикл обработки аргументов командной строки
&amp;nbsp;&amp;nbsp; &amp;nbsp;arg=${!i}
&amp;nbsp;&amp;nbsp; &amp;nbsp;if [[ $bNextDepth -eq 1 ]]; then 
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bNextDepth=0
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if [[ $arg =~ ^[0-9]+$ ]]; then # по сути проверка - число ли depth или нет
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;depth=$arg
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo &quot;Missing value for -d.&quot;  # ошибка. Юзер написал -d но не написал значение для него
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exit 1
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fi
&amp;nbsp;&amp;nbsp; &amp;nbsp;fi
&amp;nbsp;&amp;nbsp; &amp;nbsp;if [ &quot;$arg&quot; = &quot;-d&quot; ]; then
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bNextDepth=1
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if [[ $# -eq $i ]]; then
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo &quot;Missing value for -d.&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;exit 1
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fi
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;continue
&amp;nbsp;&amp;nbsp; &amp;nbsp;fi
&amp;nbsp;&amp;nbsp; &amp;nbsp;if [ ! -d &quot;$arg&quot; ]; then # проверяем, действительно ли нам подали директорию?
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;echo &quot;Directory $arg does not exists.&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;else
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dirList[$index]=$arg # сохраняем ее в массив
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let &quot;index++&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;fi
done # конец обработки аргументов командной строки

if [[ ${#dirList[@]} -eq 0 ]]; then # если юзер глупый и не ввел не одну правильную директорию выходим, сообщая ошибку
&amp;nbsp;&amp;nbsp; &amp;nbsp;echo &quot;No one correct directory has been found.&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;exit 2
fi

index=0
if [ &quot;$depth&quot; != &quot;u&quot; ]; then # если у нас в depth число
&amp;nbsp;&amp;nbsp; &amp;nbsp;depthArg=&quot;-maxdepth $depth&quot;
fi

while read line
do
&amp;nbsp;&amp;nbsp; &amp;nbsp;filesArray[$index]=&quot;$line&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;let &quot;index++&quot;
done &amp;lt; &amp;lt;(find &quot;${dirList[@]}&quot; $depthArg -regextype &quot;$regexType&quot; -iregex &quot;$regex&quot; -type f) # когда я впервые увидел эту строку в одном примере, желание писать скрипты на баше у меня почти отпало. Спасибо людям на канале #gentoo-ru которые мне объяснили ее смысл. А про find я расскажу ниже.

filesNum=${#filesArray[@]}
echo &quot;Found $filesNum files.&quot;

let &quot;filesNum--&quot; # уменьшаем на 1. Потому что for в баше (в отличии от Си) выберет последний элемент тоже.
while [ true ]; do
&amp;nbsp;&amp;nbsp; &amp;nbsp;for i in `seq 0 &quot;$filesNum&quot;`; do # цикл который перемешает массив
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let &quot;rndPos = RANDOM % $filesNum&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp=&quot;${filesArray[$i]}&quot; # в этих 3 строках меняем местами элементы
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filesArray[$i]=&quot;${filesArray[$rndPos]}&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filesArray[$rndPos]=&quot;$temp&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;done
&amp;nbsp;&amp;nbsp; &amp;nbsp;for i in `seq 0 &quot;$filesNum&quot;`; do # собственно, цикл запускающий нашу программу с нужным аргументом
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/usr/bin/mplayer &quot;${filesArray[$i]}&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp;done
done

exit 0 # все&lt;/pre&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;find &quot;${dirList[@]}&quot; $depthArg -regextype &quot;$regexType&quot; -iregex &quot;$regex&quot; -type f&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Здесь &lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;${dirList[@]}&lt;/span&gt;&lt;/b&gt; - массив корректных директорий который мы составили ранее.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;$depthArg&lt;/span&gt;&lt;/b&gt; (&lt;i&gt;без кавычек&lt;/i&gt;) - два слова, первое - аргумент (&lt;b&gt;&lt;i&gt;-maxdepth&lt;/i&gt;&lt;/b&gt;), второе - его значение.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;$regexType&lt;/b&gt;&lt;/span&gt; - тип регулярного выражения.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;$regex&lt;/span&gt;&lt;/b&gt; - шаблон регулярного выражения по которому мы выбираем файлы из директории.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;-type f&lt;/b&gt;&lt;/span&gt; - указывает &lt;b&gt;find&lt;/b&gt;&#39;у то, что нас интересуют только реальные файлы.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;Как вы уже могли заметить, этот скрипт подбирает рандомные файлы mp3 или flac и запускает &lt;b&gt;mplayer&lt;/b&gt; от них. Реализовано все так, что, пока все файлы не пройдут, они повторятся не будут (&lt;i&gt;по сути, мы просто воспроизводим  все  по порядку  из массива &lt;b&gt;filesArray&lt;/b&gt;, но перед началом вложенного цикла перемешиваем массив случайным образом&lt;/i&gt;). &lt;br /&gt;
&lt;b&gt;-maxdepth N&lt;/b&gt; это параметр указывающий &lt;b&gt;find&lt;/b&gt;&#39;у, сколько раз надо проходить во вложенные директории (&lt;i&gt;1 - ни разу не переходить&lt;/i&gt;).&lt;br /&gt;
Кстати, вместо блока кода &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;for i in `seq 0 &quot;$filesNum&quot;`; do
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let &quot;rndPos = RANDOM % $filesNum&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;temp=&quot;${filesArray[$i]}&quot; 
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filesArray[$i]=&quot;${filesArray[$rndPos]}&quot;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;filesArray[$rndPos]=&quot;$temp&quot;
done&lt;/span&gt;&lt;/pre&gt;можно использовать утилиту &lt;b&gt;shuf&lt;/b&gt;. То есть весь этот блок кода заменить на строку:&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;shuf -e ${filesArray[@]}&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Проблема в том, что &lt;b&gt;shuf&lt;/b&gt; не входит в &lt;b&gt;POSIX&lt;/b&gt;.&lt;br /&gt;
Еще можно попробовать делать это через &lt;b&gt;sort -R&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Вот и все.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/6202948108772703069/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://easy-unix.blogspot.com/2011/02/bash.html#comment-form' title='Комментарии: 16'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/6202948108772703069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/6202948108772703069'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/2011/02/bash.html' title='[bash] Выбор случайного файла из директории.'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5859890337560558536.post-2795081866417387970</id><published>2011-02-12T11:57:00.000-08:00</published><updated>2011-03-12T09:20:35.519-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="terminal"/><title type='text'>Yeahconsole.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Вы можете работать в unix-like операционной системе без консоли? Например, я не люблю работать с файловой системой, некоторыми сетевыми протоколами, и так далее через оболчки с GUI. Возможности консоли почти безграничны, есть даже консольный графический редактор ImageMagick, о котором, возможно, я когда-нибудь расскажу. Все это я говорю к тому, что зачастую не очень удобно переключаться между каким-либо активным окном (например, браузером) и часто используемой консолью.&lt;br /&gt;
Поэтому представляю вашему вниманию &lt;b&gt;yeahconsole&lt;/b&gt;. Что это? Собственно, довольно удобная выезжающая консоль. Что-то подобное вы скорее всего видели в играх, например, в Quake.&lt;br /&gt;
Выглядит это так:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yAj9j6SbsykeC57kUs9I7QNmScCdDMCpPIexggOC1_fxgsfMWfhDuhBusNQVJiHXRYpexILc-U6jB4FrkyQsZ_O0JMC3Tk75mqbnQyrYR9BZDbv69q37Vt1G6shAhTmQuyhJcVtc-0NM/s1600/blogspot_yeahconsole.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yAj9j6SbsykeC57kUs9I7QNmScCdDMCpPIexggOC1_fxgsfMWfhDuhBusNQVJiHXRYpexILc-U6jB4FrkyQsZ_O0JMC3Tk75mqbnQyrYR9BZDbv69q37Vt1G6shAhTmQuyhJcVtc-0NM/s200/blogspot_yeahconsole.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Достоинства:&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Удобное использование по хоткею&lt;/li&gt;
&lt;li&gt;Самая легковесная и, следовательно &lt;u&gt;быстрая&lt;/u&gt;, по сравнению с аналогами (если не считать скрипты с &lt;b&gt;wmctr&lt;/b&gt;). На мой взгляд, это самое большое преимущество.&lt;/li&gt;
&lt;li&gt;Сама по сути не является эмулятором терминала, а использует существующие (&lt;b&gt;xterm, &lt;/b&gt;и мой любимый&amp;nbsp;&lt;b&gt;urxvt&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;Вылезает поверх всех окон. Сразу становится зафокусированной window менеджером.&lt;/li&gt;
&lt;li&gt;Настройка очень проста.&lt;/li&gt;
&lt;/ul&gt;Теперь про настройку. Она осуществляется в файле &lt;b&gt;~/.Xdefaults.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;Конфиги записываются построчно так:&amp;nbsp;&lt;b&gt;yeahconsole*параметр: значение&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Как всегда, весь набор можно посмотреть в &lt;b&gt;man yeahconsole.&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Некоторые параметры:&lt;/div&gt;&lt;pre&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! клавиша включения&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;yeahconsole*toggleKey:&amp;nbsp;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;b&gt;None+F1&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! включить полноэкранный режим у активной&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*keyFull: Alt+F1 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! клавиша увеличения высоты&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*keyBigger: Control+KP_Add &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! уменьшения высоты&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*keySmaller: Control+KP_Subtract &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! задержка появления&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*aniDelay: 30 &amp;nbsp; &lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! перезагружать терминал&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*restart: 0 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! отступ от левого края&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*xOffset: 0 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! ширина. По дефолту - ширина экрана.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*screenWidth: 650 &amp;nbsp; &lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! высота в строках&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*consoleHeight: 15 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! ширина полоски изменения размера&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*handleWidth: 1 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! ее цвет&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*handleColor: rgb:8/8/7 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! ее цвет без фокуса&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*handleColor.unfocus: rgb:4/4/38 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! цвет фона&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*background: black &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! цвет текста&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*foreground: grey70 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! шрифт&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*font: -*-terminus-medium-*-*-*-*-*-100-100-*-*-iso10646-1 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! количество строк которые запоминает&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*savelines: 10000 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;! используемый эмулятор терминала&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;yeahconsole*term: urxvt &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;
&lt;/b&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Вот и все. Удачи в настройке.&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/2795081866417387970/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://easy-unix.blogspot.com/2011/02/yeahconsole.html#comment-form' title='Комментарии: 15'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/2795081866417387970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/2795081866417387970'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/2011/02/yeahconsole.html' title='Yeahconsole.'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0yAj9j6SbsykeC57kUs9I7QNmScCdDMCpPIexggOC1_fxgsfMWfhDuhBusNQVJiHXRYpexILc-U6jB4FrkyQsZ_O0JMC3Tk75mqbnQyrYR9BZDbv69q37Vt1G6shAhTmQuyhJcVtc-0NM/s72-c/blogspot_yeahconsole.jpg" height="72" width="72"/><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5859890337560558536.post-2585696021861041596</id><published>2011-02-12T03:53:00.000-08:00</published><updated>2011-02-17T11:04:06.773-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="net"/><title type='text'>Настройка VPN в Linux с использованием PPTP.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Всем известно, что некоторые провайдеры раздают интернет через VPN. Именно VPN, а не просто PPTP мотивируется, наверное, наличием шифрования, при такой же легкой настройке. Но настройка легка только в Windows.&lt;br /&gt;
&lt;br /&gt;
Собственно, первая проблема с которой я когда-то столкнулся после установки линукса - подключение по VPN.&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; Гугл выдавал множ&lt;/span&gt;ество вариантов, но принцип был в основном одним и тем же, причем, успешно настроить этот богомерзкий VPN мне так и не удавалось.&lt;br /&gt;
&lt;br /&gt;
Решение все-таки было найдено. Как оказалось со стороны конфигов ppp все было правильно, не правильными были роуты (&lt;i&gt;route, маршруты&lt;/i&gt;). Дело в том, что ppp требует ставить себе default route (&lt;i&gt;однако, на debian&#39;е у ppp есть конфиг &lt;/i&gt;&lt;b&gt;replacedefaultroute&lt;/b&gt;&lt;i&gt;. Как раз 70% того что выдает гугл, содержит эту опцию, следовательно конфиг работает только под Debian-Ubuntu-... &lt;/i&gt;). Решение было очевидно - прописывать все необходимые роуты при старте системы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь расскажу всю настройку VPN в целом. Нам потребуются пакеты:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;ppp&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pptp&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;А так же необходима поддержка &lt;b&gt;ppp&lt;/b&gt; в ядре. Если вы не собирали ядро сами, то скорее всего &lt;b&gt;ppp&lt;/b&gt; в ядре у вас есть.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;В файл&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;/etc/ppp/options.pptp&lt;/b&gt; пишем (&lt;i&gt;под рутом&lt;/i&gt;):&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-size: 14px; line-height: 17px;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;noauth &amp;nbsp; &amp;nbsp;&lt;/b&gt;# не авторизовываться пока не будет получен gateway&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;refuse-eap &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/b&gt;# Не использовать проверки&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;refuse-pap &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/b&gt;## Возможно, что на стороне провайдера стоит&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;refuse-chap &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/b&gt;## обязательным проверка по некоторым из этих&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;refuse-mschap &amp;nbsp; &amp;nbsp;&lt;/b&gt;## алгоритмов&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;nobsdcomp &amp;nbsp; &amp;nbsp;&lt;/b&gt;# в этой и следующей строке отключаем компрессию&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;nodeflate&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;persist &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;#&amp;nbsp;восстановление связи при обрыве&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;maxfail 10 &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;#&amp;nbsp;десять попыток восстановления&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;defaultroute &amp;nbsp; &lt;/b&gt;# подменяем дефолтный роут (&lt;i&gt;о проблемах с этим я писал выше&lt;/i&gt;)&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;#replacedefaultroute &amp;nbsp; &amp;nbsp;&lt;/b&gt;# раскоментить если у вас Debian-like дистрибутив (&lt;i&gt;например, Ubuntu&lt;/i&gt;)&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Helvetica, Arial, sans-serif; font-size: x-small;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Далее нам потребуется еще один файл, в этом файле описываются все особенности касательно провайдера. Создаем&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;/etc/ppp/peers/название_соединения &lt;/b&gt;(&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;i&gt;тоже под рутом&lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;):&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;pty &quot;pptp Адрес_VPN_провайдера --nolaunchpppd&quot;&lt;/b&gt; &amp;nbsp; &amp;nbsp;# собственно адрес VPN-сервера&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;connect /bin/true &lt;/b&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;name Ваш_Юзернейм &amp;nbsp;&lt;/b&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;password &quot;Ваш_Пароль&quot;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;remotename название_соединения&lt;/b&gt; &amp;nbsp; #&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;имя данного файла&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;b&gt;file /etc/ppp/options.pptp&lt;/b&gt; &amp;nbsp; # указываем путь до конфига который создали выше&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; line-height: 17px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Далее, если у нас не Debian-like дистрибутив (&lt;i&gt;у нас закоменчена опция &lt;b&gt;replacedefaultroute&lt;/b&gt;&lt;/i&gt;) следует прописать роуты локальной сети (&lt;i&gt;об этом я говорил выше)&lt;/i&gt;, обычно их можно найти на сайте провайдера.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Напомню что список текущих роутов получается командой &lt;b&gt;route -n&lt;/b&gt;. Прописываются и удаляются роуты через команду &lt;b&gt;route&lt;/b&gt;. Более подробно написано в &lt;b&gt;man route&lt;/b&gt;&amp;nbsp;(&lt;i&gt;который я очень рекомендую почитать)&lt;/i&gt;. Так же следует помнить, что прописав роуты они скинутся после перезагрузки системы. Так что, лучше создать скрипт который будет добавлять роуты и добавить его в автозагрузку (&lt;i&gt;у разных дистрибутивов автозагрузка в разных местах)&lt;/i&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Собственно, настройка закончена. VPN включается по команде &lt;b&gt;pon название_соединения&lt;/b&gt;, а выключается по команде&lt;b&gt;&amp;nbsp;poff&amp;nbsp;&lt;/b&gt;&lt;b&gt;название_соединения.&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;Приведу &lt;u&gt;альтернативный&lt;/u&gt; пример настройки всего этого под &lt;u&gt;Gentoo&lt;/u&gt;, соответственно с использованием конфигов Gentoo. Файл &lt;b&gt;/etc/conf.d/net&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;config_eth0=( &quot;айпи_локальной_сети netmask маска_локальной_сети&quot; )&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;gateways_eth0=&quot;адрес_шлюза&quot; &amp;nbsp; &amp;nbsp; &lt;/b&gt;# gateway&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;routes_eth0=(&amp;nbsp;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;# прописываем роуты локальной сети. Пример ниже:&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;-net айпи_адрес_роута netmask маска_сети_роута gw адрес_шлюза&quot;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;dns_servers_eth0=&quot;днс_сервер&quot;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;config_ppp0=( &quot;ppp&quot; )&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;link_ppp0=&quot;pty &#39;адрес_VPN_провайдера --nolaunchpppd --nobuffer&#39;&quot;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;username_ppp0=&#39;юзернейм&#39;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;password_ppp0=&#39;пароль&#39;&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;pppd_ppp0=(&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;noauth &amp;nbsp; &amp;nbsp;&lt;/b&gt;# узнаете эти строки? :3&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;refuse-eap&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;refuse-pap&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;refuse-chap&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;refuse-mschap&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;debug&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nobsdcomp&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nodeflate&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mtu 1474&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mru 1474&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;persist&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;logfile /var/log/pppd.log &amp;nbsp; &lt;/b&gt;# можно так же добавить файл для логов pppd&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;maxfail 10&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;defaultroute&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;depend_ppp0() {&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;need net.eth0&lt;/b&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;}&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;Скрипт будет запускаться при старте системы. Или это можно делать руками, как с любым скриптом в Gentoo: &amp;nbsp;&amp;nbsp;&lt;b&gt;/etc/init.d/net.ppp0 start &lt;/b&gt;(&lt;i&gt;или&lt;b&gt; restart, stop&lt;/b&gt;&lt;/i&gt;).&lt;br /&gt;
Еще я забыл сказать, что нужно создать файл &lt;b&gt;/etc/init.d/net.ppp0&lt;/b&gt;. Это делается простым копированием &lt;b&gt;net.lo&lt;/b&gt;: &amp;nbsp; &amp;nbsp;&lt;b&gt;cp /etc/init.d/net.lo /etc/init.d/net.ppp0 &lt;/b&gt;(и все из под рута).&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;Собственно все.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/2585696021861041596/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://easy-unix.blogspot.com/2011/02/vpn-linux-pptp.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/2585696021861041596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/2585696021861041596'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/2011/02/vpn-linux-pptp.html' title='Настройка VPN в Linux с использованием PPTP.'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5859890337560558536.post-681083471100873602</id><published>2011-02-11T09:29:00.000-08:00</published><updated>2011-02-11T09:33:06.732-08:00</updated><title type='text'>Проба пера.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Здравствуйте. Давно хотел создать нечто, куда можно было бы выливать весь свой бред, мысли, пожелания, удачный или печальный опыт и ... в общем просто дампы памяти из головы.&lt;br /&gt;
&lt;br /&gt;
Как можно догадаться по названию, основной тематикой моего блога будет изучение unix &lt;i&gt;(в частности *nix, т.к., например, linux - Linux Is Not UniX, что уже веет каким-то маразмом), &lt;/i&gt;а так же программирование.&lt;br /&gt;
&lt;br /&gt;
Коротко расскажу о себе: учусь на втором курсе (&lt;i&gt;на момент 2010-2011 года&lt;/i&gt;) НГУ на факультете информационных технологий. Собственно, на данный момент у нас преподаются предметы: операционные системы, сети и ООП. Возможно, об ихних лабораторных работах и пойдет речь в моем блоге, так или иначе, я бы хотел затронуть эту тему.&lt;br /&gt;
&lt;br /&gt;
Собственно сейчас сижу и думаю о чем бы написать первым делом.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://easy-unix.blogspot.com/feeds/681083471100873602/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://easy-unix.blogspot.com/2011/02/blog-post.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/681083471100873602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5859890337560558536/posts/default/681083471100873602'/><link rel='alternate' type='text/html' href='http://easy-unix.blogspot.com/2011/02/blog-post.html' title='Проба пера.'/><author><name>nitx</name><uri>http://www.blogger.com/profile/15082011419035009816</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='26' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_iWcRWprx9aMm5JF2jyfsUhmdIi7htDli07mFOMAiZlwnAwVdCKpuvPmkvMILlCw1xt4qjmvZBZxRsL890-0yfmsrJK6f7ehOtKcpvM9TUD-RxaPUkeB6fuUcYqsag/s220/12962492958203.jpg'/></author><thr:total>5</thr:total></entry></feed>