<?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>{finalbug.org} &#187; Linux</title>
	<atom:link href="http://finalbug.org/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://finalbug.org</link>
	<description>Keep it simple &#38; stupid</description>
	<lastBuildDate>Sun, 20 May 2012 06:04:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>解决两个问题</title>
		<link>http://finalbug.org/2012/05/fix2problems/</link>
		<comments>http://finalbug.org/2012/05/fix2problems/#comments</comments>
		<pubDate>Tue, 01 May 2012 08:21:36 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://finalbug.org/?p=3099</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>其一，X中调换左ctrl和capslock键：</p>
<p>创建文件：~/.xmodmap：</p>
<pre class="brush: powershell; gutter: true; first-line: 1; highlight: []; html-script: false">remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L</pre>
<p>/etc/rc.local中添加：</p>
<pre class="brush: powershell; gutter: true; first-line: 1; highlight: []; html-script: false">xmodmap ~/.xmodmap 2&gt;/dev/null</pre>
<p>其二，alsa的启动错误，参考<a href="https://wiki.archlinux.org/index.php/Alsa" target="_blank">https://wiki.archlinux.org/index.php/Alsa</a></p>
<p>执行：</p>
<pre class="brush: powershell; gutter: true; first-line: 1; highlight: []; html-script: false"># alsactl -f /var/lib/alsa/asound.state store</pre>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2012/05/fix2problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FFmpeg详解</title>
		<link>http://finalbug.org/2012/02/ffmpeg-man/</link>
		<comments>http://finalbug.org/2012/02/ffmpeg-man/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 09:13:19 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://finalbug.org/?p=3041</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>为给Zimo转换视频，发现任何工具都没有直接用ffmpeg来得爽快啊。万能的Linux……</p>
<p><strong>ffmpeg使用语法：</strong></p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">ffmpeg [[options][`-i&#039; input_file]]... {[options] output_file}...</pre>
<p>如果没有输入文件，那么视音频捕捉就会起作用。</p>
<p>作为通用的规则，选项一般用于下一个特定的文件。如果你给 –b 64选项，改选会设置下一个视频速率。对于原始输入文件，格式选项可能是需要的。</p>
<p>缺省情况下，ffmpeg试图尽可能的无损转换，采用与输入同样的音频视频参数来输出。</p>
<p><strong>选项</strong></p>
<p><strong>a) 通用选项</strong></p>
<p>-L license</p>
<p>-h 帮助</p>
<p>-fromats 显示可用的格式，编解码的，协议的。。。</p>
<p>-f fmt 强迫采用格式fmt</p>
<p>-I filename 输入文件</p>
<p>-y 覆盖输出文件</p>
<p>-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持</p>
<p>-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持</p>
<p>-title string 设置标题</p>
<p>-author string 设置作者</p>
<p>-copyright string 设置版权</p>
<p>-comment string 设置评论</p>
<p>-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项（比特率，编解码以及缓冲区大小）自动设置 ，只需要输入如下的就可以了：<br />
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg</p>
<p>-hq 激活高质量设置</p>
<p>-itsoffset offset 设置以秒为基准的时间偏移，该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳，定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持</p>
<p><strong>b) 视频选项</strong></p>
<p>-b bitrate 设置比特率，缺省200kb/s</p>
<p>-r fps 设置帧频 缺省25</p>
<p>-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用：<br />
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576</p>
<p>-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777</p>
<p>-croptop size 设置顶部切除带大小 像素单位</p>
<p>-cropbottom size –cropleft size –cropright size</p>
<p>-padtop size 设置顶部补齐的大小 像素单位</p>
<p>-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数，红:绿:兰排列，比如 000000代表黑色)</p>
<p>-vn 不做视频记录</p>
<p>-bt tolerance 设置视频码率容忍度kbit/s</p>
<p>-maxrate bitrate设置最大视频码率容忍度</p>
<p>-minrate bitreate 设置最小视频码率容忍度</p>
<p>-bufsize size 设置码率控制缓冲区大小</p>
<p>-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。</p>
<p>-sameq 使用同样视频质量作为源（VBR）</p>
<p>-pass n 选择处理遍数（1或者2）。两遍编码非常有用。第一遍生成统计信息，第二遍生成精确的请求的码率</p>
<p>-passlogfile file 选择两遍的纪录文件名为file</p>
<p><strong>c)高级视频选项</strong></p>
<p>-g gop_size 设置图像组大小</p>
<p>-intra 仅适用帧内编码</p>
<p>-qscale q 使用固定的视频量化标度(VBR)</p>
<p>-qmin q 最小视频量化标度(VBR)</p>
<p>-qmax q 最大视频量化标度(VBR)</p>
<p>-qdiff q 量化标度间最大偏差 (VBR)</p>
<p>-qblur blur 视频量化标度柔化(VBR)</p>
<p>-qcomp compression 视频量化标度压缩(VBR)</p>
<p>-rc_init_cplx complexity 一遍编码的初始复杂度</p>
<p>-b_qfactor factor 在p和b帧间的qp因子</p>
<p>-i_qfactor factor 在p和i帧间的qp因子</p>
<p>-b_qoffset offset 在p和b帧间的qp偏差</p>
<p>-i_qoffset offset 在p和i帧间的qp偏差</p>
<p>-rc_eq equation 设置码率控制方程 默认tex^qComp</p>
<p>-rc_override override 特定间隔下的速率控制重载</p>
<p>-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full</p>
<p>-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC</p>
<p>-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM</p>
<p>-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE</p>
<p>-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)</p>
<p>-bf frames 使用frames B 帧，支持mpeg1,mpeg2,mpeg4</p>
<p>-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD</p>
<p>-4mv 使用4个运动矢量 仅用于mpeg4</p>
<p>-part 使用数据划分 仅用于mpeg4</p>
<p>-bug param 绕过没有被自动监测到编码器的问题</p>
<p>-strict strictness 跟标准的严格性</p>
<p>-aic 使能高级帧内编码 h263+</p>
<p>-umv 使能无限运动矢量 h263+</p>
<p>-deinterlace 不采用交织方法</p>
<p>-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织，但是损失更大</p>
<p>-psnr 计算压缩帧的psnr</p>
<p>-vstats 输出视频编码统计到vstats_hhmmss.log</p>
<p>-vhook module 插入视频处理模块 module 包括了模块名和参数，用空格分开</p>
<p><strong>D)音频选项</strong></p>
<p>-ab bitrate 设置音频码率</p>
<p>-ar freq 设置音频采样率</p>
<p>-ac channels 设置通道 缺省为1</p>
<p>-an 不使能音频纪录</p>
<p>-acodec codec 使用codec编解码</p>
<p><strong>E)音频/视频捕获选项</strong></p>
<p>-vd device 设置视频捕获设备。比如/dev/video0</p>
<p>-vc channel 设置视频捕获通道 DV1394专用</p>
<p>-tvstd standard 设置电视标准 NTSC PAL(SECAM)</p>
<p>-dv1394 设置DV1394捕获</p>
<p>-av device 设置音频设备 比如/dev/dsp</p>
<p><strong>F)高级选项</strong></p>
<p>-map file:stream 设置输入流映射</p>
<p>-debug 打印特定调试信息</p>
<p>-benchmark 为基准测试加入时间</p>
<p>-hex 倾倒每一个输入包</p>
<p>-bitexact 仅使用位精确算法 用于编解码测试</p>
<p>-ps size 设置包大小，以bits为单位</p>
<p>-re 以本地帧频读数据，主要用于模拟捕获设备</p>
<p>-loop 循环输入流。只工作于图像流，用于ffserver测试</p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2012/02/ffmpeg-man/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vim cmd</title>
		<link>http://finalbug.org/2012/02/vim-cmd/</link>
		<comments>http://finalbug.org/2012/02/vim-cmd/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 02:34:47 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://finalbug.org/?p=3037</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
