﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-The Way of C++ -随笔分类-Linux</title><link>http://www.cppblog.com/koson/category/12574.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Sep 2010 21:21:47 GMT</lastBuildDate><pubDate>Tue, 14 Sep 2010 21:21:47 GMT</pubDate><ttl>60</ttl><item><title>XP下Virtualbox虚拟Ubuntu共享文件夹设置（转）</title><link>http://www.cppblog.com/koson/archive/2010/09/15/126626.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Tue, 14 Sep 2010 16:57:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/09/15/126626.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/126626.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/09/15/126626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/126626.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/126626.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 1. 安装增强功能包(Guest Additions)</p>
<p>&nbsp;&nbsp;&nbsp; 安装好<u><font color=#108ac6>ubuntu</font></u>后，运行<a class=channel_keylink href="http://linux.chinaitlab.com/Special/Ubuntu/Index.html" target=_blank><u><font color=#108ac6>Ubuntu</font></u></a>并登录。然后在VirtualBox的菜单里选择"设备(Devices)" -&gt; "安装增强功能包(Install Guest Additions)"。</p>
<p>&nbsp;&nbsp;&nbsp; 你会发现在Ubuntu桌面上多出一个光盘图标，这张光盘默认被自动加载到了文件夹/media/cdom0。进入命令行终端，输入：</p>
<p>&nbsp;&nbsp;&nbsp; cd /media/cdom0</p>
<p>&nbsp;&nbsp;&nbsp; sudo ./VboxLinuxAdditions.run</p>
<p>&nbsp;&nbsp;&nbsp; 开始安装工具包。安装完毕后会提示要重启Ubuntu。</p>
<p>&nbsp;&nbsp;&nbsp; 2. 设置共享文件夹</p>
<p>&nbsp;&nbsp;&nbsp; 重启完成后点击"设备(Devices)" -&gt; 共享文件夹(Shared Folders)菜单，添加一个共享文件夹，选项固定和临时是指该文件夹是否是持久的。共享名可以任取一个自己喜欢的，比如"gongxiang"，尽量使用英文名称。</p>
<p>&nbsp;&nbsp;&nbsp; 3. 挂载共享文件夹</p>
<p>&nbsp;&nbsp;&nbsp; 重新进入虚拟Ubuntu，在命令行终端下输入：</p>
<p>&nbsp;&nbsp;&nbsp; sudo mkdir /mnt/shared</p>
<p>&nbsp;&nbsp;&nbsp; sudo mount -t vboxsf gongxiang /mnt/shared</p>
<p>&nbsp;&nbsp;&nbsp; 其中"gongxiang"是之前创建的共享文件夹的名字。OK，现在Ubuntu和主机可以互传文件了。</p>
<p>&nbsp;&nbsp;&nbsp; 假如您不想每一次都手动挂载，可以在/etc/fstab中添加一项</p>
<p>&nbsp;&nbsp;&nbsp; gongxiang /mnt/shared vboxsf rw,gid=100,uid=1000,auto 0 0</p>
<p>&nbsp;&nbsp;&nbsp; 这样就能够自动挂载了。</p>
<p>&nbsp;&nbsp;&nbsp; 4. 卸载的话使用下面的命令：</p>
<p>&nbsp;&nbsp;&nbsp; sudo umount -f /mnt/shared</p>
<p>&nbsp;&nbsp;&nbsp; 注意：</p>
<p>&nbsp;&nbsp;&nbsp; 共享文件夹的名称千万不要和挂载点的名称相同。比如，上面的挂载点是/mnt/shared，如果共享文件夹的名字也是shared的话，在挂载的时候就会出现如下的错误信息(看<a href="http://www.virtualbox.org/ticket/2265"><u><font color=#108ac6>http://www.virtualbox.org/ticket/2265</font></u></a>)：</p>
<p>&nbsp;&nbsp;&nbsp; /sbin/mount.vboxsf: mounting failed with the error: Protocol error</p>
<p>&nbsp;&nbsp;&nbsp; 原因分析可以看Tips on running Sun Virtualbox的Shared Folder on a Linux Guest节。</p>
<img src ="http://www.cppblog.com/koson/aggbug/126626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-09-15 00:57 <a href="http://www.cppblog.com/koson/archive/2010/09/15/126626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下tar gz bz2 tgz z等众多压缩文件的解压方法（转）</title><link>http://www.cppblog.com/koson/archive/2010/09/15/126625.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Tue, 14 Sep 2010 16:56:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/09/15/126625.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/126625.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/09/15/126625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/126625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/126625.html</trackback:ping><description><![CDATA[<p>在具体总结各类压缩文件之前呢，首先要弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢？其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文时，你就得先借助另它的工具将这一大堆文件先打成一个包，然后再就原来的压缩程序进行压缩。<br>　　Linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩了，所以首先就来讲讲tar命令的基本用法：<br>　　tar命令的选项有很多(用man tar可以查看到)，但常用的就那么几个选项，下面来举例说明一下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -cf all.tar *.jpg<br>　　这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包，-f指定包的文件名。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -rf all.tar *.gif<br>　　这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -uf all.tar logo.gif<br>　　这条命令是#更新原来tar包all.tar中logo.gif文件，-u是表示更新文件的意思。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -tf all.tar<br>　　这条命令是列出all.tar包中所有文件，-t是列出文件的意思<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -xf all.tar<br>　　这条命令是解出all.tar包中所有文件，-x是解开的意思<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序，比如调用gzip、bzip2等。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) tar调用gzip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gzip是GNU组织开发的一个压缩程序，.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -czf all.tar.gz *.jpg<br>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用gzip压缩，生成一个gzip压缩过的包，包名all.tar.gz<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -xzf all.tar.gz<br>　　这条命令是将上面产生的包解开。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) tar调用bzip2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bzip2是一个压缩能力更强的压缩程序，.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -cjf all.tar.bz2 *.jpg<br>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用bzip2压缩，生成一个bzip2压缩过的包，包名为all.tar.bz2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -xjf all.tar.bz2<br>　　这条命令是将上面产生的包解开。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)tar调用compress<br>&nbsp; compress也是一个压缩程序，但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与 compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用compress。下面来举例说明一下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -cZf all.tar.Z *.jpg<br>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用compress压缩，生成一个uncompress压缩过的包，包名为all.tar.Z<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -xZf all.tar.Z<br>　　这条命令是将上面产生的包解开<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有了上面的知识，你应该可以解开多种压缩文件了，下面对于tar系列的压缩文<br>件作一个小结：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #1)对于.tar结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tar -xf all.tar<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)对于.gz结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gzip -d all.gz<br>　　gunzip all.gz<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)对于.tgz或.tar.gz结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tar -xzf all.tar.gz<br>　　tar -xzf all.tgz<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4)对于.bz2结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bzip2 -d all.bz2<br>　　bunzip2 all.bz2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5)对于tar.bz2结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tar -xjf all.tar.bz2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6)对于.Z结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uncompress all.Z<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7)对于.tar.Z结尾的文件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tar -xZf all.tar.z<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外对于Window下的常见压缩文件.zip和.rar，Linux也有相应的方法来解压它们：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)对于.zip<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; linux下提供了zip和unzip程序，zip是压缩程序，unzip是解压程序。它们的参<br>数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # zip all.zip *.jpg<br>　　这条命令是将所有.jpg的文件压缩成一个zip包<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # unzip all.zip<br>　　这条命令是将all.zip中的所有文件解压出来<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)对于.rar<br>&nbsp;要在linux下处理.rar文件，需要安装RAR for Linux，可以从网上下载，但要记住，RAR for Linux不是免费的；可从<a href="http://www.rarsoft.com/download.htm" target=_blank><u><font color=#006600>http://www.rarsoft.com/download.htm</font></u></a>下载RARfor Linux 3.2.<br>0，然后安装：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # tar -xzpvf rarlinux-3.2.0.tar.gz<br>　　# cd rar<br>　　# make<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样就安装好了，安装后就有了rar和unrar这两个程序，rar是压缩程序，unrar是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # rar a all *.jpg<br>　　这条命令是将所有.jpg的文件压缩成一个rar包，名为all.rar，该程序会将.rar扩展名将自动附加到包名后。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # unrar e all.rar<br>　　这条命令是将all.rar中的所有文件解压出来<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到此为至，我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式，你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了，以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、 zip、 unzip、rar、unrar等程式，以及如何使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、. tar.Z、.zip、.rar这10种压缩文件进行操作。 </p>
<img src ="http://www.cppblog.com/koson/aggbug/126625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-09-15 00:56 <a href="http://www.cppblog.com/koson/archive/2010/09/15/126625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> unix实际用户ID和有效用户ID解析</title><link>http://www.cppblog.com/koson/archive/2010/04/02/111461.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 02 Apr 2010 12:11:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/04/02/111461.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/111461.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/04/02/111461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/111461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/111461.html</trackback:ping><description><![CDATA[<p>今天在看APUE，这两个问题很难理解，GOOGLE一下，有篇文章总结的不错，看了一下才明白透彻了。</p>
<p>由于用户在UNIX下经常会遇到SUID、SGID的概念，而且SUID和SGID涉及到系统安全，所以用户也比较关心这个问题。关于SUID、 SGID的问题也经常有人提问，但回答的人一般答得不够详细，加上曾经回答过两个网友的问题，还查了一些资料，决定整理成本文，以供大家参考。限于本人的水平问题，文章中如果有不当之处，请广大网友指正。 <br>一、UNIX下关于文件权限的表示方法和解析 </p>
<p>SUID 是 Set User ID, SGID 是 Set Group ID的意思。 </p>
<p>UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的：-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位： </p>
<p>9 8 7 6 5 4 3 2 1 0 <br>- r w x r - x r - x </p>
<p>第9位表示文件类型,可以为p、d、l、s、c、b和-： </p>
<p>p表示命名管道文件 <br>d表示目录文件 <br>l表示符号连接文件 <br>-表示普通文件 <br>s表示socket文件 <br>c表示字符设备文件 <br>b表示块设备文件 </p>
<p>第8-6位、5-3位、2-0位分别表示文件所有者的权限，同组用户的权限，其他用户的权限，其形式为rwx： </p>
<p>r表示可读，可以读出文件的内容 </p>
<p>w表示可写，可以修改文件的内容 </p>
<p>x表示可执行，可运行这个程序 </p>
<p>没有权限的位置用-表示 </p>
<p>例子： </p>
<p>ls -l myfile显示为： </p>
<p>-rwxr-x--- 1 foo staff 7734 Apr 05 17:07 myfile </p>
<p>表示文件myfile是普通文件，文件的所有者是foo用户，而foo用户属于staff组，文件只有1个硬连接，长度是7734个字节，最后修改时间4月5日17:07。 </p>
<p>所有者foo对文件有读写执行权限，staff组的成员对文件有读和执行权限，其他的用户对这个文件没有权限。 </p>
<p>如果一个文件被设置了SUID或SGID位，会分别表现在所有者或同组用户的权限的可执行位上。例如： </p>
<p>1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置 </p>
<p>2、-rwSr--r-- 表示SUID被设置，但所有者权限中可执行位没有被设置 </p>
<p>3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置 </p>
<p>4、-rw-r-Sr-- 表示SGID被设置，但同组用户权限中可执行位没有被社 </p>
<p>其实在UNIX的实现中，文件权限用12个二进制位表示，如果该位置上的值是 </p>
<p>1，表示有相应的权限： </p>
<p>11 10 9 8 7 6 5 4 3 2 1 0 <br>S G T r w x r w x r w x </p>
<p>第11位为SUID位，第10位为SGID位，第9位为sticky位，第8-0位对应于上面的三组rwx位。 </p>
<p>11 10 9 8 7 6 5 4 3 2 1 0 </p>
<p>上面的-rwsr-xr-x的值为： 1 0 0 1 1 1 1 0 1 1 0 1 </p>
<p>-rw-r-Sr--的值为： 0 1 0 1 1 0 1 0 0 1 0 0 </p>
<p><br>给文件加SUID和SUID的命令如下： </p>
<p>chmod u+s filename 设置SUID位 </p>
<p>chmod u-s filename 去掉SUID设置 </p>
<p>chmod g+s filename 设置SGID位 </p>
<p>chmod g-s filename 去掉SGID设置 </p>
<p>另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位权限表示法也很简单。 </p>
<p>二、SUID和SGID的详细解析 </p>
<p>由于SUID和SGID是在执行程序（程序的可执行位被设置）时起作用，而可执行位只对普通文件和目录文件有意义，所以设置其他种类文件的SUID和SGID位是没有多大意义的。 </p>
<p>首先讲普通文件的SUID和SGID的作用。例子： </p>
<p>如果普通文件myfile是属于foo用户的，是可执行的，现在没设SUID位，ls命令显示如下： </p>
<p>-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢？是这个进程的运行用户的（有效）ID，包括 user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。 </p>
<p>除了一般的user id 和group id外，还有两个称之为effective 的id，就是有效id，上面的四个id表示为：uid，gid，euid，egid。内核主要是根据euid和egid来确定进程对资源的访问权限。 </p>
<p>一个进程如果没有SUID或SGID位，则euid=uid egid=gid，分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202，foo用户的uid和gid为 200，201，kevin运行myfile程序形成的进程的euid=uid=204，egid=gid=202，内核根据这些值来判断进程对资源访问的限制，其实就是kevin用户对资源访问的权限，和foo没关系。 </p>
<p>&nbsp;</p>
<p><br>如果一个程序设置了SUID，则euid和egid变成被运行的程序的所有者的uid和gid，例如kevin用户运行myfile，euid=200，egid=201，uid=204，gid=202，则这个进程具有它的属主foo的资源访问权限。 </p>
<p>SUID的作用就是这样：让本来没有相应权限的用户运行这个程序时，可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。 </p>
<p>SUID的优先级比SGID高，当一个可执行程序设置了SUID，则SGID会自动变成相应的egid。 </p>
<p>下面讨论一个例子： </p>
<p>UNIX系统有一个/dev/kmem的设备文件，是一个字符设备文件，里面存储了核心程序要访问的数据，包括用户的口令。所以这个文件不能给一般的用户读写，权限设为：cr--r----- 1 root system 2, 1 May 25 1998 kmem </p>
<p>但ps等程序要读这个文件，而ps的权限设置如下： </p>
<p>-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps </p>
<p>这是一个设置了SGID的程序，而ps的用户是bin，不是root，所以不能设置SUID来访问kmem，但大家注意了，bin和root都属于 system组，而且ps设置了SGID，一般用户执行ps，就会获得system组用户的权限，而文件kmem的同组用户的权限是可读，所以一般用户执行ps就没问题了。但有些人说，为什么不把ps程序设置为root用户的程序，然后设置SUID位，不也行吗？这的确可以解决问题，但实际中为什么不这样做呢？因为SGID的风险比SUID小得多，所以出于系统安全的考虑，应该尽量用SGID代替SUID的程序，如果可能的话。下面来说明一下SGID对目录的影响。SUID对目录没有影响。如果一个目录设置了SGID位，那么如果任何一个用户对这个目录有写权限的话，他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组，而文件所有者不变，还是属于建立这个文件的用户。 </p>
<p><br>三、关于SUID和SGID的编程 </p>
<p>和SUID和SGID编程比较密切相关的有以下的头文件和函数： </p>
<p><br>#include </p>
<p>#include </p>
<p><br>uid_t getuid(void); </p>
<p><br>uid_t geteuid(void); </p>
<p><br>gid_t getgid (void); </p>
<p><br>gid_t getegid (void); </p>
<p><br>int setuid (uid_t UID); </p>
<p><br>int setruid (uid_t RUID); </p>
<p><br>int seteuid (uid_t EUID); </p>
<p><br>int setreuid (uid_t RUID,uid_t EUID); </p>
<p><br>int setgid (gid_t GID); </p>
<p><br>int setrgid (gid_t RGID); </p>
<p><br>int setegid (git_t EGID); </p>
<p><br>int setregid (gid_t RGID, gid_t EGID); </p>
<p><br>具体这些函数的说明在这里就不详细列出来了,要用到的可以用man查。 </p>
<p>&nbsp;</p>
<p>SUID/SGID : </p>
<p>假如你有文件a.txt </p>
<p>#ls -l a.txt </p>
<p>-rwxrwxrwx </p>
<p>#chmod 4777 a.txt </p>
<p>-rwsrwxrwx ======&gt;注意s位置 </p>
<p>#chmod 2777 a.txt </p>
<p>-rwxrwsrwx ======&gt;注意s位置 </p>
<p>#chmod 7777 a.txt </p>
<p>-rwsrwxswt ======&gt;出现了t,t的作用在内存中尽量保存a.txt,节省系统再加载的时间. </p>
<p><br>现在再看前面设置 SUID/SGID作用: </p>
<p>#cd /sbin </p>
<p>#./lsusb </p>
<p>... </p>
<p>#su aaa(普通用户) </p>
<p>$./lsusb </p>
<p>... </p>
<p>是不是现在显示出错？ </p>
<p>$su </p>
<p>#chmod 4755 lsusb </p>
<p>#su aaa </p>
<p>$./lsusb </p>
<p><br>... 现在明白了吗？本来是只有root用户才能执行的命令，加了SUID后,普通用户就可以像root一样的用，权限提升了。上面是对于文件来说的，对于目录也差不多！ </p>
<p>目录的S属性使得在该目录下创建的任何文件及子目录属于该目录所拥有的组，目录的T属性使得该目录的所有者及root才能删除该目录。还有对于s与S，设置SUID/SGID需要有运行权限，否则用ls -l后就会看到S,证明你所设置的SUID/SGID没有起作用。 </p>
<p><br>Why we need suid,how do we use suid? </p>
<p><br>r -- 读访问 </p>
<p><br>　　 w -- 写访问 </p>
<p><br>　　 x -- 执行许可 </p>
<p><br>　　 s -- SUID/SGID </p>
<p><br>　　 t -- sticky位 </p>
<p><br>那么 suid/sgid是做什么的？ 为什么会有suid位呢？ </p>
<p><br>要想明白这个，先让我们看个问题：如果让每个用户更改自己的密码？ </p>
<p><br>用户修改密码，是通过运行命令passwd来实现的。最终必须要修改/etc/passwd文件，而passwd的文件的属性是： </p>
<p><br>#ls -l /etc/passwd </p>
<p><br>-rw-r--r-- 1 root root 2520 Jul 12 18:25 passwd </p>
<p><br>我们可以看到passwd文件只有对于root用户是可写的，而对于所有的他用户来说都是没有写权限的。 那么一个普通的用户如何能够通过运行passwd命令修改这个passwd文件呢？ </p>
<p><br>为了解决这个问题，SUID/SGID便应运而生。而且AT&amp;T对它申请了专利。 呵呵。 </p>
<p><br>SUID和SGID是如何解决这个问题呢？ </p>
<p><br>首先，我们要知道一点：进程在运行的时候，有一些属性，其中包括 实际用户ID,实际组ID,有效用户ID,有效组ID等。 实际用户ID和实际组ID标识我们是谁，谁在运行这个程序,一般这2个字段在登陆时决定，在一个登陆会话期间， 这些值基本上不改变。 </p>
<p><br>而有效用户ID和有效组ID则决定了进程在运行时的权限。内核在决定进程是否有文件存取权限时，是采用了进程的有效用户ID来进行判断的。 </p>
<p><br>知道了这点，我们来看看SUID的解决途径： </p>
<p><br>当一个程序设置了为SUID位时，内核就知道了运行这个程序的时候，应该认为是文件的所有者在运行这个程序。即该程序运行的时候，有效用户ID是该程序的所有者。举个例子： </p>
<p><br>[root@sgrid5 bin]# ls -l passwd </p>
<p><br>-r-s--s--x 1 root root 16336 Feb 14 2003 passwd </p>
<p><br>虽然你以test登陆系统，但是当你输入passwd命令来更改密码的时候，由于passwd设置了SUID位，因此虽然进程的实际用户ID是test对应的ID，但是进程的有效用户ID则是passwd文件的所有者root的ID,因此可以修改/etc/passwd文件。 </p>
<p><br>让我们看另外一个例子。 </p>
<p><br>ping命令应用广泛，可以测试网络是否连接正常。ping在运行中是采用了ICMP协议，需要发送ICMP报文。但是只有root用户才能建立ICMP报文，如何解决这个问题呢？同样，也是通过SUID位来解决。 </p>
<p><br>[root@sgrid5 bin]# ls -l /bin/ping </p>
<p><br>-rwsr-sr-x 1 root root 28628 Jan 25 2003 /bin/ping </p>
<p><br>我们可以测试一下，如果去掉ping的SUID位，再用普通用户去运行命令，看会怎么样。 </p>
<p><br>[root@sgrid5 bin]#chmod u-s /bin/ping </p>
<p><br>[root@sgrid5 bin]# ls -l ping </p>
<p><br>-rwxr-xr-x 1 root root 28628 Jan 25 2003 ping </p>
<p><br>[root@sgrid5 bin]#su test </p>
<p><br>[test@sgrid5 bin]$ ping byhh.net </p>
<p><br>ping: icmp open socket: Operation not permitted </p>
<p><br>SUID虽然很好了解决了一些问题，但是同时也会带来一些安全隐患。 </p>
<p><br>因为设置了 SUID 位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。 </p>
<p><br>因此在安全方面特别要注意那些设置了SUID的程序。 </p>
<p><br>通过以下的命令可以找到系统上所有的设置了suid的文件： </p>
<p><br>[root@sgrid5 /]# find / -perm -04000 -type f -ls </p>
<p><br>对于这里为什么是4000，大家可以看一下前面的st_mode的各bit的意义就明白了。 </p>
<p><br>在这些设置了suid的程序里，如果用不上的，就最好取消该程序的suid位。</p>
<p><br>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/jiean/archive/2009/01/02/3686207.aspx">http://blog.csdn.net/jiean/archive/2009/01/02/3686207.aspx</a></p>
<img src ="http://www.cppblog.com/koson/aggbug/111461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-04-02 20:11 <a href="http://www.cppblog.com/koson/archive/2010/04/02/111461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 后台进程管理</title><link>http://www.cppblog.com/koson/archive/2010/04/01/111269.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Thu, 01 Apr 2010 06:15:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/04/01/111269.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/111269.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/04/01/111269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/111269.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/111269.html</trackback:ping><description><![CDATA[<div class="blog_content">
<div id="art" style="margin: 15px;">
<div><strong><span style="color: #000099;">原文地址</span></strong> <a  href="http://blog.chinaunix.net/u/1604/showart_1079559.html" target="_blank">http://blog.chinaunix.net/u/1604/showart_1079559.html</a> </div>
<div>fg、bg、jobs、&amp;、ctrl + z都是跟系统任务有关的，虽然现在基本上不怎么需要用到这些命令，但学会了也是很实用的<br>一。&amp; 最经常被用到<br>&nbsp; &nbsp;这个用在一个命令的最后，可以把这个命令放到后台执行<br>二。ctrl + z<br>&nbsp; &nbsp; &nbsp;可以将一个正在前台执行的命令放到后台，并且暂停<br>三。jobs<br>&nbsp; &nbsp; &nbsp;查看当前有多少在后台运行的命令<br>四。fg<br>&nbsp; &nbsp; &nbsp;将后台中的命令调至前台继续运行<br>&nbsp; &nbsp;如果后台中有多个命令，可以用 fg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)<br>五。bg<br>&nbsp; &nbsp; &nbsp;将一个在后台暂停的命令，变成继续执行<br>&nbsp; &nbsp;如果后台中有多个命令，可以用bg %jobnumber将选中的命令调出，%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) </div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<h2>Linux下使用Shell命令控制任务Jobs执行</h2>
<div class="t_msgfont" id="postmessage_6681">下列命令可以用来操纵进程任务：<br>　　ps 列出<span class="t_tag">系统</span>中正在运行的进程；<br>　　kill 发送信号给一个或多个进程（经常用来杀死一个进程）；<br>　　jobs 列出当前shell环境中已启动的任务状态，若未指定jobsid，则显示所有活动的任务状态信息；如果报告了一个任务的终止(即任务的状态被标记为Terminated)，shell 从当前的shell<span class="t_tag">环境</span>已知的列表中删除任务的进程标识；<br>　　bg 将进程搬到后台运行（Background）；<br>　　fg 将进程搬到前台运行（Foreground）； <br><br>　　将job转移到后台运行 <br>　　如果你经常在X图形下工作，你可能有这样的经历：通过终端命令运行一个GUI程序，GUI界面出来了，但是你的终端还停留在原地，你不能在shell中继续执行其他命令了，除非将GUI<span class="t_tag">程序</span>关掉。 <br><br>　　为了使程序执行后终端还能继续接受命令，你可以将进程移到后台运行，使用如下命令运行程序： #假设要运行xmms<br><br>　　$xmms &amp;<br><br>　　这样打开xmms后，终端的提示又回来了。现在xmms在后台运行着呢；但万一你运行程序时忘记使用&#8220;&amp;&#8221;了，又不想重新执行；你可以先使用ctrl+z挂起程序，然后敲入bg命令，这样程序就在后台继续运行了。<br><br>　　概念：当前任务 <br><br>　　如果后台的任务号有2个，[1],[2]；如果当第一个后台任务顺利执行完毕，第二个后台任务还在执行中时，当前任务便会自动变成后台任务号码&#8220;[2]&#8221;的后台任务。所以可以得出一点，即当前任务是会变动的。当<span class="t_tag">用户</span>输入&#8220;fg&#8221;、&#8220;bg&#8221;和&#8220;stop&#8221;等命令时，如果不加任何引号，则所变动的均是当前任务。<br><br>　　察看jobs <br>　　使用jobs或ps命令可以察看正在执行的jobs。 <br><br>
jobs命令执行的结果，＋表示是一个当前的作业，减号表是是一个当前作业之后的一个作业，jobs
-l选项可显示所有任务的PID,jobs的状态可以是running, stopped,
Terminated,但是如果任务被终止了（kill），shell
从当前的shell环境已知的列表中删除任务的进程标识；也就是说，jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息；<br><br>　　进程的挂起 <br><br>　　后台进程的挂起： <br><br>　　在solaris中通过stop命令执行，通过jobs命令查看job号(假设为num)，然后执行stop %num；<br><br>　　在redhat中，不存在stop命令，可通过执行命令kill -stop PID，将进程挂起；<br><br>　　当要重新执行当前被挂起的任务时，通过bg %num 即可将挂起的job的状态由stopped改为running，仍在后台执行；当需要改为在前台执行时，执行命令fg %num即可；<br><br>　　前台进程的挂起：<br><br>　　ctrl+Z;<br><br>　　进程的终止 <br><br>　　后台进程的终止：<br>　　方法一：<br>　　通过jobs命令查看job号（假设为num），然后执行kill %num<br><br>　　方法二：<br>　　通过ps命令查看job的进程号（PID，假设为pid），然后执行kill pid <br><br>　　前台进程的终止：<br><br>　　ctrl+c<br><br>　　kill的其他作用 <br>　　kill除了可以终止进程，还能给进程发送其它信号，使用kill -l 可以察看kill支持的信号。 <br><br>　　SIGTERM是不带参数时kill发送的信号，意思是要进程终止运行，但执行与否还得看进程是否支持。如果进程还没有终止，可以使用kill -SIGKILL pid，这是由内核来终止进程，进程不能监听这个信号。</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/koson/aggbug/111269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-04-01 14:15 <a href="http://www.cppblog.com/koson/archive/2010/04/01/111269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu安装ssh服务</title><link>http://www.cppblog.com/koson/archive/2010/03/28/110749.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Sun, 28 Mar 2010 10:45:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/28/110749.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/110749.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/28/110749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/110749.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/110749.html</trackback:ping><description><![CDATA[<p>ubuntu默认并没有安装ssh服务，如果通过ssh链接ubuntu，需要自己手动安装ssh-server。判断是否安装ssh服务，可以通过如下命令进行：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"> </div>
</div>
<ol start="1" class="dp-j">
    <li><span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;ssh&nbsp;localhost&nbsp;&nbsp;</span></span></li>
    <li><span>ssh:&nbsp;connect&nbsp;to&nbsp;host&nbsp;localhost&nbsp;port&nbsp;<span class="number">22</span><span>:&nbsp;Connection&nbsp;refused&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" name="code" style="display: none;">xjj@xjj-desktop:~$ ssh localhost ssh: connect to host localhost port 22: Connection refused</pre>
