<?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>Erinome Lane &#187; shell</title>
	<atom:link href="https://tt.erinome.net/tag/shell/feed" rel="self" type="application/rss+xml" />
	<link>https://tt.erinome.net</link>
	<description>a bit of this, a bit of that...</description>
	<lastBuildDate>Mon, 23 Mar 2026 12:51:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Настройка screen в OpenWrt</title>
		<link>https://tt.erinome.net/2013/04/527</link>
		<comments>https://tt.erinome.net/2013/04/527#comments</comments>
		<pubDate>Tue, 16 Apr 2013 10:22:43 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=527</guid>
		<description><![CDATA[Утилита screen позволяет создавать виртуальные пользовательские сессии, каждая из которых может включать несколько виртуальных терминалов с возможность переключения между ними. При завершении фактической сессии (отключении от консоли) все виртуальные сессии продолжат работать. За счет этого можно легко запускать в &#8220;фоновом&#8221; &#8230; <a href="https://tt.erinome.net/2013/04/527">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Утилита <strong>screen</strong> позволяет создавать виртуальные пользовательские сессии, каждая из которых может включать несколько виртуальных терминалов с возможность переключения между ними. При завершении фактической сессии (отключении от консоли) все виртуальные сессии продолжат работать. За счет этого можно легко запускать в &#8220;фоновом&#8221; режиме программы, не имеющие встроенной поддержки работы в фоне, либо запускать и оставлять работать скрипты и приложения, ко вводу-выводу которых впоследствии будет возможность вернуться.<span id="more-527"></span></p>
<p>В <strong>OpenWrt</strong> данная утилита распространяется в форме стандартного бинарного пакета и корректно работает и без дополнительных настроек, однако есть возможность выполнить некоторые улучшения.</p>
<h3><strong>Заголовок окна screen</strong></h3>
<p>В одной из <a href="/2013/03/426">предыдущих заметок</a> рассматривалось, как настроить заголовок окна обычного терминала, чтобы в нем отображалась какая-либо значимая информация &#8211; к примеру, имя сервера и путь к текущему каталогу. Аналогичного результата можно добиться и для виртуальных терминалов <strong>screen</strong>.</p>
<p>Добавляем в файл <strong>/etc/screenrc</strong> строки:</p>
<pre class="console">termcapinfo xterm*|rxvt*|kterm*|Eterm* 'hs:ts=\E]0;:fs=\007:ds=\E]0;\007'
hardstatus string "[screen %n%?: %t%?] %h"</pre>
<p>Теперь заголовок <strong>screen</strong> будет совпадать с используемым в CentOS (Red Hat):</p>
<pre class="console">[screen 0: ash] root@OpenWrt:/path</pre>
<p>В нем отображается и номер текущего виртуального терминала, и путь к текущему каталогу. Также, к примеру, в случае неудачного переключения между терминалами в этот же заголовок будет выводиться сообщение об ошибке.</p>
<h3><strong>Исправление /var/run/utmp</strong></h3>
<p>При каждом запуске <strong>screen</strong> с системой, построенной вокруг стандартного busybox, возникает несущественная, но малоприятная ошибка:</p>
<pre class="console">/var/run/utmp: No such file or directory</pre>
<p>Несмотря на нее, <strong>screen</strong> все равно запускается и работает корректно.</p>
<p>Для решения этой проблемы необходимо активировать BUSYBOX_CONFIG_FEATURE_UTMP при пересборке прошивки. В menuconfig данная опция расположена по следующему пути: <em>Base system</em> -> <em>busybox</em> -> <em>Busybox Settings</em> -> <em>General Configuration</em> -> <em>Support utmp file</em>.</p>
<p>К сожалению, в случае использования предкомпилированных готовых прошивок корректно эту проблему решить не представляется возможным. В качестве обходной меры можно добавить в <strong>/etc/rc.local</strong> строку <strong>touch /var/run/utmp</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/04/527/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Запуск скриптов в фоновом режиме</title>
		<link>https://tt.erinome.net/2013/04/523</link>
		<comments>https://tt.erinome.net/2013/04/523#comments</comments>
		<pubDate>Sun, 14 Apr 2013 10:32:57 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=523</guid>
		<description><![CDATA[Для возможности выполнения bash-подобных скриптов в Linux в с целом и в OpenWrt-версии оболочки busybox в частности существует легкая в применении инфраструктура: необходимо лишь добавить к строке запускаемого скрипта символ &#8220;&#038;&#8220;. Но есть и менее очевидные частности. Реализация простого запуска &#8230; <a href="https://tt.erinome.net/2013/04/523">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Для возможности выполнения bash-подобных скриптов в <strong>Linux</strong> в с целом и в OpenWrt-версии оболочки <strong>busybox</strong> в частности существует легкая в применении инфраструктура: необходимо лишь добавить к строке запускаемого скрипта символ &#8220;<strong>&#038;</strong>&#8220;. Но есть и менее очевидные частности.<span id="more-523"></span></p>
<p>Реализация простого запуска некоторого скрипта <strong>/srv/tools/script.sh</strong> в фоне:</p>
<pre class="console">root@OpenWrt:~# /srv/tools/script.sh &#038;</pre>
<p>Все бы хорошо, но запущенный таким образом скрипт проработает ровно до тех пор, пока вы залогинены на консоль сервера. При отключении от сервера скрипт автоматически завершится.</p>
<p>Для запуска скрипта без связи с сессией пользователя следует использовать утилиту <strong>nohup</strong>:</p>
<pre class="console">root@OpenWrt:~# nohup /srv/tools/script.sh &#038;</pre>
<p>В этом случае запущенный скрипт останется работать даже при отключении от сервера, но весь выводимый скриптом текст будет записываться в файл <strong>nohup.log</strong>, создаваемый в текущем каталоге, о чем <strong>nohup</strong> непосредственно и информирует сообщением <em>nohup: appending output to nohup.out</em>. При этом данный файл будет создан даже в том случае, если у скрипта никогда не будет никакого вывода.</p>
<p>Чтобы <strong>nohup.log</strong> никогда не создавался, перенаправляем <strong>stdout</strong> скрипта в <strong>/dev/null</strong>:</p>
<pre class="console">nohup /srv/tools/netstat.sh >/dev/null &#038;</pre>
<p>Все, теперь лишних файлов более не создается и скрипт останется работать при отключении от консоли.</p>
<p>Интересно отметить, что при автоматическом запуске скриптов из <strong>/etc/rc.local</strong> при загрузке системы не требуется использовать ни перенаправление вывода, ни nohup &#8211; достаточно одного лишь символа <strong>&#038;</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/04/523/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>bash: перебор файлов в каталоге</title>
		<link>https://tt.erinome.net/2013/03/468</link>
		<comments>https://tt.erinome.net/2013/03/468#comments</comments>
		<pubDate>Fri, 22 Mar 2013 11:03:35 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=468</guid>
		<description><![CDATA[При необходимости перебрать все файлы в каком-либо каталоге и выполнить над ними какие-либо действия, можно воспользоваться простым однострочным циклом: for file in /etc/config/*; do wc -l $file; stat -c %s $file; done Можно использовать и find для рекурсивного поиска и &#8230; <a href="https://tt.erinome.net/2013/03/468">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При необходимости перебрать все файлы в каком-либо каталоге и выполнить над ними какие-либо действия, можно воспользоваться простым однострочным циклом:</p>
<pre class="console">for file in /etc/config/*; do wc -l $file; stat -c %s $file; done</pre>
<p>Можно использовать и find для рекурсивного поиска и дополнительных фильтров:</p>
<pre class="console">for file in `find /etc -type f -name "*.conf"`
do
   wc -l $file;
   stat -c %s $file;
done</pre>
<p>Если выполняется не более одного действия над файлом, можно обойтись без цикла:</p>
<pre class="console">find /etc -type f | xargs wc -l</pre>
<p>Если в именах файлов есть пробелы, то добавляем к find параметр -print0:</p>
<pre class="console">find /etc -type f -print0 | xargs -0 wc -l</pre>
<p>Во всех примерах вычисляется количество строк в файлах.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/03/468/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ps: invalid option &#8212; A</title>
		<link>https://tt.erinome.net/2013/03/441</link>
		<comments>https://tt.erinome.net/2013/03/441#comments</comments>
		<pubDate>Sat, 16 Mar 2013 16:05:21 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=441</guid>
		<description><![CDATA[Встроенная команда ps в используемом в OpenWrt-роутерах busybox имеет неприятную особенность, что при попытке указания лишних аргументов она вместо их игнорирования выводит ошибку и вовсе не показывает никаких данных. Научить ее понимать часто используемые параметры невозможно &#8211; единственным доступным вариантом &#8230; <a href="https://tt.erinome.net/2013/03/441">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Встроенная команда <strong>ps</strong> в используемом в OpenWrt-роутерах <strong>busybox</strong> имеет неприятную особенность, что при попытке указания лишних аргументов она вместо их игнорирования выводит ошибку и вовсе не показывает никаких данных. Научить ее понимать часто используемые параметры невозможно &#8211; единственным доступным вариантом в busybox является параметр <strong>w</strong>, а прочие просто отсутствуют.<span id="more-441"></span></p>
<p>По этой причине автоматически набирая с консоли команды вроде <em>ps axu | grep progname</em> вместо ожидаемого результата на консоли печатается лишь:</p>
<pre class="console">ps: invalid option -- A
BusyBox v1.19.4 (2013-03-20 19:33:09 MSK) multi-call binary.

Usage: ps

Show list of processes

This version of ps accepts no options</pre>
<p>И, чертыхаясь, каждый раз приходится затирать лишние аргументы.</p>
<p>Ситуация вполне поддается исправлению путем замены данной утилиты на полноценную версию, отдельную от <strong>busybox</strong>. Найти ее в списке пакетов на первый взгляд нелегко, но на самом деле она скрывается в группе пакетов <strong>procps</strong>. Путем установки <strong>procps</strong> и <strong>procps-ps</strong> мы можем привнести в наш <strong>OpenWrt</strong> полноценную утилиту <strong>ps</strong>, принимающую все знакомые параметры.</p>
<p>Однако, работать сразу она не станет: <strong>procps-ps</strong> устанавливается в <em>/usr/bin/ps</em>, тогда как busybox-версия находится в <em>/bin/ps</em>. По этой причине необходимо либо скопировать <strong>ps</strong> из <em>/usr/bin</em> в <em>/bin</em>, либо стереть симлинк <em>/bin/ps -> /bin/busybox</em>.</p>
<p>Кстати, аналогичным образом можно добавить и полную версию утилиты <strong>top</strong> (пакет <strong>procps-top</strong>).</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/03/441/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>screen vs sudo</title>
		<link>https://tt.erinome.net/2013/03/433</link>
		<comments>https://tt.erinome.net/2013/03/433#comments</comments>
		<pubDate>Thu, 14 Mar 2013 07:45:02 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=433</guid>
		<description><![CDATA[При попытке открытия нового терминала при помощи утилиты screen иногда можно столкнуться со следующей ошибкой: "Cannot open your terminal '/dev/pts/0' - please check" Это связано с тем, что текущий терминал был открыт от имени другого пользователя &#8211; это происходит, например, &#8230; <a href="https://tt.erinome.net/2013/03/433">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>При попытке открытия нового терминала при помощи утилиты <strong>screen</strong> иногда можно столкнуться со следующей ошибкой:</p>
<pre class="console">"Cannot open your terminal '/dev/pts/0' - please check"</pre>
<p><span id="more-433"></span></p>
<p>Это связано с тем, что текущий терминал был открыт от имени другого пользователя &#8211; это происходит, например, если пользователь был сменен при помощи <strong>sudo su</strong>.</p>
<p>Есть два корректных способа решения этой проблемы:</p>
<ul>
<li>Выйти из системы и перелогиниться именно выбранным пользователем;</li>
<li>Выполнить команду <strong>script /dev/null</strong>.</li>
</ul>
<p>Первый вариант очевиден, но не очень удобен, второй же использует побочный эффект утилиты <strong>script</strong>, заключающийся в том, что она при выполнении открывает свой собственный новый терминал с корректно выставленными правами доступа, а не продолжает использовать родительский, который в случае <strong>sudo su</strong> принадлежит другому пользователю.</p>
<p>Обратите внимание, что <strong>не следует</strong> использовать <strong>chmod</strong> на виртуальном устройстве <span style="white-space: nowrap;"><strong>/dev/pts/0</strong></span>, как зачастую предлагается для решения этой проблемы. Хотя это и позволит запустить <strong>screen</strong>, но сделает данный терминал доступным для всех пользователей системы, что некорректно с точки зрения безопасности.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2013/03/433/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bash: удаление устаревших бэкапов</title>
		<link>https://tt.erinome.net/2012/08/325</link>
		<comments>https://tt.erinome.net/2012/08/325#comments</comments>
		<pubDate>Fri, 31 Aug 2012 19:58:52 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=325</guid>
		<description><![CDATA[Для удаления директорий со старыми бэкапами может потребоваться изобретение велосипедного скрипта, который отыщет все подкаталоги по выбранному пути, созданные ранее указанной даты, и удалит их. Например, это можно сделать так: #!/bin/bash for directory in $(find /srv/backup/sql/ -mindepth 1 -maxdepth 1 &#8230; <a href="https://tt.erinome.net/2012/08/325">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Для удаления директорий со старыми бэкапами может потребоваться изобретение велосипедного скрипта, который отыщет все подкаталоги по выбранному пути, созданные ранее указанной даты, и удалит их.</p>
<p>Например, это можно сделать так:</p>
<pre class="console">#!/bin/bash

for directory in $(find /srv/backup/sql/ -mindepth 1 -maxdepth 1 -ctime +15 -type d);
do
        echo $directory
        rm -fr $directory
done</pre>
<p>Так будут удалены те из директорий, находящихся по адресу /srv/backup/sql/, которые были изменены более 15 дней назад. Кстати, для создания полных бэкапов MySQL можно использовать утилиту под названием <a href="http://www.mydumper.org/" title="mydumper">mydumper</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/08/325/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vim &#8211; отступы по tab</title>
		<link>https://tt.erinome.net/2012/07/260</link>
		<comments>https://tt.erinome.net/2012/07/260#comments</comments>
		<pubDate>Tue, 10 Jul 2012 18:05:01 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=260</guid>
		<description><![CDATA[Стандартная ширина отступов tab в редакторе vim может быть избыточно велика для удобного редактирования на экранах ограниченной ширины. Эта проблема легко решается установкой нескольких параметров. Достаточно поменять два значения: set tabstop=4 set shiftwidth=4 Так ширина tab будет равняться четырем обычным &#8230; <a href="https://tt.erinome.net/2012/07/260">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Стандартная ширина отступов tab в редакторе vim может быть избыточно велика для удобного редактирования на экранах ограниченной ширины. Эта проблема легко решается установкой нескольких параметров.<span id="more-260"></span> Достаточно поменять два значения:</p>
<pre class="console">set tabstop=4
set shiftwidth=4</pre>
<p>Так ширина tab будет равняться четырем обычным пробелам.<br/><br />
Можно также автоматически заменять tab на некоторое количество обычных пробелов. За это отвечает параметр <strong>expandtab</strong>. Для отключения, соответственно, <strong>noexpandtab</strong>.</p>
<p>Помимо этого, в отдельных случаях можно столкнуться с ситуацией, когда по умолчанию активировано автоматическое добавление отступов при переводе строки. Когда пишешь какой-то код &#8211; это может быть удобно. Но когда нужно вставить большое количество строк текста, где уже есть отступны &#8211; текст потеряет форматирование и выстроится лесенкой. Для отключения этого безобразия насовсем можно использовать параметры <strong>noautoindent</strong>, <strong>nosmartindent</strong> и <strong>nocindent</strong>. Также можно отключить их лишь в моменты вставки текста, используя команды <strong>:set paste</strong> перед вставкой и <strong>:set nopaste</strong> после того, как вставка закончена.</p>
<p>Дополнительную информацию об отступах в vim можно найти, к примеру, на сайте <a href="http://vim.wikia.com/wiki/Indenting_source_code" title="отступы в vim" target="_blank">wikia.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/07/260/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>netcat &#8211; примеры использования</title>
		<link>https://tt.erinome.net/2012/02/92</link>
		<comments>https://tt.erinome.net/2012/02/92#comments</comments>
		<pubDate>Tue, 21 Feb 2012 12:57:29 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[Сеть и интернет]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=92</guid>
		<description><![CDATA[Почти в любом дистрибутиве Linux есть маленькая незаметная утилита netcat, или просто nc. Эта программа может создавать TCP-сокеты либо в режиме сервера для ожидания соединения, либо в режиме клиента для подключения к серверу. А по правде сказать, для netcat вовсе &#8230; <a href="https://tt.erinome.net/2012/02/92">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Почти в любом дистрибутиве Linux есть маленькая незаметная утилита <strong>netcat</strong>, или просто <strong>nc</strong>. Эта программа может создавать TCP-сокеты либо в режиме сервера для ожидания соединения, либо в режиме клиента для подключения к серверу. А по правде сказать, для netcat вовсе не играет роли, собираетесь ли вы использовать его как сервер или как клиент &#8211; его работа заключается только в том, чтобы собрать данные с stdin и передать на указанный сетевой адрес.<span id="more-92"></span></p>
<p>Простейший пример использования netcat &#8211; это создать клиент-серверный чат. Хотя это и очень примитивный способ создания чата, он наглядно показывает, как данная утилита работает. В последующих примерах будет подразумеваться, что машина, создающая сокет в режиме ожидания (сервер), имеет IP-адрес 192.168.0.1. Итак, создаем чат-сервер, который будет ожидать соединений на TCP-порт 3333:</p>
<pre class="console">$ nc -l 3333</pre>
<p>Теперь мы можем с другого компьютера подключиться к данному серверу:</p>
<pre class="console">$ nc 192.168.0.1 3333</pre>
<p>В данном случае клавиатура выступает в роли stdin. Все набираемое на клавиатуре на стороне сервера будет передано на терминал клиента, и наоборот.</p>
<h3>Передача файлов</h3>
<p>Совершенно аналогичным образом можно использовать netcat для передачи файлов между двумя компьютерами. При помощи следующей команды можно создать сервер, который подготовит файл к передаче:</p>
<pre class="console">$ cat backup.iso | nc -l 3333</pre>
<p>Получить файл backup.iso на другом компьютере можно следующим образом:</p>
<pre class="console">$ nc 192.168.0.1 3333 > backup.iso</pre>
<p>Как можно заметить, netcat не отображает никакой информации о процессе передачи данных. При работе с большими файлами это может быть довольно неудобно. Для решения этой проблемы можно использовать утилиту <a href="http://www.ivarch.com/programs/pv.shtml" target="_blank">pv</a> (progress viewer). В данном примере на стороне сервера будет в реальном времени отображаться информация о скорости и объеме передаваемых данных:</p>
<pre class="console">$ cat backup.iso | pv -b | nc -l 3333</pre>
<p>Подобным образом можно показывать статистику и на стороне клиента:</p>
<pre class="console">$ nc 192.168.0.1 3333 | pv -b > backup.iso</pre>
<h3>Другие примеры</h3>
<p>Утилита netcat может также пригодиться для создания образа раздела жесткого диска с возможностью отправки его на удаленный сервер на лету:</p>
<pre class="console">$ dd if=/dev/hdb5 | gzip -9 | nc -l 3333</pre>
<p>А на удаленной машине принять созданный образ можно так:</p>
<pre class="console">$ nc 192.168.0.1 3333 | pv -b > myhdb5partition.img.gz</pre>
<p>В случае необходимости отправки группы файлов &#8211; например, набора конфигурационных файлов &#8211; можно скомбинировать netcat и архиватор tar:</p>
<pre class="console">$ tar -czf - /etc/ | nc -l 3333</pre>
<p>Дефис в качестве имени файла в параметрах tar необходим для того, чтобы вывести результат работы архиватора на stdin, который затем перенаправляется в netcat. Принять созданный бэкап на удаленной машине можно аналогично изложенному ранее:</p>
<pre class="console">$ nc 192.168.0.1 3333 | pv -b > mybackup.tar.gz</pre>
<h3>Безопасность</h3>
<p>Очевидно, что при подобном использовании netcat информация передается по сети в исходном нешифрованном виде. Для передачи некритических данных это вполне приемлемо, но при передаче какой-либо ценной информации разумно использовать netcat в сочетании с SSH-туннелем.</p>
<p>Использование SSH-туннеля имеет два преимущества:</p>
<ol>
<li>Информация передается внутри зашифрованного туннеля, так что она хорошо защищена;</li>
<li>На сервере не требуется открывать никаких дополнительных портов в конфигурации файрвола, поскольку соединение будет установлено через SSH</li>
</ol>
<p>На стороне сервера файл в netcat выставляется точно так же, как описано ранее:</p>
<pre class="console">$ cat backup.iso | nc -l 3333</pre>
<p>А вот на стороне клиента подключаемся к ожидающему соединений сокету netcat через SSH-туннель:</p>
<pre class="console">$ ssh -f -L 23333:127.0.0.1:3333 me@192.168.0.1 sleep 10; \
        nc 127.0.0.1 23333 | pv -b > backup.iso</pre>
<p>Понятно, что есть и другие способы помещения соединения в SSH-туннель, но создание и использование туннеля именно таким образом имеет полезную особенность, что туннель автомагически закрывается при окончании передачи данных через netcat.</p>
<h3>&#8230;и переносной сканер портов</h3>
<p>Невероятно, но netcat еще можно использовать и для сканирования открытых портов. Для этого поможет параметр -z:</p>
<pre class="console">$ nc -z 192.168.0.1 80-90
Connection to 192.168.0.1 80 port [tcp/http] succeeded!</pre>
<p>В данном примере netcat сканировал диапазон портов 80-90 и сообщил, что на удаленной машине открыт порт 80.</p>
<p>На страницах man по утилите netcat также содержится и ряд других полезных советов и интересных примеров использования данной программы.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/02/92/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>vim &#8211; подсветка синтаксиса</title>
		<link>https://tt.erinome.net/2012/02/60</link>
		<comments>https://tt.erinome.net/2012/02/60#comments</comments>
		<pubDate>Tue, 21 Feb 2012 07:26:45 +0000</pubDate>
		<dc:creator><![CDATA[root]]></dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://tt.erinome.net/?p=60</guid>
		<description><![CDATA[Я уверен, что все, кто привык при настройке серверов пользоваться текстовым редактором vim с подсветкой синтаксиса, в конце концов задаются вопросом &#8211; насколько злодейским должен быть человек, который по умолчанию выставил темно-синий цвет для отображения закоментированного текста? Словом, ситуация классического &#8230; <a href="https://tt.erinome.net/2012/02/60">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Я уверен, что все, кто привык при настройке серверов пользоваться текстовым редактором vim с подсветкой синтаксиса, в конце концов задаются вопросом &#8211; насколько злодейским должен быть человек, который по умолчанию выставил темно-синий цвет для отображения закоментированного текста? Словом, ситуация классического маразма: фон &#8211; черный, комментарии &#8211; синие, контраста &#8211; нет.<span id="more-60"></span></p>
<p>Оказывается, в vim существует весьма тривиальная команда:</p>
<pre class="console">set background=dark</pre>
<p>Палитра подсветки сразу же меняется на более яркую, а закоментированный текст становится различимым. Эту строку можно добавить в ~/.vimrc для того, чтобы опция всегда была активна при запуске редактора.</p>
<p>Кроме того, можно изменить непосредственно цвет комментариев:</p>
<pre class="console">highlight Comment ctermfg=darkmagenta</pre>
<p>Эта строка сделает их не такими яркими, но намного более читаемыми на черном фоне. Аналогично, ее также можно добавить в ~/.vimrc.</p>
]]></content:encoded>
			<wfw:commentRss>https://tt.erinome.net/2012/02/60/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