<table id="wp-table-reloaded-id-1-no-1" class="wp-table-reloaded wp-table-reloaded-id-1">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">命令</th><th class="column-2">说明</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">进入vi的命令</td><td class="column-2"></td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">vi filename</td><td class="column-2">打开或新建文件，并将光标置于第一行首</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">vi +n filename</td><td class="column-2">打开文件，并将光标置于第n行首</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">vi +  filename</td><td class="column-2">打开文件，并将光标置于最后一行首</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">vi +/pattern filename</td><td class="column-2">打开文件，并将光标置于第一个与pattern匹配的串处</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">vi -r filename</td><td class="column-2">在上次正用vi编辑时发生系统崩溃，恢复filename</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">vi filename..filename</td><td class="column-2">打开多个文件，依次进行编辑</td>
	</tr>
	<tr class="row-9 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-10 even">
		<td class="column-1">光标控制命令</td><td class="column-2"></td>
	</tr>
	<tr class="row-11 odd">
		<td class="column-1">h或^h或Backspace</td><td class="column-2">向左移一个字符</td>
	</tr>
	<tr class="row-12 even">
		<td class="column-1">b</td><td class="column-2">移到前一个字的开头</td>
	</tr>
	<tr class="row-13 odd">
		<td class="column-1">B</td><td class="column-2">移到前一个字的开头，忽略标点符号或移到当前行的第一列</td>
	</tr>
	<tr class="row-14 even">
		<td class="column-1">-</td><td class="column-2">移到前一行的第一个非空字符</td>
	</tr>
	<tr class="row-15 odd">
		<td class="column-1">^</td><td class="column-2">移到当前行的第一个非空字符</td>
	</tr>
	<tr class="row-16 even">
		<td class="column-1">(</td><td class="column-2">移到句子的开头</td>
	</tr>
	<tr class="row-17 odd">
		<td class="column-1">{</td><td class="column-2">移到段落的开头</td>
	</tr>
	<tr class="row-18 even">
		<td class="column-1">l或空格</td><td class="column-2">向右移一个字符</td>
	</tr>
	<tr class="row-19 odd">
		<td class="column-1">w</td><td class="column-2">移到下一个字的开头</td>
	</tr>
	<tr class="row-20 even">
		<td class="column-1">W</td><td class="column-2">移到下一个字的开头，忽略标点符号</td>
	</tr>
	<tr class="row-21 odd">
		<td class="column-1">e</td><td class="column-2">移到下一个字的结尾</td>
	</tr>
	<tr class="row-22 even">
		<td class="column-1">E</td><td class="column-2">移到下一个字的结尾，忽略标点符号</td>
	</tr>
	<tr class="row-23 odd">
		<td class="column-1">$</td><td class="column-2">移到当前行的最后一个字符</td>
	</tr>
	<tr class="row-24 even">
		<td class="column-1">+或return</td><td class="column-2">移到下一行的第一个字符</td>
	</tr>
	<tr class="row-25 odd">
		<td class="column-1">)</td><td class="column-2">移到句子的结尾</td>
	</tr>
	<tr class="row-26 even">
		<td class="column-1">}</td><td class="column-2">移到下一个段落的开头</td>
	</tr>
	<tr class="row-27 odd">
		<td class="column-1">k或^p（ctrl+p)</td><td class="column-2">向上移一行</td>
	</tr>
	<tr class="row-28 even">
		<td class="column-1">n-</td><td class="column-2">光标上移n行</td>
	</tr>
	<tr class="row-29 odd">
		<td class="column-1">M</td><td class="column-2">移到屏幕的中间一行</td>
	</tr>
	<tr class="row-30 even">
		<td class="column-1">H</td><td class="column-2">移到屏幕的第一行</td>
	</tr>
	<tr class="row-31 odd">
		<td class="column-1">j或^j或^n或Enter</td><td class="column-2">向下移一行</td>
	</tr>
	<tr class="row-32 even">
		<td class="column-1">n+</td><td class="column-2">光标下移n行</td>
	</tr>
	<tr class="row-33 odd">
		<td class="column-1">L</td><td class="column-2">移到屏幕的最后一行</td>
	</tr>
	<tr class="row-34 even">
		<td class="column-1">G</td><td class="column-2">移到文件的最后一行</td>
	</tr>
	<tr class="row-35 odd">
		<td class="column-1">nG</td><td class="column-2">移到文件的第n行</td>
	</tr>
	<tr class="row-36 even">
		<td class="column-1">n$</td><td class="column-2"> 光标移至第n行尾</td>
	</tr>
	<tr class="row-37 odd">
		<td class="column-1">n|</td><td class="column-2">移到当前行的第n列</td>
	</tr>
	<tr class="row-38 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-39 odd">
		<td class="column-1">添加文本命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-40 even">
		<td class="column-1">a</td><td class="column-2">在光标后插入文本</td>
	</tr>
	<tr class="row-41 odd">
		<td class="column-1">A</td><td class="column-2">在当前行插入文本</td>
	</tr>
	<tr class="row-42 even">
		<td class="column-1">i</td><td class="column-2">在光标前插入文本</td>
	</tr>
	<tr class="row-43 odd">
		<td class="column-1">I</td><td class="column-2">在当前行前插入文本</td>
	</tr>
	<tr class="row-44 even">
		<td class="column-1">o</td><td class="column-2">在当前行的下边插入新行</td>
	</tr>
	<tr class="row-45 odd">
		<td class="column-1">O</td><td class="column-2">在当前行的上边插入新行</td>
	</tr>
	<tr class="row-46 even">
		<td class="column-1">:r file</td><td class="column-2">读入文件file内容，并插在当前行后</td>
	</tr>
	<tr class="row-47 odd">
		<td class="column-1">:nr file</td><td class="column-2">读入文件file内容，并插在第n行后</td>
	</tr>
	<tr class="row-48 even">
		<td class="column-1">s</td><td class="column-2">从当前光标位置处开始，以输入的文本替代指定数目的字符</td>
	</tr>
	<tr class="row-49 odd">
		<td class="column-1">S</td><td class="column-2">删除指定数目的行，并以所输入文本代替之</td>
	</tr>
	<tr class="row-50 even">
		<td class="column-1">ncw或nCW</td><td class="column-2">修改指定数目的字</td>
	</tr>
	<tr class="row-51 odd">
		<td class="column-1">nCC</td><td class="column-2">修改指定数目的行</td>
	</tr>
	<tr class="row-52 even">
		<td class="column-1">Esc</td><td class="column-2">回到命令模式</td>
	</tr>
	<tr class="row-53 odd">
		<td class="column-1">^v char</td><td class="column-2">插入时忽略char的指定意义，这是为了插入特殊字符</td>
	</tr>
	<tr class="row-54 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-55 odd">
		<td class="column-1">删除文本命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-56 even">
		<td class="column-1">x</td><td class="column-2">删除光标处的字符，可以在x前加上需要删除的字符数目</td>
	</tr>
	<tr class="row-57 odd">
		<td class="column-1">nx</td><td class="column-2">从当前光标处往后删除n个字符</td>
	</tr>
	<tr class="row-58 even">
		<td class="column-1">X</td><td class="column-2">删除光标前的字符，可以在X前加上需要删除的字符数目</td>
	</tr>
	<tr class="row-59 odd">
		<td class="column-1">nX</td><td class="column-2">从当前光标处往前删除n个字符</td>
	</tr>
	<tr class="row-60 even">
		<td class="column-1">dw</td><td class="column-2">删至下一个字的开头</td>
	</tr>
	<tr class="row-61 odd">
		<td class="column-1">ndw</td><td class="column-2">从当前光标处往后删除n个字</td>
	</tr>
	<tr class="row-62 even">
		<td class="column-1">dG</td><td class="column-2">删除行，直到文件结束</td>
	</tr>
	<tr class="row-63 odd">
		<td class="column-1">dd</td><td class="column-2">删除整行</td>
	</tr>
	<tr class="row-64 even">
		<td class="column-1">ndd</td><td class="column-2">从当前行开始往后删除</td>
	</tr>
	<tr class="row-65 odd">
		<td class="column-1">db</td><td class="column-2">删除光标前面的字</td>
	</tr>
	<tr class="row-66 even">
		<td class="column-1">ndb</td><td class="column-2">从当前行开始往前删除n字</td>
	</tr>
	<tr class="row-67 odd">
		<td class="column-1">:n,md</td><td class="column-2">从第m行开始往前删除n行</td>
	</tr>
	<tr class="row-68 even">
		<td class="column-1">d或d$</td><td class="column-2">从光标处删除到行尾</td>
	</tr>
	<tr class="row-69 odd">
		<td class="column-1">dcursor_command</td><td class="column-2">删除至光标命令处，如dG将从当产胆行删除至文件的末尾</td>
	</tr>
	<tr class="row-70 even">
		<td class="column-1">^h或backspace</td><td class="column-2">插入时，删除前面的字符</td>
	</tr>
	<tr class="row-71 odd">
		<td class="column-1">^w</td><td class="column-2">插入时，删除前面的字</td>
	</tr>
	<tr class="row-72 even">
		<td class="column-1">^u(Ctrl+u)</td><td class="column-2">删除输入方式下所输入的文本</td>
	</tr>
	<tr class="row-73 odd">
		<td class="column-1">rchar</td><td class="column-2">用char替换当前字符</td>
	</tr>
	<tr class="row-74 even">
		<td class="column-1">R text escape</td><td class="column-2">用text替换当前字符直到换下Esc键</td>
	</tr>
	<tr class="row-75 odd">
		<td class="column-1">stext escape</td><td class="column-2">用text代替当前字符</td>
	</tr>
	<tr class="row-76 even">
		<td class="column-1">S或cctext escape</td><td class="column-2">用text代替整行</td>
	</tr>
	<tr class="row-77 odd">
		<td class="column-1">cwtext escape</td><td class="column-2">将当前字改为text</td>
	</tr>
	<tr class="row-78 even">
		<td class="column-1">Ctext escape</td><td class="column-2">将当前行余下的改为text</td>
	</tr>
	<tr class="row-79 odd">
		<td class="column-1">cG escape</td><td class="column-2">修改至文件的末尾</td>
	</tr>
	<tr class="row-80 even">
		<td class="column-1">ccursor_cmd text escape</td><td class="column-2">从当前位置处到光标命令位置处都改为text</td>
	</tr>
	<tr class="row-81 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-82 even">
		<td class="column-1">查找与替换命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-83 odd">
		<td class="column-1">/text</td><td class="column-2">在文件中向前查找text</td>
	</tr>
	<tr class="row-84 even">
		<td class="column-1">?text</td><td class="column-2">在文件中向后查找text</td>
	</tr>
	<tr class="row-85 odd">
		<td class="column-1">n</td><td class="column-2">在同一方向重复查找</td>
	</tr>
	<tr class="row-86 even">
		<td class="column-1">N</td><td class="column-2">在相反方向重复查找</td>
	</tr>
	<tr class="row-87 odd">
		<td class="column-1">ftext</td><td class="column-2">在当前行向前查找text</td>
	</tr>
	<tr class="row-88 even">
		<td class="column-1">Ftext</td><td class="column-2">在当前行向后查找text</td>
	</tr>
	<tr class="row-89 odd">
		<td class="column-1">ttext</td><td class="column-2">在当前行向前查找text，并将光标定位在text的第一个字符</td>
	</tr>
	<tr class="row-90 even">
		<td class="column-1">Ttext</td><td class="column-2">在当前行向后查找text，并将光标定位在text的第一个字符</td>
	</tr>
	<tr class="row-91 odd">
		<td class="column-1">:set ic</td><td class="column-2">查找时忽略大小写</td>
	</tr>
	<tr class="row-92 even">
		<td class="column-1">:set noic</td><td class="column-2">查找时对大小写敏感</td>
	</tr>
	<tr class="row-93 odd">
		<td class="column-1">:s/oldtext/newtext</td><td class="column-2">用newtext替换oldtext</td>
	</tr>
	<tr class="row-94 even">
		<td class="column-1">:m,ns/oldtext/newtext</td><td class="column-2">在m行通过n，用newtext替换oldtext</td>
	</tr>
	<tr class="row-95 odd">
		<td class="column-1">&amp;</td><td class="column-2">重复最后的:s命令</td>
	</tr>
	<tr class="row-96 even">
		<td class="column-1">:g/text1/s/text2/text3</td><td class="column-2">查找包含text1的行，用text3替换text2</td>
	</tr>
	<tr class="row-97 odd">
		<td class="column-1">:g/text/command</td><td class="column-2">在所有包含text的行运行command所表示的命令</td>
	</tr>
	<tr class="row-98 even">
		<td class="column-1">:v/text/command</td><td class="column-2">在所有不包含text的行运行command所表示的命令</td>
	</tr>
	<tr class="row-99 odd">
		<td class="column-1">：s/p1/p2/g</td><td class="column-2">将当前行中所有p1均用p2替代</td>
	</tr>
	<tr class="row-100 even">
		<td class="column-1">：n1,n2s/p1/p2/g</td><td class="column-2">将第n1至n2行中所有p1均用p2替代</td>
	</tr>
	<tr class="row-101 odd">
		<td class="column-1">：g/p1/s//p2/g</td><td class="column-2">将文件中所有p1均用p2替换</td>
	</tr>
	<tr class="row-102 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-103 odd">
		<td class="column-1">复制文本命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-104 even">
		<td class="column-1">yy</td><td class="column-2">将当前行的内容放入临时缓冲区</td>
	</tr>
	<tr class="row-105 odd">
		<td class="column-1">nyy</td><td class="column-2">将n行的内容放入临时缓冲区</td>
	</tr>
	<tr class="row-106 even">
		<td class="column-1">p</td><td class="column-2">将临时缓冲区中的文本放入光标后</td>
	</tr>
	<tr class="row-107 odd">
		<td class="column-1">P</td><td class="column-2">将临时缓冲区中的文本放入光标前</td>
	</tr>
	<tr class="row-108 even">
		<td class="column-1">(a-z)nyy </td><td class="column-2">复制n行放入名字为圆括号内的可命名缓冲区，省略n表示当前行</td>
	</tr>
	<tr class="row-109 odd">
		<td class="column-1">       <br />