<p>如上所示，表示没有还没有安装，可以通过apt安装，命令如下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"> </div>
</div>
<ol start="1" class="dp-j">
    <li><span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;sudo&nbsp;apt-get&nbsp;install&nbsp;openssh-server&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" name="code" style="display: none;">xjj@xjj-desktop:~$ sudo apt-get install openssh-server</pre>
<p>系统将自动进行安装，安装完成以后，先启动服务：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"> </div>
</div>
<ol start="1" class="dp-j">
    <li><span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;sudo&nbsp;/etc/init.d/ssh&nbsp;start&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" name="code" style="display: none;">xjj@xjj-desktop:~$ sudo /etc/init.d/ssh start</pre>
<p>&nbsp;</p>
<p>启动后，可以通过如下命令查看服务是否正确启动</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"> </div>
</div>
<ol start="1" class="dp-j">
    <li><span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;ps&nbsp;-e|grep&nbsp;ssh&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;<span class="number">6212</span><span>&nbsp;?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">00</span><span>:</span><span class="number">00</span><span>:</span><span class="number">00</span><span>&nbsp;sshd&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" name="code" style="display: none;">xjj@xjj-desktop:~$ ps -e|grep ssh  6212 ?        00:00:00 sshd</pre>
<p>&nbsp;</p>
<p><br>
如上表示启动ok。注意，ssh默认的端口是22，可以更改端口，更改后先stop，<br>
然后start就可以了。改配置在/etc/ssh/sshd_config下，如下所示。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码  </div>
</div>
<ol start="1" class="dp-j">
    <li><span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;vi&nbsp;/etc/ssh/sshd_config&nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;Package&nbsp;generated&nbsp;configuration&nbsp;file&nbsp;&nbsp;</span></li>
    <li><span>#&nbsp;See&nbsp;the&nbsp;sshd(<span class="number">8</span><span>)&nbsp;manpage&nbsp;</span><span class="keyword">for</span><span>&nbsp;details&nbsp;&nbsp;</span></span></li>
    <li><span>#&nbsp;What&nbsp;ports,&nbsp;IPs&nbsp;and&nbsp;protocols&nbsp;we&nbsp;listen&nbsp;<span class="keyword">for</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>Port&nbsp;<span class="number">22</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="java" name="code" style="display: none;">xjj@xjj-desktop:~$ vi /etc/ssh/sshd_config # Package generated configuration file # See the sshd(8) manpage for details # What ports, IPs and protocols we listen for Port 22</pre>
