<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/rem1x" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/rem1x" type="application/rss+xml"></fs:self_link><lastBuildDate>Fri, 22 Jul 2011 09:51:04 GMT</lastBuildDate><title>I'm rem1x !</title><description>生活和工作的点滴记录</description><link>http://imxie.net</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Fri, 22 Jul 2011 10:00:27 GMT</pubDate><item><title>net-snmp之利用pass做snmpget和snmpset</title><link>http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm</link><content:encoded>&lt;p&gt;前几天写了一个运维工具，用来监控夜间业务的处理情况。&lt;/p&gt;
&lt;p&gt;虽然是生产网，但由于都是内部网络，所以决定谨慎采用snmp来获取一些信息。其中的一个需求是，根据某个指定的业务日期从远程服务器的日志中分析产生结果，然后将结果在本地监控机上呈现。&lt;/p&gt;
&lt;p&gt;这个需求的实现有很多种方法，我这边利用 net-snmp 的扩展命令 pass 调用 shell 脚本来实现。通过 man snmpd.conf(5) 可知，net-snmp支持自定义的脚本以获取需要的信息，那就是扩展命令exec、extend 和 pass（三者的区别详见此&lt;a title=&quot;What's the difference between 'exec', 'sh' and 'pass'? &quot; href=&quot;http://www.net-snmp.org/wiki/index.php/FAQ:Agent_07&quot; target=&quot;_blank&quot;&gt; FAQ&lt;/a&gt;）。&lt;span id=&quot;more-378&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;pass命令整合了三个EXEC执行过程：&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;&lt;strong&gt;PROG -g MIBOID       &amp;#8212; g 代表 get&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;&lt;strong&gt;PROG -n MIBOID       &amp;#8212; n 代表 getnext&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;上述两条调用指令对应的功能便是 snmpget 和 snmpgetnext，&lt;strong&gt;PROG&lt;/strong&gt; 表示 Shell脚本本身 。&lt;/p&gt;
&lt;p&gt;如果你在某台监控机上执行 snmpget 命令来通过 pass 调用 shell 脚本获取信息时，shell 脚本的输出结果是有格式要求的：&lt;/p&gt;
&lt;p&gt;输出到 stdout 的第一行必须是 &lt;strong&gt;MIB OID&lt;/strong&gt;&lt;br /&gt;
第二行必须是&lt;strong&gt; TYPE&lt;/strong&gt; （string, integer, unsigned, objectid, timeticks, ipaddress, counter,  gauge）&lt;br /&gt;
第三行必须是与 TYPE 相对应的&lt;strong&gt; VALUE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;举个例子，假如 oid .1.3.6.1.4.100 的值是整数42，当使用自定义的脚本去获取时 ，其结果输出必须返回下面三行内容：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #000080;&quot;&gt;.1.3.6.1.4.100&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000080;&quot;&gt; integer&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000080;&quot;&gt; 42&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;如果在获取某个oid的值时出现错误，那么脚本可以直接exit而无需向stdout输出任何的内容，net-snmp 的 snmpget 命令会自动产生noSuchName的错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;PROG -s MIBOID TYPE VALUE       &amp;#8212; s 代表 set&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当你执行 snmpset 命令时，自定义脚本的调用格式如上所述。TYPE就是指 integer, counter, gauge, timeticks, ipaddress, objid, string。如果脚本在获取信息时没有出错，无需向stdout输出任何内容，直接exit即可；否则，需要向 stdout 输出 not-writable 或者 wrong-type。&lt;/p&gt;
&lt;p&gt;如何开启 pass 呢？ 编辑 /etc/snmp/snmpd.conf 配置文件，加入如下类似的语句：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;pass  .1.3.6.1.4.1.2021.255  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;bash&lt;/span&gt;  &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;home&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;rem1x&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;bin&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;passecho&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;其中的 oid 是由你自己选择的，passecho是自定义的Shell脚本，通过bash调用。&lt;/p&gt;
&lt;p&gt;一个简单的Shell脚本模板：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;bash&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!bin/bash&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #007800;&quot;&gt;opt&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$1&lt;/span&gt;
&lt;span style=&quot;color: #007800;&quot;&gt;oid&lt;/span&gt;=&lt;span style=&quot;color: #007800;&quot;&gt;$2&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$opt&lt;/span&gt;&amp;quot;&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-g&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
    do_the_snmpget
    ...
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$oid&lt;/span&gt;
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; TYPE
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; VALUE
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$opt&lt;/span&gt;&amp;quot;&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-n&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
    do_the_snmpgetnext
    ...
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #007800;&quot;&gt;$oid&lt;/span&gt;
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; TYPE
    &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; VALUE
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;elif&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#91;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #007800;&quot;&gt;$opt&lt;/span&gt;&amp;quot;&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-s&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;then&lt;/span&gt;
    do_the_snmpset
    ...
    if_success, exit_directly
    if_fail, &lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;echo&lt;/span&gt; not-writable or wrong-type
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;fi&lt;/span&gt;  
&amp;nbsp;
&lt;span style=&quot;color: #7a0874; font-weight: bold;&quot;&gt;exit&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;0&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431410/rem1x/feedsky/s.gif?r=http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>前几天写了一个运维工具，用来监控夜间业务的处理情况。 虽然是生产网，但由于都是内部网络，所以决定谨慎采用snmp来获取一些信息。其中的一个需求是，根据某个指定的业务日期从远程服务器的日志中分析产生结果，然后将结果在本地监控机上呈现。 这个需求的实现有很多种方法，我这边利用 net-snmp 的扩展命令 pass 调用 shell 脚本来实现。通过 man snmpd.conf(5) 可知，net-snmp支持自定义的脚本以获取需要的信息，那就是扩展命令exec、extend 和 pass（三者的区别详见此 FAQ）。 pass命令整合了三个EXEC执行过程： PROG -g MIBOID       &amp;#8212; g 代表 get PROG -n MIBOID       &amp;#8212; n 代表 getnext 上述两条调用指令对应的功能便是 snmpget 和 snmpgetnext，PROG 表示 Shell脚本本身 。 如果你在某台监控机上执行 snmpget 命令来通过 pass 调用 shell 脚本获取信息时，shell 脚本的输出结果是有格式要求的： 输出到 stdout 的第一行必须是 MIB OID 第二行必须是 TYPE （string, integer, unsigned, [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431410/rem1x/feedsky/s.gif?r=http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>shell</category><category>pass</category><category>snmp</category><pubDate>Fri, 22 Jul 2011 17:51:04 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=378</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2011/07/use_pass_for_snmp_get_and_set.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431410/5202844</fs:itemid></item><item><title>Archlinux上使用PRO*C 开发Oracle程序之sqlca (1)</title><link>http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm</link><content:encoded>&lt;p&gt;关于在archlinux上安装oracle客户端，可参考wiki：&lt;a href=&quot;https://wiki.archlinux.org/index.php/Oracle&quot; target=&quot;_blank&quot;&gt;https://wiki.archlinux.org/index.php/Oracle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;访问Oracle数据库的C语言编程接口，比较常见的是PRO*C和oci，前者是一种以C语言作为宿主的预编译语言，后者则是一套现成的数据库访问API。比如，俺们公司的后台的一些重要系统现在主要以Oracle系列数据库为主，开发语言基本是C，pro*c和oci在项目中都有使用。一句话，PRO*C上手容易，编码简单，但受约束；oci直接以API形式调用，效率最高，但学习成本高，一般都会做二次封装（有个C++的封装库：&lt;a href=&quot;http://otl.sourceforge.net/http://otl.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;OTL&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;本文主要说明在使用PRO*C时，如果需要定义局部sqlca变量时，该做哪些准备工作。&lt;/p&gt;
&lt;p&gt;如果你的程序只使用全局的sqlca变量，那么 &lt;strong&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;#include &amp;lt;sqlca.h&amp;gt;&lt;/span&gt;&lt;/strong&gt; 就完事儿了，文章到此可以直接 return 0 。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-367&quot;&gt;&lt;/span&gt;SQLCA称为SQL通讯区，用于记录每个SQL语句的执行状态，以便进行错误诊断，它是一个结构体，存在于sqlca.h头文件中：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;struct sqlca {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub1 */ char    sqlcaid[8];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* b4   */ int     sqlabc;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* b4   */ int     sqlcode;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; struct {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub2 */ unsigned short sqlerrml;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub1 */ char           sqlerrmc[70];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; } sqlerrm;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub1 */ char    sqlerrp[8];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* b4   */ int        sqlerrd[6];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub1 */ char    sqlwarn[8];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt; /* ub1 */ char    sqlext[8];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;};&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;在执行PRO*C程序时，Oracle会把每一个嵌入式SQL语句执行的状态信息保存在SQLCA结构体里，包括错误代码、警告标志设置、诊断文本和处理行数等。因此，在SQL语句执行之后，可以通过SQLCA的信息来判断SQL语句的执行是否成功，出现了什么错误和例外等等。&lt;/p&gt;
&lt;p&gt;当proc的mode=oracle（这是默认的模式）时，SQLCA是需要显示说明的，否则proc预编译就会报错，或者是在连接时失败。SQLCA的说明方式有以下两种：&lt;/p&gt;
&lt;p&gt;1. 直接把上述 struct sqlca 的代码写到自己的程序文件中（如果选择这种方法，就别 #include &amp;lt;sqlca.h&amp;gt; 了）；&lt;/p&gt;
&lt;p&gt;2. 显示引用：&lt;span style=&quot;color: #0000ff;&quot;&gt;&lt;strong&gt;EXEC SQL INCLUDE SQLCA&lt;/strong&gt;&lt;/span&gt; （是否 #include &amp;lt;sqlca.h&amp;gt; ，都不影响proc的执行）；&lt;/p&gt;
&lt;p&gt;如果你和我一样，需要在一些情况下定义局部的sqlca变量以分开记录不同SQL语句的通讯信息，那么就选择上面两种方法的其中一种，然后在代码里 struct sqlca var_sqlca 定义自己的sqlca变量吧。&lt;/p&gt;
&lt;p&gt;请注意，方法二的语句一般放在文件头部。&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431411/rem1x/feedsky/s.gif?r=http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>关于在archlinux上安装oracle客户端，可参考wiki：https://wiki.archlinux.org/index.php/Oracle 访问Oracle数据库的C语言编程接口，比较常见的是PRO*C和oci，前者是一种以C语言作为宿主的预编译语言，后者则是一套现成的数据库访问API。比如，俺们公司的后台的一些重要系统现在主要以Oracle系列数据库为主，开发语言基本是C，pro*c和oci在项目中都有使用。一句话，PRO*C上手容易，编码简单，但受约束；oci直接以API形式调用，效率最高，但学习成本高，一般都会做二次封装（有个C++的封装库：OTL）。 本文主要说明在使用PRO*C时，如果需要定义局部sqlca变量时，该做哪些准备工作。 如果你的程序只使用全局的sqlca变量，那么 #include &amp;#60;sqlca.h&amp;#62; 就完事儿了，文章到此可以直接 return 0 。 SQLCA称为SQL通讯区，用于记录每个SQL语句的执行状态，以便进行错误诊断，它是一个结构体，存在于sqlca.h头文件中： struct sqlca { /* ub1 */ char    sqlcaid[8]; /* b4   */ int     sqlabc; /* b4   */ int     sqlcode; struct { /* ub2 */ unsigned short sqlerrml; /* ub1 */ char           sqlerrmc[70]; } sqlerrm; /* ub1 */ char    sqlerrp[8]; /* b4   */ int     [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431411/rem1x/feedsky/s.gif?r=http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>proc</category><category>programing</category><category>oracle</category><category>archlinux</category><category>sqlca</category><pubDate>Sun, 26 Jun 2011 14:11:18 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=367</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2011/06/use_proc_dev_oracle_app_on_archlinux.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431411/5202844</fs:itemid></item><item><title>Archlinux升级grub至grub2 [针对bios]</title><link>http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm</link><content:encoded>&lt;p&gt;GRUB2是下一代的多系统引导器，grub即将退位，项目名也改成了grub-legacy。相比grub(目前的版本是0.97)而言，grub2重写了代码以实现模块化和可移植性。&lt;/p&gt;
&lt;p&gt;有趣的Grub Logo: &lt;img class=&quot;alignnone&quot; title=&quot;grub logo&quot; src=&quot;http://www.inf.sgsp.edu.pl/pub/MALUNKI/LOGO/grub.png&quot; alt=&quot;&quot; width=&quot;125&quot; height=&quot;105&quot; /&gt; &lt;img class=&quot;alignnone&quot; title=&quot;another grub logo&quot; src=&quot;http://www.inf.sgsp.edu.pl/pub/MALUNKI/LOGO/grub2.png&quot; alt=&quot;&quot; width=&quot;118&quot; height=&quot;152&quot; /&gt;&lt;/p&gt;
&lt;p&gt;将archlinux的grub升级到grub2是一件很简单的事情，你只需要通过pacman安装新的grub2软件包，转换menu.lst为grub.cfg就可以了。这篇日志的大部分资料来自&lt;a href=&quot;https://wiki.archlinux.org/index.php/Grub2&quot; target=&quot;_blank&quot;&gt;Archlinux的wiki&lt;/a&gt;，命令操作记录来自我的笔电。&lt;/p&gt;
&lt;p&gt;首先来搜索一下仓库里的grub2软件包:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;~&amp;gt;; pacman -Ss grub2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; extra/grub2-bios 1.99~rc2.r3238-1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; The GNU GRand Unified Bootloader version 2 &amp;#8211; Built for PC BIOS&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; extra/grub2-common 1.99~rc2.r3238-1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; The GNU GRand Unified Bootloader version 2 &amp;#8211; Files common for all platforms&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; extra/grub2-efi-i386 1.99~rc2.r3238-1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; The GNU GRand Unified Bootloader version 2 &amp;#8211; i386 UEFI version&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; extra/grub2-efi-x86_64 1.99~rc2.r3238-1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993300;&quot;&gt; The GNU GRand Unified Bootloader version 2 &amp;#8211; x86_64 UEFI version&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;你会发现目前仓库里有4个grub2的软件包，做个简单的介绍吧:&lt;/p&gt;
&lt;p&gt;grub2-bios            &amp;#8211;&amp;gt; 适用于PC BIOS&lt;/p&gt;
&lt;p&gt;grub2-commin    &amp;#8211;&amp;gt; 文件集合（包含了所有平台相关的文件）&lt;/p&gt;
&lt;p&gt;grub2-efi-i386      &amp;#8211;&amp;gt; 适用于32位平台的UEFI&lt;/p&gt;
&lt;p&gt;grub2-efi-x86_64 &amp;#8211;&amp;gt; 适用于64位平台的UEFI&lt;/p&gt;
&lt;p&gt;一般情况下，我们选择安装grub2-bios。什么是UEFI呢？这货全称Unified Extensible Firmware Interface，直译叫做“统一的可扩展固件接口”，这种接口用于操作系统自动从预启动的操作环境，加载到某种操作系统上，从而使开机程序化繁为简，节省时间。UEFI将替代已存在多年的BIOS，目前市场上的主板已经开始采用UEFI 。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-360&quot;&gt;&lt;/span&gt;安装和升级步骤:&lt;/p&gt;
&lt;p&gt;1) 安装grub2-bios&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;~&amp;gt;; sudo pacman -S grub2-bios&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; resolving dependencies&amp;#8230;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; looking for inter-conflicts&amp;#8230;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; :: grub2-common and grub are in conflict. Remove grub? [y/N] y&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Remove (1): grub-0.97-17&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Total Removed Size:   0.61 MB&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Targets (2): grub2-common-1.99~rc2.r3238-1  grub2-bios-1.99~rc2.r3238-1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Total Download Size:    1.74 MB&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; Total Installed Size:   7.25 MB&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Proceed with installation? [Y/n] y&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;安装时肯定会报与现有的grub冲突，想装就YY吧。如果你喜欢干净，可以在安装之前先把/boot/grub目录备份到其他地方，然后删除/boot下的grub目录。&lt;/p&gt;
&lt;p&gt;2) 擦除MBR上grub-legacy的痕迹。这一步一定要&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;strong&gt;小心&lt;/strong&gt;&lt;/span&gt;，如果你的grub安装在MBR上的，需要做这一步操作。of后面跟的是主硬盘的设备名，也许你的是/dev/hda。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;~&amp;gt;; sudo dd if=/dev/zero of=/dev/sda bs=&lt;span style=&quot;color: #008000;&quot;&gt;&lt;strong&gt;440&lt;/strong&gt;&lt;/span&gt; count=1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; 1+0 records in&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; 1+0 records out&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; 440 bytes (440 B) copied, 3.1918e-05 s, 13.8 MB/s&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;3) 安装grub2到MBR&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;~&amp;gt;; sudo grub_bios-install &amp;#8211;boot-directory=/boot &amp;#8211;no-floppy &amp;#8211;recheck /dev/sda&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #800000;&quot;&gt; Installation finished. No error reported.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;~&amp;gt;; sudo cp /usr/share/grub/{unicode.pf2,ascii.pf2} /boot/grub/&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;4) 生成grub2使用的配置文件grub.cfg （可以从 menu.lst 或者 grub.conf 转换过来）&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #800000;&quot;&gt;~&amp;gt;; sudo grub-menulst2cfg /boot/grub/menu.lst.pacsave /boot/grub/grub.cfg&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;5) 重启系统，检验成果。&lt;br /&gt;
结束语：&lt;/p&gt;
&lt;p&gt;这里只是介绍了Archlinux上如何将grub（又名grub-legacy）升级到grub2，至于grub2的命令操作、grub.cfg的配置方式则没有给出说明 （你可以在wiki上获得详细内容，下面有链接）&lt;/p&gt;
&lt;p&gt;参考资料:&lt;/p&gt;
&lt;p&gt;1. Archlinux上有详细的介绍，包括BIOS和UEFI的安装方式，GPT的延伸阅读。&lt;/p&gt;
&lt;p&gt;https://wiki.archlinux.org/index.php/GRUB2#For_BIOS_Systems&lt;/p&gt;
&lt;p&gt;2. GRUB项目主页&lt;/p&gt;
&lt;p&gt;http://www.gnu.org/software/grub/index.html&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431412/rem1x/feedsky/s.gif?r=http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>GRUB2是下一代的多系统引导器，grub即将退位，项目名也改成了grub-legacy。相比grub(目前的版本是0.97)而言，grub2重写了代码以实现模块化和可移植性。 有趣的Grub Logo: 将archlinux的grub升级到grub2是一件很简单的事情，你只需要通过pacman安装新的grub2软件包，转换menu.lst为grub.cfg就可以了。这篇日志的大部分资料来自Archlinux的wiki，命令操作记录来自我的笔电。 首先来搜索一下仓库里的grub2软件包: ~&amp;#62;; pacman -Ss grub2 extra/grub2-bios 1.99~rc2.r3238-1 The GNU GRand Unified Bootloader version 2 &amp;#8211; Built for PC BIOS extra/grub2-common 1.99~rc2.r3238-1 The GNU GRand Unified Bootloader version 2 &amp;#8211; Files common for all platforms extra/grub2-efi-i386 1.99~rc2.r3238-1 The GNU GRand Unified Bootloader version 2 &amp;#8211; i386 UEFI version extra/grub2-efi-x86_64 1.99~rc2.r3238-1 The GNU [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431412/rem1x/feedsky/s.gif?r=http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>grub</category><category>grub2</category><category>archlinux</category><category>pacman</category><category>bios</category><pubDate>Sun, 22 May 2011 10:53:21 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=360</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2011/05/upd-grub-to-grub2-on-archlinux-with-bios-system.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431412/5202844</fs:itemid></item><item><title>在Archlinux上使用华为E1780 3G上网</title><link>http://imxie.net/2011/01/use-3g-device-on-linux.htm</link><content:encoded>&lt;p&gt;出差在外，所以买了一张联通的186 3G卡来无线上网，上网设备选择了华为的E1780，因为我觉得外观很好看&amp;#8230;&lt;/p&gt;
&lt;p&gt;在linux上3G上网基本上是如下的两步配置流程：&lt;/p&gt;
&lt;p&gt;1、使用usb_modeswitch将上网设备的模式转换为modem&lt;/p&gt;
&lt;p&gt;2、使用wvdial自动生成配置文件并拨号&lt;/p&gt;
&lt;p&gt;关于3G的配置步骤这里不再赘述，google会告诉你很多结果。&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-357&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;usb_modeswitch 和 wvdial 都可通过pacman安装。其他发行版可以通过本身软件仓库安装，或是下载源码包编译安装。&lt;/p&gt;
&lt;p&gt;由于，现在的3G上网设备插入后默认是模拟成 cd-rom 用于安装驱动，如果你想3G拨号，必须先将设备转换成usb modem模式。不过貌似高版本的 linux kernel 不需要手动做 usb_modeswitch，我的 E1780 插入后直接正确识别为可拨号的 modem 了。&lt;/p&gt;
&lt;p&gt;贴一下配置文件供各位参考。一开始通过wvdialconf自动生成的配置文件没有Init3参数，虽然可以拨号成功，但无法ping通网络，后来增加Init3参数后拨号成功且可以正常上网。没有了解过AT指令，以下配置内容无法做出详细解释了。&lt;/p&gt;
&lt;p&gt;我的 /etc/wvdial.conf :&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;[Dialer Defaults]&lt;br /&gt;
Init1 = ATZ&lt;br /&gt;
Init2 = ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;
Init3 = AT+CGDCONT=1,&amp;#8221;IP&amp;#8221;,&amp;#8221;3gnet&amp;#8221;&lt;br /&gt;
Modem Type = Analog Modem&lt;br /&gt;
Modem = /dev/ttyUSB0&lt;br /&gt;
Baud = 460800&lt;br /&gt;
ISDN = 0&lt;br /&gt;
Phone = *99#&lt;br /&gt;
Username = 3gnet&lt;br /&gt;
Password = 3gnet&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;wvdial拨号信息输出参考：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #003300;&quot;&gt;rem1x-laptop $ wvdial&lt;br /&gt;
&amp;#8211;&amp;gt; WvDial: Internet dialer version 1.61&lt;br /&gt;
&amp;#8211;&amp;gt; Cannot get information for serial port.&lt;br /&gt;
&amp;#8211;&amp;gt; Initializing modem.&lt;br /&gt;
&amp;#8211;&amp;gt; Sending: ATZ&lt;br /&gt;
ATZ&lt;br /&gt;
OK&lt;br /&gt;
&amp;#8211;&amp;gt; Sending: ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;
ATQ0 V1 E1 S0=0 &amp;amp;C1 &amp;amp;D2 +FCLASS=0&lt;br /&gt;
OK&lt;br /&gt;
&amp;#8211;&amp;gt; Sending: AT+CGDCONT=1,&amp;#8221;IP&amp;#8221;,&amp;#8221;3gnet&amp;#8221;&lt;br /&gt;
AT+CGDCONT=1,&amp;#8221;IP&amp;#8221;,&amp;#8221;3gnet&amp;#8221;&lt;br /&gt;
OK&lt;br /&gt;
&amp;#8211;&amp;gt; Modem initialized.&lt;br /&gt;
&amp;#8211;&amp;gt; Sending: ATDT*99#&lt;br /&gt;
&amp;#8211;&amp;gt; Waiting for carrier.&lt;br /&gt;
ATDT*99#&lt;br /&gt;
CONNECT&lt;br /&gt;
&amp;#8211;&amp;gt; Carrier detected.  Waiting for prompt.&lt;br /&gt;
&amp;#8211;&amp;gt; Don&amp;#8217;t know what to do!  Starting pppd and hoping for the best.&lt;br /&gt;
&amp;#8211;&amp;gt; Starting pppd at Wed Jan 12 21:42:29 2011&lt;br /&gt;
&amp;#8211;&amp;gt; Pid of pppd: 4553&lt;br /&gt;
&amp;#8211;&amp;gt; Using interface ppp0&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; local  IP address 172.26.238.250&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; remote IP address 10.64.64.64&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; primary   DNS address 221.12.1.227&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]-&lt;br /&gt;
&amp;#8211;&amp;gt; secondary DNS address 221.12.33.227&lt;br /&gt;
&amp;#8211;&amp;gt; pppd: 圼16]- 衃1c]- �[18]- &lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;172.26.238.250 就是拨号成功后的本地IP，两个DNS221.12.1.227和221.12.33.227是浙江联通的DNS（我买的是浙江卡），不同的3G卡获取的DNS信息都是卡归属地的DNS。&lt;/p&gt;
&lt;p&gt;目前测试发现浙江联通的186卡无法进行pptp vpn连接，按照网上的讨论原因可能有:&lt;/p&gt;
&lt;p&gt;1、浙江联通的部分网络设备不支持pptp（这个没可能吧&amp;#8230;）&lt;/p&gt;
&lt;p&gt;2、浙江联通屏蔽了pptp形式的vpn&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;p&gt;http://linux.chinaunix.net/bbs/viewthread.php?tid=1162846&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431413/rem1x/feedsky/s.gif?r=http://imxie.net/2011/01/use-3g-device-on-linux.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2011/01/use-3g-device-on-linux.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>出差在外，所以买了一张联通的186 3G卡来无线上网，上网设备选择了华为的E1780，因为我觉得外观很好看&amp;#8230; 在linux上3G上网基本上是如下的两步配置流程： 1、使用usb_modeswitch将上网设备的模式转换为modem 2、使用wvdial自动生成配置文件并拨号 关于3G的配置步骤这里不再赘述，google会告诉你很多结果。 usb_modeswitch 和 wvdial 都可通过pacman安装。其他发行版可以通过本身软件仓库安装，或是下载源码包编译安装。 由于，现在的3G上网设备插入后默认是模拟成 cd-rom 用于安装驱动，如果你想3G拨号，必须先将设备转换成usb modem模式。不过貌似高版本的 linux kernel 不需要手动做 usb_modeswitch，我的 E1780 插入后直接正确识别为可拨号的 modem 了。 贴一下配置文件供各位参考。一开始通过wvdialconf自动生成的配置文件没有Init3参数，虽然可以拨号成功，但无法ping通网络，后来增加Init3参数后拨号成功且可以正常上网。没有了解过AT指令，以下配置内容无法做出详细解释了。 我的 /etc/wvdial.conf : [Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &amp;#38;C1 &amp;#38;D2 +FCLASS=0 Init3 = AT+CGDCONT=1,&amp;#8221;IP&amp;#8221;,&amp;#8221;3gnet&amp;#8221; Modem Type = Analog Modem Modem = /dev/ttyUSB0 Baud = 460800 ISDN [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431413/rem1x/feedsky/s.gif?r=http://imxie.net/2011/01/use-3g-device-on-linux.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>华为</category><category>3G</category><category>linux</category><category>archlinux</category><category>E1780</category><category>联通</category><pubDate>Wed, 12 Jan 2011 22:54:50 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2011/01/use-3g-device-on-linux.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=357</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2011/01/use-3g-device-on-linux.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431413/5202844</fs:itemid></item><item><title>在ESXi 3.5中安装 sco openserver 5.0.7</title><link>http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm</link><content:encoded>&lt;p&gt;注：&lt;strong&gt;本日志提到的安装方法来源于互联网，经本人实际测试后整理呈现，对原作者的共享表示感谢&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;想要在现在的服务器上安装sco unix 5系列有时候真的会让你无奈，主要问题在于各种硬件的不支持（有好硬件，却没有驱动支持，这是最悲催的），比如阵列卡、主板、网卡等等。&lt;/p&gt;
&lt;p&gt;通常，我们可能会这么解决这个尴尬的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将部分硬件更换为SCO支持的老硬件&lt;/li&gt;
&lt;li&gt;找一台旧服务器或者是PC机&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不过，随着虚拟化技术的快速发展，我们已经有了新的选择：用虚拟机安装sco unix 5&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-352&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;以前只用过桌面版的虚拟机，比如VirtualBox（一直在使用，主要是为了购物和网银，不过现在有&lt;span style=&quot;color: #3366ff;&quot;&gt;&lt;a href=&quot;http://linuxtoy.org/archives/new-alipay-plugin-leaked.html&quot; target=&quot;_blank&quot;&gt;Linux版的支付宝&lt;/a&gt;&lt;/span&gt;可用啦），VMware Workstation 。&lt;/p&gt;
&lt;p&gt;闲话少说，ESXi现在是免费的，你可以在VMware官方网站免费下载。详情请看这里：&lt;a href=&quot;http://www.vmware.com/cn/products/vsphere-hypervisor/&quot; target=&quot;_blank&quot;&gt;http://www.vmware.com/cn/products/vsphere-hypervisor/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;由于我的测试机HP DL380 G3只能支持32位，因此选择安装ESXi 3.5 Update 5，如果你的服务器支持64位，完全可以下载ESXi 4.1，它也是免费的。安装ESXi的方法很简单，可以google出一堆，这里主要介绍如何在ESXi 3.5上安装SCO 5.0.7虚拟机。&lt;/p&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 安装步骤分割线 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;/p&gt;
&lt;p&gt;1、建虚拟机时Guest OS选 Other—&amp;gt;Other 32位（ESXi 4以上已经有SCO系统的选项），处理器个数选1 ，SCSIAdapter选 BusLogic&lt;br /&gt;
2、以SCO 5.0.7光盘引导， BOOT中填写 &lt;span style=&quot;color: #0000ff;&quot;&gt;defbootstr link=blc &lt;/span&gt; ，回车&lt;br /&gt;
3、片刻后会提示插入软盘，将btld软盘文件挂载到虚拟软驱（&lt;a href=&quot;http://www.box.net/shared/q9vyz5r0n4&quot; target=&quot;_blank&quot;&gt;下载链接&lt;/a&gt;），回车，然后选 a&lt;br /&gt;
4、然后一路回车，填序列号（该序列号只用于安装，没法注册）&lt;/p&gt;
&lt;pre style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&lt;strong&gt;2ZJ064432
gwncbsby&lt;/strong&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;5、接下来填写主机名、设置密码、设置时区、设定网卡等，根据你自身的需求进行配置。&lt;br /&gt;
6、等待片刻又会出现一个关于FLOPPY的选项，此时回车会出现选择项，先选2，再选B，继续安装。&lt;br /&gt;
7、耐心等待安装完后重启，重启时请仍然用SCO 5.0.7光盘引导（确保从光盘引导，需修改Bios设置） 。引导时输入：&lt;/p&gt;
&lt;pre style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;BOOT:  defbootstr  link=blc  root=hd(42)&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;8、回车运行后系统会出现一个选择项&lt;/p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;please enter:&lt;br /&gt;
&amp;#8220;&lt;strong&gt;r&lt;/strong&gt;&amp;#8221; if you wish to try relpacement&lt;br /&gt;
&amp;#8220;&lt;strong&gt;a&lt;/strong&gt;&amp;#8221; if you want to use character major 6 (defualt)&amp;#8230;.&lt;/p&gt;
&lt;p&gt;这个时候选择 a 。&lt;br /&gt;
9、接下来出现提示按Ctrl+D继续或者输入密码进入维护(maintain)模式，你需要输入安装时设定的密码，目的是进入维护模式手动安装SCSI驱动。&lt;br /&gt;
10、进入#号提示符后，引导软驱镜像（将 bltd.flp 挂载到虚拟软驱中即可），输入命令安装SCSI驱动到内核：&lt;/p&gt;
&lt;pre style=&quot;padding-left: 30px;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;#mount /dev/fd0135ds18 /mnt
#btldinstall /mnt&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;出现（Y/N）的选择问题时都选Y即可。&lt;br /&gt;
11、安装完成后将虚拟光驱中的ISO镜像卸载，然后重启虚拟机。&lt;br /&gt;
12、经过上述流程，SCO 5.0.7基本安装完成。&lt;/p&gt;
&lt;p&gt;软盘镜像下载：&lt;strong&gt;bltd.flp&lt;/strong&gt; &lt;a href=&quot;http://www.box.net/shared/q9vyz5r0n4&quot; target=&quot;_blank&quot;&gt;http://www.box.net/shared/q9vyz5r0n4&lt;/a&gt;&lt;br /&gt;
资料参考：&lt;/p&gt;
&lt;p&gt;目前，ChinaUnix的SCO UNIX板块还是比较热闹的，讨论比较多，资料也不少，推荐大家可以去看看。&lt;/p&gt;
&lt;p&gt;1、http://bbs2.chinaunix.net/viewthread.php?tid=1736041&amp;amp;extra=page%3D1%26amp%3Bfilter%3Ddigest&lt;/p&gt;
&lt;p&gt;2、http://bbs2.chinaunix.net/viewthread.php?tid=1720869&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431414/rem1x/feedsky/s.gif?r=http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>注：本日志提到的安装方法来源于互联网，经本人实际测试后整理呈现，对原作者的共享表示感谢。 想要在现在的服务器上安装sco unix 5系列有时候真的会让你无奈，主要问题在于各种硬件的不支持（有好硬件，却没有驱动支持，这是最悲催的），比如阵列卡、主板、网卡等等。 通常，我们可能会这么解决这个尴尬的问题： 将部分硬件更换为SCO支持的老硬件 找一台旧服务器或者是PC机 不过，随着虚拟化技术的快速发展，我们已经有了新的选择：用虚拟机安装sco unix 5 以前只用过桌面版的虚拟机，比如VirtualBox（一直在使用，主要是为了购物和网银，不过现在有Linux版的支付宝可用啦），VMware Workstation 。 闲话少说，ESXi现在是免费的，你可以在VMware官方网站免费下载。详情请看这里：http://www.vmware.com/cn/products/vsphere-hypervisor/ 由于我的测试机HP DL380 G3只能支持32位，因此选择安装ESXi 3.5 Update 5，如果你的服务器支持64位，完全可以下载ESXi 4.1，它也是免费的。安装ESXi的方法很简单，可以google出一堆，这里主要介绍如何在ESXi 3.5上安装SCO 5.0.7虚拟机。 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 安装步骤分割线 &amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211; 1、建虚拟机时Guest OS选 Other—&amp;#62;Other 32位（ESXi 4以上已经有SCO系统的选项），处理器个数选1 ，SCSIAdapter选 BusLogic 2、以SCO 5.0.7光盘引导， BOOT中填写 defbootstr link=blc ，回车 3、片刻后会提示插入软盘，将btld软盘文件挂载到虚拟软驱（下载链接），回车，然后选 a 4、然后一路回车，填序列号（该序列号只用于安装，没法注册） 2ZJ064432 gwncbsby 5、接下来填写主机名、设置密码、设置时区、设定网卡等，根据你自身的需求进行配置。 6、等待片刻又会出现一个关于FLOPPY的选项，此时回车会出现选择项，先选2，再选B，继续安装。 7、耐心等待安装完后重启，重启时请仍然用SCO 5.0.7光盘引导（确保从光盘引导，需修改Bios设置） 。引导时输入： BOOT:  defbootstr  link=blc  root=hd(42) 8、回车运行后系统会出现一个选择项 please enter: &amp;#8220;r&amp;#8221; [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431414/rem1x/feedsky/s.gif?r=http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>unix</category><category>esxi</category><category>sco</category><category>vmware</category><pubDate>Wed, 17 Nov 2010 14:10:35 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=352</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/11/install-sco-openserver-5-0-7-on-esxi-3-5.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431414/5202844</fs:itemid></item><item><title>磁带机的磁带操作</title><link>http://imxie.net/2010/09/control_tape.htm</link><content:encoded>&lt;p&gt;这两天发现，对于同样大小的文件，磁带机越往后面用，写入时间就越长。&lt;/p&gt;
&lt;p&gt;之前介绍了用tar对磁带机进行数据操作，今天把磁带机的磁带操作简单整理下。&lt;/p&gt;
&lt;p&gt;所谓的磁带操作，就是如何进行倒带，擦除磁带，弹出磁带等，来看具体的操作命令：&lt;/p&gt;
&lt;p&gt;倒带，将磁带卷至起始位置：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# mt -f /dev/st0 rewind&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;擦除，擦掉磁带上的内容：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# mt -f /dev/st0 erase&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;这里要注意，磁带的擦除是很慢的，而且会对磁带造成损伤，所以一般情况下我们可不会去做这吃力不讨好的事情。&lt;br /&gt;
如果你擦除磁带是为了从头开始使用，那可以先倒带到磁带的起始位置，然后tar cvf /dev/st0 file_name来重新写入数据。&lt;br /&gt;
当磁带&lt;br /&gt;
此外，新的磁带拆封后可以直接放入磁带机使用，不用执行擦除。&lt;br /&gt;
出带，将磁带卷至初始位置然后从磁带机内弹出：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# mt –f /dev/st0 offline&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431415/rem1x/feedsky/s.gif?r=http://imxie.net/2010/09/control_tape.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/09/control_tape.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>这两天发现，对于同样大小的文件，磁带机越往后面用，写入时间就越长。 之前介绍了用tar对磁带机进行数据操作，今天把磁带机的磁带操作简单整理下。 所谓的磁带操作，就是如何进行倒带，擦除磁带，弹出磁带等，来看具体的操作命令： 倒带，将磁带卷至起始位置： # mt -f /dev/st0 rewind 擦除，擦掉磁带上的内容： # mt -f /dev/st0 erase 这里要注意，磁带的擦除是很慢的，而且会对磁带造成损伤，所以一般情况下我们可不会去做这吃力不讨好的事情。 如果你擦除磁带是为了从头开始使用，那可以先倒带到磁带的起始位置，然后tar cvf /dev/st0 file_name来重新写入数据。 当磁带 此外，新的磁带拆封后可以直接放入磁带机使用，不用执行擦除。 出带，将磁带卷至初始位置然后从磁带机内弹出： # mt –f /dev/st0 offline&lt;img src=&quot;http://www1.feedsky.com/t1/538431415/rem1x/feedsky/s.gif?r=http://imxie.net/2010/09/control_tape.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>mt</category><category>tape</category><pubDate>Fri, 17 Sep 2010 19:56:13 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/09/control_tape.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=336</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/09/control_tape.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431415/5202844</fs:itemid></item><item><title>杂记：python中使用public key做RSA加密</title><link>http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm</link><content:encoded>&lt;p&gt;这一个星期在用python实现写一个命令行的飞信发信息小工具，为了放在服务器监控程序中用于短信报警。飞信在做用户认证时会先把一个RSA公钥传给客户端，客户端用这个RSA公钥做加密，然后把加密后的16进制串送到远端去验证。&lt;/p&gt;
&lt;p&gt;我是个业余码农，所谓的cryptography，即密码学，那是几乎没接触过。通过wiki和google，对RSA简单了解了一下，然后找了一下如何用python来做RSA加密的方法，多数都提到了pycrypto和M2Crypto这两个模块（都是对openssl的封装）。&lt;/p&gt;
&lt;p&gt;飞信传给客户端的公钥key由两部分组成，就是RSA公钥的exponent（俗称e）和modulus（俗称n），通过exponent和modulus来生成真正的public key。我就卡在了如何用现成的python模块来使用e和n做公钥加密。一般情况下，都是通过导入PEM结构的公钥来做RSA加密，而我只有e和n，怎么把它们转化成PEM结构呢？&lt;/p&gt;
&lt;p&gt;后来发现M2Crypto有一个new_pub_key((e, n)) 方法可以导入e和n来生成公钥，可是它有格式的限制：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;e &lt;/span&gt;&lt;/strong&gt;(string) &amp;#8211; The RSA public exponent; it is a string in OpenSSL&amp;#8217;s MPINT format &amp;#8211; 4-byte big-endian bit-count followed by the appropriate number of bits.&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;n&lt;/span&gt;&lt;/strong&gt; (string) &amp;#8211; The RSA composite of primes; it is a string in OpenSSL&amp;#8217;s MPINT format &amp;#8211; 4-byte big-endian bit-count followed by the appropriate number of bits.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;也不知道这OpenSSL&amp;#8217;s MPINT format 是什么标准的格式，我没捣鼓出来。&lt;br /&gt;
然后又试用pycrypto模块，它也有一个类似的方法：RSA.construct((n, e))。惊喜的发现它只要传入long型的参数，就能正常工作。可是，飞信登录验证时的RSA加密用到的是RSA_PKCS1_PADDING 填充模式，pycrypto没有提供模式选择（有patch可以实现，未证实）。&lt;br /&gt;
懒惰的我最终决定由pycrypto使用e和n生成公钥，导出为PEM格式，再把这个PEM的公钥提供给M2Crypto，是不是很蛋疼？ &lt;img src='http://imxie.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; &lt;/p&gt;
&lt;p&gt;几行示例：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; Crypto.&lt;span style=&quot;color: black;&quot;&gt;PublicKey&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;RSA&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; M2Crypto.&lt;span style=&quot;color: black;&quot;&gt;BIO&lt;/span&gt;
&lt;span style=&quot;color: #ff7700;font-weight:bold;&quot;&gt;import&lt;/span&gt; M2Crypto.&lt;span style=&quot;color: black;&quot;&gt;RSA&lt;/span&gt;
.........................
&lt;span style=&quot;color: black;&quot;&gt;rsakey&lt;/span&gt; = Crypto.&lt;span style=&quot;color: black;&quot;&gt;PublicKey&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;RSA&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;construct&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;n, e&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
public_key = rsakey.&lt;span style=&quot;color: black;&quot;&gt;publickey&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;exportKey&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
bio = M2Crypto.&lt;span style=&quot;color: black;&quot;&gt;BIO&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;MemoryBuffer&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;tmpkey&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
rsa = M2Crypto.&lt;span style=&quot;color: black;&quot;&gt;RSA&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;load_pub_key_bio&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;bio&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;
rsa.&lt;span style=&quot;color: black;&quot;&gt;public_encrypt&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #483d8b;&quot;&gt;'要加密的东东'&lt;/span&gt;,M2Crypto.&lt;span style=&quot;color: black;&quot;&gt;RSA&lt;/span&gt;.&lt;span style=&quot;color: black;&quot;&gt;pkcs1_padding&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;我还试过用ctypes来调用openssl的函数，结果表示可行。&lt;/p&gt;
&lt;p&gt;我知道这样的实现很ugly，在python中有没有更直接的方法使用e和n做RSA公钥加密的呢？&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431416/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm/feed</wfw:commentRss><slash:comments>5</slash:comments><description>这一个星期在用python实现写一个命令行的飞信发信息小工具，为了放在服务器监控程序中用于短信报警。飞信在做用户认证时会先把一个RSA公钥传给客户端，客户端用这个RSA公钥做加密，然后把加密后的16进制串送到远端去验证。 我是个业余码农，所谓的cryptography，即密码学，那是几乎没接触过。通过wiki和google，对RSA简单了解了一下，然后找了一下如何用python来做RSA加密的方法，多数都提到了pycrypto和M2Crypto这两个模块（都是对openssl的封装）。 飞信传给客户端的公钥key由两部分组成，就是RSA公钥的exponent（俗称e）和modulus（俗称n），通过exponent和modulus来生成真正的public key。我就卡在了如何用现成的python模块来使用e和n做公钥加密。一般情况下，都是通过导入PEM结构的公钥来做RSA加密，而我只有e和n，怎么把它们转化成PEM结构呢？ 后来发现M2Crypto有一个new_pub_key((e, n)) 方法可以导入e和n来生成公钥，可是它有格式的限制： e (string) &amp;#8211; The RSA public exponent; it is a string in OpenSSL&amp;#8217;s MPINT format &amp;#8211; 4-byte big-endian bit-count followed by the appropriate number of bits. n (string) &amp;#8211; The RSA composite of primes; it is a string in OpenSSL&amp;#8217;s MPINT format &amp;#8211; 4-byte big-endian bit-count followed by [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431416/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>python</category><category>rsa</category><category>fetion</category><pubDate>Sun, 29 Aug 2010 21:54:33 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=326</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/08/use_public_key_to_rsa_in_pytho.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431416/5202844</fs:itemid></item><item><title>Linux命令行查字典</title><link>http://imxie.net/2010/08/cli_dict.htm</link><content:encoded>&lt;p&gt;这两天想找个CLI命令行的字典小工具，搜到了LinuxTOY的这篇：&lt;a href=&quot;http://linuxtoy.org/archives/gdict.html&quot;&gt;http://linuxtoy.org/archives/gdict.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;文中提到的gdict.sh是使用curl从google dictionary中查询单词解释，然后sed截取出中文解释。但现在google dictionary已改用袖珍牛津英语词典（&lt;a href=&quot;http://www.google.org.cn/posts/google-dictionary-changes-provider-to-oxford-pocket-dictionary-of-current-english.html&quot;&gt;见这里&lt;/a&gt;），只能查英语－英语了，并且查询结果由于html2text的原因还带有一些特殊字符，影响使用。&lt;/p&gt;
&lt;p&gt;看到文章中各位Linuxer的回贴，我简单改写了一个查字典shell，查询的信息来自百度词典。由于我对sed不熟，所以写的比较笨拙，好在还能用用。代码如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;c&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;#!/bin/bash&lt;/span&gt;
ARGS&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;1&lt;/span&gt;
E_BADARGS&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000dd;&quot;&gt;65&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt; $&lt;span style=&quot;color: #339933;&quot;&gt;# -ne &amp;quot;$ARGS&amp;quot; ]&lt;/span&gt;
then
    echo &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Usage:`basename $0` word&amp;quot;&lt;/span&gt;
    exit $E_BADARGS