"(a-z)ndd</td><td class="column-2">删除n行放入名字为圆括号内的可命名缓冲区，省略n表示当前行</td>
	</tr>
	<tr class="row-110 even">
		<td class="column-1">(a-z)p<br />
        </td><td class="column-2">将名字为圆括号的可命名缓冲区的内容放入当前行后</td>
	</tr>
	<tr class="row-111 odd">
		<td class="column-1">"(a-z)P</td><td class="column-2">将名字为圆括号的可命名缓冲区的内容放入当前行前</td>
	</tr>
	<tr class="row-112 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-113 odd">
		<td class="column-1">撤消与重复命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-114 even">
		<td class="column-1">u</td><td class="column-2">撤消最后一次修改</td>
	</tr>
	<tr class="row-115 odd">
		<td class="column-1">U</td><td class="column-2">撤消当前行的所有修改</td>
	</tr>
	<tr class="row-116 even">
		<td class="column-1">.</td><td class="column-2">重复最后一次修改</td>
	</tr>
	<tr class="row-117 odd">
		<td class="column-1">,</td><td class="column-2">以相反的方向重复前面的f、F、t或T查找命令</td>
	</tr>
	<tr class="row-118 even">
		<td class="column-1">;</td><td class="column-2">重复前面的f、F、t或T查找命令</td>
	</tr>
	<tr class="row-119 odd">
		<td class="column-1">"np</td><td class="column-2">取回最后第n次的删除(缓冲区中存有一定次数的删除内容，一般为9)</td>
	</tr>
	<tr class="row-120 even">
		<td class="column-1">n</td><td class="column-2">重复前面的/或?查找命令</td>
	</tr>
	<tr class="row-121 odd">
		<td class="column-1">N</td><td class="column-2">以相反方向重复前面的/或?命令</td>
	</tr>
	<tr class="row-122 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-123 odd">
		<td class="column-1">保存文本和退出vi：</td><td class="column-2"></td>
	</tr>
	<tr class="row-124 even">
		<td class="column-1">:w</td><td class="column-2">保存文件但不退出vi</td>
	</tr>
	<tr class="row-125 odd">
		<td class="column-1">:w file</td><td class="column-2">将修改保存在file中但不退出vi</td>
	</tr>
	<tr class="row-126 even">
		<td class="column-1">:wq或ZZ或:x</td><td class="column-2">保存文件并退出vi</td>
	</tr>
	<tr class="row-127 odd">
		<td class="column-1">:q!</td><td class="column-2">不保存文件，退出vi</td>
	</tr>
	<tr class="row-128 even">
		<td class="column-1">:e! </td><td class="column-2">放弃所有修改，从上次保存文件开始再编辑</td>
	</tr>
	<tr class="row-129 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-130 even">
		<td class="column-1">选项设置 </td><td class="column-2"></td>
	</tr>
	<tr class="row-131 odd">
		<td class="column-1">all</td><td class="column-2">列出所有选项设置情况 </td>
	</tr>
	<tr class="row-132 even">
		<td class="column-1">term</td><td class="column-2">设置终端类型</td>
	</tr>
	<tr class="row-133 odd">
		<td class="column-1">ignorance</td><td class="column-2">在搜索中忽略大小写 </td>
	</tr>
	<tr class="row-134 even">
		<td class="column-1">list</td><td class="column-2">显示制表位(Ctrl+I)和行尾标志（$) </td>
	</tr>
	<tr class="row-135 odd">
		<td class="column-1">number</td><td class="column-2">显示行号</td>
	</tr>
	<tr class="row-136 even">
		<td class="column-1">report</td><td class="column-2">显示由面向行的命令修改过的数目</td>
	</tr>
	<tr class="row-137 odd">
		<td class="column-1">terse</td><td class="column-2">显示简短的警告信息 </td>
	</tr>
	<tr class="row-138 even">
		<td class="column-1">warn</td><td class="column-2">在转到别的文件时若没保存当前文件则显示NO write信息</td>
	</tr>
	<tr class="row-139 odd">
		<td class="column-1">nomagic</td><td class="column-2">允许在搜索模式中，使用前面不带“\”的特殊字符 </td>
	</tr>
	<tr class="row-140 even">
		<td class="column-1">nowrapscan</td><td class="column-2">禁止vi在搜索到达文件两端时，又从另一端开始</td>
	</tr>
	<tr class="row-141 odd">
		<td class="column-1">mesg</td><td class="column-2">允许vi显示其他用户用write写到自己终端上的信息 </td>
	</tr>
	<tr class="row-142 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-143 odd">
		<td class="column-1">vi中的选项</td><td class="column-2"></td>
	</tr>
	<tr class="row-144 even">
		<td class="column-1">:set all</td><td class="column-2">打印所有选项</td>
	</tr>
	<tr class="row-145 odd">
		<td class="column-1">:set nooption</td><td class="column-2">关闭option选项</td>
	</tr>
	<tr class="row-146 even">
		<td class="column-1">:set nu</td><td class="column-2">每行前打印行号</td>
	</tr>
	<tr class="row-147 odd">
		<td class="column-1">:set showmode</td><td class="column-2">显示是输入模式还是替换模式</td>
	</tr>
	<tr class="row-148 even">
		<td class="column-1">:set noic</td><td class="column-2">查找时忽略大小写</td>
	</tr>
	<tr class="row-149 odd">
		<td class="column-1">:set list</td><td class="column-2">显示制表符(^I)和行尾符号</td>
	</tr>
	<tr class="row-150 even">
		<td class="column-1">:set ts=8 </td><td class="column-2">为文本输入设置tab stops</td>
	</tr>
	<tr class="row-151 odd">
		<td class="column-1">:set window=n</td><td class="column-2">设置文本窗口显示n行</td>
	</tr>
	<tr class="row-152 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-153 odd">
		<td class="column-1">最后行方式命令 </td><td class="column-2"></td>
	</tr>
	<tr class="row-154 even">
		<td class="column-1">：n1,n2 co n3</td><td class="column-2">将n1行到n2行之间的内容拷贝到第n3行下 </td>
	</tr>
	<tr class="row-155 odd">
		<td class="column-1">：n1,n2 m n3</td><td class="column-2">将n1行到n2行之间的内容移至到第n3行下 </td>
	</tr>
	<tr class="row-156 even">
		<td class="column-1">：n1,n2 d</td><td class="column-2">将n1行到n2行之间的内容删除 </td>
	</tr>
	<tr class="row-157 odd">
		<td class="column-1">：w</td><td class="column-2">保存当前文件 </td>
	</tr>
	<tr class="row-158 even">
		<td class="column-1">：e filename</td><td class="column-2">打开文件filename进行编辑 </td>
	</tr>
	<tr class="row-159 odd">
		<td class="column-1">：x</td><td class="column-2">保存当前文件并退出 </td>
	</tr>
	<tr class="row-160 even">
		<td class="column-1">：q</td><td class="column-2">退出vi </td>
	</tr>
	<tr class="row-161 odd">
		<td class="column-1">：q!</td><td class="column-2">不保存文件并退出vi </td>
	</tr>
	<tr class="row-162 even">
		<td class="column-1">：!command </td><td class="column-2">执行shell命令command </td>
	</tr>
	<tr class="row-163 odd">
		<td class="column-1">：n1,n2 w!command</td><td class="column-2">将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入 </td>
	</tr>
	<tr class="row-164 even">
		<td class="column-1">：r!command</td><td class="column-2">将命令command的输出结果放到当前行 </td>
	</tr>
	<tr class="row-165 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-166 even">
		<td class="column-1">vi的状态</td><td class="column-2"></td>
	</tr>
	<tr class="row-167 odd">
		<td class="column-1">:.=</td><td class="column-2">打印当前行的行号</td>
	</tr>
	<tr class="row-168 even">
		<td class="column-1">:=</td><td class="column-2">打印文件中的行数</td>
	</tr>
	<tr class="row-169 odd">
		<td class="column-1">^g</td><td class="column-2">显示文件名、当前的行号、文件的总行数和文件位置的百分比</td>
	</tr>
	<tr class="row-170 even">
		<td class="column-1">:l </td><td class="column-2">使用字母"l"来显示许多的特殊字符，如制表符和换行符</td>
	</tr>
	<tr class="row-171 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-172 even">
		<td class="column-1">寄存器操作</td><td class="column-2"></td>
	</tr>
	<tr class="row-173 odd">
		<td class="column-1">"?nyy</td><td class="column-2">将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字 </td>
	</tr>
	<tr class="row-174 even">
		<td class="column-1">"?nyw</td><td class="column-2">将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字 </td>
	</tr>
	<tr class="row-175 odd">
		<td class="column-1">"?nyl</td><td class="column-2">将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字 </td>
	</tr>
	<tr class="row-176 even">
		<td class="column-1">"?p </td><td class="column-2">取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字</td>
	</tr>
	<tr class="row-177 odd">
		<td class="column-1">ndd</td><td class="column-2">将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。</td>
	</tr>
	<tr class="row-178 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-179 odd">
		<td class="column-1">在文本中定位段落和放置标记</td><td class="column-2"></td>
	</tr>
	<tr class="row-180 even">
		<td class="column-1">{</td><td class="column-2">在第一列插入{来定义一个段落</td>
	</tr>
	<tr class="row-181 odd">
		<td class="column-1">[[</td><td class="column-2">回到段落的开头处</td>
	</tr>
	<tr class="row-182 even">
		<td class="column-1">]]</td><td class="column-2">向前移到下一个段落的开头处</td>
	</tr>
	<tr class="row-183 odd">
		<td class="column-1">m(a-z)</td><td class="column-2">用一个字母来标记当前位置，如用mz表示标记z</td>
	</tr>
	<tr class="row-184 even">
		<td class="column-1">'(a-z)</td><td class="column-2">将光标移动到指定的标记，如用'z表示移动到z</td>
	</tr>
	<tr class="row-185 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-186 even">
		<td class="column-1">在vi中连接行</td><td class="column-2"></td>
	</tr>
	<tr class="row-187 odd">
		<td class="column-1">J</td><td class="column-2">将下一行连接到当前行的末尾</td>
	</tr>
	<tr class="row-188 even">
		<td class="column-1">nJ </td><td class="column-2">连接后面n行</td>
	</tr>
	<tr class="row-189 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-190 even">
		<td class="column-1">光标放置与屏幕调整</td><td class="column-2"></td>
	</tr>
	<tr class="row-191 odd">
		<td class="column-1">H</td><td class="column-2">将光标移动到屏幕的顶行</td>
	</tr>
	<tr class="row-192 even">
		<td class="column-1">nH</td><td class="column-2">将光标移动到屏幕顶行下的第n行</td>
	</tr>
	<tr class="row-193 odd">
		<td class="column-1">M</td><td class="column-2">将光标移动到屏幕的中间</td>
	</tr>
	<tr class="row-194 even">
		<td class="column-1">L</td><td class="column-2">将光标移动到屏幕的底行</td>
	</tr>
	<tr class="row-195 odd">
		<td class="column-1">nL</td><td class="column-2">将光标移动到屏幕底行上的第n行</td>
	</tr>
	<tr class="row-196 even">
		<td class="column-1">^e(ctrl+e)</td><td class="column-2">将屏幕上滚一行</td>
	</tr>
	<tr class="row-197 odd">
		<td class="column-1">^y</td><td class="column-2">将屏幕下滚一行</td>
	</tr>
	<tr class="row-198 even">
		<td class="column-1">^u</td><td class="column-2">将屏幕上滚半页</td>
	</tr>
	<tr class="row-199 odd">
		<td class="column-1">^d</td><td class="column-2">将屏幕下滚半页</td>
	</tr>
	<tr class="row-200 even">
		<td class="column-1">^b</td><td class="column-2">将屏幕上滚一页</td>
	</tr>
	<tr class="row-201 odd">
		<td class="column-1">^f</td><td class="column-2">将屏幕下滚一页</td>
	</tr>
	<tr class="row-202 even">
		<td class="column-1">^l</td><td class="column-2">重绘屏幕</td>
	</tr>
	<tr class="row-203 odd">
		<td class="column-1">z-return</td><td class="column-2">将当前行置为屏幕的顶行</td>
	</tr>
	<tr class="row-204 even">
		<td class="column-1">nz-return</td><td class="column-2">将当前行下的第n行置为屏幕的顶行</td>
	</tr>
	<tr class="row-205 odd">
		<td class="column-1">z.</td><td class="column-2">将当前行置为屏幕的中央</td>
	</tr>
	<tr class="row-206 even">
		<td class="column-1">nz.</td><td class="column-2">将当前行上的第n行置为屏幕的中央</td>
	</tr>
	<tr class="row-207 odd">
		<td class="column-1">z- </td><td class="column-2">将当前行置为屏幕的底行</td>
	</tr>
	<tr class="row-208 even">
		<td class="column-1">nz- </td><td class="column-2">将当前行上的第n行置为屏幕的底行</td>
	</tr>
	<tr class="row-209 odd">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-210 even">
		<td class="column-1">vi中的shell转义命令</td><td class="column-2"></td>
	</tr>
	<tr class="row-211 odd">
		<td class="column-1">:!command</td><td class="column-2">执行shell的command命令，如:!ls</td>
	</tr>
	<tr class="row-212 even">
		<td class="column-1">:!!</td><td class="column-2">执行前一个shell命令</td>
	</tr>
	<tr class="row-213 odd">
		<td class="column-1">:r!command</td><td class="column-2">读取command命令的输入并插入，如:r!ls会先执行ls，然后读入内容</td>
	</tr>
	<tr class="row-214 even">
		<td class="column-1">:w!command</td><td class="column-2">将当前已编辑文件作为command命令的标准输入并执行command命令，如:w!grep all</td>
	</tr>
	<tr class="row-215 odd">
		<td class="column-1">:cd directory</td><td class="column-2">将当前工作目录更改为directory所表示的目录</td>
	</tr>
	<tr class="row-216 even">
		<td class="column-1">:sh</td><td class="column-2">将启动一个子shell，使用^d(ctrl+d)返回vi</td>
	</tr>
	<tr class="row-217 odd">
		<td class="column-1">:so file</td><td class="column-2">在shell程序file中读入和执行命令</td>
	</tr>
	<tr class="row-218 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-219 odd">
		<td class="column-1">vi中的宏与缩写</td><td class="column-2"></td>
	</tr>
	<tr class="row-220 even">
		<td class="column-1">:map key command_seq</td><td class="column-2">定义一个键来运行command_seq，如:map e ea，无论什么时候都可以e移到一个字的末尾来追加文本</td>
	</tr>
	<tr class="row-221 odd">
		<td class="column-1">:map</td><td class="column-2">在状态行显示所有已定义的宏</td>
	</tr>
	<tr class="row-222 even">
		<td class="column-1">:umap key</td><td class="column-2">删除该键的宏</td>
	</tr>
	<tr class="row-223 odd">
		<td class="column-1">:ab string1 string2</td><td class="column-2">定义一个缩写，使得当插入string1时，用string2替换string1。当要插入文本时，键入string1然后按Esc键，系统就插入了string2</td>
	</tr>
	<tr class="row-224 even">
		<td class="column-1">:ab</td><td class="column-2">显示所有缩写</td>
	</tr>
	<tr class="row-225 odd">
		<td class="column-1">:una string</td><td class="column-2">取消string的缩写</td>
	</tr>
	<tr class="row-226 even">
		<td class="column-1"></td><td class="column-2"></td>
	</tr>
	<tr class="row-227 odd">
		<td class="column-1">缩进文本命令：</td><td class="column-2"></td>
	</tr>
	<tr class="row-228 even">
		<td class="column-1">^i(ctrl+i)或tab</td><td class="column-2">插入文本时，插入移动的宽度，移动宽度是事先定义好的</td>
	</tr>
	<tr class="row-229 odd">
		<td class="column-1">:set ai</td><td class="column-2">打开自动缩进</td>
	</tr>
	<tr class="row-230 even">
		<td class="column-1">:set sw=n</td><td class="column-2">将移动宽度设置为n个字符</td>
	</tr>
	<tr class="row-231 odd">
		<td class="column-1">n<< </td><td class="column-2">使n行都向左移动一个宽度</td>
	</tr>
	<tr class="row-232 even">
		<td class="column-1">n>></td><td class="column-2">使n行都向右移动一个宽度，例如3>>就将接下来的三行每行都向右移动</td>
	</tr>
</tbody>
</table>

]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2012/02/vim-cmd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wahchdog error</title>
		<link>http://finalbug.org/2012/01/wahchdog-error/</link>
		<comments>http://finalbug.org/2012/01/wahchdog-error/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 14:07:35 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://finalbug.org/?p=3031</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>昨天升级了一下archlinux，今天启动的时候发现出现了watchdog error。在arch forum上看到相关的讨论：</p>
<p><a href="https://bbs.archlinux.org/viewtopic.php?id=133083" target="_blank">https://bbs.archlinux.org/viewtopic.php?id=133083</a></p>
<p>里面给出了一个fix方案，即禁用mei即可：</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">echo blacklist mei &gt; /etc/modprobe.d/mei.conf</pre>
<p>测试之后有效，error msg的确消失了，但是，普遍的观点是这并不算是一个bug，只要忽略掉就可以了。而且在禁用mei以后，似乎有多人出现了不同情况的其他奇怪问题。不过就现在看来，我的机器上还未出现任何异常。</p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2012/01/wahchdog-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>awesome配置</title>
		<link>http://finalbug.org/2011/11/awesome_cfg/</link>
		<comments>http://finalbug.org/2011/11/awesome_cfg/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 05:34:56 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Awesome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lua]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=2798</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>前几天开始从xfce转移到awesome，为了修改好配置文件，花了2个小时把《programming in lua》这本书快速的翻了一遍。经过几天边学边做，目前的awesome桌面看起来有那么回事了~</p>
<p><a href="http://finalbug.org/2011/11/awesome_cfg/thu_nov_24_113918_2011/" rel="attachment wp-att-2800"><img src="http://finalbug.org/wp-content/uploads/2011/11/Thu_Nov_24_113918_20111-1024x640.jpg" alt="" title="Thu_Nov_24_11:39:18_2011" width="600" height="375" class="aligncenter size-large wp-image-2800" /></a></p>
<p>主要修改的地方：tag的设置，右上角的电量、网速、CPU、内存和音量监控，以及一些简单的外观修改。</p>
<p>下面记录一点备忘的内容。<span id="more-2887"></span></p>
<p>通过LUA_PATH设置的路径在.config/awesome/rc.lua中无效，在rc.lua中的require似乎无法读取LUA_PATH的设定，所以所有的lua文件我都放置在.config/awesome目录下。</p>
<p>在rc.lua中直接运行io.popen或awful.uitl.pread都会导致桌面hang-up，在编写音量显示的widget的时候困了我很长一段时间，我一直以为是自己程序写错了，后来发现了一个<a href="https://awesome.naquadah.org/bugs/index.php?do=details&amp;task_id=834" target="_blank">官方的bug说明</a>，于是将音量读取中的“amixer sget Master,0”放置到timer中执行，一切OK。</p>
<p>CPU，MEM，NET的情况分别位于以下三个位置：</p>
<pre class="brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false">/proc/stat
/proc/meminfo
/proc/net/dev</pre>
<p>其中/proc/stat的解读稍微有点不同。其中第一行的数据，从第二项开始依次为：</p>
<ul>
<li>user：从系统启动开始累计到当前时刻，用户态的CPU时间（单位：jiffies） ，不包含 nice值为负进程。</li>
<li>nice：从系统启动开始累计到当前时刻，nice值为负的进程所占用的CPU时间（单位：jiffies）</li>
<li>system：从系统启动开始累计到当前时刻，核心时间（单位：jiffies）</li>
<li>idle：从系统启动开始累计到当前时刻，除硬盘IO等待时间以外其它等待时间（单位：jiffies）</li>
<li>iowait：从系统启动开始累计到当前时刻，硬盘IO等待时间（单位：jiffies）</li>
<li>irq：从系统启动开始累计到当前时刻，硬中断时间（单位：jiffies）</li>
<li>softirq：从系统启动开始累计到当前时刻，软中断时间（单位：jiffies）</li>
</ul>
<p>关于单位jiffies，是Linux内核中的一个全局变量，代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ，代表每秒种最小时间间隔的数目。jiffies的单位就是1/HZ。Intel平台jiffies的单位是1/100秒，这就是系统所能分辨的最小时间间隔了。每个CPU时间片，Jiffies都要加1。</p>
<p>对于计算CPU使用率来说，只有前四个值是有效的。取两个时间段之间的四个值，分别为user1，user2，nice1，&#8230;，idle2，则这段时间内的CPU使用率为：</p>
<pre class="brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false">used1 = user1 + nice1 + system1
used2 = user2 + nice2 + system2
total1 = used1 + idle1
total2 = used2 + idle2
rate = (used2 - used1) / (total2 - total1)</pre>
<p>另外，lua中的string处理的模式匹配和正则不完全一样：</p>
<pre class="brush: shell; gutter: true; first-line: 1; highlight: []; html-script: false">.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
[^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对
+: 匹配前一字符1次或多次
*: 匹配前一字符0次或多次
-: 匹配前一字符0次或多次
?: 匹配前一字符0次或1次</pre>
<p>附带部分源码：<br />
battery.lua<br />
我使用的是tp_smapi控制电池，而且可以安装两块电池。不同的机器可能不同。</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">battery_widget = widget({type=&quot;textbox&quot;, align=&quot;right&quot;})

function get_battery_string(num)
	local battery_root = &quot;/sys/devices/platform/smapi/&quot;
	local str = &quot;&quot;
	io.input(battery_root .. &quot;BAT&quot; .. num .. &quot;/state&quot;)
	local state = io.read()
	if state ~= &quot;none&quot; then
		str = &quot;[B&quot; .. num .. &quot;:&quot;
		if state == &quot;idle&quot; then
			-- str = str .. &quot;&quot;
		elseif state == &quot;charging&quot; then
			str = str .. &quot;IN &quot;
		elseif state == &quot;discharging&quot; then
			str = str .. &quot;OUT &quot;
		else
			str = str .. &quot;Err &quot;
		end
		io.input(battery_root .. &quot;BAT&quot; .. num .. &quot;/remaining_percent&quot;)
		str = str .. io.read() .. &quot;]&quot;
	end
	io.input():close()
	return str
end

function update_battery()
	battery_widget.text = get_battery_string(0) .. get_battery_string(1)
end

update_battery()
battery_timer = timer({timeout = 30})
battery_timer:add_signal(&quot;timeout&quot;, update_battery)
battery_timer:start()</pre>
<p>volume.lua</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">volume_widget = widget({ type = &quot;textbox&quot; })

function update_volume1(widget)
	widget.text = &quot;Vol&quot;
end
function update_volume(widget)
	local str = awful.util.pread(&quot;amixer get Master,0&quot;)
	print(str)
	local volume = tonumber(string.match(str, &quot;(%d?%d?%d)%%&quot;))
	status = string.match(str, &quot;%[(o[^%]]*)%]&quot;)
	local display_string = &quot;[V:&quot;
	if string.find(status, &quot;on&quot;, 1, true) then
		display_string = display_string .. volume .. &quot;]&quot;
	else
		display_string = display_string .. &quot;M]&quot;
	end
	widget.text = display_string
