<?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>The Apple Geek &#187; shell</title>
	<atom:link href="http://theapplegeek.ru/archives/tag/shell/feed" rel="self" type="application/rss+xml" />
	<link>http://theapplegeek.ru</link>
	<description>Чему ты научился сегодня?</description>
	<lastBuildDate>Thu, 02 Feb 2012 16:02:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Работа в shell с именами файлов с пробелами и другими сложными для обработки символами</title>
		<link>http://theapplegeek.ru/archives/5695</link>
		<comments>http://theapplegeek.ru/archives/5695#comments</comments>
		<pubDate>Wed, 14 Sep 2011 08:37:07 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=5695</guid>
		<description><![CDATA[<p>Понадобилось мне восстановить из бекапа Time Machine небольшой скрипт. Ситуация осложнялась тем, что я его несколько раз менял, потом написал с нуля, потом стёр, в итоге в архиве Time Machine было множество вариантов. Нужный скрипт был с характерными первыми строками. В репозиторий git я скрипт не вносил, что не облегчало мою задачу.</p>]]></description>
			<content:encoded><![CDATA[<p>Понадобилось мне восстановить из бекапа Time Machine небольшой скрипт. Ситуация осложнялась тем, что я его несколько раз менял, потом написал с нуля, потом стёр, в итоге в архиве Time Machine было множество вариантов. Нужный скрипт был с характерными первыми строками. В репозиторий git я скрипт не вносил, что не облегчало мою задачу.</p>
<p><span id="more-5695"></span></p>
<p>Итак, к делу. Запуск терминала, подключение диска Time Machine, переход в нужный каталог:</p>
<pre>
$ cd /Volumes/Time\ Machine\ Backups/Backups.backupdb/ComputerName
</pre>
<p>Ищу варианты:</p>
<pre>
$ ls -al */*/Users/ctrld/bin/apps.sh
<small>rwxr-xr-x@ 2 ctrld  staff   918 Mar  3  2011 2011-04-08-195358/Macintosh HD/Users/ctrld/bin/apps.sh
-rwxr-xr-x@ 2 ctrld  staff   971 Apr 30 17:52 2011-06-06-124551/Macintosh HD/Users/ctrld/bin/apps.sh
-rwxr-xr-x@ 2 ctrld  staff  1024 Jun 10 20:14 2011-06-14-111524/Macintosh HD/Users/ctrld/bin/apps.sh</small>
</pre>
<p>Первая мысль &#8211; скормить файлы в команду head:</p>
<pre>
$ ls */*/Users/ctrld/bin/apps.sh | xargs head -5
</pre>
<p>Конечно же, эта конструкция неправильная, так как в именах есть пробелы:</p>
<pre>
<small>head: 2011-02-19-180439/Macintosh: No such file or directory
head: HD/Users/ctrld/bin/apps.sh: No such file or directory

==&gt; 2011-08-31-111236/Lion/Users/ctrld/bin/apps.sh &lt;==
#!/bin/sh
APPDIR="/Volumes/Data/iTunes/iTunes Music/Mobile Applications/"
find "${APPDIR}" -name \*.ipa |
while read line
do</small>
</pre>
<p>Как же заставить xargs считать путь с пробелом, как единый параметр? Эврика, вспоминаю о замечательной статье &#8220;<noindex><a rel="nofollow" href="http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html" >Fixing Unix/Linux/POSIX Filenames: Control Characters (such as Newline), Leading Dashes, and Other Problems</a></noindex>&#8220;. На выходе получаю команду:</p>
<pre>
$ find */*/Users/ctrld/bin -name apps.sh -type f -print0 | xargs -0 head -3
<small>==&gt; 2011-02-19-180439/Macintosh HD/Users/ctrld/bin/apps.sh &lt;==
#!/bin/sh
APPDIR="/Users/$USER/Music/iTunes/iTunes Music/Mobile Applications"
find "${APPDIR}" -name \*.ipa | 

==&gt; 2011-03-03-210012/Macintosh HD/Users/ctrld/bin/apps.sh &lt;==
#!/bin/sh
#APPDIR="/Users/$USER/Music/iTunes/iTunes Music/Mobile Applications"
APPDIR=$(find `defaults read com.apple.iTunes NSNavLastCurrentDirectory:ChooseObject:0` -name "Mobile Applications")</small>
</pre>
<p>Нужный вариант найден и восстановлен. Для чего этот скрипт? Для &#8220;<a href="http://theapplegeek.ru/archives/4112" >получения информации по приложениям iPhone в iTunes из shell</a>&#8220;.</p>
<p>Всем, кто работает с shell категорически рекомендую изучить статью &#8220;<noindex><a rel="nofollow" href="http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html" >Fixing Unix/Linux/POSIX Filenames: Control Characters (such as Newline), Leading Dashes, and Other Problems</a></noindex>&#8221; &#8211; она убережёт вас от ошибок при обработке параметров.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/5695/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Упрощение работы с bash с помощью пакета bash-completion</title>
		<link>http://theapplegeek.ru/archives/4486</link>
		<comments>http://theapplegeek.ru/archives/4486#comments</comments>
		<pubDate>Fri, 17 Sep 2010 16:32:02 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=4486</guid>
		<description><![CDATA[Привык я в стандартной конфигурации Ubuntu к удобству автодополнения в bash, которое обеспечивается пакетом bash-completion. Автодополнение имён файлов/каталогов/программ с помощью кнопки Tab в bash или получение списка вариантов с помощью двойного нажатия Tab знают все. А этот пакет расширяет автодополнение, позволяя, например, дополнять параметры в командах, имена хостов и т.п. В общем вещь полезная. Установка [...]]]></description>
			<content:encoded><![CDATA[<p>Привык я в стандартной конфигурации Ubuntu к удобству автодополнения в bash, которое обеспечивается пакетом <noindex><a rel="nofollow" href="http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_1" >bash-completion</a></noindex>.</p>
<p>Автодополнение имён файлов/каталогов/программ с помощью кнопки Tab в bash или получение списка вариантов с помощью двойного нажатия Tab знают все. А этот пакет расширяет автодополнение, позволяя, например, дополнять параметры в командах, имена хостов и т.п. В общем вещь полезная.</p>
<p><span id="more-4486"></span></p>
<p>Установка с использованием <a href="http://theapplegeek.ru/archives/3570" >Homebrew</a>:</p>
<pre>
$ brew update
<small>From http://github.com/mxcl/homebrew
 * branch            master     -> FETCH_HEAD
Already up-to-date.</small>

$ brew search bash-completion
<small>bash-completion</small>

$ brew install bash-completion
</pre>
<p>Активируем bash-completion в ~/.bash_profile:</p>
<pre>
$ vim ~/.bash_profile
if [ -f `brew --prefix`/etc/bash_completion ]; then
  . `brew --prefix`/etc/bash_completion
fi
</pre>
<p>Затем подгружаем изменения (или выходим/входим в Terminal.app):</p>
<pre>
$ . ~/.bash_profile
</pre>
<p>Поддерживаемые расширения можно посмотреть в /usr/local/etc/bash_completion.d/, там же можно поинтересоваться содержимым некоторых скриптов, интересно.</p>
<p>Например, теперь при нажатии double Tab после ssh предлагается список хостов:</p>
<pre>
$ ssh 192(tab) (tab)
192.168.98.12   192.168.98.3    192.168.99.2    195.234.212.51
</pre>
<p>Или дополнение опций:</p>
<pre>
$ ssh -o C(tab) (tab)
<small>ChallengeResponseAuthentication=  Ciphers=                          CompressionLevel=                 ControlMaster=
CheckHostIP=                      ClearAllForwardings=              ConnectTimeout=                   ControlPath=
Cipher=                           Compression=                      ConnectionAttempts=               </small>
</pre>
<p>Расширений много, поэтому работать станет в shell проще.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4486/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Возврат в предыдущий каталог в shell</title>
		<link>http://theapplegeek.ru/archives/4268</link>
		<comments>http://theapplegeek.ru/archives/4268#comments</comments>
		<pubDate>Fri, 06 Aug 2010 14:01:09 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/archives/4268</guid>
		<description><![CDATA[Супер-простой и очень очевидный для многих приём. Но может кто-то не знает. Для того, чтобы в Terminal.app (а именно в bash) перейти в предыдущий каталог, нужно выполнить команду: $ cd - Например, вы находитесь в каталоге Documents: $ pwd /Users/ctrld/Documents И нужно перейти в /var/log: $ cd /var/log $ pwd /var/log А затем вернуться. Не [...]]]></description>
			<content:encoded><![CDATA[<p>Супер-простой и очень очевидный для многих приём. Но может кто-то не знает.</p>
<p>Для того, чтобы в Terminal.app (а именно в bash) перейти в предыдущий каталог, нужно выполнить команду:</p>
<pre>
$ cd -
</pre>
<p><span id="more-4268"></span></p>
<p>Например, вы находитесь в каталоге Documents:</p>
<pre>
$ pwd
/Users/ctrld/Documents
</pre>
<p>И нужно перейти в /var/log:</p>
<pre>
$ cd /var/log
$ pwd
/var/log
</pre>
<p>А затем вернуться. Не нужно набирать</p>
<pre>
$ cd ~/Documents
</pre>
<p>Достаточно простой команды</p>
<pre>
$ cd -
/Users/ctrld/Documents
$ pwd
/Users/ctrld/Documents
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/4268/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>GUI для MacPorts (Porticus)</title>
		<link>http://theapplegeek.ru/archives/2862</link>
		<comments>http://theapplegeek.ru/archives/2862#comments</comments>
		<pubDate>Thu, 14 Jan 2010 14:21:58 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=2862</guid>
		<description><![CDATA[Как вы видите из моих статей, я активно использую менеджер пакетов MacPorts. Я привык с ним работать через консоль, но существует и графический интерфейс &#8211; я обнаружил его, читая статью об MacPorts на Apple ADC. Это бесплатная программа Porticus: Полезная функция &#8211; поиск (port search): Основная функциональность видна из меню: Настройки просты: Не скажу, что [...]]]></description>
			<content:encoded><![CDATA[<p>Как вы видите из моих статей, я активно использую менеджер пакетов <a href="http://theapplegeek.ru/archives/1011" >MacPorts</a>. Я привык с ним работать через консоль, но существует и графический интерфейс &#8211; я обнаружил его, читая статью об MacPorts <noindex><a rel="nofollow" href="http://developer.apple.com/mac/articles/opensource/workingwithmacports.html" >на Apple ADC</a></noindex>. Это бесплатная программа <noindex><a rel="nofollow" href="http://www.apple.com/downloads/macosx/development_tools/porticus.html" >Porticus</a></noindex>:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/01/01_porticus-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/01/01_porticus-thumb.png" height="410" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p><span id="more-2862"></span></p>
<p>Полезная функция &#8211; поиск (port search):</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/01/02_porticus-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/01/02_porticus-thumb.png" height="410" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Основная функциональность видна из меню:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/01/03_porticus-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/01/03_porticus-thumb.png" height="264" width="211" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Настройки просты:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/01/04_porticus-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/01/04_porticus-thumb.png" height="382" width="392" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2010/01/05_porticus-full.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2010/01/05_porticus-thumb.png" height="393" width="352" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Не скажу, что программа чрезвычайно полезна, но по крайней мере результаты поиска удобно смотреть в табличном виде. Хоть в консоли можно всегда применить grep.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/2862/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Создание локальной копии сайта (wget)</title>
		<link>http://theapplegeek.ru/archives/1417</link>
		<comments>http://theapplegeek.ru/archives/1417#comments</comments>
		<pubDate>Wed, 28 Oct 2009 13:46:55 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/archives/1417</guid>
		<description><![CDATA[Если по каким-то причинам нужно сделать локальную копию сайта (например, если нужно работать над материалами, но доступ в Интернет не предвидится), то обычно нет смысла искать дополнительный софт, тем более платный. Есть консольная программа wget (The non-interactive network downloader), которую можно поставить через MacPorts (sudo port install wget). Синтаксис: wget -v -m -k -K -E [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both"><img src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_wget-thumb3.png" height="148" align="right" width="150" style=" display: inline; float: right; margin: 0 0 10px 10px;" />Если по каким-то причинам нужно сделать локальную копию сайта (например, если нужно работать над материалами, но доступ в Интернет не предвидится), то обычно нет смысла искать дополнительный софт, тем более платный. Есть консольная программа <noindex><a rel="nofollow" href="http://www.gnu.org/software/wget/manual/wget.html" >wget</a></noindex> (The non-interactive network downloader), которую можно поставить <a href="http://theapplegeek.ru/archives/1011" >через MacPorts</a> (sudo port install wget).</p>
<p style="clear: both">Синтаксис:</p>
<pre>
wget -v -m -k -K -E -w 1 --output-file=wget.log http://www.notsecretsite.com/
</pre>
<p><span id="more-1417"></span></p>
<ul>
<li>-v &#8211; показывать процесс списывания;
<li>-m &#8211; сделать копию сайта (если говорить на нормальном русском языке, то мирроринг). Заменяет набор ключей &#8220;-r -N -l inf &#8211;no-remove-listing&#8221;.</li>
<li>-k &#8211; преобразовать ссылки, адаптируя их для локального просмотра. Например, если списывается /foo/doc.html со ссылкой на /bar/img.gif, то в локальной копии будет записано ../bar/img.gif.</li>
<li>-K &#8211; опция осталась для меня загадкой, вроде бы она должна использоваться совместно с &#8216;-k&#8217; для определения, изменился ли файл на сервере.</li>
<li>-E &#8211; если тип списанного контента был &#8216;application/xhtml+xml&#8217; или &#8216;text/html&#8217;, и его расширение не .html (грубо говоря, а реально не удовлетворяет шаблону &#8216;\.[Hh][Tt][Mm][Ll]?&#8217;), то добавить .html к имени.</li>
<li>-w 1 &#8211; ждать 1 секунду перед следующим запросом на списывание файла. Можно поставить больше. Полезно, если сервер блокирует за частое списывание.</li>
<li>&#8211;output-file=wget.log &#8211; писать процесс работы в лог-файл.</li>
</li>
<p>Если же доступ к сайту даётся только после аутентификации по HTTP, то формат команды такой (добавляются &#8211;user и &#8211;password): </p>
<pre>
wget -v -m -k -K -E -w 1 --user=user --password=secret --output-file=wget.log http://www.secretsite.com/
</pre>
<p>Если же используется аутентификация через форму в html, да ещё с использованием сессионных coockies, то в принципе побороть это можно, но требует ухищрения. Опишу это отдельно, сейчас у меня нет под рукой такого сайта.</p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1417/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Загрузка и выгрузка системных сервисов (MacPorts)</title>
		<link>http://theapplegeek.ru/archives/1324</link>
		<comments>http://theapplegeek.ru/archives/1324#comments</comments>
		<pubDate>Thu, 22 Oct 2009 13:26:38 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/archives/1324</guid>
		<description><![CDATA[Я начал писать заметку о launchctl, но понял, что сегодня её не закончу. Поэтому кратко расскажу о том, как загружать или выгружать сервисы, установленные через MacPorts. Стартовые скрипты MacPorts размещает в файлах /Library/LaunchDaemons/org.macports.${port}.plist. Загрузить сервисы можно либо привычно через launchctl $ sudo launchctl load -w /Library/LaunchDaemons/org.macports.${port}.plist либо через MacPorts: $ sudo port load port Останов [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_macports-thumb1-full.png"  class="image-link" rel="lightbox"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_macports-thumb2.png" height="51" align="right" width="179" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></a></noindex></p>
<p>Я начал писать заметку о launchctl, но понял, что сегодня её не закончу. Поэтому кратко расскажу о том, как загружать или выгружать сервисы, установленные через <a href="http://theapplegeek.ru/archives/1011" >MacPorts</a>.</p>
<p>Стартовые скрипты MacPorts размещает в файлах /Library/LaunchDaemons/org.macports.${port}.plist.</p>
<p>Загрузить сервисы можно либо привычно через launchctl</p>
<pre>
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.${port}.plist
</pre>
<p>либо через MacPorts:</p>
<pre>
$ sudo port load <i>port</i>
</pre>
<p>Останов сервиса:</p>
<pre>
$ sudo launchctl unload -w /Library/LaunchDaemons/org.macports.${port}.plist
</pre>
<p>или</p>
<pre>
$ sudo port unload <i>port</i>
</pre>
<p><span id="more-1324"></span></p>
<p>Например, установим apache2 (он толком в Mac OS X не нужен, так как при включении &#8220;Web sharing&#8221; загружается Apache/2.2.11):</p>
<pre>
$ sudo port install apache2
</pre>
<p>Ставится конфигурационный файл launchctl <i>/Library/LaunchDaemons/org.macports.apache2.plist</i>:</p>
<pre>
<small>
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd" &gt;
&lt;plist version='1.0'&gt;
&lt;dict&gt;
&lt;key&gt;Label&lt;/key&gt;&lt;string&gt;org.macports.apache2&lt;/string&gt;
&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
	&lt;string&gt;/opt/local/bin/daemondo&lt;/string&gt;
	&lt;string&gt;--label=apache2&lt;/string&gt;
	&lt;string&gt;--start-cmd&lt;/string&gt;
	&lt;string&gt;/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper&lt;/string&gt;
	&lt;string&gt;start&lt;/string&gt;
	&lt;string&gt;;&lt;/string&gt;
	&lt;string&gt;--stop-cmd&lt;/string&gt;
	&lt;string&gt;/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper&lt;/string&gt;
	&lt;string&gt;stop&lt;/string&gt;
	&lt;string&gt;;&lt;/string&gt;
	&lt;string&gt;--restart-cmd&lt;/string&gt;
	&lt;string&gt;/opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper&lt;/string&gt;
	&lt;string&gt;restart&lt;/string&gt;
	&lt;string&gt;;&lt;/string&gt;
	&lt;string&gt;--pid=none&lt;/string&gt;
&lt;/array&gt;
&lt;key&gt;Debug&lt;/key&gt;&lt;false/&gt;
&lt;key&gt;Disabled&lt;/key&gt;&lt;true/&gt;
&lt;key&gt;OnDemand&lt;/key&gt;&lt;false/&gt;
&lt;key&gt;RunAtLoad&lt;/key&gt;&lt;false/&gt;
&lt;/dict&gt;
&lt;/plist&gt;</small>
</pre>
<p>Загрузка:</p>
<pre>
$ sudo port load apache2
</pre>
<p>Выгрузка:</p>
<pre>
$ sudo port unload apache2
</pre>
<p>В следующей статье я детально расскажу о launchctl.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1324/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Исправление некорректного отображения русских букв в Midnight Commander под Mac OS X</title>
		<link>http://theapplegeek.ru/archives/1180</link>
		<comments>http://theapplegeek.ru/archives/1180#comments</comments>
		<pubDate>Mon, 19 Oct 2009 10:08:24 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=1180</guid>
		<description><![CDATA[Обновление от 04.01.2010. Версия 4.7.0 из портов уже нормально поддерживает UTF-8, поэтому рекомендую ставить её, причём русские буквы отображаются даже при компиляции с ncurses, что даёт возможность отображать интерфейс &#8220;нормально&#8221;, а не ASCII-символами: $ sudo port selfupdate $ port variants mc mc has the variants: ncurses: use ncurses screen library * conflicts with slang2 [+]slang2: [...]]]></description>
			<content:encoded><![CDATA[<p><b>Обновление от 04.01.2010.</b> Версия 4.7.0 из портов уже нормально поддерживает UTF-8, поэтому рекомендую ставить её, причём русские буквы отображаются даже при компиляции с ncurses, что даёт возможность отображать интерфейс &#8220;нормально&#8221;, а не ASCII-символами:</p>
<pre>
$ <b>sudo port selfupdate</b>
$ <b>port variants mc</b>
mc has the variants:
   ncurses: use ncurses screen library
     * conflicts with slang2
[+]slang2: use slang2 screen library
     * conflicts with ncurses
   universal: Build for multiple architectures
$ <b>sudo port  install mc +ncurses</b>
$ <b>/opt/local/bin/mc -V</b>
GNU Midnight Commander 4.7.0
Using the ncurses library
With internationalization support
With multiple codepages support
</pre>
<p><b>А для интереса можно почитать, как исправлялись русские буквы до 4.7.0.</b></p>
<p>Я уже давно заметил, что консольный файловый менеджер <noindex><a rel="nofollow" href="http://en.wikipedia.org/wiki/Midnight_Commander" >Midnight Commander</a></noindex> неправильно работает с русскими буквами под Mac OS X. Но меня это особо не беспокоило, так как мне он нужен редко и с этой проблемой я могу спокойно смириться. Но сегодня <noindex><a rel="nofollow" href="http://twitter.com/ex3m_su" >@ex3m_su</a></noindex> (очень рекомендую посмотреть <noindex><a rel="nofollow" href="http://ex3m.su/" >социальную сеть ex3m для экстремальных людей</a></noindex>, которую он создал &#8211; я там бываю регулярно) задал мне вопрос:</p>
<blockquote>
<p>Подскажи, как наложить патч для MC из портов, он не воспринимает utf в интерфейсе {&#8230;}</p>
</blockquote>
<p>MC из портов, плохо работает с русскими буквами, и я решил найти решение такому поведению:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_mc.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_mc-thumb.png" height="337" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p><span id="more-1180"></span></p>
<p>Я начал с инструкции, подсказанной мне <noindex><a rel="nofollow" href="http://twitter.com/ex3m_su" >@ex3m</a></noindex> (он проблему решил по ней) &#8220;<noindex><a rel="nofollow" href="http://sudouser.com/sborka-midnight-commander-463-na-mac-os-leopard.html/trackback" >Сборка Midnight Commander 4.6.3 на Mac OS Leopard</a></noindex>&#8220;, но при использовании рекомендованного &#8220;Screen library&#8221; mcslang по-прежнему были проблемы с кодировкой, и не отображались символы, формирующие интерфейс программы:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/02_mc.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/02_mc-thumb.png" height="281" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p>Поэтому я использовал slang. Учитывая то, что используемая сборка оказалась доступной только со <noindex><a rel="nofollow" href="http://sudouser.com/sborka-midnight-commander-463-na-mac-os-leopard.html" >страницы автора статьи</a></noindex>, но не автора модификации, то для полноты картины я решил попробовать и официальную пререлизную сборку. Детали &#8211; ниже.</p>
<h2>Подготовка</h2>
<p>Ставим и удаляем mc через MacPorts для разрешения зависимостей.</p>
<pre>
$ port installed | grep mc
  mc @4.6.1_0 (active)
$ sudo port uninstall mc
</pre>
<p>Все действия будем производить в каталоге ~/tmp</p>
<pre>
mkdir ~/tmp
cd ~/tmp
</pre>
<p>Находим последние <noindex><a rel="nofollow" href="http://www.sfr-fresh.com/unix/misc/" >slang</a></noindex>, <noindex><a rel="nofollow" href="http://ftp.gnu.org/pub/gnu/gettext/" >gettext</a></noindex> и <noindex><a rel="nofollow" href="http://ftp.gnu.org/pub/gnu/libiconv/" >libiconv</a></noindex>:</p>
<pre>
wget http://www.sfr-fresh.com/unix/misc/slang-2.2.1.tar.gz
wget http://ftp.gnu.org/pub/gnu/gettext/gettext-0.17.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
</pre>
<p>Раскручиваем архивы</p>
<pre>
tar xfz gettext-0.17.tar.gz
tar xfz libiconv-1.13.1.tar.gz
tar xfz slang-2.2.1.tar.gz
</pre>
<p>Компилируем и устанавливаем пакеты (они поставятся не в /opt/local, а в /usr/local, поэтому нужно будет проверить $PATH, чтобы /usr/local/bin стоял перед /opt/local/bin):</p>
<pre>
cd ~/tmp
cd gettext-0.17
./configure &#038;&#038; make -j 4 &#038;&#038; sudo make install
cd ..
cd libiconv-1.13.1
./configure &#038;&#038; make -j 4 &#038;&#038; sudo make install
cd ..
cd slang-2.2.1
./configure &#038;&#038; make -j 4 &#038;&#038; sudo make install
cd ..
</pre>
<h2>Использование модифицированной сборки Midnight Commander 4.6.3</h2>
<p>По оригинальному адресу модифицированного MC нет, берём с сайта <noindex><a rel="nofollow" href="http://sudouser.com/sborka-midnight-commander-463-na-mac-os-leopard.html" >автора статьи</a></noindex> sudouser:</p>
<pre>
cd ~/tmp
wget http://sudouser.com/mc-4.6.3-r504.tar.bz2
tar xfp mc-4.6.3-r504.tar.bz2
</pre>
<p>Особенность (!) &#8211; в качестве &#8220;Screen library&#8221; используем не mcslang, а slang</p>
<pre>
cd ~/tmp
cd mc-4.6.3-r504
./configure --with-screen=slang --with-libiconv-prefix=/usr/local

<small>Configuration:
  Screen library:             <b>S-Lang library (installed on the system)</b>
  Enable support for utf-8:   yes
  Enable support for charset: yes</small>

make -j 4 &#038;&#038; sudo make install
</pre>
<p>Информация по сборке:</p>
<pre>
ole-mac:mc-4.6.3-r504 ctrld$ /usr/local/bin/mc -V
<small>GNU Midnight Commander 4.6.3
Virtual File System: tarfs, extfs, cpiofs, ftpfs, fish, smbfs
With builtin Editor
Using system-installed S-Lang library with terminfo database
With subshell support as default
With support for background operations
With mouse support on xterm
With internationalization support
With multiple codepages support
Data types: char 8 int 32 long 64 void * 64 off_t 64 ecs_char 8</small>
</pre>
<p>Наслаждаемся нормальным отображением русских букв:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/03_mc.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/03_mc-thumb.png" height="266" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<h2>Midnight Commander 4.7.0 Pre 3</h2>
<p>На сайте <noindex><a rel="nofollow" href="http://www.midnight-commander.org/downloads" >www.midnight-commander.org</a></noindex> находим и списываем последнюю сборку mc 4.7.0-pre3</p>
<pre>
cd ~/tmp
wget http://www.midnight-commander.org/downloads/14
mv 14 mc-4.7.0-pre3.tar.bz2
tar xfp mc-4.7.0-pre3.tar.bz2

cd mc-4.7.0-pre3
./configure --with-screen=slang --with-libiconv-prefix=/usr/local --with-slang-includes=/usr/local --with-slang-libs=/usr/local

<small>Configuration:
  Screen library:             S-Lang library (installed on the system)
  Support for charset:        yes</small>

make -j 4 &#038;&#038; sudo make install
</pre>
<p>Информация по сборке:</p>
<pre>
ole-mac:mc-4.7.0-pre3 ctrld$ /usr/local/bin/mc -V
<small>GNU Midnight Commander 4.7.0-pre3
Virtual File System: tarfs, extfs, cpiofs, ftpfs, fish
With builtin Editor
Using system-installed S-Lang library with terminfo database
With subshell support as default
With support for background operations
With mouse support on xterm
With internationalization support
With multiple codepages support
Data types: char 8 int 32 long 64 void * 64 off_t 64 ecs_char 8</small>
</pre>
<p>И эта версия нормально отображает русский текст:</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/04_mc.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/04_mc-thumb.png" height="268" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<h2>Порты</h2>
<p>Можно поменять &#8220;Screen library&#8221; в порту mc с ncurses на slang, однако это не работает. Приведу описание процесса просто для сведения.</p>
<pre>
$ cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/sysutils/mc
$ sudo cp Portfile Portfile.dist
$ sudo chown ctrld Portfile
$ cat Portfile.dist | sed 's/--with-screen=ncurses/--with-screen=slang/' > Portfile
</pre>
<p>Ставим slang, gettext и libiconv</p>
<pre>
$ sudo port install slang2
$ sudo port install gettext
$ sudo port install libiconv

$ sudo port -dv install mc
</pre>
<p>Информация по сборке</p>
<pre>
bash-3.2$ /opt/local/bin/mc -V
<small>GNU Midnight Commander 4.6.1
Using system-installed S-Lang library with terminfo database
With internationalization support
...</small>
</pre>
<h2>Выводы</h2>
<p>Штатная версия Midnight Commander из MacPorts некорректно отображает русские буквы в именах файлов. Решение я продемонстрировал &#8211; можно использовать либо отдельную сборку MC 4.6.3, либо версию 4.7.0pre3, они обе работают нормально. Я остановился на последней.</p>
<p><br class='final-break' style='clear: both' /></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1180/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Отключение буферизации в shell</title>
		<link>http://theapplegeek.ru/archives/1067</link>
		<comments>http://theapplegeek.ru/archives/1067#comments</comments>
		<pubDate>Fri, 16 Oct 2009 14:49:45 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://ctrld.me/archives/1067</guid>
		<description><![CDATA[При выводе через pipe (&#8220;&#124;&#8221;) в Unix обычно буферизируются стандартный поток вывода stdout. Представим ситуацию &#8211; мы следим за выводом tshark на экран, но при этом хотим параллельно записывать его в файл (забудем на мгновение о команде script): $ sudo tshark -i en1 &#124; tee out.txt Мы видим, что строки на экране появляются не сразу, [...]]]></description>
			<content:encoded><![CDATA[<p>При выводе через pipe (&#8220;|&#8221;) в Unix обычно буферизируются стандартный поток вывода stdout. Представим ситуацию &#8211; мы следим за выводом tshark на экран, но при этом хотим параллельно записывать его в файл (забудем на мгновение о команде <noindex><a rel="nofollow" href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/script.1.html" >script</a></noindex>):</p>
<pre>
$ sudo tshark -i en1 | tee out.txt
</pre>
<p>Мы видим, что строки на экране появляются не сразу, а достаточно большими порциями. Причина &#8211; в буферизации вывода командой tshark. А наблюдать-то за трафиком хочется в реальном времени &#8211; авось появится что-то интересное.</p>
<p>Для решения нужно воспользоваться программой <noindex><a rel="nofollow" href="http://manpages.ubuntu.com/manpages/karmic/man1/expect_unbuffer.1.html" >unbuffer</a></noindex> из пакета <noindex><a rel="nofollow" href="http://manpages.ubuntu.com/manpages/karmic/en/man1/expect.1.html" >expect</a></noindex>. Вспоминаем <a href="http://theapplegeek.ru/archives/1011" >установку портов</a>:</p>
<pre>
$ sudo port install expect
</pre>
<p>А затем</p>
<pre>
$ unbuffer sudo tshark -i en1 | tee out.txt
</pre>
<p>Теперь вывод происходит в реальном времени. Детали &#8211; в <noindex><a rel="nofollow" href="http://manpages.ubuntu.com/manpages/karmic/man1/expect_unbuffer.1.html" >man unbuffer</a></noindex>. Я нашёл unbuffer достаточно давно где-то на &#8220;<noindex><a rel="nofollow" href="http://stackoverflow.com/" >Stack Overflow</a></noindex>&#8220;.</p>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1067/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с пользовательскими настройками из консоли (defaults)</title>
		<link>http://theapplegeek.ru/archives/1026</link>
		<comments>http://theapplegeek.ru/archives/1026#comments</comments>
		<pubDate>Thu, 15 Oct 2009 11:51:45 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://ctrld.me/?p=1026</guid>
		<description><![CDATA[Практически всё, что необходимо для работы, можно настроить через стандартные настройки в GUI. Однако иногда возникает необходимость добраться до скрытых настроек, тогда на помощь приходит утилита defaults. Она позволяет читать, записывать и удалять пользовательские установки из командной строки. Приложения Mac OS X и прикладные программы обычно хранят настройки, используя механизм defaults. Давайте попробуем поработать с [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a rel="nofollow" href="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_defaults.png"  class="image-link"><img class="linked-to-original" src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_defaults-thumb.png" height="103" align="right" width="150" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></a></noindex></p>
<p>Практически всё, что необходимо для работы, можно настроить через стандартные настройки в GUI. Однако иногда возникает необходимость добраться до скрытых настроек, тогда на помощь приходит утилита <noindex><a rel="nofollow" href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/defaults.1.html" >defaults</a></noindex>. Она позволяет читать, записывать и удалять пользовательские установки из командной строки. Приложения Mac OS X и прикладные программы обычно хранят настройки, используя механизм defaults. Давайте попробуем поработать с этими настройками.</p>
<p><span id="more-1026"></span></p>
<p>В терминах defaults настройки приложения храняться в своих доменах. Получить перечень доменов можно командой:</p>
<pre>
ole-mac:~ ctrld$ <b>defaults domains</b>
<small>.com.settings.local, AddressBookMe, AppFreshDaemon, Net Monitor,
SnippetDB, at.EternalStorms.flickery, at.obdev.LittleSnitchConfiguration,
at.obdev.LittleSnitchNetworkMonitor, au.id.tyson.AutoRate,
ca.indev.MAOSparkleHelper, ca.indev.MailActOn, ca.indev.MailTags,
ca.primatelabs.Geekbench2, ca.primatelabs.Geekbench2.LSSharedFileList,
com.Growl.GrowlHelperApp, com.acqualia.Picturesque2, com.adiumX.adiumX,
com.adobe.Reader, com.adobe.Reader_x86_9.0, com.adobe.acrobat.90.sh,
...</small></pre>
<p>Как вы видите, идентифицировать конкретную программу достаточно просто. MailActOn &#8211; ca.indev.MailActOn, Adium &#8211; com.adiumX.adiumX, и т.д.</p>
<p>Просмотр содержимого домена:</p>
<pre>
ole-mac:~ ctrld$ <b>defaults read de.metaquark.appfresh</b>
<small>{
    IUAppFreshUpdatesMaturity = 1;
    IUCategoriesVersion = 7;
    IULastDaemonRun = "2009-10-14 17:31:37 +0300";
    IUScheduleInterval = 0;
    IUSelectedTableViewFilter = "x-coredata://EBA970E8-B0D6-4058-A9B5-9B334546D149/IUCategory/p8";
    IUSetupWizardRun = 1;
    "IUSplitView Layout MainSplitView" =     {
        Left = 201;
        Right = 220;
    };
...</small></pre>
<p>Также можно просмотреть содержимое по имени программы:</p>
<pre>
<b>defaults read -app AppFresh</b>
</pre>
<p>Получить значение ключа:</p>
<pre>
ole-mac:~ ctrld$ <b>defaults read de.metaquark.appfresh IUAppFreshUpdatesMaturity</b>
1
</pre>
<p>Установить новое значение (не выполняйте эту команду, я не знаю, что обозначает &#8220;2&#8243; в AppFresh, это демонстрация принципа):</p>
<pre>
ole-mac:~ ctrld$ <b>defaults write de.metaquark.appfresh IUAppFreshUpdatesMaturity 2</b>
</pre>
<p>Перед тем, как что-то менять, лучше запомнить, что было раньше. Если уж что-то пошло совсе не так, то можно удалить настройки, и при запуске программы создадутся новые (эта операция совсем уж на крайний случай):</p>
<pre>
ole-mac:~ ctrld$ <b>defaults delete de.metaquark.appfresh</b>
</pre>
<p>Можно найти слово или фразу. Например, я хочу узнать, в каких доменах записано моё имя, например, чтобы выяснить, какие программы я купил (учтите, что в разных программах может быть разный формат имени &#8211; или &#8220;Имя Фамилия&#8221;, или &#8220;Фамилия Имя&#8221;):</p>
<pre>
ole-mac:~ ctrld$ <b>defaults find "Oleg Serdyukov"</b>
<small>Found 1 keys in domain 'com.appzapper.appzapper': {
    "Registration Name" = "Oleg Serdyukov";
}
Found 1 keys in domain 'com.blacey.SuperDuper!': {
    SDuserLicenseName = "Oleg Serdyukov";
}</small></pre>
<p>Я описал основные возможности defaults, за детальным описанием обращайтесь к &#8220;<noindex><a rel="nofollow" href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/defaults.1.html" >man defaults</a></noindex>&#8220;.</p>
<p>Посмотреть, как использовать defaults для изменения различных настроек, можно, например, на &#8220;<noindex><a rel="nofollow" href="http://www.macosxhints.com/search.php?query=defaults+write&#038;keyType=phrase&#038;datestart=&#038;dateend=&#038;topic=0&#038;type=stories&#038;results=50&#038;mode=search" >Mac OS X Hints</a></noindex>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1026/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Установка пакетов (MacPorts)</title>
		<link>http://theapplegeek.ru/archives/1011</link>
		<comments>http://theapplegeek.ru/archives/1011#comments</comments>
		<pubDate>Wed, 14 Oct 2009 14:10:46 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://ctrld.me/?p=1011</guid>
		<description><![CDATA[Вчера я слегка рассказал об установке XCode, сегодня же &#8220;вернёмся к корням&#8221; &#8211; займёмся установкой программ Open Source. Вместе с XCode поставляются все средства разработки, поэтому мы можем теперь скомпилировать любой пакет (configure, make, make install). Но простая компиляция имеет огромный недостаток &#8211; поддерживать программы в актуальном состоянии можно исключительно вручную, нужно регулярно отслеживать выход [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.theapplegeek.ru/wp-content/uploads/2009/10/01_macports-thumb.png" height="51" align="right" width="179" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Вчера я слегка рассказал <a href="http://theapplegeek.ru/archives/992" >об установке XCode</a>, сегодня же &#8220;вернёмся к корням&#8221; &#8211; займёмся установкой программ Open Source. Вместе с XCode поставляются все средства разработки, поэтому мы можем теперь скомпилировать любой пакет (configure, make, make install). Но простая компиляция имеет огромный недостаток &#8211; поддерживать программы в актуальном состоянии можно исключительно вручную, нужно регулярно отслеживать выход новых версий десятка используемых пакетов, списывать их, и по-новому компилировать. Решить эту проблему призваны менеджеры пакетов (для Linux это yum, apt, для FreeBSD &#8211; система портов).</p>
<p>Под Mac OS X самыми распространёнными являются <a href="http://theapplegeek.ru/goto/http://guide.macports.org/" >MacPorts</a> и <a href="http://theapplegeek.ru/goto/http://www.finkproject.org/" >Fink</a>. MacPorts использует идеологию BSD, Fink &#8211; Debian Linux. Мне больше нравится BSD, поэтому я использую первый менеджер. Его и рассмотрим сейчас.</p>
<p><span id="more-1011"></span></p>
<h2>Установка MacPorts</h2>
<p>Для начала необходимо <a href="http://theapplegeek.ru/goto/http://guide.macports.org/#installing.x11" >установить X11</a> с установочного диска Mac OS X и <a href="http://theapplegeek.ru/goto/http://developer.apple.com/technology/xcode.html" >XCode</a>.</p>
<p>Затем &#8211; списать <a href="http://theapplegeek.ru/goto/http://distfiles.macports.org/MacPorts/" >установочный пакет</a> под свою версию Mac OS X (для меня это MacPorts-1.8.0-10.6-SnowLeopard.dmg) и установить его.</p>
<p>MacPorts использует иерархию /opt/local/ как для себя, так и для установки программ. Инсталлятор в том числе прописывает этот путь в переменные окружения:</p>
<pre>
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
</pre>
<h2>Использование MacPorts</h2>
<p>Запускаем Terminal.app. Нужно убедиться, что каталоги /opt прописаны в путях:</p>
<pre>
ole-mac:~ ctrld$ echo $PATH
<small><b>/opt/local/bin:/opt/local/sbin</b>:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin</small>
</pre>
<p>Обновляем порты:</p>
<pre>
<b>sudo port selfupdate</b>
</pre>
<p>Ищем нужный порт (здесь sudo необязательно):</p>
<pre>
ole-mac:~ ctrld$ <b>port search mtr</b>
mtr @0.75 (net)
    'traceroute' and 'ping' in a single tool

rmtrash @0.3.3 (sysutils)
    move the file to OS X's Trash

Found 2 ports.
</pre>
<p>Можно посмотреть описание порта:</p>
<pre>
ole-mac:~ ctrld$ <b>port info mtr</b>
<small>mtr @0.75 (net)
Variants:             darwin_10, universal

Description:          As mtr starts, it investigates the network connection between the host mtr runs on and HOSTNAME. by sending packets with purposly low TTLs. It continues to send pack- ets with low TTL, noting the response time of
                      the inter- vening routers. This allows mtr to print the response percentage and response times of the internet route to HOSTNAME. A sudden increase in packetloss or response time is often an indication of a bad (or
                      simply over- loaded) link.
Homepage:             http://www.bitwizard.nl/mtr/

Platforms:            darwin
License:              unknown
Maintainers:          mr_bond@macports.org</small>
</pre>
<p>Установка порта:</p>
<pre>
<b>sudo port install mtr</b>
</pre>
<p>При установке остаются исходные тексты, скомпилированные файлы и прочее. Их можно удалить (вместо mtr, конечно же, подставив нужный порт):</p>
<pre>
<b>sudo port clean --all mtr</b>
</pre>
<p>Посмотреть, какие именно файлы устанавливаются с портом:</p>
<pre>
ole-mac:~ ctrld$ <b>port contents  mtr</b>
Port mtr contains:
  /opt/local/sbin/mtr
  /opt/local/share/man/man8/mtr.8.gz
</pre>
<p>Деинсталляция порта:</p>
<pre>
<b>sudo port uninstall mtr</b>
</pre>
<p>Перечень установленных пакетов:</p>
<pre>
<b>port installed</b>
</pre>
<p>Посмотреть, для каких пакетов есть обновления (предварительно нужно сделать selfupdate)</p>
<pre>
ole-mac:~ ctrld$ <b>sudo port selfupdate</b>
ole-mac:~ ctrld$ <b>sudo port outdated</b>
The following installed ports are outdated:
wget                           1.11.4_3 < 1.12_0
</pre>
<p>Обновление конкретного порта</p>
<pre>
<b>sudo port upgrade wget</b>
</pre>
<p>Эта команда не удаляет старый порт из списка, в итоге получается такое:</p>
<pre>
ole-mac:~ ctrld$ <b>port installed | grep wget</b>
wget @1.11.4_3
wget @1.12_0 (active)
</pre>
<p>Для удаления старой версии нужно использовать ключ "-u" (спасибо за подсказку <a href="http://theapplegeek.ru/goto/http://twitter.com/akaDimiG" >@akaDimiG</a>):</p>
<pre>
<b>sudo port -u upgrade wget</b>
</pre>
<p>Обновление всех портов</p>
<pre>
<b>sudo port upgrade outdated</b>
</pre>
<h2>Моё окружение</h2>
<p>Я периодически использую скомпилированные программы, но сейчас но ноутбуке стоят только самые необходимые порты. К ним относятся:</p>
<ul>
<li><b><a href="http://theapplegeek.ru/goto/http://www.agroman.net/corkscrew/" >corkscrew</a></b>. SSH-прокси. Полезная вещь для выхода по ssh через https-proxy (спасибо за подсказку <a href="http://theapplegeek.ru/goto/http://twitter.com/andy_shev" >@andy_shev</a>). Я отдельно расскажу об этой системе.</li>
<li><b><a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/Expect" >expect</a></b>. Язык для диалога с интерактивными сервисами, например можно в скрипте ответить на запросы входа по telnet.</li>
<li><b>mc</b>. <a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/Midnight_Commander" >Midnight Commander</a>. Кто ещё помнит "Norton Commander" или "Volkov Commander" поймут. Это файловая оболочка под консоль.</li>
<li><b>mtr</b>. <a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/MTR_(Software)" >Matt's traceroute</a> - незаменимая утилита для поиска сетевых проблем.</li>
<li><b><a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/Subversion_(software)" >subversion</a></b>. Система контроля версий SVN.</li>
<li><b><a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/Wget" >wget</a></b>. Программа для списывания контента с web/ftp-серверов.</li>
</ul>
<ul>Эти программы поставились вместе с <a href="http://theapplegeek.ru/goto/http://git-scm.com/" >git-core</a> (системой контроля версий), хоть есть и штатные утилиты:</p>
<li><b><a href="http://theapplegeek.ru/goto/http://curl.haxx.se/" >curl</a></b>. Программа для списывания файлов по сети, поддерживается много протоколов.</li>
<li><b><a href="http://theapplegeek.ru/goto/http://en.wikipedia.org/wiki/Rsync" >rsync</a></b>. Система для синхронизации файлов и каталогов.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1011/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