fi
&amp;nbsp;
w3m &lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;no&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;cookie &lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;dump &lt;span style=&quot;color: #ff0000;&quot;&gt;'http://dict.baidu.com/s?wd='&lt;/span&gt;$&lt;span style=&quot;color:#800080;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;amp;f=3'&lt;/span&gt;  \
&lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt; sed &lt;span style=&quot;color: #ff0000;&quot;&gt;'/以下结果来自互联网网络释义/,$d'&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt; sed &lt;span style=&quot;color: #ff0000;&quot;&gt;'1,15d'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt; tac \
&lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt; sed &lt;span style=&quot;color: #ff0000;&quot;&gt;'1,2d'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt; tac &lt;span style=&quot;color: #339933;&quot;&gt;|&lt;/span&gt;sed &lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;r &lt;span style=&quot;color: #ff0000;&quot;&gt;'/^[0-9]+\./N;s/&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\n&lt;/span&gt;//'&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;tmp&lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;rxdict.&lt;span style=&quot;color: #202020;&quot;&gt;tmp&lt;/span&gt;
&amp;nbsp;
echo
echo &lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;e &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;--------------------&lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;\033&lt;/span&gt;[1;40;33m $1 &lt;span style=&quot;color: #006699; font-weight: bold;&quot;&gt;\033&lt;/span&gt;[0m--------------------&amp;quot;&lt;/span&gt;
cat &lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;tmp&lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;rxdict.&lt;span style=&quot;color: #202020;&quot;&gt;tmp&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;exit 0&lt;/p&gt;
&lt;p&gt;效果预览：&lt;br /&gt;
&lt;a href=&quot;http://tu.6.cn/pic/show-new/id/9646345&quot;&gt;&lt;img src=&quot;http://i3.6.cn/cvbnm/af/18/f4/a900c5a1fe5b8093c7b5dd76244a5318.png&quot; alt=&quot;&quot; width=&quot;571&quot; height=&quot;358&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431417/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/cli_dict.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/08/cli_dict.htm/feed</wfw:commentRss><slash:comments>4</slash:comments><description>这两天想找个CLI命令行的字典小工具，搜到了LinuxTOY的这篇：http://linuxtoy.org/archives/gdict.html 文中提到的gdict.sh是使用curl从google dictionary中查询单词解释，然后sed截取出中文解释。但现在google dictionary已改用袖珍牛津英语词典（见这里），只能查英语－英语了，并且查询结果由于html2text的原因还带有一些特殊字符，影响使用。 看到文章中各位Linuxer的回贴，我简单改写了一个查字典shell，查询的信息来自百度词典。由于我对sed不熟，所以写的比较笨拙，好在还能用用。代码如下： #!/bin/bash ARGS=1 E_BADARGS=65 &amp;#160; if &amp;#91; $# -ne &amp;#34;$ARGS&amp;#34; ] then echo &amp;#34;Usage:`basename $0` word&amp;#34; exit $E_BADARGS fi &amp;#160; w3m -no-cookie -dump 'http://dict.baidu.com/s?wd='$1'&amp;#38;f=3' \ &amp;#124; sed '/以下结果来自互联网网络释义/,$d'&amp;#124; sed '1,15d' &amp;#124; tac \ &amp;#124; sed '1,2d' &amp;#124; tac &amp;#124;sed -r '/^[0-9]+\./N;s/\n//' &amp;#62; /tmp/rxdict.tmp &amp;#160; echo echo -e &amp;#34;--------------------\033[1;40;33m $1 \033[0m--------------------&amp;#34; cat [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431417/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/cli_dict.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>sed</category><category>linux</category><category>baidu</category><category>dict</category><category>cli</category><pubDate>Sat, 07 Aug 2010 11:24:19 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/08/cli_dict.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=315</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/08/cli_dict.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431417/5202844</fs:itemid></item><item><title>Linux下使用tar操作磁带机的基本方法</title><link>http://imxie.net/2010/08/use_tar_to_control_tape.htm</link><content:encoded>&lt;p&gt;这是资料整理帖，所有内容来自互联网不同站点的没良心转载（出处无法确定&amp;#8230;），对原作者表示感谢。&lt;/p&gt;
&lt;p&gt;我现在可以玩弄一款 IBM 8767-HNX的外置磁带机，在RHEL 4中被认成/dev/st0 （还有一个/dev/nst0），来看一下dmesg输出&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;# dmesg&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&lt;/p&gt;
&lt;p&gt;Attached scsi tape st0 at scsi1, channel 0, id 0, lun 0&lt;/p&gt;
&lt;p&gt;st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 4503599627370495&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg0 at scsi0, channel 0, id 1, lun 0,  type 0&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg1 at scsi0, channel 0, id 4, lun 0,  type 13&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg2 at scsi1, channel 0, id 0, lun 0,  type 1&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg3 at scsi4, channel 0, id 0, lun 0,  type 0&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg4 at scsi4, channel 0, id 0, lun 1,  type 0&lt;/p&gt;
&lt;p&gt;Attached scsi generic sg5 at scsi4, channel 0, id 0, lun 31,  type 0&lt;/p&gt;
&lt;p&gt;st0: Block limits 1 &amp;#8211; 16777215 bytes.&lt;/p&gt;
&lt;p&gt;&amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-305&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;在Linux和UNIX下最常用的磁带机操作命令便是tar，它可以对磁带进行读写、列目录、倒带、擦除等操作，接下来一一介绍。&lt;/p&gt;
&lt;p&gt;列出目录：&lt;strong&gt;&lt;span style=&quot;color: #008000;&quot;&gt;tar cvf /dev/st0&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如若磁带上还没有任何文件，运行上面的命令会出错，不过这个错误可以忽略，并不影响使用。&lt;/p&gt;
&lt;p&gt;错误信息如下：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;英文版：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;#tar cvf /dev/st0&lt;/p&gt;
&lt;p&gt;tar: /dev/st0: Cannot read: Input/output error&lt;/p&gt;
&lt;p&gt;tar: At beginning of tape, quitting now&lt;/p&gt;
&lt;p&gt;tar: Error is not recoverable: exiting now&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;中文版：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;#tar tvf /dev/st0&lt;/p&gt;
&lt;p&gt;tar: /dev/st0：无法 read: 输入/输出错误&lt;/p&gt;
&lt;p&gt;tar: 处于磁带的起点，现在退出&lt;/p&gt;
&lt;p&gt;tar: 错误是不可恢复的：现在退出&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;分割线&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8211;&lt;/p&gt;
&lt;p&gt;写入数据：&lt;strong&gt;&lt;span style=&quot;color: #008000;&quot;&gt;tar cvf /dev/st0 &amp;lt;要写入的文件名&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;注：以下文字原封不动copy from internet&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;写入数据的方法有两种：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;不打包直接写入文件和打包压缩后写入文件。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;二者各有优缺点。不打包直接写入文件的方法，看起来效率低，操作复杂，但是可以提高数据的生存率。磁带是一种线性存储的设备，所有数据紧挨着顺序写入。当磁带的某一点损坏的时候，其余位置的磁带还可以继续读取，其中的文件也都能读出。如果采用了打包压缩后写入的方法，则磁带上存储的只有一个文件。当磁带有任何一个地方发生了故障无法读取，则这个压缩文件将缺少一些细节，即使是一个bit的错误，也将导致压缩文件报告CRC错误无法解压。所以，如果是存储大量的数据，建议直接写入。如果是存取小文件，则最好打包并给文件名加时间标记写入。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# ls -lh tape_test.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211;  1 root root 50K  8月  6 15:02 tape_test.tar&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# time tar cvf /dev/st0 tape_test.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tape_test.tar&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;real    0m3.936s&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;user    0m0.000s&lt;/p&gt;
&lt;p&gt;sys     0m0.002s&lt;/p&gt;
&lt;p&gt;# tar tvf /dev/st0&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:02:21 tape_test.tar&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;现在，通过 tar tvf /dev/st0 列目录时不再报错，并看到了刚才写入的tape_test.tar文件。&lt;/p&gt;
&lt;p&gt;还可以注意到，写入一个50k大小的文件居然要3.9秒，可见磁带机的写入速度是比较慢的，这也意味着一般的数据备份工作放在后半夜比较合适。&lt;/p&gt;
&lt;p&gt;续写数据：&lt;strong&gt;&lt;span style=&quot;color: #008000;&quot;&gt;tar rvf /dev/st0 &amp;lt;要写入的文件名&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;磁带存储是线性存储的，所有数据依次写入。为了不覆盖前边的内容，在写入时要使用rvf参数。&lt;/p&gt;
&lt;p&gt;如果你仍旧使用cvf参数来写入数据，那么之前的数据将会被覆盖：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# time tar cvf /dev/st0 tape_test2.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tape_test2.tar&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;real    0m3.945s&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;user    0m0.000s&lt;/p&gt;
&lt;p&gt;sys     0m0.002s&lt;/p&gt;
&lt;p&gt;# tar tvf /dev/st0&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:09:50 tape_test2.tar&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;可以看到，tape_test.tar已经被tape_test2.tar文件所覆盖了。&lt;/p&gt;
&lt;p&gt;使用rvf参数的示例：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# time tar rvf /dev/st0 tape_test3.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tape_test3.tar&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;real    0m3.979s&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;user    0m0.000s&lt;/p&gt;
&lt;p&gt;sys     0m0.002s&lt;/p&gt;
&lt;p&gt;# tar tvf /dev/st0&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:09:50 tape_test2.tar&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:10:49 tape_test3.tar&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;新增加的tape_test3.tar和之前写入的tape_test2.tar都存在了。&lt;/p&gt;
&lt;div&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;注意：&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;在磁带上如果相同文件写入了多次，在恢复时候会比较麻烦，需要先将磁带卷至文件所存储的地方，而后读取磁带当前位置所存储的文件，操作较为复杂，速度也比较慢。所以不建议在一盘磁带上写入相同文件名的文件。备份前，最好将备份文件的文件名加上时间标记，便于查找备份。例如要备份的文件有test-20100806-1510.tar和test-20100806-1530.tar，写入到磁带上。如此在执行备份和恢复操作的时候，能够更加便利快捷的进行存取操作。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;读取数据：&lt;strong&gt;&lt;span style=&quot;color: #008000;&quot;&gt;tar xvf /dev/st0 &amp;lt;要读取的文件名&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;在读取数据之前，得先查看当前磁带中的内容，获取要恢复的文件名。&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# tar tvf /dev/st0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:09:50 tape_test2.tar&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211; root/root     51200 2010-08-06 15:10:49 tape_test3.tar&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;恢复tape_test2.tar文件：&lt;/div&gt;
&lt;blockquote&gt;
&lt;div&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# time tar xvf /dev/st0 tape_test2.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;tape_test2.tar&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;real    0m0.024s&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;user    0m0.001s&lt;/p&gt;
&lt;p&gt;sys     0m0.001s&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;# ls -lh tape_test2.tar&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211;  1 root root 50K  8月  6 15:09 tape_test2.tar&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;结束分割线&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&lt;/div&gt;
&lt;p&gt;使用tar命令的tvf/cvf/rvf/xvf参数，分别可以实现对磁带机的各种不同操作。&lt;br /&gt;
接下来，就可以自己写shell脚本，然后扔到crontab里，开始做自动备份吧。&lt;/p&gt;
&lt;p&gt;参考资料：&lt;br /&gt;
&lt;a href=&quot;http://zengmin.blog.51cto.com/406650/324383&quot;&gt;http://zengmin.blog.51cto.com/406650/324383&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431418/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/use_tar_to_control_tape.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/08/use_tar_to_control_tape.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>这是资料整理帖，所有内容来自互联网不同站点的没良心转载（出处无法确定&amp;#8230;），对原作者表示感谢。 我现在可以玩弄一款 IBM 8767-HNX的外置磁带机，在RHEL 4中被认成/dev/st0 （还有一个/dev/nst0），来看一下dmesg输出 # dmesg &amp;#8230;&amp;#8230;&amp;#8230;&amp;#8230; Attached scsi tape st0 at scsi1, channel 0, id 0, lun 0 st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 4503599627370495 Attached scsi generic sg0 at scsi0, channel 0, id 1, lun 0,  type 0 Attached scsi generic sg1 at scsi0, [...]&lt;img src=&quot;http://www1.feedsky.com/t1/538431418/rem1x/feedsky/s.gif?r=http://imxie.net/2010/08/use_tar_to_control_tape.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>IBM</category><category>tar</category><category>tape</category><pubDate>Fri, 06 Aug 2010 15:35:43 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/08/use_tar_to_control_tape.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=305</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/08/use_tar_to_control_tape.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431418/5202844</fs:itemid></item><item><title>Shell中快速清空文件内容的几种方法</title><link>http://imxie.net/2010/07/some-shell-method-to-clear-file.htm</link><content:encoded>&lt;p&gt;闲来蛋疼，简单罗列如下5种快速清空文件内容的方法：&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;$ : &amp;gt; filename           #其中的 : 是一个占位符, 不产生任何输出.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;$ &amp;gt; filename&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;$ echo &amp;#8220;&amp;#8221; &amp;gt; filename&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;$ echo /dev/null &amp;gt; filename&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #993300;&quot;&gt;$ echo &amp;gt; filename&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;怎么习惯就怎么用，以上命令均在bash 3.2版本上通过测试。&lt;/p&gt;
&lt;p&gt;如果你想深入学习shell脚本的知识，可以猛点击这里： &lt;a href=&quot;http://tldp.org/LDP/abs/html/&quot; target=&quot;_blank&quot;&gt;http://tldp.org/LDP/abs/html/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ABS的中文版在这里：&lt;a href=&quot;http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/index.html&quot; target=&quot;_blank&quot;&gt;http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/index.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/538431419/rem1x/feedsky/s.gif?r=http://imxie.net/2010/07/some-shell-method-to-clear-file.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</content:encoded><wfw:commentRss>http://imxie.net/2010/07/some-shell-method-to-clear-file.htm/feed</wfw:commentRss><slash:comments>0</slash:comments><description>闲来蛋疼，简单罗列如下5种快速清空文件内容的方法： $ : &amp;#62; filename           #其中的 : 是一个占位符, 不产生任何输出. $ &amp;#62; filename $ echo &amp;#8220;&amp;#8221; &amp;#62; filename $ echo /dev/null &amp;#62; filename $ echo &amp;#62; filename 怎么习惯就怎么用，以上命令均在bash 3.2版本上通过测试。 如果你想深入学习shell脚本的知识，可以猛点击这里： http://tldp.org/LDP/abs/html/ ABS的中文版在这里：http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/index.html&lt;img src=&quot;http://www1.feedsky.com/t1/538431419/rem1x/feedsky/s.gif?r=http://imxie.net/2010/07/some-shell-method-to-clear-file.htm&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><category>linux</category><category>bash</category><category>echo</category><pubDate>Tue, 20 Jul 2010 16:08:59 +0800</pubDate><author>rem1x</author><comments>http://imxie.net/2010/07/some-shell-method-to-clear-file.htm#comments</comments><guid isPermaLink="false">http://imxie.net/?p=295</guid><dc:creator>rem1x</dc:creator><fs:srclink>http://imxie.net/2010/07/some-shell-method-to-clear-file.htm</fs:srclink><fs:srcfeed>http://imxie.net/feed</fs:srcfeed><fs:itemid>feedsky/rem1x/~8329165/538431419/5202844</fs:itemid></item></channel></rss>