end

-- update_volume(volume_widget) !this line will hang-up awesome, DO NOT uncomment it
awful.hooks.timer.register(10, function () update_volume(volume_widget) end)</pre>
<p>sys.lua</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">require(&quot;string_ex&quot;)
require(&quot;number_ex&quot;)

sys_widget = widget({type=&quot;textbox&quot;})

local update_time = 2

local old_cpu_used = 0
local old_cpu_total = 0
local old_e_in = 0
local old_e_out = 0
local old_w_in = 0
local old_w_out = 0

function get_cpu_rate()
	io.input(&quot;/proc/stat&quot;)
	local str = io.read(&quot;*line&quot;)
	io.input():close()
	local values = string_ex.split(string_ex.trim(str), &quot; &quot;)
	local used = values[2] + values[3] + values[4]
	local total = used + values[5]
	local rate = 100 * (used - old_cpu_used) / (total - old_cpu_total)
	old_cpu_used = used
	old_cpu_total = total
	return math.ceil(rate)
end

function get_mem_rate()
	io.input(&quot;/proc/meminfo&quot;)
	local mem_total = io.read(&quot;*line&quot;)
	local mem_free = io.read(&quot;*line&quot;)
	local mem_buf = io.read(&quot;*line&quot;)
	local mem_cache = io.read(&quot;*line&quot;)
	io.input():close()
	mem_total = tonumber(string.match(mem_total, &quot; (%d+) kB&quot;))
	mem_free = tonumber(string.match(mem_free, &quot; (%d+) kB&quot;))
	mem_buf = tonumber(string.match(mem_buf, &quot; (%d+) kB&quot;))
	mem_cache = tonumber(string.match(mem_cache, &quot; (%d+) kB&quot;))
	local rate = math.ceil((mem_total - mem_free - mem_buf - mem_cache) * 100 / mem_total)
	return rate