<p>&nbsp;</p>
<p><br>
最后，应该是连接的时候了。请看如下命令：</p>
<div class="bar">
<div class="tools">Java代码  </div>
</div>
<span><span>xjj</span><span class="annotation">@xjj</span><span>-desktop:~$&nbsp;ssh&nbsp;exceljava</span><span class="annotation">@192</span><span>.168.</span><span class="number">158.129</span><span></span></span><img src ="http://www.cppblog.com/koson/aggbug/110749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-28 18:45 <a href="http://www.cppblog.com/koson/archive/2010/03/28/110749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux java1.6 安装 </title><link>http://www.cppblog.com/koson/archive/2010/03/27/110672.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Sat, 27 Mar 2010 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/27/110672.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/110672.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/27/110672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/110672.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/110672.html</trackback:ping><description><![CDATA[<br><br>
<p class="tdep clearfix nbw-act fc06"><span class="pleft"><a class="fc03 m2a" href="http://blog.163.com/sz2273_pr/blog/#m=0&amp;t=1&amp;c=fks_087068087082089071085087080095080087083069080084095069"><font color="#1222ff"></font></a></span><span class="pright fc07 ztag"><span class="sep ul fc04 selected js-fcurrent fc05" __tabkey__="true" index="2" __esnkey__="ev_1393386297"><strong><font color="#ffffff"><br></font></strong></span></span> </p>
<div class="bct fc05 fc11 nbw-blog ztag js-fs2">
<p>JDK安装配置</p>
<p>&nbsp;1、下载jdk，本例使用jdk-6u18-linux-i586.bin<br>&nbsp;&nbsp;&nbsp; 下载页面：<a href="http://java.sun.com/javase/downloads/index.jsp"><font color="#1222ff">http://java.sun.com/javase/downloads/index.jsp</font></a></p>
<p>&nbsp;2、使jdk-6u18-linux-i586.bin 具有执行权限<br>&nbsp;&nbsp;&nbsp; chmod +x jdk-6u18-linux-i586.bin</p>
<p>&nbsp;3、安装jdk (根据提示一步步安装)<br>&nbsp;&nbsp;&nbsp; ./jdk-6u18-linux-i586.bin<br>&nbsp;&nbsp;&nbsp; 看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议.<br>&nbsp;&nbsp;&nbsp; 出现一行字：Do you aggree to the above license terms? [yes or no]<br>&nbsp;&nbsp;&nbsp; 安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了，输入"y" 或 "yes" 回车。</p>
<p>&nbsp;4、增加JAVA_HOME环境变量<br>&nbsp;&nbsp; [root@test src]# vi /etc/profile&nbsp; <br>&nbsp;&nbsp; 在最后面增加：<br>&nbsp;&nbsp; #set java environment<br>&nbsp;&nbsp;&nbsp; export JAVA_HOME=/usr/java/jdk1.6.0_18<br>&nbsp;&nbsp;&nbsp; export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br>&nbsp;&nbsp;&nbsp; export PATH=$PATH:$JAVA_HOME/bin<br>&nbsp;&nbsp;&nbsp; export JAVA_HOME CLASSPATH PATH <br>&nbsp;&nbsp; 保存退出<br>&nbsp;&nbsp; 注释：<br>&nbsp;&nbsp; JAVA_HOME指明JDK安装路径，就是刚才安装时所选择的路径，此路径下包括lib，bin，jre等文件夹（此变量最好设置，因为以后运行tomcat，Eclipse等都需要依靠此变量）。 <br>&nbsp;&nbsp; PATH使得系统可以在任何路径下识别java命令，设为：%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASSPATH为java加载类(class or lib)路径，只有类在classpath中，java命令才能识别，设为：.:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径) <br>特别注意：◆环境变量值的结尾没有任何符号，不同值之间用；隔开（unix中用:）。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ◆CLASSPATH变量值中的.表示当前目录。 </p>
<p>&nbsp;5、 使得刚刚添加到环境变量生效：<br>&nbsp;&nbsp;&nbsp; [root@test src]# source /etc/profile </p>
<p>&nbsp;6、 进入 /usr/bin/目录<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #cd /usr/bin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ln -s -f /usr/java/jdk1.6.0_18/jre/bin/java<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ln -s -f /usr/java/jdk1.6.0_18/bin/javac</p>
<p>&nbsp;7、在命令行输入<br>&nbsp;&nbsp;&nbsp;&nbsp; #java -version<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 屏幕输出: <br>&nbsp;&nbsp;&nbsp; java version "1.6.0_18"<br>&nbsp;&nbsp;&nbsp; Java(TM) SE Runtime Environment (build 1.6.0_18-b07)<br>&nbsp;&nbsp;&nbsp; Java HotSpot(TM) Server VM (build 16.0-b13, mixed mode)</p>
<p>&nbsp;8、 测试安装情况：<br>&nbsp;&nbsp;&nbsp; 新建Test.java:</p>
<p>&nbsp;&nbsp;&nbsp; public class Test<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; public static void main(String[] args)<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; System.out.println("Hello,Welcome to Linux World!");&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp; 在终端用cd命令进入Test.java目录,然后输入<br>&nbsp;&nbsp;&nbsp; javac Test.java<br>&nbsp;&nbsp;&nbsp; java Test<br>&nbsp;&nbsp;&nbsp; 若输出<br>&nbsp;&nbsp;&nbsp; Hello,Welcome to Linux World!<br>&nbsp;&nbsp;&nbsp; 则表明配置成功!</p>
</div><img src ="http://www.cppblog.com/koson/aggbug/110672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-27 13:31 <a href="http://www.cppblog.com/koson/archive/2010/03/27/110672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sl410无线上网解决办法</title><link>http://www.cppblog.com/koson/archive/2010/03/24/110455.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 24 Mar 2010 07:21:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/24/110455.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/110455.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/24/110455.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/110455.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/110455.html</trackback:ping><description><![CDATA[sl410安装ubuntu后没有安装无线网卡驱动，所以要手动安装。下载 rtl8192se_linux_2.6.0010.1012.2009.tar.gz，解压，再make install ，只要注意安装的时候要在超级用户下安装，不然会出现无法找到bound.s的错误。<br><img src ="http://www.cppblog.com/koson/aggbug/110455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-24 15:21 <a href="http://www.cppblog.com/koson/archive/2010/03/24/110455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>win7，ubuntu双系统删除ubuntu</title><link>http://www.cppblog.com/koson/archive/2010/03/24/110433.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 24 Mar 2010 06:00:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/24/110433.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/110433.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/24/110433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/110433.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/110433.html</trackback:ping><description><![CDATA[<p>如果直接在win7里面删除ubuntu所在的分区，则由于grub也被删除了，导致无法引导win7,可以使用安装光盘在dos命令下执行fdisk /mbr修复引导区，下面说说没有安装光盘之类的进入dos的解决办法。<br>下载mbrfix.exe,复制到c盘根目录下，在cmd里面运行mbrfix /dirve 0 fixmbr /yes, 如果出现error:5,则右击mbrfix.exe选择属性将mbrfix的兼容性改为以管理员身份运行。<br>然后重启一遍，到win7下面在磁盘管理里面将ubuntu所占用的分区删除即可。</p>
<img src ="http://www.cppblog.com/koson/aggbug/110433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-24 14:00 <a href="http://www.cppblog.com/koson/archive/2010/03/24/110433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gdb基本使用</title><link>http://www.cppblog.com/koson/archive/2010/03/14/109661.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Sun, 14 Mar 2010 04:45:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/14/109661.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/109661.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/14/109661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/109661.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/109661.html</trackback:ping><description><![CDATA[GDB的使用<br><br>　　当程序出错并产生core 时<br><br>　　快速定位出错函数的办法<br><br>　　gdb 程序名 core文件名(一般是core,也可能是core.xxxx)<br><br>　　调试程序使用的键<br><br>　　r run 运行.程序还没有运行前使用<br><br>　　c cuntinue 继续运行。运行中断后继续运行<br><br>　　q 退出<br><br>　　kill 终止调试的程序<br><br>　　h help 帮助<br><br>　　&lt;tab&gt; 命令补全功能<br><br>　　step 跟入函数<br><br>　　next 不跟入函数<br><br>　　b breakpoint 设置断点。<br><br>　　用法:<br><br>　　b 函数名 对此函数进行中断<br><br>　　b 文件名:行号 对此文件中指定行中断.如果是当前文件，那么文件名与:号可以<br><br>　　省略<br><br>　　看当前断点数使用info break.禁止断点disable 断点号.删除delete 断点号.<br><br>　　l list 列出代码行。一次列10 行。连接使用list将会滚动显示. 也可以在list 后面<br><br>　　跟上 文件名:行号<br><br>　　watch 观察一个变量的值。每次中断时都会显示这个变量的值<br><br>　　p print 打印一个变量的值。与watch不同的是print只显示一次<br><br>　　这里在顺便说说如何改变一个 value. 当你下指令 p 的时候,例如你用 p b,<br><br>　　这时候你会看到 b 的 value, 也就是上面的 $1 = 15.<br><br>　　你也同样可以用 p 来改变一个 value, 例如下指令 p b = 100 试试看,<br><br>　　这时候你会发现, b 的 value 就变成 100 了：$1 = 100.<br><br>　　网上抄录<br><br>　　基本的使用方法简介<br><br>　　前言<br><br>　　程序代码中的错误可分为数类，除了最容易除错的语法错误，编译程序会告诉你错误所在外，大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序，我们只能在程序中加入输出变量值的指令来了解程序执行的状态。有了 GDB 除错程序，我们可以设定在任何地方停止程序的执行，然后可以随意检视变量值及更动变量，并逐行执行程序。<br><br>　　一个除错程序执行的流程通常是这样的：<br><br>　　1. 进入除错程序并指定可执行文件。<br><br>　　2. 指定程序代码所在目录。<br><br>　　3. 设定断点后执行程序。<br><br>　　4. 程序于断点中断后，可以 (1)检视程序执行状态；检视变量值或变更变量值 (2) 逐步执行程序，或是全速执行程序到下一个断点或是到程序结束为止。<br><br>　　5. 离开除错程序。<br><br>　　以下将分为下列数项分别介绍：<br><br>　　1. 进入 GDB 及指定可执行档<br><br>　　2. 指定程序代码所在目录及检视程序代码<br><br>　　3. 断点的设定与清除<br><br>　　4. 全速及逐步执行程序<br><br>　　5. 检视及更改变量值<br><br>　　6. 检视程序执行状态<br><br>　　7. 读取 Core 文件信息<br><br>　　进入 GDB 及指定可执行档：<br><br>　　1. 进入 GDB 并读入可执行档 (档名为 'PROGRAM')，准备进行除错。<br><br>　　gdb PROGRAM<br><br>　　指定程序代码所在目录及检视程序代码<br><br>　　1. 增加目录 DIR 到收寻程序代码的目录列表 (如果你的程序代码和可执行档放在同一个目录下，就不须指定程序代码所在目录。)：<br><br>　　(gdb) directory DIR<br><br>　　2. 检视程序代码，格式计有：<br><br>　　(gdb) list =&gt; 显示目前执行程序代码前后各五行的程序代码；或是显示从上次 list 之后的程序代码<br><br>　　(gdb) list function =&gt; 显示该程序开始处前后五行的程序代码。<br><br>　　(gdb) list - =&gt;上次显示程序代码的前面的十行。<br><br>　　断点的设定与清除<br><br>　　1. 设定断点(指令为 break，可简写为 (b)，格式计有：<br><br>　　(gdb) break filename.c:30 =&gt; 在 filename.c 的第三十行处停止执行。<br><br>　　(gdb) break function =&gt; 在进入 function 时中断程序的执行。<br><br>　　(gdb) break filename.c:function =&gt; 在程序代码档 filename.c 中的函数 function 处设定断点。<br><br>　　(gdb) break =&gt; 在下一个将被执行的命令设定断点。<br><br>　　(gdb) break ... if cond =&gt; 只有当 cond 成立的时候才中断。cond 须以 C 语言的语法写成。<br><br>　　2. 显示各个断点的信息。<br><br>　　(gdb) info break<br><br>　　3. 清除断点(命令为 clear)，格式同 break 。例如 :<br><br>　　(gdb) clear filename.c:30<br><br>　　4. 清除断点，NUM 是在 info break 显示出来的断点编号。<br><br>　　(gdb) delete NUM<br><br>　　全速及逐步执行程序<br><br>　　1. 从程序开头全速执行程序，直到遇到断点或是程序执行完毕为止。<br><br>　　(gdb) run<br><br>　　2. 在程序被中断后，全速执行程序到下一个断点或是程序结束为止 (continue 指令可简写为 c)。<br><br>　　(gdb) continue<br><br>　　3. 执行一行程序. 若呼叫函数, 则将该包含该函数程序代码视为一行程序 (next 指令可简写为 n)。<br><br>　　(gdb) next<br><br>　　4. 执行一行程序. 若呼叫函数, 则进入函数逐行执行 (step 指令可简写为 s)。<br><br>　　(gdb) step<br><br>　　5. 执行一行程序，若此时程序是在 for/while/do loop 循环的最后一行，则一直执行到循环结束后的第一行程序后停止 (until 指令可简写为 u)。<br><br>　　(gdb) until<br><br>　　6. 执行现行程序到回到上一层程序为止。<br><br>　　(gdb) finish<br><br>　　检视及更改变量值<br><br>　　1. print 叙述，显示该叙述执行的结果 (print 指令可简写为 p)。如<br><br>　　(gdb) print a =&gt; 显示 a 变量的内容.<br><br>　　(gdb) print sizeof(a) =&gt; 显示 a 变量的长度.<br><br>　　2. display 叙述，在每个断点或是每执行一步时显示该叙述值。如<br><br>　　(gdb) display a<br><br>　　3. 更改变量值：<br><br>　　(gdb) print (a=10) =&gt; 将变量 a 的值设定为 10.<br><br>　　检视程序执行状态<br><br>　　1. 查看程序执行到此时，是经过哪些函数呼叫的程序 (backtrace 指令可简写为 bt)，也就是查看函数呼叫堆栈。<br><br>　　(gdb) backtrace<br><br>　　读取 Core 文件信息<br><br>　　1. 读入 PROGRAM 及 PROGRAM.CORE 档，可检视 Core Dump 时程序变量值及程序流程状态 。<br><br>　　gdb PROGRAM core<br><br>　　说明：'core' 档案是由 PROGRAM 档执行后，遇到 Core Dump 时产生的 Core 檔檔名。如果你还需要该 Core 档，我们建议你将该档案档名更改为 PROGRAM.core。在输入上述命令后，你可以用 GDB 提供的检视变量值以及检视程序执行状态来读取程序 Core Dump 时的状态。
<img src ="http://www.cppblog.com/koson/aggbug/109661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-14 12:45 <a href="http://www.cppblog.com/koson/archive/2010/03/14/109661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>unix文件系统中的软链接、硬链接 文件复制的区别</title><link>http://www.cppblog.com/koson/archive/2010/03/12/109490.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 12 Mar 2010 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/12/109490.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/109490.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/12/109490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/109490.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/109490.html</trackback:ping><description><![CDATA[<table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border=0 cellSpacing=0 cellPadding=0 width="100%">
    <tbody>
        <tr>
            <td height=25 align=middle></strong></font><br></td>
        </tr>
        <tr>
            <td bgColor=#d2dee2 height=1></td>
        </tr>
        <tr>
            <td bgColor=#ffffff height=1></td>
        </tr>
        <tr>
            <td align=middle>
            <table style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" border=0 cellSpacing=0 cellPadding=0 width="100%">
                <tbody>
                    <tr>
                        <td width="100%">
                        <div style="MARGIN: 15px" id=art width="100%">
                        <div style="MARGIN: 15px" id=art>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>总结如下：</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>硬链接：在磁盘上有一份内容一样的文件产生，但不改变文件的Inode,也就是与原文件共用Inode,</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>软链接：不在</font></font><font class=f14><font color=#000000>磁盘上有一份内容一样的文件产生()，但产生新的Inode,</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>文件复制：产生新的文件内容，并且使用新的Inode.</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>简单的说软链接相当于快捷方式。</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>一张粗糙的简图：<br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>文件a &lt;-- b（文件a的软链接） &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件a &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br></font></font></p>
                        &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>inode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode &lt;-- b（文件a的硬链接）<br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>硬盘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 硬盘</font></font></p>
                        <p style="TEXT-INDENT: 2em"><br></p>
                        <p style="TEXT-INDENT: 2em"></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>文件a -------------&gt;copy &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b(复制文件a） &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br></font></font></p>
                        &nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>inode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inode <br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>硬盘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 硬盘</font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000><br></font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接：硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接（Symbolic link）。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000><strong>一、硬链接</strong> </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>硬链接说白了是一个指针，指向文件索引节点，系统并不为它重新分配inode。可以用:ln命令来建立硬链接。语法: </font></font></p>
                        <center><ccid_nobr></ccid_nobr>
                        <table border=1 cellSpacing=0 borderColorLight=#000000 borderColorDark=#ffffff cellPadding=2 width=400 align=center>
                            <tbody>
                                <tr>
                                    <td style="FONT-SIZE: 9pt" class=code bgColor=#e6e6e6>
                                    <pre><ccid_code>ln [options] existingfile newfile<br>ln[options] existingfile-list directory</ccid_code></pre>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </center>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>用法: 第一种:为&#8221;existingfile&#8221;创建硬链接,文件名为&#8221;newfile&#8221;。第二种:在&#8221;directory&#8221;目录中,为 &#8221;existingfile-list&#8221;中包含的所有文件创建一个同名的硬链接。常用可选[options] &#8211;f 无论&#8221;newfile&#8221;存在与否,都创建链接。-n 如果&#8221;newfile&#8221;已存在,就不创建链接。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>下面举一些例子: </font></font></p>
                        <center><ccid_nobr></ccid_nobr>
                        <table border=1 cellSpacing=0 borderColorLight=#000000 borderColorDark=#ffffff cellPadding=2 width=400 align=center>
                            <tbody>
                                <tr>
                                    <td style="FONT-SIZE: 9pt" class=code bgColor=#e6e6e6>
                                    <pre><ccid_code>$ ls &#8211;il<br>13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1<br>13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2<br>$ ln file2 file2hard<br>$ ls &#8211;il<br>13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard</ccid_code></pre>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </center>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>注意在创建链接前,file1 显示的链接数目为1,创建链接后(1)file1和file1hard的链接数目都变为2;(2) file1和file1hard在inode号是一样的(3) file1和file1hard显示的文件大小也是一样。可见进行了ln命令的操作结果：file1和file1hard是同一个文件的两个名字，它们具有同样的索引节点号和文件属性，建立文件file1的硬链接，就是为file1的文件索引节点在当前目录上建立一个新指针。如下图,你可以删除其中任何一个,如rm file2 ,每次只会删除一个指针, </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时，内核才会把文件内容从磁盘上删除。当前目录逻辑结构：(不好意思图没有显示出来)。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>还可以在不同目录，但同一文件系统中建立文件的硬链接。设file1、file2在目录/home/longcheng/dir1中，下面的命令，在/home/longcheng中建立file2的硬链接。 </font></font></p>
                        <center><ccid_nobr></ccid_nobr>
                        <table border=1 cellSpacing=0 borderColorLight=#000000 borderColorDark=#ffffff cellPadding=2 width=400 align=center>
                            <tbody>
                                <tr>
                                    <td style="FONT-SIZE: 9pt" class=code bgColor=#e6e6e6>
                                    <pre><ccid_code>ln file2 /home/longcheng/file2hard</ccid_code></pre>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </center>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>下面的程序，是将dir1目录中所有文件，在目录dir2中建立硬链接 </font></font></p>
                        <center><ccid_nobr></ccid_nobr>
                        <table border=1 cellSpacing=0 borderColorLight=#000000 borderColorDark=#ffffff cellPadding=2 width=400 align=center>
                            <tbody>
                                <tr>
                                    <td style="FONT-SIZE: 9pt" class=code bgColor=#e6e6e6>
                                    <pre><ccid_code>$mkdir dir2<br>$ln /home/longcheng/dir1/* /home/longcheng/dir2</ccid_code></pre>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </center>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>如果使用了 ln &#8211;f existingfile newfile,如果newfile已经存在，则无论原来newfile是什么文件，只用当前用户对它有写权限，newfile就成为exisitngfile的硬链接文件。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>尽管硬链接节省空间，也是Linux系统整合文件系统的传统方式，但是存在一下不足之处：（1）不可以在不同文件系统的文件间建立链接（2）只有超级用户才可以为目录创建硬链接。虽然很多树上说root用户可以创建，但是笔者在学习过程中发现即使是root用户也不能创建，我的系统是Redhat，内核 2.4、2.6都试过，在其他系统中不知道是不是可以。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000><strong>二、软链接（符号链接）</strong> </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>软链接克服了硬链接的不足，没有任何文件系统的限制，任何用户可以创建指向目录的符号链接。因而现在更为广泛使用，它具有更大的灵活性，甚至可以跨越不同机器、不同网络对文件进行链接。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>建立软链接，只要在ln后面加上选项 &#8211;s，下面举个例子 </font></font></p>
                        <center><ccid_nobr></ccid_nobr>
                        <table border=1 cellSpacing=0 borderColorLight=#000000 borderColorDark=#ffffff cellPadding=2 width=400 align=center>
                            <tbody>
                                <tr>
                                    <td style="FONT-SIZE: 9pt" class=code bgColor=#e6e6e6>
                                    <pre><ccid_code>$ ls -il<br>13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard<br>$ln &#8211;s file1 file1soft<br>$ls -il<br>13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2<br>13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard<br>13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft-&gt;file1</ccid_code></pre>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </center>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>从上面链接后的结果可以看出来软链接与硬链接，区别不仅仅是在概念上，在实现上也是不同的。区别：硬链接原文件＆链接文件公用一个inode号，说明他们是同一个文件，而软链接原文件＆链接文件拥有不同的inode号，表明他们是两个不同的文件；在文件属性上软链接明确写出了是链接文件，而硬链接没有写出来，因为在本质上硬链接文件和原文件是完全平等关系；链接数目是不一样的，软链接的链接数目不会增加；文件大小是不一样的，硬链接文件显示的大小是跟原文件是一样的，这用强调，因为是等同的嘛，而这里软链接显示的大小与原文件就不同了，file1大小是48B，而file1soft是5B，这里面的5实际上就是&#8220;file1&#8221;的大小。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>总之，建立软链接就是建立了一个新文件。当访问链接文件时，系统就会发现他是个链接文件，它读取链接文件找到真正要访问的文件。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>在不同系统之间建立软链接、对目录建立链接，这里就不举例了，读者可以自己去尝试，我也是在不断实践中学习的。 </font></font></p>
                        <p style="TEXT-INDENT: 2em"><font class=f14><font color=#000000>当然软链接也有硬链接没有的缺点，因为链接文件包含有原文件的路径信息，所以当原文件从一个目录下移到其他目录中，再访问链接文件，系统就找不到了，而硬链接就没有这个缺陷，你想怎么移就怎么移；还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。补充一下：可以通过symlink来查看链接文件，可以用 man symlink来学习。</font></font></p>
                        <p style="TEXT-INDENT: 2em"></p>
                        <p style="TEXT-INDENT: 2em"></p>
                        <font class=f14><strong>索引节点、硬连接和连接计数 </strong><br><br><strong>索引节点inode：</strong> <br><br>引用：<em>Linux为每个文件分配一个称为索引节点的号码inode，可以将inode简单理解成一个指针，它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。</em><br><br><br>例如： <br><br>假设我们在硬盘当前目录下建立了一个名为mytext文本文件，其内容只有一行： <br><br>
                        <pre>This is my file.</pre>
                        <br><br>
                        <pre>1、当然这行文字一定是存储在磁盘数据区某个具体位置里(物理上要通过磁头号、柱面号和扇区号来描述，在本例中假设分别是1、20、30)。 <br><br><br><br>2、假设其inode是262457，那么系统通过一段标准程序，就能将这个inode转换成存放此文件的具体物理地址(1磁头、20柱面、30扇区），最终读出文件的内容：&#8220;This is my file.&#8221; <br><br><br><br>3、所以inode是指向一个文件数据区的指针号码，一个inode对应着系统中唯一的一片物理数据区，而位于两个不同物理数据区的文件必定分别对应着两个不同的inode号码。</pre>
                        <br><br><strong>文件拷贝命令与硬链接的区别：</strong> <br><br>
                        <pre># cp /home/zyd/mytext newfile</pre>
                        <br><br>在当前工作目录建立了一个新文件newfile，其实际操作主要包括如下三步： <br><br>引用：<em>1、在当前目录中增加一个目录项，其文件名域填入newfile，并分配了一个新的inode，假设是262456。 <br>2、将原文件(在1磁头、20柱面、30扇区)的内容复制了一份到新的空闲物理块(假设是1磁头、20柱面、31扇区)。 <br>3、填写一些其他关键信息，使系统通过这些信息及inode号码可以完成物理地址的转换。 </em><br><br><br>所以文件复制要分配新的inode和新的数据区，虽然两个文件的内容是一样的。 <br><br><br><strong>硬连接hardlink：</strong> <br><br>引用：<em>我们实际使用文件时一般是通过文件名来引用的。通过上面的讨论，我们知道： <br><br>1个inode号码肯定和一片完全属于一个文件的数据区一一对应。那么一个文件系统中两个或更多个不同的文件名能否对应同一个文件呢？答案是肯定的。 <br><br>我们知道inode号码是记录在文件名对应的目录项中的，我们可以使两个或多个文件的目录项具有相同的inode值，实际上就使它们对应着同一个文件。 <br><br>有几个目录项具有相同的inode号，我们就说这个文件有几个硬连接(hardlink)， <br><br>对于普通文件，ls -l命令的连接计数count域的数值就是本文件拥有的硬连接数。硬连接可以通过ln命令建立，</em><br><br><br>例如： <br><br>
                        <pre># ln /home/zyd/mytext hardlink_mytext</pre>
                        <br><br>就建立了一个新的文件hardlink_mytext，这个文件的inode同样是262457。建立硬连接实际上只是增加了一个目录项，但并复制文件数据区，原文件的数据区由两个文件共享。这一方面能够节约大量磁盘空间，同时可以保证两个文件能同步更新。 <br><br>
                        <pre>'ls -il'可以显示文件的inode(在下面最左边)： <br><br><br><br>262456 -rw-rw-r-- 1 zyd zyd 17 Nov 3 14:52 newfile <br><br>262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext <br><br>262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext</pre>
                        <br><br><br><strong>连接计数count：</strong> <br><br>前面我们介绍了，文件的连接计数域表明本系统中共有几个文件目录项的inode和本文件相同，也就是本文件共有几个硬连接。如上面的例子中hardlink_mytext和mytext文件的count值都是2。 <br><br>那么对于目录，其count域的含义是什么呢？目录的count同样表示共有多少个目录项指向此目录，不过要详细说明必须进一步解释VFS文件系统的结构，为简单起见，只要这样理解就行了：(count-2)等于本目录包含的直接子目录数(就是只包括儿子，不包括孙子啦！)。 <br><br>
                        <pre>例如：如果一个目录/abc的count域为5，那么/abc目录一定包含3个子目录。</pre>
                        <br><br><br>引用：<em>进一步说明： <br><br>硬连接文件实际上并不是一种新的文件类型，两个文件互为对方的硬连接。它们应该都是普通文件(谁能告诉我：其它类型的文件可以硬连接吗？)。两个文件除了名称或/和文件目录不同外，其它部分完全相同，更改了一个文件，另一个的文件长度、内容、更改时间等都将相应发生变化，更改了一个文件的权限位 mode，另一个也会发生同样的变化。 </em><br><br><br>引用：<em>注意连接计数字段count，互为硬连接的两个文件的count值都是2，表明有两个inode指向同一文件的inode。 <br><br>当我们删除其中一个文件时，系统首先将(count-1)-&gt;;count，如果结果是零，就将其目录项和数据区都删除，否则只将本目录项删除，数据区仍然保留，仍然可以通过另外的文件名访问。根据这个特性，可以通过为重要的文件建立硬连接的方法来防止其被误删除。 </em><br><br><br>一个文件系统允许的inode节点数是有限的，如果文件数量太多，即使每个文件都是0字节的空文件，系统最终也会因为节点空间耗尽而不能再创建文件。所以当发现不能建立文件时首先要考虑硬盘数据区是否还有空间(可通过du命令)，其次还得检查节点空间。 <br><br>引用：<em>互为硬连接的多个文件必须位于同一个文件系统上。根设备及任何一个需要mount才能挂接进来的分区、软盘、NFS、光驱等都是一个 独立的文件系统，每个文件系统有一个相应的设备号，不同文件系统中具有相同inode节点的文件间没有任何联系。系统则通过设备号和inode号的组合 唯一确定一个文件。 </em><br><br><br>Linux之所以能支持多种文件系统，其实是由于Linux提供了一个虚拟文件系统VFS，VFS作为实际文件系统的上层软件，掩盖了实际文件系统底层的具体结构差异，为系统访问位于不同文件系统的文件提供了一个统一的接 口。 <br><br>实际上许多文件系统并不具备inode结构，其目录结构也和以上的讨论不同，但通过VFS，系统均为其提供了虚拟一致的inode和目录项结构。 <br><br>所以，'ls -il'命令实际显示的inode应该是VFS inode，也就是说，inode是存在于内存中的数据结构，而不一定是实际的硬盘结构。 <br><br>但为Linux量身定做的ext2文件系统具备实际的inode和连接型目录项结构，所以，对于ext2文件系统，可以认为我们上面讨论的关于硬连接的概念是完全正确的。</font> </div>
                        </div>
                        </td>
                    </tr>
                </tbody>
            </table>
            <p style="LINE-HEIGHT: 150%; MARGIN: 5px"></p>
            </td>
        </tr>
        <tr>
            <td height=25>&nbsp;<font color=#000099><strong>原文地址</strong></font> <a href="http://blog.chinaunix.net/u2/86586/showart_1679890.html" target=_blank><u><font color=#0066cc>http://blog.chinaunix.net/u2/86586/showart_1679890.html</font></u></a> </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/koson/aggbug/109490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-12 10:48 <a href="http://www.cppblog.com/koson/archive/2010/03/12/109490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不带缓存的I/O和标准(带缓存的)I/O</title><link>http://www.cppblog.com/koson/archive/2010/03/10/109373.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 10 Mar 2010 09:41:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/10/109373.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/109373.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/10/109373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/109373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/109373.html</trackback:ping><description><![CDATA[<p>先来看看不带缓存的I/O和标准(带缓存的)I/O都有那些<br>不带缓存的I/O:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>read,write,open......</strong><br>标准(带缓存的)I/O: <strong>fgets,fread,fwrite.....</strong></p>
<p>这里使用两个对应的函数进行比较：<br>ssize_t write(int filedes, const void *buff, size_t nbytes)<br>size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)</p>
<p>上面的buff和ptr都是指应用程序自己使用的buffer，实际上当需要对文件进行写操作时，都会先写到内核所设的缓冲存储器。如果该缓存未满，则并不将其排入输出队列，直到缓存写满或者内核再次需要重新使用此缓存时才将其排入磁盘I/O输入队列，再进行实际的I/O操作，也就是此时才把数据真正写到磁盘，这种技术叫延迟写。</p>
<p>如果我们直接用非缓存I/O对内核的缓冲区进行读写，会产生许多管理不善而造成的麻烦（如一次性写入过多，或多次系统调用导致的效率低下）。</p>
<p>标准(带缓存的)I/O为我们解决了这些问题，它处理很多细节，如缓冲区分配，以优化长度执行I/O等，更便于我们使用。</p>
<p>由于标准(带缓存的)I/O在系统调用的上一层多加了一个缓冲区，也因此引入了流的概念，在UNIX/Linux下表示为FILE*（并不限于UNIX/Linux，ANSI C都有FILE的概念），FILE实际上包含了为管理流所需要的所有信息：实际I/O的文件描述符，指向流缓存的指针（标准I/O缓存，由malloc分配，又称为用户态进程空间的缓存，区别于内核所设的缓存），缓存长度，当前在缓存中的字节数，出错标志等。</p>
<p>因此可知，<strong>不带缓存的I/O对文件描述符操作，带缓存的标准I/O是针对流的</strong>。</p>
<p>标准I/O对每个I/O流自动进行缓存管理（标准I/O函数通常调用malloc来分配缓存）。它提供了三种类型的缓存：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) 全缓存。当填满标准I/O缓存后才执行I/O操作。磁盘上的文件通常是全缓存的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) 行缓存。当输入输出遇到新行符或缓存满时，才由标准I/O库执行实际I/O操作。stdin、stdout通常是行缓存的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3) 无缓存。相当于read、write了。stderr通常是无缓存的，因为它必须尽快输出。</p>
<p>一般而言，由系统选择缓存的长度，并自动分配。标准I/O库在关闭流的时候自动释放缓存。另外，<strong>也可以使用函数fflush()将流所有未写的数据送入（刷新）到内核（内核缓冲区），fsync()将所有内核缓冲区的数据写到文件（磁盘）</strong>。</p>
<p>在标准I/O库中也有引入缓存管理而带来的缺点--效率问题。例如当使用每次一行函数fgets和fputs时，通常需要复制两次数据：一次是在内核和标准I/O缓存之间（当调用read和write时），第二次是在标准I/O缓存（通常系统分配和管理）和用户程序中的行缓存（fgets的参数就需要一个用户行缓存指针）之间。</p>
<img src ="http://www.cppblog.com/koson/aggbug/109373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-10 17:41 <a href="http://www.cppblog.com/koson/archive/2010/03/10/109373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置vim语法高亮显示和自动缩进</title><link>http://www.cppblog.com/koson/archive/2010/03/05/108972.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 05 Mar 2010 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/05/108972.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108972.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/05/108972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108972.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108972.html</trackback:ping><description><![CDATA[<table style="border-collapse: collapse; word-wrap: break-word;" width="100%" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td height="25" align="center"><font style="font-size: 14pt;" color="#02368d"><strong>设置vim语法高亮显示和自动缩进</strong></font><br>
            </td>
        </tr>
        <tr>
            <td height="1" bgcolor="#d2dee2"><br></td>
        </tr>
        <tr>
            <td height="1" bgcolor="#ffffff"><br></td>
        </tr>
        <tr>
            <td align="center">
            <table style="border-collapse: collapse; word-wrap: break-word;" width="100%" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                    <tr>
                        <td width="100%">
                        <div id="art" width="100%" style="margin: 15px;">
                        1、配置文件的位置<br>
                        &nbsp;&nbsp;&nbsp; 在目录 /etc/ 下面，有个名为vimrc的文件，这是系统中公共的vim配置文件，对所有用户都有效。而在每个用户的主目录下，都可以自己建立私有的配置文件，命名为：&#8220;.vimrc&#8221;。例如，/root目录下，通常已经存在一个.vimrc文件。<br>
                        &nbsp;<br>
                        2、设置语法高亮显示<br>
                        1) 打开vimrc，添加以下语句来使得语法高亮显示：<br>
                        &nbsp;&nbsp;&nbsp;<span style="color: #ff0102;"> syntax on</span><br>
                        2) 如果此时语法还是没有高亮显示，那么在/etc目录下的profile文件中添加以下语句：<br>
                        &nbsp;&nbsp;&nbsp;<span style="color: #ff0102;"> export TERM=xterm-color</span><br>
                        3、设置Windows风格的C/C++自动缩进（添加以下set语句到vimrc中）<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1）不讨论制表符为8还是为4较好，这里设置（软）制表符宽度为4：<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set tabstop=4</span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set softtabstop=4</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2）设置缩进的空格数为4<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set shiftwidth=4</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3）设置自动缩进：即每行的缩进值与上一行相等；使用 noautoindent 取消设置：<br>
                        <span style="color: #ff0102;">set autoindent</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4）设置使用 C/C++ 语言的自动缩进方式：<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set cindent</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5）设置C/C++语言的具体缩进方式（以我的windows风格为例）：<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,&gt;1s,=1s,:1s</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6）如果想在左侧显示文本的行号，可以用以下语句：<br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set nu</span><br>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7）最后，如果没有下列语句，就加上吧：<br>
                        <span style="color: #ff0102;">if &amp;term=="xterm"</span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">&nbsp;&nbsp;&nbsp; set t_Co=8</span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">&nbsp;&nbsp;&nbsp; set t_Sb=^[[4%dm</span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">&nbsp;&nbsp;&nbsp; set t_Sf=^[[3%dm</span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">endif<br>
                        <br>
                        <span style="color: #000102;">PS：<br>
                        自动缩进有两个选项:&nbsp;  <br>
                        代码:<br>
                        &nbsp;&nbsp;&nbsp; <span style="color: #ff0102;">set autoindent </span><br style="color: #ff0102;">
                        <span style="color: #ff0102;">&nbsp;&nbsp;&nbsp; set cindent</span><br>
                        &nbsp;&nbsp; <br>
                        &nbsp;autoindent 就是自动缩进的意思，当你在输入状态用回车键插入一个新行，或者在 normal 状态用 o 或者 O
                        插入一个新行时，autoindent
                        会自动地将当前行的缩进拷贝到新行，也就是"自动对齐&#8221;，当然了，如果你在新行没有输入任何字符，那么这个缩进将自动删除。 <br>
                        &nbsp;<br>
                        &nbsp;cindent 就不同了，它会按照 C 语言的语法，自动地调整缩进的长度，比如，当你输入了半条语句然后回车时，缩进会自动增加一个 TABSTOP 值，当你键入了一个右花括号时，会自动减少一个 TABSTOP 值。</span></span>
                        </div>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.cppblog.com/koson/aggbug/108972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-05 16:02 <a href="http://www.cppblog.com/koson/archive/2010/03/05/108972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装 vim </title><link>http://www.cppblog.com/koson/archive/2010/03/05/108950.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 05 Mar 2010 04:15:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/05/108950.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108950.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/05/108950.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108950.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108950.html</trackback:ping><description><![CDATA[下载vim 解压进入vim72目录<br>进入src 目录<br>./configure （如果提示缺少终端库，则要先安装ncurses,sudo apt-get install libncurses5-dev,这里安装可能会出现依赖关系包的版本不对问题，原因可能是自己更改了/etc/apt/sources.list文件并更新，解决办法是将sources.list还原成原来的文件，并重新执行update，然后再安装)<br>make &amp;&amp; make install <br><br><br>
<img src ="http://www.cppblog.com/koson/aggbug/108950.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-05 12:15 <a href="http://www.cppblog.com/koson/archive/2010/03/05/108950.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更新源</title><link>http://www.cppblog.com/koson/archive/2010/03/05/108945.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 05 Mar 2010 03:14:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/05/108945.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108945.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/05/108945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108945.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108945.html</trackback:ping><description><![CDATA[在终端执行以下命令（第一条是备份现有服务器列表，第二条是使用Gedit编辑） <br>
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup<br>
sudo gedit /etc/apt/sources.list<br>
从下面各服务器列表内容中选择一段替换文件中的所有内容<br>
保存编辑好的文件，执行以下命令更新。 <br>
sudo apt-get update<br>
sudo apt-get dist-upgrade<br><font face="楷体_GB2312" size="4" color="#00ff00">以下是ubuntu 9.10 教育网的源:</font>
<p><font face="楷体_GB2312" size="4" color="#00ff00">deb </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic main restricted universe multiverse<br>
deb </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-backports main restricted universe multiverse<br>
deb </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-proposed main restricted universe multiverse<br>
deb </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-security main restricted universe multiverse<br>
deb </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-updates main restricted universe multiverse<br>
deb-src </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic main restricted universe multiverse<br>
deb-src </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-backports main restricted universe multiverse<br>
deb-src </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-proposed main restricted universe multiverse<br>
deb-src </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-security main restricted universe multiverse<br>
deb-src </font><a  href="http://ubuntu.uestc.edu.cn/ubuntu/"><font face="楷体_GB2312" size="4" color="#00ff00">http://Ubuntu.uestc.edu.cn/ubuntu/</font></a><font face="楷体_GB2312" size="4" color="#00ff00"> karmic-updates main restricted universe multiverse</font></p>
<p><br></p>
<br><img src ="http://www.cppblog.com/koson/aggbug/108945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-05 11:14 <a href="http://www.cppblog.com/koson/archive/2010/03/05/108945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 下 rar 安装使用</title><link>http://www.cppblog.com/koson/archive/2010/03/05/108935.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Fri, 05 Mar 2010 02:21:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/05/108935.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108935.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/05/108935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108935.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108935.html</trackback:ping><description><![CDATA[下载 rarlinux-3.9.2.tar.gz<br>解压 tar -zxvf rarlinux-3.9.2.tar.gz<br>安装make install<br><br>使用：<br>可以使用帮助命令或者查看man文档了解一下rar命令的用法。以下为本人翻译的帮助文档，由于本人英语水平有限，错误之处敬请指出。<br>
<table style="border: 1px solid #999999; width: 578px; font-size: 12px; height: 1780px;" align="center">
    <tbody>
        <tr>
            <td>$ rar --help<br><br>用法:&nbsp;&nbsp;&nbsp;&nbsp; rar &lt;命令&gt; -&lt;选项 1&gt; -&lt;选项 N&gt; &lt;压缩档案&gt; &lt;文件...&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;@文件列表...&gt; &lt;解压缩路径\&gt;<br><br>&lt;命令&gt;<br>&nbsp; a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加文件到压缩档案<br>&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加压缩档案注释(注释的大小最大不能超过62000字节)<br>&nbsp; cf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加文件备注（ 当使用'v'参数时显示文件备注，最大不能超过32767字节）<br>&nbsp; ch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改变压缩档案参数<br>&nbsp; cw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 向指定文件写入档案备注<br>&nbsp; d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从档案中删除文件<br>&nbsp; e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压缩文件到当前目录(不创建任何子目录)<br>&nbsp; f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刷新档案中的文件(更新这些文件自它们被打包之后产生的变化，不在压缩档案中增加新的)<br>&nbsp; i[par]=&lt;str&gt;&nbsp; 在档案中查找特定字符<br>&nbsp; k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 锁定档案(任何试图改变压缩档案中内容的命令都会被忽略)<br>&nbsp; l[t,b]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出档案[technical, bare]<br>&nbsp; m[f]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移动到压缩档案中[只针对文件]<br>&nbsp; p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打印文件到标准输出<br>&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修补压缩档案<br>&nbsp; rc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重建丢失的分卷<br>&nbsp; rn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重命名压缩档案中的文件<br>&nbsp; rr[N]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加数据恢复记录<br>&nbsp; rv[N]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建恢复卷<br>&nbsp; s[name|-]&nbsp;&nbsp;&nbsp;&nbsp; 压缩档案与SFX(自解压文档)之间的转换<br>&nbsp; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试压缩档案文件<br>&nbsp; u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更新压缩档案中的文件<br>&nbsp; v[t,b]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出压缩档案的详细信息[technical,bare]<br>&nbsp; x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压缩到完整路径<br><br>&lt;选项&gt;<br>&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 停止对选项的扫描<br>&nbsp; ad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 追加档案名称到目标路径<br>&nbsp; ag[format]&nbsp;&nbsp;&nbsp; 使用当前数据生成压缩档案名<br>&nbsp; ap&lt;path&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在档案内部设置路径<br>&nbsp; as&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同步档案内目录<br>&nbsp; av&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置认证检测(只有注册版提供此功能)<br>&nbsp; av-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭认证检测<br>&nbsp; c-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭备注显示<br>&nbsp; cfg-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭读取设置<br>&nbsp; cl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 转换名称为小写字母<br>&nbsp; cu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 转换名称为大写字母<br>&nbsp; df&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 压缩后删除原文件<br>&nbsp; dh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开共享文件<br>&nbsp; ds&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭针对于稳固档案的名称排序<br>&nbsp; dw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 压缩后擦除文件<br>&nbsp; e[+]&lt;attr&gt;&nbsp;&nbsp;&nbsp; 设置文件排除与包含属性<br>&nbsp; ed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不添加空目录<br>&nbsp; en&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不设置档案结束块<br>&nbsp; ep&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称中不包含路径<br>&nbsp; ep1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 名称中不包含基本文件目录<br>&nbsp; ep3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 展开路径到完整包含的驱动器名<br>&nbsp; f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刷新文件<br>&nbsp; hp[password]&nbsp; 加密文件数据和文件头部<br>&nbsp; id[c,d,p,q]&nbsp;&nbsp; 关闭消息<br>&nbsp; ierr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 发送所有消息到标准错误输出<br>&nbsp; ilog[name]&nbsp;&nbsp;&nbsp; 记录错误日志到文件中(只有注册版提供此功能)<br>&nbsp; inul&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭所有消息<br>&nbsp; isnd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开声音<br>&nbsp; k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 锁定压缩档案<br>&nbsp; kb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保持被解压过的已损坏的文件<br>&nbsp; m&lt;0..5&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置压缩等级(0-存储...3-默认...5-最大)<br>&nbsp; mc&lt;par&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置高级压缩参数<br>&nbsp; md&lt;size&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dictionary size in KB (64,128,256,512,1024,2048,4096 or A-G)<br>&nbsp; ms[ext;ext]&nbsp;&nbsp; 存储指定的文件类型<br>&nbsp; n&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅包含指定的文件<br>&nbsp; n@&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从标准输入读取文件名到包含内容中<br>&nbsp; n@&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在指定列表文件中包含文件<br>&nbsp; o[+|-]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置重写模式<br>&nbsp; ol&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 替文件保存符号连接作为连接<br>&nbsp; or&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自动重命名文件<br>&nbsp; ow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保存活存储文件的拥有者与群组<br>&nbsp; p[password]&nbsp;&nbsp; 设置密码<br>&nbsp; p-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不询问密码<br>&nbsp; r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对子目录进行递归操作<br>&nbsp; r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仅用通配符名称对子目录进行递归操作<br>&nbsp; rr[N]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加数据恢复记录<br>&nbsp; rv[N]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建恢复<br>&nbsp; s[&lt;N&gt;,v[-],e] 创建稳固档案压缩<br>&nbsp; s-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关闭稳固档案压缩<br>&nbsp; sc&lt;chr&gt;[obj]&nbsp; 设置指定的字符串<br>&nbsp; sfx[name]&nbsp;&nbsp;&nbsp;&nbsp; 创建SFX档案<br>&nbsp; si[name]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从标准输入读取数据<br>&nbsp; sl&lt;size&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理文件的大小小于指定的值<br>&nbsp; sm&lt;size&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理文件的大小大于指定的值<br>&nbsp; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 压缩后测试文件<br>&nbsp; ta&lt;date&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理修改日期为指定日期之后的文件，&lt;date&gt;格式: YYYYMMDDHHMMSS <br>&nbsp; tb&lt;date&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理修改日期为指定日期之前的文件，&lt;date&gt;格式: YYYYMMDDHHMMSS<br>&nbsp; tk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保持档案最初的时间<br>&nbsp; tl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置档案时间为据现在最近的文件时间<br>&nbsp; tn&lt;time&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理比指定时间新的文件<br>&nbsp; to&lt;time&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 处理比指定时间旧的文件<br>&nbsp; ts&lt;m,c,a&gt;[N]&nbsp; 保存或存储文件时间(修改,创建,访问)<br>&nbsp; u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更新文件<br>&nbsp; v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 创建自动大小的卷或列出所有卷<br>&nbsp; v&lt;size&gt;[k,b]&nbsp; 创建指定大小的卷size=&lt;size&gt;*1000 [*1024, *1]<br>&nbsp; ver[n]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件版本控制<br>&nbsp; vn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用旧的卷命名体系<br>&nbsp; vp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在每个卷之前暂停<br>&nbsp; w&lt;path&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定工作目录<br>&nbsp; x&lt;file&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 排除指定文件<br>&nbsp; x@&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 排除从标准输入中读取的文件名称<br>&nbsp; x@&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从指定列表文件中指定要排除的文件<br>&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定所有回答为yes<br>&nbsp; z[file]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从文件中读取压缩档案的备注</td>
        </tr>
    </tbody>
</table>
<br><br>注意：rar的&lt;命令&gt;部分不带"-"号，只有&lt;选项&gt;部分带"-"号，这一点注意一下。<br><br>例
1：添加文件或目录到压缩档案中，使用a命令。例如把文件files1添加到abc.rar中，使用a或m命令,a命令把file1文件添加到
abc.rar档案中保持原有的file1文件不变，m命令移动file1文件到file1.rar档案中(压缩完成后会删除原有的file1文件，注
意：m命令只针对文件进行操作)<br>
<table style="border: 1px solid #999999; width: 579px; font-size: 12px; height: 26px;" align="center">
    <tbody>
        <tr>
            <td>$rar a abc.rar file1</td>
        </tr>
    </tbody>
</table>
<br>说
明：如果此时abc.rar档案不存在，会自行创建abc.rar文档案，如果abc.rar档案已经存在，则将file1文件压缩进abc.rar档案
中，若abc.rar档案中已存在一个file1文件，则会更新file1文件。并且原有的file1文件依然存在于当前目录下，若要将file1文件移
动到file1.rar中请使用m命令，对于目录同样可以进行此操作。<br>注意：如果只输入"rar a file1.rar"命令,而没有接文件名或目录名的话，会将当前目录下所有的文件和文件夹压缩进file1.rar文档中。这点要注意一下。<br><br>例2：解压缩abc.rar档案中的内容，可以使用e或x命令,假设abc.rar目录中有一个名为file1的文件和一个名为test的目录，test目录中有一个名为file2的文件，<br>
<table style="border: 1px solid #999999; width: 580px; font-size: 12px; height: 28px;" align="center">
    <tbody>
        <tr>
            <td>$rar e abc.rar</td>
        </tr>
    </tbody>
</table>
<br>说明：使用e命令，会将abc.rar中的file1文件连同test目录下的file2文件解压到当前目录。如果想保持abc.rar目录中的目录结构请使用x命令。<br>
<table style="border: 1px solid #999999; width: 583px; font-size: 12px; height: 29px;" align="center">
    <tbody>
        <tr>
            <td>$rar x abc.rar</td>
        </tr>
    </tbody>
</table>
<br>说明：此时会将file1文件和test目录解压到当前文件夹。<br><br>例3：为整个压缩文件添加注释<br>
<table style="border: 1px solid #999999; width: 581px; font-size: 12px; height: 30px;" align="center">
    <tbody>
        <tr>
            <td>$rar c abc.rar</td>
        </tr>
    </tbody>
</table>
<br>说明：输入该命令后，屏幕最下方会显示<br>
<table style="border: 1px solid #999999; width: 579px; font-size: 12px; height: 46px;" align="center">
    <tbody>
        <tr>
            <td>Processing archive test.<br>rarReading comment from stdin</td>
        </tr>
    </tbody>
</table>
<br>并有一个光标在闪烁，从光标闪烁的位置输入注释信息，输入完了按下Ctrl+D结束输入<br><br>例4:为压缩文件中的单个文件添加注释，使用cf命令。假如现在要为abc.rar档案中的file1文件添加注释<br>
<table style="border: 1px solid #999999; width: 581px; font-size: 12px; height: 25px;" align="center">
    <tbody>
        <tr>
            <td>$rar ch abc.rar file1</td>
        </tr>
    </tbody>
</table>
<br>此时屏幕最下方会显示<br>
<table style="border: 1px solid #999999; width: 582px; font-size: 12px; height: 26px;" align="center">
    <tbody>
        <tr>
            <td>Reading comment for abc.rar : file1 from stdin</td>
        </tr>
    </tbody>
</table>
<br>从光标闪烁出输入想要为file1添加的注释，Ctrl+D结束输入<br><br>例4:把整个档案的注释写入到一个文件中，使用cw命令。加入要将abc.rar的注释写入到test.txt文件中<br>
<table style="border: 1px solid #999999; width: 582px; font-size: 12px; height: 25px;" align="center">
    <tbody>
        <tr>
            <td>$rar cw abc.rar test.txt</td>
        </tr>
    </tbody>
</table>
<br>说
明：如果当前目录下不存在名为test.txt的文件，则会自行创建一个名为test.txt的文件，并将abc.rar的注释写入到text.txt文
件中，如果当前目录中已经存在一个名为text.txt的文件，则会提示你是否覆盖已经存在的文件，如果选择Yes或者All,则会清空test.txt
中原有的内容，然后将abc.rar的注释内容写入到text.txt文件中。<br><br>例4：删除压缩档案中的文件或目录，使用d命令。例如要删除abc.rar档案中的file1文件。<br>
<table style="border: 1px solid #999999; width: 579px; font-size: 12px; height: 25px;" align="center">
    <tbody>
        <tr>
            <td>$rar d abc.rar file1</td>
        </tr>
    </tbody>
</table>
<br>说明：该命令删除abc.rar档案中的file1文件，对于目录同样有效。<br><br>以上为常用的压缩与解压缩命令，&lt;选项&gt;部分的使用不再进行介绍了，请大家自己尝试一下吧。<br><br>解压缩命令unrar的使用：<br>
<table style="border: 1px solid #999999; width: 573px; font-size: 12px; height: 232px;" align="center">
    <tbody>
        <tr>
            <td><br>
            $unrar --help<br>
            <br>
            用法:&nbsp;&nbsp;&nbsp;&nbsp; unrar &lt;command&gt; -&lt;switch 1&gt; -&lt;switch N&gt; &lt;archive&gt; &lt;files...&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;@listfiles...&gt; &lt;path_to_extract\&gt;<br>
            <br>
            &lt;命令&gt;<br>
            &nbsp; e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压文件到当前目录<br>
            &nbsp; l[t,b]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出压缩文档信息[technical, bare]<br>
            &nbsp; p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打印文件到标准输出<br>
            &nbsp; t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试压缩我俄当<br>
            &nbsp; v[t,b]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出压缩文档的详细信息[technical,bare]<br>
            &nbsp; x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压文件到完整路径</td>
        </tr>
    </tbody>
</table>
<br><br>以下为&lt;选项&gt;部分，略去。<br><br>unrar的命令和rar具有同样的效果，可以看出unrar只包含了rar的一部分命令而已，因此使用rar就可以完成所有操作。<br><br><img src ="http://www.cppblog.com/koson/aggbug/108935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-05 10:21 <a href="http://www.cppblog.com/koson/archive/2010/03/05/108935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Ubuntu 9.10中安装五笔输入法</title><link>http://www.cppblog.com/koson/archive/2010/03/03/108808.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 03 Mar 2010 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/03/108808.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108808.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/03/108808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108808.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108808.html</trackback:ping><description><![CDATA[<p><span style="font-family: Verdana;">由于Ubuntu 9.10自带的是ibus，默认没有安装五笔，需要手动安装。安装步骤如下：</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、下载</span>
<a  href="http://ibus.googlecode.com/files/ibus-table-wubi-1.2.0.20090715.tar.gz"><span style="font-family: Verdana;">ibus-table-wubi-1.2.0.20090715.tar.gz</span>
</a>
<span style="font-family: Verdana;">。</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、解压后进入目录顺序执行以下命令：</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./configure</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、在此目录下会生成一个table目录，里面有个文件叫wubi86.db</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sudo cp wubi86.db /usr/share/ibus-table/tables</span>
</p>
<p><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、重启ibus，再把五笔86添加进去。就可以了。</span></p>
<p><span style="font-family: Verdana;">转自http://blog.csdn.net/hgd250/archive/2009/11/26/4875711.aspx<br></span>
</p><img src ="http://www.cppblog.com/koson/aggbug/108808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-03 16:43 <a href="http://www.cppblog.com/koson/archive/2010/03/03/108808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本 编己辑器 vi 基础</title><link>http://www.cppblog.com/koson/archive/2010/03/03/108796.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 03 Mar 2010 07:30:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/03/108796.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108796.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/03/108796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108796.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108796.html</trackback:ping><description><![CDATA[<h2>文件编辑器 vi</h2>
<!-- begin content -->
<p><strong>作者：</strong>北南南北<br>
<strong>来自：</strong>LinuxSir.Org<br>
<strong>摘要：</strong>vi 编辑器是最常用的文档创建和编辑工具，初学者应该学会简单应用vi ，学会在vi 中做简单的修改、删除、插入、搜索及替换作业；如果您是新手，不妨看看本文，或许这篇文档能让您在最短的时间内学会vi的简单操作；</p>
<p><font size="4"><strong>目录</strong></font></p>
<ul><a  href="http://www.linuxsir.org/main/?q=node/206#1">1、关于文本编辑器；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#2">2、vi 编辑器；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3">3、vi 编辑器的使用方法；</a>
    <ul><a  href="http://www.linuxsir.org/main/?q=node/206#3.1">3.1   如何调用vi ；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.2">3.2 vi 的三种命令模式；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.3">3.3   文件的保存和退出；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.4">3.4  光标移动；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.5">3.5  插入模式（文本的插入）；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.6">3.6  文本内容的删除操作；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.7">3.7 恢复修改及恢复删除操作；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.8">3.8  可视模式；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.9">3.9  复制和粘帖的操作；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.10">3.10  关于行号；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.11">3.11   查找和替换功能；</a>
        <ul><a  href="http://www.linuxsir.org/main/?q=node/206#3.11.1">3.11.1   查找；</a><br><a  href="http://www.linuxsir.org/main/?q=node/206#3.11.2">3.11.2  替换；</a></ul>
        </ul>
        <p><a  href="http://www.linuxsir.org/main/?q=node/206#4">4、关于本文；</a><br>
        <a  href="http://www.linuxsir.org/main/?q=node/206#5">5、后记；</a><br>
        <a  href="http://www.linuxsir.org/main/?q=node/206#6">6、参考文档；</a><br>
        <a  href="http://www.linuxsir.org/main/?q=node/206#7">7、相关文档；</a>
        </p>
    </ul>
    <p><font color="blue"><strong><br>
    +++++++++++++++++++++++++++++++++++++<br>
    正文<br>
    +++++++++++++++++++++++++++++++++++++<br>
    </strong></font></p>
    <p><font id="1" size="4"><strong><br>
    1、关于文本编辑器；<br>
    </strong></font></p>
    <p>文本编辑器有很多，比如图形模式的gedit、kwrite、OpenOffice ... ...
    ，文本模式下的编辑器有vi、vim（vi的增强版本）和nano ... ...
    vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi（vim）最简单的用法，以让Linux入门级用户在最短的时间内学会使用它。</p>
    <p>nano 工具和DOS操作系统下的edit操作相似，使用简单，我们不作介绍了，如果您有兴趣，不妨尝试一下；</p>
    <p><font id="2" size="4"><strong><br>
    2、vi 编辑器；<br>
    </strong></font></p>
    <p><strong>为什么要学会简单应用vi</strong></p>
    <p>vi或vim是Linux最基本的文本编辑工具，vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作，但vi编辑器在系统管理、服务器管理
    中，永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时，我们仍需要字符模式下的编辑器vi；</p>
    <p>vi或vim 编辑器在创建和编辑简单文档最高效的工具；</p>
    <p><font id="3" size="4"><strong><br>
    3、vi 编辑器的使用方法；<br>
    </strong></font></p>
    <p><font id="3.1" size="3"><strong><br>
    3.1   如何调用vi ；<br>
    </strong></font></p>
    <div class="codeblock"><code>[root@localhost ~]# vi&nbsp; filename</code></div>
    <div class="codeblock"><code>~<br>~<br>~<br>~<br>~<br>~<br>~<br>~</code></div>
    <p><font id="3.2" size="3"><strong><br>
    3.2 vi 的三种命令模式；<br>
    </strong></font></p>
    <div class="codeblock"><code>Command（命令）模式，用于输入命令；<br>Insert（插入）模式，用于插入文本；<br>Visual（可视）模式，用于视化的的高亮并选定正文；</code></div>
    <p><font id="3.3" size="3"><strong><br>
    3.3   文件的保存和退出；<br>
    </strong></font></p>
    <p>Command 模式是vi或vim的默认模式，如果我们处于其它命令模式时，要通过ESC键切换过来。</p>
    <p>当我们按ESC键后，接着再输入:号时，vi会在屏幕的最下方等待我们输入命令；</p>
    <div class="codeblock"><code>:w&nbsp; 保存；<br>:w&nbsp; filename 另存为filename；<br>:wq! 保存退出；<br>:wq! filename 注：以filename为文件名保存后退出；<br>:q! 不保存退出；<br>:x 应该是保存并退出 ，功能和:wq!相同</code></div>
    <p><font id="3.4" size="3"><strong><br>
    3.4  光标移动；<br>
    </strong></font></p>
    <p>当我们按ESC进入Command模式后，我们可以用下面的一些键位来移动光标；</p>
    <div class="codeblock"><code>j 向下移动一行；<br>k 向上移动一行；<br><br>h 向左移动一个字符；<br>l 向右移动一个字符；<br><br>ctrl+b&nbsp; 向上移动一屏；<br>ctrl+f&nbsp; 向下移动一屏；<br><br>向上箭头&nbsp;&nbsp;&nbsp; 向上移动；<br>向下箭头&nbsp;&nbsp;&nbsp; 向下移动；<br>向左箭头&nbsp;&nbsp;&nbsp; 向左移动；<br>向右箭头&nbsp;&nbsp;&nbsp; 向右移动；</code></div>
    <p>我们编辑一个文件时，对于 j、k、l和h键，还能在这些动作命令的前面加上数字，比如 3j，表示向下移动3行。</p>
    <p><font id="3.5" size="3"><strong><br>
    3.5  插入模式（文本的插入）；<br>
    </strong></font></p>
    <div class="codeblock"><code>i&nbsp; 在光标之前插入；<br>a&nbsp; 在光标之后插入；<br><br>I	在光标所在行的行首插入；<br>A&nbsp; 在光标所在行的行末插入；<br><br>o&nbsp; 在光标所在的行的上面插入一行；<br>O&nbsp; 在光标所在的行的下面插入一行；<br><br>s&nbsp; 删除光标后的一个字符，然后进入插入模式；<br>S&nbsp; 删除光标所在的行，然后进入插入模式；</code></div>
    <p><font id="3.6" size="3"><strong><br>
    3.6  文本内容的删除操作；<br>
    </strong></font></p>
    <div class="codeblock"><code>x 一个字符；<br>#x 删除几个字符，#表示数字，比如3x；<br>dw 删除一个单词；<br>#dw 删除几个单词，#用数字表示，比如3dw表示删除三个单词；<br>dd 删除一行；<br>#dd 删除多个行，#代表数字，比如3dd 表示删除光标行及光标的下两行；<br>d$ 删除光标到行尾的内容；<br> <br>J 清除光标所处的行与上一行之间的空格，把光标行和上一行接在一起；<br> </code></div>
    <p><font id="3.7" size="3"><strong><br>
    3.7 恢复修改及恢复删除操作；<br>
    </strong></font></p>
    <div class="codeblock"><code>u&nbsp; 撤消修改或删除操作；</code></div>
    <p>按ESC键返回Command（命令）模式，然后按u键来撤消删除以前的删除或修改；如果您想撤消多个以前的修改或删除操作，请按多按几次u。这和Word的撤消操作没有太大的区别；</p>
    <p><font id="3.8" size="3"><strong><br>
    3.8  可视模式；<br>
    </strong></font></p>
    <p>在最新的Linux发行版本中，vi提供了可视模式，因为这个功能是vim才有的。如果您用的vi没有这个功能，就换成vim就有了。打开可视模式，按ESC键，然后按v就进入可视模式；</p>
    <p>可视模式为我们提供了极为友好的选取文本范围，以高亮显示；在屏幕的最下方显示有；</p>
    <div class="codeblock"><code>-- 可视 --&nbsp;&nbsp; <br><br>或<br><br>--VISUAL--</code></div>
    <p><strong>如图：</strong></p>
    <p><a  href="http://www.linuxsir.org/main/files/viphotolinuxsir.jpg" target="_blank"><img  src="http://www.linuxsir.org/main/files/viphotolinuxsir.jpg" weight="200" height="200"></a></p>
    <p>进入可视模式，我们就可以用前面所说的命令行模式中的光标移动指令，可以进行文本范围的选取。</p>
    <p><strong>选取文本范围有何用？</strong></p>
    <p>我们可以对某部份删除作业，按d键就删除了我们选中的内容。<br>
    选中内容后，我们按y就表示复制；按d表示删除；</p>
    <p>值得一提是的删除的同时，也表示复制。我们返回到命令模式，然后移动光标到某个位置，然后按shift+p键，就把刚才删除的内容贴上了。我们先在这里提一句，在后文，我们还得详细说说。</p>
    <p><strong>退出可视模式，还是用ESC键；</strong></p>
    <p><font id="3.9" size="3"><strong><br>
    3.9  复制和粘帖的操作；<br>
    </strong></font></p>
    <p>其实删除也带有剪切的意思，当我们删除文字时，可以把光标移动到某处，然后按shift+p键就把内容贴在原处，然后再移动光标到某处，然后再按p或shift+p又能贴上；</p>
    <div class="codeblock"><code>p 在光标之后粘帖；<br>shift+p 在光标之前粘帖</code></div>
    <p><strong>来举一例：</strong></p>
    <p>比如我们想把一个文档的第三行复制下来，然后帖到第五行的后面，我们应该怎么做呢？</p>
    <p><strong>有两种方法；</strong></p>
    <p><font color="blue">第一种方法：</font></p>
    <p>先把第三行删除，把光标移动到第三行处，然后用dd动作，接着再按一下shift+p键。这样就把刚才删除的第三行帖在原处了。</p>
    <p>接着我们再用k键移动光标到第五行，然后再按一下p键，这样就把第三行的内容又帖到第五行的后面了；</p>
    <p><font color="blue">第二种方法；</font></p>
    <p>进入可视模式，按ESC键，然后按v键。移动鼠标指针，选中第三行的内容，然后按y键复制；再移动指针到第五行，最后按p键；</p>
    <p><strong>所以复制和粘贴操作，是命令模式、插入模式及可视模式的综合运用；我们要学会各种模式之间的切换，要常用ESC键；更为重要的学会在命令模式下移动光标；</strong></p>
    <p><font id="3.10" size="3"><strong><br>
    3.10  关于行号；<br>
    </strong></font></p>
    <p>有时我们配置一个程序运行时，会出现配置文件X行出现错误 。这时我们要用到行号相关的操作；</p>
    <p><strong><br>
    为所有内容添加行号；<br>
    </strong></p>
    <p>按ESC键，然后输入：</p>
    <div class="codeblock"><code>:set number</code></div>
    <p><strong>光标所处位置</strong></p>
    <p>在屏幕的右下角，有类似如下的；</p>
    <div class="codeblock"><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 57,8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27%</code></div>
    <p>在这之中，57表示第57行，8表示第8个字符；</p>
    <p><font id="3.11" size="3"><strong><br>
    3.11   查找和替换功能；<br>
    </strong></font></p>
    <p><font id="3.11.1" size="2"><strong><br>
    3.11.1   查找；<br>
    </strong></font></p>
    <p>首先，我们要进入ESC键，进入命令模式；我们输入/或?就进入查找模式了；</p>
    <div class="codeblock"><code>/SEARCH&nbsp; 注：正向查找，按n键把光标移动到下一个符合条件的地方；<br>?SEARCH&nbsp; 注：反向查找，按shift+n 键，把光标移动到下一个符合条件的</code></div>
    <p><strong>举一例：</strong>比如我想在一个文件中找到swap单词，我应该如下做；</p>
    <p>首先按ESC键，进入命令模式，然后输入；</p>
    <div class="codeblock"><code>/swap <br>或<br>?swap</code></div>
    <p><font id="3.11.2" size="2"><strong><br>
    3.11.2  替换；<br>
    </strong></font></p>
    <p>按ESC键进入命令模式；</p>
    <div class="codeblock"><code>:s /SEARCH/REPLACE/g&nbsp; 注：把当前光标所处的行中的SEARCH单词，替换成REPLACE，并把所有SEARCH高亮显示；<br>:%s /SEARCH/REPLACE&nbsp; 注：把文档中所有SEARCH替换成REPLACE；<br>:#,# s /SEARCH/REPLACE/g&nbsp; 注：＃号表示数字，表示从多少行到多少行，把SEARCH替换成REPLACE；</code></div>
    <p>注：在这之中，g表示全局查找；我们注意到，就是没有替换的地方，也会把SEARCH高亮显示；</p>
    <p><strong>举例说明：</strong></p>
    <p>比如我们有一篇文档要修改；</p>
    <p>我们把光标所在的行，把所有单词the，替换成THE，应该是：</p>
    <div class="codeblock"><code>:s /the/THE/g</code></div>
    <p>我们把整篇文档的所有的the都替换成THE，应该是： </p>
    <div class="codeblock"><code>:%s /the/THE</code></div>
    <p>我们仅仅是把第1行到第10行中的the，替换成THE，应该是；</p>
    <div class="codeblock"><code>:1,10&nbsp; s /the/THE/g</code></div>
    <p><font id="4" size="4"><strong><br>
    4、关于本文；<br>
    </strong></font></p>
    <p>我写本文的目的是让新手在最短的时间内用vi或vim创建、编辑和修改文件，所以说这篇文档并不是大而全的vi手册。如果把vi所有的功能都说全了，至少得写一本千页的手册；本也没有涉及更为高级的vi用法。如果想了解的更多，请查找man和help；</p>
    <p><font id="5" size="4"><strong><br>
    5、后记；<br>
    </strong></font></p>
    <p>到目前为止，关于目录和文件的操作，我写过有几篇了，从文件和目录的创建、删除、复制到属性操作，最后到文件修改等系列文档。这些文档都是有相关性的，如果把这些相关性的文档连起来，就是一个整体知识块。我们只有掌握了这些知识，才能实现文件系统的管理。</p>
    <p>在以后我会写什么内容呢？？？？可能会补充一下文件的查找，其实以前有类似文档，到时我总结一下，贴出来给大家看看就行了。</p>
    <p>下一步是准备网络基础文档建设中，网络基础比较重要，这是我计划的下一个重点。。。。。。。。</p>
    <p><font id="6" size="4"><strong><br>
    6、参考文档；<br>
    </strong></font></p>
    <p>man vi 和vi --help </p><img src ="http://www.cppblog.com/koson/aggbug/108796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-03 15:30 <a href="http://www.cppblog.com/koson/archive/2010/03/03/108796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux firefox 安装flash player 10</title><link>http://www.cppblog.com/koson/archive/2010/03/03/108770.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Wed, 03 Mar 2010 05:02:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2010/03/03/108770.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/108770.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2010/03/03/108770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/108770.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/108770.html</trackback:ping><description><![CDATA[<p>ADOBE的网站下载install_flash_player_10_linux.tar.gz<br><br><strong><font size="4">解压,命令为：tar -zxvf install_flash_player_10_linux.tar.gz</font></strong></p>
<p style="text-indent: 2em;">&nbsp;&nbsp;&nbsp;&nbsp; 得到<strong>libflashplayer.so文件。<br></strong></p>
<p><br><strong><font size="4">复制libflashplayer.so到火狐浏览器插件文件夹下，</font></strong></p>
<p style="text-indent: 2em;"><font size="4"><strong>&nbsp;&nbsp;&nbsp; 命令为: sudo cp libflashplayer.so /usr/lib/mozilla/plugins</strong>&nbsp;&nbsp;&nbsp; </font>\*此目录可能根据火狐不同的版本有所不同，大家可以先去lib下面 搜索一下mozilla*\</p>
<p style="text-indent: 2em;">将libflashplayer.so 复制进去之后，重启firefox 。 它就会提示有更新了。</p>
<p style="text-indent: 2em;">用firefox 播放flash时出现乱码解决：</p>
<p style="text-indent: 2em;">sudo vim /etc/fonts/conf.d/49-sansserif.conf</p>
<p style="text-indent: 2em;">将<br></p>
<pre><code>&nbsp; &nbsp; &lt;edit name="family" mode="append_last"&gt;<br>        <span style="color: #ff0000;">&lt;string&gt;sans-serif&lt;/string&gt;</span><br><br>    &lt;/edit&gt;<br>    将红色部分改为&lt;string&gt;sans&lt;/string&gt;<br></code></pre><img src ="http://www.cppblog.com/koson/aggbug/108770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2010-03-03 13:02 <a href="http://www.cppblog.com/koson/archive/2010/03/03/108770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LAMP 配置</title><link>http://www.cppblog.com/koson/archive/2009/12/17/103433.html</link><dc:creator>koson</dc:creator><author>koson</author><pubDate>Thu, 17 Dec 2009 14:36:00 GMT</pubDate><guid>http://www.cppblog.com/koson/archive/2009/12/17/103433.html</guid><wfw:comment>http://www.cppblog.com/koson/comments/103433.html</wfw:comment><comments>http://www.cppblog.com/koson/archive/2009/12/17/103433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koson/comments/commentRss/103433.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koson/services/trackbacks/103433.html</trackback:ping><description><![CDATA[<span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">1. 首先安装SSH<br>sudo apt-get install ssh<br>2.安装MySQL(虽然现在最新版为5.1，但是还只能装5.0版本)<br>sudo apt-get install mysql-server-5.0<br>3.安装Apache<br>sudo apt-get install apache2<br>4.安装PHP<br>sudo apt-get install&nbsp;<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">php</span>5 libapache2-mod-php5<br>5.重启Apache<br>sudo /etc/<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">ini</span>t.d/apache2 restart<br>6.安装phpMyAdmin<br>sudo apt-get install phpmyadmin<br>安装完成之后。在浏览器地址栏输入http://localhost/phpmyadmin并不能打开数据库管理<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">界面</span>。<br>检查/var/www/的目录下并没有phpmyadmin这个<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">文件</span>夹。<br>原来phpmyadmin默认是安装在/usr/share/phpmyadmi里面的。<br>这是你就需要在/var/www里面建一个对应的软连接，或者直接把phpmyadmin目录拷贝过去。<br>输入命令：<br>cd /var/www/<br>sudo ln -s /usr/share/phpmyadmin<br>在浏览器地址栏再次输入http://localhost/phpmyadmin/这是就可以打开了。<br>另一种方法：安装LAMP<br>在新立得软件包管理器中选择 编辑－－使用任务分组标记软件包<br>在打开的窗口中， 勾选 LAMP SERVER 然后确定<br>在主窗口中 点击红钯的对号&nbsp;<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">应用</span>&nbsp;按钮<br>好了，接下来就是等新立得<span class="t_tag" onclick="function onclick()
{
tagshow(event)
}" style="line-height: 21px; ">自动</span>下载完毕并安装完成。<br>中间会有一次提示输入mysql的root用户密码</span><div><span  style="font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">二、测试<br>1. 测试Apache<br>输入：http://localhost/看是否出现It works字样<br>2. 测试MySQL<br>输入：sudo netstat -tap | grep mysql<br>可以看到类似下面的行：<br>tcp 0 0 localhost.localdomain:mysql *:* LISTEN -<br>如果服务器不能正常运行，您可以通过下列命令启动它： sudo /etc/init.d/mysql restart<br>3. 测试PHP<br>Ubuntu Apache的根目录位于/var/www中<br>在里面添加一个测试文件test.php文件，内容<br>&lt;?php<br>phpinfo();<br>?&gt;<br>浏览器重输入http://localhost/test.php</span></div><img src ="http://www.cppblog.com/koson/aggbug/103433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koson/" target="_blank">koson</a> 2009-12-17 22:36 <a href="http://www.cppblog.com/koson/archive/2009/12/17/103433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>