end

function get_net_rate()
	io.input(&quot;/proc/net/dev&quot;)
	local str = io.read(&quot;*all&quot;)
	io.input():close()
	local e_in, e_out = string.match(str, &quot;eth0:%s+(%d+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+(%d+)%s&quot;)
	local w_in, w_out = string.match(str, &quot;wlan0:%s+(%d+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+(%d+)%s&quot;)

	local e_rate_in = (e_in - old_e_in) / update_time
	local e_rate_out = (e_out - old_e_out) / update_time
	local w_rate_in = (w_in - old_w_in) / update_time
	local w_rate_out = (w_out - old_w_out) / update_time

	old_e_in = e_in
	old_e_out = e_out
	old_w_in = w_in
	old_w_out = w_out

	return math.ceil(e_rate_in / 1000), math.ceil(e_rate_out / 1000),  math.ceil(w_rate_in / 1000), math.ceil(w_rate_out / 1000)
end

function update_sys()
	local str = &quot;[C:&quot; .. get_cpu_rate() .. &quot;|M:&quot; .. get_mem_rate()
	local net_e_in, net_e_out, net_w_in, net_w_out = get_net_rate()
	str = str .. &quot;|e:&quot; .. net_e_in .. &quot;/&quot; .. net_e_out .. &quot;, w:&quot; .. net_w_in .. &quot;/&quot; .. net_w_out .. &quot;]&quot;
	sys_widget.text = str
end

cpu_timer = timer({timeout = update_time})
cpu_timer:add_signal(&quot;timeout&quot;, update_sys)
cpu_timer:start()</pre>
<p>截屏的快捷键（基于scrot）：</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">-- save screenshots by press print key
awful.key({ }, &quot;Print&quot;,
		function()
			awful.util.spawn(&quot;scrot -e &#039;mv $f ~/Resources/Images/screenshots/ 2&amp;gt;/dev/null&#039;&quot;)
		end),</pre>
<p>音量控制的快捷键（基于alsamixer的控制）：</p>
<pre class="brush: bash; gutter: true; first-line: 1; highlight: []; html-script: false">-- volume control
awful.key({ }, &quot;XF86AudioLowerVolume&quot;,
		function()
			awful.util.spawn(&quot;amixer sset Master,0 5%-&quot;)
			update_volume(volume_widget)
		end),
awful.key({ }, &quot;XF86AudioRaiseVolume&quot;,
		function()
			awful.util.spawn(&quot;amixer sset Master,0 5%+&quot;)
			update_volume(volume_widget)
		end),
awful.key({ }, &quot;XF86AudioMute&quot;,
		function()
			awful.util.spawn(&quot;amixer sset Master toggle&quot;)
			update_volume(volume_widget)
		end)</pre>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2011/11/awesome_cfg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>shotwell的libraw依赖丢失</title>
		<link>http://finalbug.org/2011/10/shotwell-deps-libraw-lost/</link>
		<comments>http://finalbug.org/2011/10/shotwell-deps-libraw-lost/#comments</comments>
		<pubDate>Fri, 28 Oct 2011 12:13:08 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=2792</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>今天通过pacman -Qdt删除了一些没用的包，不知道是不是这个原因影响了shotwell的libraw依赖，打开shotwell的时候出现这个问题：</p>
<pre class="brush: shell; gutter: true">shotwell: error while loading shared libraries: libraw.so.2: cannot open shared object file: No such file or directory</pre>
<p>通过pacman重新安装shotwell和libraw都没有效果。找了一下发现libraw.so在/usr/lib下面，不知道是不是删除多余的包的时候把一些link文件删除了，于是分别在/usr/local/lib和/lib下生成libraw的link文件，文件名改为libraw.so.2。后来发现只有在/lib下的有效。</p>
<p>因此简单的解决方法是<strong>在/lib中生成libraw.so.2文件link到/usr/lib/libraw.so</strong>。我安装的是arch64位系统，shotwell似乎并不依赖于/lib64中的文件，因此在/lib64中生成文件也是无效的。</p>
<p>另外，我的机器上的libraw.so是link到libraw.so.5.0.0的，奇怪的是我通过pacman安装libraw的时候显示的版本号是0.14.3-1，不知道是怎么回事。</p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2011/10/shotwell-deps-libraw-lost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在xfce中为gtk3应用使用主题</title>
		<link>http://finalbug.org/2011/10/gtk3_theme_in_xfce/</link>
		<comments>http://finalbug.org/2011/10/gtk3_theme_in_xfce/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 00:57:10 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[GTK]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Xfce]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=2781</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>在xfce下有些使用gtk3的应用的界面无法使用xfce设定的主题，解决方法如下：（来自archlinux论坛）</p>
<pre class="brush: shell; gutter: true">$ pacman -S gtk3 gnome-themes-standard gtk-xfce-engine
$ ln -s /usr/share/themes/Adwaita/gtk-3.0 ~/.config/</pre>
<p>简单的说就是将gtk3的theme的路径链接到~/.config/下即可。Adwaita是标准gnome3主题之一，虽然和我平时使用的Equinox主题差别甚大，但是总比没有主题的好，也就懒得去找专门的gtk3主题。</p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2011/10/gtk3_theme_in_xfce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kernel到2.6.38后不能Power Off的问题</title>
		<link>http://finalbug.org/2011/04/kernel-2-6-38-power-off-problem/</link>
		<comments>http://finalbug.org/2011/04/kernel-2-6-38-power-off-problem/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 02:22:25 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=2519</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Thinkpad T410i 2518JCK，Archlinux x86_64，kernel 2.6.38</p>
<p>从大约一个星期前将kernel升级到core里面的2.6.38之后就出现无法PowerOff的问题。关机之后停止在<strong>[Power Off]</strong>状态，无法自动关闭电源。大约2分钟后出现Disabling IRQ #19。</p>
<p>查看dmesg没有找到有效的信息。</p>
<p>archlinux论坛上有2个相关内容：<br />
<a href="https://bbs.archlinux.org/viewtopic.php?id=113985&#038;p=2">https://bbs.archlinux.org/viewtopic.php?id=113985&#038;p=2</a><br />
<a href="https://bbs.archlinux.org/viewtopic.php?id=111474&#038;p=2">https://bbs.archlinux.org/viewtopic.php?id=111474&#038;p=2</a></p>
<p>目前结论倾向于kernel的bug，而且从.37就开始出现。</p>
<p>在官网看到<a href="http://www.archlinux.org/news/nvidia-173xx-and-nvidia-96xx-removed-from-extra/">nvidia-173xx and nvidia-96xx removed from [extra]</a>（2011/04/15）的消息，因此在昨天用<a href="https://wiki.archlinux.org/index.php/Nouveau">Nouveau</a>代替闭源nvidia驱动，问题未解决。</p>
<p>升级BIOS到最新（2011/02/10），问题未解决。</p>
<p>在BIOS中禁用掉所有无关的设备，包括网卡，fingerprint等，问题未解决。</p>
<p>使用GDM代替slim，问题未解决。</p>
<p>启动init 3，不启动slim，不进入X，终端模式下直接halt -p，问题未解决。</p>
<p>有部分论坛回复说禁用laptop-mode可以解决这个问题，还未尝试。</p>
<p>SHLUG邮件列表中建议降低kernel，作为最后的解决方法，还未尝试。</p>
<p>目前问题未解决中。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
4月21日补充：</p>
<p>最新的kernel 2.6.38-3没有解决问题，但是禁用laptop-mode后能正常关机。问题暂时解决，但这肯定不是最好的方案。</p>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2011/04/kernel-2-6-38-power-off-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wget整站/目录下载</title>
		<link>http://finalbug.org/2010/12/1753/</link>
		<comments>http://finalbug.org/2010/12/1753/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 06:32:34 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=1753</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>前几天用wget下了一些东西，发现一些很用的方法，记录一下。</p>
<p>用wget下载整个目录：</p>
<p>[code language="powershell"]wget -t0 -c -nH -np -b -m -P /localdir http://destinationdirectory -o wget.log[/code]</p>
<p>参数的说明如下：</p>
<ul>
<li><strong>-t number (&#8211;tries=number)</strong> 重试次数，默认为20，设置成0或inf表示不限制重试次数。如果收到“connection refused”或“not found”（404）错误则不再重试。</li>
<li><strong>-c （&#8211;continue）</strong>续传</li>
<li><strong>-nH （&#8211;no-host-directories）</strong>禁止host前缀。默认情况下，执行“Wget -r http://xyz/”创建的目录结构将以“xyz”开始，该选项将禁止该功能。</li>
<li><strong>-np（&#8211;no-parent）</strong>在递归的时候忽略父级目录。</li>
<li><strong>-b（&#8211;background）</strong>启动之后在后台运行。通过-o可以设置记录文件，如果没有设置，默认将记录在wget-log文件里。</li>
<li><strong>-m（&#8211;mirror）</strong>寻找镜像。</li>
<li><strong>-P prefix（&#8211;directory-prefix=prefix）</strong>将“prefix”设置为下载目录的前缀。即将所有内容下载到prefix路径下。（注意，P大写）</li>
</ul>
<p>用wget递归下载整站：</p>
<p>[code language="powershell"]wget -r -p -np -k http://xxx.com/abc/[/code]</p>
<p>参数说明如下：</p>
<ul>
<li> <strong>-p（&#8211;page-requisites）</strong>下载指定的HTML文件的所有相关内容，包括图片，声音，CSS文件。（注意，p小写）</li>
<li><strong>-r（&#8211;recursive）</strong>递归下载。</li>
<li><strong>-k（&#8211;convert-links）</strong>下载完成后，将下载文件中的链接转换成本地连接，包括图片路径，CSS等等。但是指向下载目录之外的链接将不会被修改。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2010/12/1753/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>说的不是乐高</title>
		<link>http://finalbug.org/2010/11/%e8%af%b4%e7%9a%84%e4%b8%8d%e6%98%af%e4%b9%90%e9%ab%98/</link>
		<comments>http://finalbug.org/2010/11/%e8%af%b4%e7%9a%84%e4%b8%8d%e6%98%af%e4%b9%90%e9%ab%98/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 02:16:36 +0000</pubDate>
		<dc:creator>Tang Bin</dc:creator>
				<category><![CDATA[学习笔记]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.finalbug.org/?p=1706</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>其实，这个说的不是乐高，你懂的。</p>
<ul>
<li>新用户(以下简称“新”)：我想要一个新玩具汽车，每个人都因乐高汽车的好玩而着了迷。所以我也买了它，但当我到家后我才发现，我的盒子里只有积木和齿轮！我的车子在哪里?</li>
<li>老用户(以下简称“老”)：你应该在积木之外组装一辆车，这才是乐高的真谛。</li>
<li>新：什么??我不知道应怎样拼装这个车子。我不是个机械师。为什么我应该知道如何组装它?</li>
<li>老：盒子里有使用手册。它上面写着拼装车子的步骤。你不用知道原理，只要按照按部就班就好。</li>
<li>新：好吧，我找到了步骤。这将占用我很多时间！为什么厂家不能装好了再卖给我，还得让我自己动手??</li>
<li>老：并不是所有人都满足于将乐高做成玩具车。这些积木可以被我们组成万物。这才是游戏的真谛。</li>
<li>新：我仍旧不明白为什么厂商不能给我们这种想要车子的人一个成品，如果那些喜欢动手的人高兴可以自己拆了它阿。无论如何，我还是将它组装起来了，尽管某些部件时不时地掉下来。我有什么方法可以解决吗?我能将它们粘起来吗?</li>
<li>老：这就是乐高。他就是用来拆装的。这才是游戏的真谛。</li>
<li>新：但我不希望总是拆拆装装，我仅仅希望一个玩具车而已！</li>
<li>老：呃，欢迎您到地球来。你买的是乐高吗?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://finalbug.org/2010/11/%e8%af%b4%e7%9a%84%e4%b8%8d%e6%98%af%e4%b9%90%e9%ab%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

