<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>转烛空间linux &#187; </title>
	<atom:link href="http://wangliping.net/tag/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://wangliping.net</link>
	<description>记录生活，学习技术</description>
	<lastBuildDate>Fri, 30 Jul 2010 02:30:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>实例解说 fdisk 使用方法</title>
		<link>http://wangliping.net/how-to-use-fdisk-in-linux</link>
		<comments>http://wangliping.net/how-to-use-fdisk-in-linux#comments</comments>
		<pubDate>Mon, 12 Apr 2010 03:58:36 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[fdisk]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mount]]></category>

		<guid isPermaLink="false">http://wangliping.net/how-to-use-fdisk-in-linux</guid>
		<description><![CDATA[fdisk 是一款功能强大的分区工具，也是目前在Unix类操作系统中最流行的工具之一；分区工具老字号；本篇只介绍其最简单的分区操作功能]]></description>
			<content:encoded><![CDATA[<p><b>提要：</b>fdisk 是一款功能强大的分区工具，也是目前在Unix类操作系统中最流行的工具之一；分区工具老字号；本篇只介绍其最简单的分区操作功能。
<p><b><br />一、fdisk 的介绍；<br /></b>
<p><b>fdisk - Partition table manipulator for Linux</b> ，译成中文的意思是磁盘分区表操作工具；本人译的不太好，也没有看中文文档；其实就是分区工具；
</p>
<p><span id="more-652"></span>
<p>fdsik 能划分磁盘成为若干个区，同时也能为每个分区指定分区的文件系统，比如linux 、fat32、 linux 、linux swap 、fat16 以及其实类Unix类操作系统的文件系统等；当然我们用fdisk 对磁盘操作分区时，并不是一个终点，我们还要对分区进行格式化所需要的文件系统；这样一个分区才能使用；这和DOS中的fdisk 是类似的；
<p><b><br />二、合理规划您的硬盘分区；<br /></b><br />在操作分区之前，我们要明白硬盘分区一点理论，比如硬盘容量和分区大小的计算；对一个硬盘如何规划分区等，请参考如下文档，谢谢；
<p><a href="http://fedora.linuxsir.org/main/?q=node/80">《合理规划您的硬盘分区》</a>
<p><b><br />三、fdisk -l 查看硬盘及分区信息；<br /></b>
<p>通过<a href="http://fedora.linuxsir.org/main/?q=node/80">《合理规划您的硬盘分区》</a> ，我们知道主分区（包括扩展分区）的总个数不能超过四个；也不能把扩展分区包围在主分区之间；根据这个原则，我们划分硬盘分区就比较容易的多；也能为以后减少不必要的麻烦；
<p><b><br />1、通过fdisk -l 查看机器所挂硬盘个数及分区情况；<br /></b>
<p><code>[root@localhost beinan]# fdisk -l<br />Disk /dev/hda: 80.0 GB, 80026361856 bytes<br />255 heads, 63 sectors/track, 9729 cylinders<br />Units = cylinders of 16065 * 512 = 8225280 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/hda1&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 765&nbsp;&nbsp;&nbsp;&nbsp; 6144831&nbsp;&nbsp;&nbsp; 7&nbsp; HPFS/NTFS<br />/dev/hda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 766&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2805&nbsp;&nbsp;&nbsp; 16386300&nbsp;&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/hda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2806&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9729&nbsp;&nbsp;&nbsp; 55617030&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/hda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2806&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3825&nbsp;&nbsp;&nbsp;&nbsp; 8193118+&nbsp; 83&nbsp; Linux<br />/dev/hda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3826&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5100&nbsp;&nbsp;&nbsp; 10241406&nbsp;&nbsp; 83&nbsp; Linux<br />/dev/hda7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 787153+&nbsp; 82&nbsp; Linux swap / Solaris<br />/dev/hda8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6657&nbsp;&nbsp;&nbsp; 11719386&nbsp;&nbsp; 83&nbsp; Linux<br />/dev/hda9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6658&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7751&nbsp;&nbsp;&nbsp;&nbsp; 8787523+&nbsp; 83&nbsp; Linux<br />/dev/hda10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7752&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9729&nbsp;&nbsp;&nbsp; 15888253+&nbsp; 83&nbsp; Linux<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200781&nbsp;&nbsp; 83&nbsp; Linux</code>
<p>通过上面的信息，我们知道此机器中挂载两个硬盘（或移动硬盘），其中一个是hda 另一个是sda ；如果我们想查看单个硬盘情况，可以通过 fdisk -l /dev/hda1 或者fdisk -l /dev/sda1 来操作；以fdisk -l 输出的硬盘标识为准；
<p>其中 hda有三个主分区（包括扩展分区）,分别是主分区 hda1 hda2 和hda3（扩展分区） ；逻辑分区是 hda5到hda10；<br />其中 sda 有两个主分区（包括扩展分区），分别是 hda1 和hda2 (扩展分区）；逻辑分区是 sda5 hda6 ；
<p>硬盘总容量=主分区（包括扩展分区）总容量<br />扩展分区容量=逻辑分区总容量
<p>通过上面的例子，我们可以得知 hda=hda1+hda2+hda3，其中hda3=hda5+hda6+hda7+hda8+hda9+hda10 ... ...<br /><b><br />2、关于fdisk -l 一些数值的说明；<br /></b>
<p><code>Disk /dev/hda: 80.0 GB, 80026361856 bytes<br />255 heads, 63 sectors/track, 9729 cylinders<br />Units = cylinders of 16065 * 512 = 8225280 bytes</code>
<p>这个硬盘是80G的，有255个磁面；63个扇区；9729个磁柱；每个 cylinder（磁柱）的容量是 8225280 bytes=8225.280 K（约为）=8.225280M（约为）；
<p><code>分区序列&nbsp;&nbsp;&nbsp; 引导&nbsp;&nbsp;&nbsp; 开始&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 终止&nbsp;&nbsp;&nbsp; 容量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分区类型ID&nbsp;&nbsp;&nbsp; 分区类型<br />Device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System<br />/dev/hda1&nbsp;&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 765&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6144831&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HPFS/NTFS<br />/dev/hda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 766&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2805&nbsp;&nbsp;&nbsp;&nbsp; 16386300&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; W95 FAT32 (LBA)<br />/dev/hda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2806&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9729&nbsp;&nbsp;&nbsp; 55617030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Extended<br />/dev/hda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2806&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3825&nbsp;&nbsp;&nbsp;&nbsp; 8193118+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux<br />/dev/hda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3826&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5100&nbsp;&nbsp;&nbsp; 10241406&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux<br />/dev/hda7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 787153+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux swap / Solaris<br />/dev/hda8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5199&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6657&nbsp;&nbsp;&nbsp; 11719386&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux<br />/dev/hda9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6658&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7751&nbsp;&nbsp;&nbsp;&nbsp; 8787523+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux<br />/dev/hda10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7752&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9729&nbsp;&nbsp;&nbsp; 15888253+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 83&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux</code>
<p><b>说明：</b>
<p>硬盘分区的表示：在Linux 是通过hd*x 或 sd*x 表示的，其中 * 表示的是a、b、c ... ... x表示的数字 1、2、3 ... ... hd大多是IDE硬盘；sd大多是SCSI或移动存储；<br />引导（Boot）：表示引导分区，在上面的例子中 hda1 是引导分区；<br />Start （开始）：表示的一个分区从X cylinder（磁柱）开始；<br />End （结束）：表示一个分区到 Y cylinder（磁柱）结束；<br />id和System 表示的是一个意思，id看起来不太直观，我们要在fdisk 一个分区时，通过指定id来确认分区类型；比如 7表示的就NTFS 分区；这个在fdisk 中要通过t功能来指定。下面的部份会提到；<br />Blocks（容量）：这是我翻译的，其实不准确，表示的意思的确是容量的意思，其单位是K；一个分区容量的值是由下面的公式而来的；
<p>Blocks = （相应分区End数值 - 相应分区Start数值）x 单位cylinder（磁柱）的容量
<p>所以我们算一下 hda1的 Blocks 的大小 ：
<p>hda1 Blocks=(765-1)x8225.280=6284113.92 K = 6284.113.92M
<p><b>注：</b>换算单位以硬盘厂家提供的10进位算起，如果以操作系统二进制来算，这个分区容量应该更少一些，得出的这个值和我们通过 fdisk -l 看到的 /dev/hda1的值是大体相当的，因为换算方法不一样，所以也不可能尽可能的精确；再加上分区时的一点损失之类，有时或大或小是存在的；
<p>我们查看分区大小或者文件的时候，还是用十进制来计算比较直观；推算办法是 byte 向前推小数点三位就是K ，K单位的值向前推小数点三位就是M，M向前推小数点三位就是G... ... 一般也差不了多少；这么算就行；
<p><b><br />3、估算一个存储设备是否被完全划分；<br /></b><br />我们估算一个硬盘是否完全被划分，我们只要看 fdisk -l 输出的内容中的 cylinders（柱体） 上一个分区的End 和 下一个分区的Start是不是一个连续的数字，另外要看一下每个硬盘设备的fdisk -l 的开头部份，看一下他的 cylinders（柱体）的值；
<p>比如hda设备，我们看到的是 9729 cylinders ；我们通过 hda的分区表可以看到上一个分区的End的值+1 就是下一个分区的Start 的值；比如 hda2的Start的值是 hda1 的End 的值+1，这证明 hda1 和hda2 中间没有空白分区，是连续的，以此类推；在 hda10，我们看到 End 的值是9729 ，而在fdisk -l头部信息中也有9729 cylinders，证明这个硬盘已经完全划分；
<p><code>Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200781&nbsp;&nbsp; 83&nbsp; Linux</code>
<p>我们再看看 sda 移动储是不是被完全划分了；sda有 125个cylinders （柱体），有一个主分区和一个扩展分区构成；在扩展分区中，我们看到End的值为125,而这个移动硬盘的cylinder也是125，这能说明这个硬盘不可能再添加任何主分区了；根据我们上面所说的 sda1 sda2 sda5 sda6 之间未有任何未划分空间，但sda6 的cylinders （柱体）的End值却是 76 ，而 sda总的cylinders （柱体）有125个，由此看来sda 在 sda6后面有未划分区域；
<p>至于sda 有多少未划分空间，我们算一下就知道了；扩展分区总容量是 806400 K ，大约是 806.400M左右，而逻辑分区 sda5 和sda6 的大小加起来是 400M左右，所以还仍有400M左右未划分空间，并且只能划分为链逻辑分区；
<p><b><br />四、fdisk 对硬盘及分区的操作，进入fdisk 对硬盘操作阶段；<br /></b>
<p>我们可以对硬盘进行分区操作，前提是您把fdisk -l 弄明白了；通过fdisk -l ，我们能找出机器中所有硬盘个数及设备名称；比如上面的例子，我们会看到两个设备一个是/dev/hda ，另一个是/dev/sda ；<br /><b><br />fdisk 操作硬盘的命令格式如下：<br /></b>
<p><code>[root@localhost beinan]# fdisk&nbsp;&nbsp;&nbsp; 设备 </code>
<p>比如我们通过 fdisk -l 得知 /dev/hda 或者 /dev/sda设备；我们如果想再添加或者删除一些分区，可以用
<p><code>[root@localhost beinan]# fdisk&nbsp;&nbsp;&nbsp;&nbsp; /dev/hda<br />或<br />[root@localhost beinan]# fdisk&nbsp; /dev/sda </code>
<p><b>注</b> 在以后的例子中，我们要以 /dev/sda设备为例，来讲解如何用fdisk 来操作添加、删除分区等动作；<br /><b><br />1、fdisk 的说明；<br /></b><br />当我们通过 fdisk 设备，进入相应设备的操作时，会发现有如下的提示；以 fdisk /dev/sda 设备为例，以下同；
<p><code>[root@localhost beinan]# fdisk /dev/sda<br />Command (m for help):&nbsp; 在这里按m ，就会输出帮助；<br />Command action<br />&nbsp;&nbsp; a&nbsp;&nbsp; toggle a bootable flag<br />&nbsp;&nbsp; b&nbsp;&nbsp; edit bsd disklabel<br />&nbsp;&nbsp; c&nbsp;&nbsp; toggle the dos compatibility flag<br />&nbsp;&nbsp; d&nbsp;&nbsp; delete a partition&nbsp;&nbsp; 注：这是删除一个分区的动作；<br />&nbsp;&nbsp; l&nbsp;&nbsp; list known partition types&nbsp; 注：l是列出分区类型，以供我们设置相应分区的类型；<br />&nbsp;&nbsp; m&nbsp;&nbsp; print this menu&nbsp; 注：m 是列出帮助信息；<br />&nbsp;&nbsp; n&nbsp;&nbsp; add a new partition 注：添加一个分区；<br />&nbsp;&nbsp; o&nbsp;&nbsp; create a new empty DOS partition table <br />&nbsp;&nbsp; p&nbsp;&nbsp; print the partition table 注：p列出分区表；<br />&nbsp;&nbsp; q&nbsp;&nbsp; quit without saving changes 注：不保存退出；<br />&nbsp;&nbsp; s&nbsp;&nbsp; create a new empty Sun disklabel&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; t&nbsp;&nbsp; change a partition's system id&nbsp; 注：t 改变分区类型；<br />&nbsp;&nbsp; u&nbsp;&nbsp; change display/entry units&nbsp; <br />&nbsp;&nbsp; v&nbsp;&nbsp; verify the partition table<br />&nbsp;&nbsp; w&nbsp;&nbsp; write table to disk and exit&nbsp; 注：把分区表写入硬盘并退出；<br />&nbsp;&nbsp; x&nbsp;&nbsp; extra functionality (experts only)&nbsp; 注：扩展应用，专家功能；</code>
<p>其实我们常用的只有注有中文的，其它的功能我们不常用（呵，主要是我不会用，否则早会卖弄一下了）；x扩展功能，也不是常用的；一般的情况下只要懂得 d l m p q t w 就行了；
<p>下面以实例操作来详述，没有例子没有办法就，新手也看不懂；<br /><b><br />2、列出当前操作硬盘的分区情况，用p；<br /></b>
<p><code>Command (m for help): p<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200781&nbsp;&nbsp; 83&nbsp; Linux</code>
<p><b><br />3、通过fdisk的d指令来删除一个分区；<br /></b>
<p><code>Command (m for help): p&nbsp;&nbsp;&nbsp; 注：列出分区情况；<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200781&nbsp;&nbsp; 83&nbsp; Linux<br />Command (m for help): d 注：执行删除分区指定；<br />Partition number (1-6): 6&nbsp; 注：我想删除 sda6 ，就在这里输入 6 ；<br />Command (m for help): p 注：再查看一下硬盘分区情况，看是否删除了？<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />Command (m for help):</code>
<p><b>警告：</b>删除分区时要小心，请看好分区的序号，如果您删除了扩展分区，扩展分区之下的逻辑分区都会删除；所以操作时一定要小心；如果知道自己操作错了，请不要惊慌，用q不保存退出；切记切记！！！！在分区操作错了之时，千万不要输入w 保存退出！！！<br /><b><br />4、通过fdisk的n指令增加一个分区；<br /></b>
<p><code>Command (m for help): p<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />Command (m for help): n&nbsp; 注：增加一个分区；<br />Command action<br />&nbsp;&nbsp; l&nbsp;&nbsp; logical (5 or over)&nbsp; 注：增加逻辑分区，分区编号要大于5；为什么要大于5，因为已经有sda5了；<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4) 注：增加一个主分区；编号从 1-4 ；但sda1 和sda2都被占用，所以只能从3开始；<br />p<br />Partition number (1-4): 3<br />No free sectors available&nbsp; 注：失败中，为什么失败？</code>
<p>注：我试图增加一个主分区，看来是失败了，为什么失败？因为我们看到主分区+扩展分区把整个磁盘都用光了，看扩展分区的End的值，再看一下 p输出信息中有125 cylinders；最好还是看前面部份；那里有提到；
<p>所以我们只能增加逻辑分区了；
<p><code>Command (m for help): n<br />Command action<br />&nbsp;&nbsp; l&nbsp;&nbsp; logical (5 or over)<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />l&nbsp;&nbsp; 注：在这里输入l，就进入划分逻辑分区阶段了；<br />First cylinder (51-125, default 51):&nbsp;&nbsp; 注：这个就是分区的Start 值；这里最好直接按回车，如果您输入了一个非默认的数字，会造成空间浪费；<br />Using default value 51<br />Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M&nbsp; 注：这个是定义分区大小的，+200M 就是大小为200M ；当然您也可以根据p提示的单位cylinder的大小来算，然后来指定 End的数值。回头看看是怎么算的；还是用+200M这个办法来添加，这样能直观一点。如果您想添加一个10G左右大小的分区，请输入 +10000M ；<br />Command (m for help):</code>
<p><b><br />5、通过fdisk的t指令指定分区类型；<br /></b>
<p><code>Command (m for help): t&nbsp; 注：通过t来指定分区类型；<br />Partition number (1-6): 6 注：要改变哪个分区类型呢？我指定了6，其实也就是sda6<br />Hex code (type L to list codes):L&nbsp; 注：在这里输入L，就可以查看分区类型的id了；<br />Hex code (type L to list codes): b&nbsp; 注：如果我想让这个分区是 W95 FAT32 类型的，通过L查看得知 b是表示的是，所以输入了b；<br />Changed system type of partition 6 to b (W95 FAT32)&nbsp; 注：系统信息，改变成功；是否是改变了，请用p查看；<br />Command (m for help): p<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; c&nbsp; W95 FAT32 (LBA)<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 806400&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp;&nbsp; b&nbsp; W95 FAT32</code>
<p><b><br />6、fdisk 的退出，用q或者 w；<br /></b><br />其中 q是 不保存退出，w是保存退出；
<p><code>Command (m for help): w<br />或 <br />Command (m for help): q</code>
<p><b><br />7、一个添加分区的例子；<br /></b><br />本例中我们会添加两个200M的主分区，其它为扩展分区，在扩展分区中我们添加两个200M大小的逻辑分区；
<p><code>Command (m for help): p 注：列出分区表；<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />Command (m for help): n 注：添加分区；<br />Command action<br />&nbsp;&nbsp; e&nbsp;&nbsp; extended<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />p&nbsp; 注：添加主分区；<br />Partition number (1-4): 1&nbsp;&nbsp; 注：添加主分区1；<br />First cylinder (1-125, default 1):&nbsp;&nbsp; 注：直接回车，主分区1的起始位置；默认为1,默认就好；<br />Using default value 1<br />Last cylinder or +size or +sizeM or +sizeK (1-125, default 125): +200M&nbsp;&nbsp; 注：指定分区大小，用+200M来指定大小为200M<br />Command (m for help): n&nbsp; 注：添加新分区；<br />Command action<br />&nbsp;&nbsp; e&nbsp;&nbsp; extended<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />p&nbsp; 注：添加主分区<br />Partition number (1-4): 2&nbsp; 注：添加主分区2；<br />First cylinder (26-125, default 26):<br />Using default value 26<br />Last cylinder or +size or +sizeM or +sizeK (26-125, default 125): +200M 注：指定分区大小，用+200M来指定大小为200M<br />Command (m for help): n<br />Command action<br />&nbsp;&nbsp; e&nbsp;&nbsp; extended<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />e&nbsp; 注：添加扩展分区；<br />Partition number (1-4): 3&nbsp; 注：指定为3 ，因为主分区已经分了两个了，这个也算主分区，从3开始；<br />First cylinder (51-125, default 51):&nbsp; 注：直接回车；<br />Using default value 51<br />Last cylinder or +size or +sizeM or +sizeK (51-125, default 125):&nbsp;&nbsp; 注：直接回车，把其余的所有空间都给扩展分区；<br />Using default value 125<br />Command (m for help): p<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201600&nbsp;&nbsp; 83&nbsp; Linux<br />/dev/sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 604800&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />Command (m for help): n<br />Command action<br />&nbsp;&nbsp; l&nbsp;&nbsp; logical (5 or over)<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />l&nbsp; 注：添加逻辑分区；<br />First cylinder (51-125, default 51):<br />Using default value 51<br />Last cylinder or +size or +sizeM or +sizeK (51-125, default 125): +200M&nbsp; 注：添加一个大小为200M大小的分区；<br />Command (m for help): n<br />Command action<br />&nbsp;&nbsp; l&nbsp;&nbsp; logical (5 or over)<br />&nbsp;&nbsp; p&nbsp;&nbsp; primary partition (1-4)<br />l&nbsp; 注：添加一个逻辑分区；<br />First cylinder (76-125, default 76):<br />Using default value 76<br />Last cylinder or +size or +sizeM or +sizeK (76-125, default 125): +200M 注：添加一个大小为200M大小的分区；<br />Command (m for help): p&nbsp; 列出分区表；<br />Disk /dev/sda: 1035 MB, 1035730944 bytes<br />256 heads, 63 sectors/track, 125 cylinders<br />Units = cylinders of 16128 * 512 = 8257536 bytes<br />&nbsp;&nbsp; Device Boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blocks&nbsp;&nbsp; Id&nbsp; System<br />/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201600&nbsp;&nbsp; 83&nbsp; Linux<br />/dev/sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 604800&nbsp;&nbsp;&nbsp; 5&nbsp; Extended<br />/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 201568+&nbsp; 83&nbsp; Linux</code>
<p>然后我们根据前面所说通过t指令来改变分区类型；
<p>最后不要忘记w保存退出；
<p><b><br />五、对分区进行格式化，以及加载;<br /></b>
<p>先提示一下；用 mkfs.bfs mkfs.ext2 mkfs.jfs mkfs.msdos mkfs.vfatmkfs.cramfs mkfs.ext3 mkfs.minix mkfs.reiserfs mkfs.xfs 等命令来格式化分区，比如我想格式化 sda6为ext3文件系统，则输入；
<p><code>[root@localhost beinan]# mkfs.ext3 /dev/sda6</code>
<p>如果我想加载 sda6到目前系统来存取文件，应该有mount 命令，但首先您得建一个挂载目录；比如 /mnt/sda6 ；
<p><code>[root@localhost beinan]# mkdir /mnt/sda6<br />[root@localhost beinan]# mount /dev/sda6 /mnt/sda6<br />[root@localhost beinan]# df -lh<br />Filesystem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容量&nbsp; 已用 可用 已用% 挂载点<br />/dev/hda8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11G&nbsp; 8.4G&nbsp; 2.0G&nbsp; 81% /<br />/dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 236M&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 236M&nbsp;&nbsp; 0% /dev/shm<br />/dev/hda10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16G&nbsp; 6.9G&nbsp; 8.3G&nbsp; 46% /mnt/hda10<br />/dev/sda6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 191M&nbsp; 5.6M&nbsp; 176M&nbsp;&nbsp; 4% /mnt/sda6</code>
<p>这样我们就能进入 /mnt/sda6目录，然后存取文件了；
<p>具体的权限方法，以及mount 更详细的用法，在以后我会专门写一个帖子；在一帖中放下所有的内容实在有点为难；
<p><strong>原文</strong>：<a title="http://fedora.linuxsir.org/main/?q=node/81" href="http://fedora.linuxsir.org/main/?q=node/81">http://fedora.linuxsir.org/main/?q=node/81</a>
<p><strong>转烛补充：</strong>
<p>我主要是利用它进行分区合并操作。因为我在安装时分了几个区，现在想把/dev/sda5和/dev/sda6合并，搜了一些资料说用gparted这个工具很不错（后来证实这个工具的确不错），不过如果能用自带的工具而不用另外安装当然是最好的。先是用d命令删除了两个分区，重启，然后用n命令将剩余的空间创建了一个分区，用的都是默认值，即将全部剩余空间放到新的分区，然后再重启。然后利用gparted给新的分区改了个label（此处你也没必要做），再然后仍然利用gparted查看了一下新分区的uuid，在/etc/fstab里将这个挂载到/media/disk下。以上修改label和查看uuid应该可以不用gparted的，但是一时没找到命令，而正好又装了，所以就用上了。然后再重启，OK了。
<p>再补充：ls -al /dev/disk/by-uuid 可以查看uuid</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/linux_mount_usb" title="Linux如何mount Usb盘">Linux如何mount Usb盘</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li><li><a href="http://wangliping.net/how_to_add_swap_method" title="Linux中增加Swap的方法">Linux中增加Swap的方法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/how-to-use-fdisk-in-linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C语言查看和更改文件的权限</title>
		<link>http://wangliping.net/c-change-file-permission</link>
		<comments>http://wangliping.net/c-change-file-permission#comments</comments>
		<pubDate>Mon, 25 Jan 2010 08:55:44 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[权限]]></category>

		<guid isPermaLink="false">http://wangliping.net/c-change-file-permission</guid>
		<description><![CDATA[有时候需要在程序里获得某个文件的权限信息，正如在Linux下用ls -l命令可以查看权限，那么在C语言中同样有函数可以实现这样的功能。]]></description>
			<content:encoded><![CDATA[<p>　　有时候需要在程序里获得某个文件的权限信息，正如在Linux下用ls -l命令可以查看权限，那么在C语言中同样有函数可以实现这样的功能。</p>
</p>
<p><span id="more-619"></span><br />
<blockquote>
<p>#include &lt;stdio.h&gt;<br />#include &lt;sys/stat.h&gt;
<p>void main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *fileName = "/home/user/test/myfile";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct stat fileInfo;
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stat(fileName, &amp;fileInfo) &lt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(0);
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int mask = 0000777;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned int access = mask &amp; fileInfo.st_mode;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%o\n%d\n", access, fileInfo.st_uid);<br />}</p>
</blockquote>
<p>　　关于更多的信息，诸如用户和组的信息，fileInfo.st_uid等等，可以查询stat结构，里面有很多的信息。</p>
<blockquote><p>struct&nbsp; stat<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp; dev_t&nbsp;&nbsp;&nbsp; st_dev;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*device*/<br />&nbsp;&nbsp;&nbsp;&nbsp; ino_t&nbsp;&nbsp;&nbsp;&nbsp; st_ino;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*inode*/<br />&nbsp;&nbsp;&nbsp;&nbsp; mode_t st_mode;&nbsp;&nbsp;&nbsp; /*protection*/<br />&nbsp;&nbsp;&nbsp;&nbsp; nlink_t&nbsp;&nbsp; st_nlink;&nbsp;&nbsp;&nbsp;&nbsp; /*number of hard&nbsp; links */<br />&nbsp;&nbsp;&nbsp;&nbsp; uid_t&nbsp;&nbsp;&nbsp;&nbsp; st_uid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*user ID of owner*/<br />&nbsp;&nbsp;&nbsp;&nbsp; gid_t&nbsp;&nbsp;&nbsp;&nbsp; st_gid;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*group ID of owner*/<br />&nbsp;&nbsp;&nbsp;&nbsp; dev_t&nbsp;&nbsp;&nbsp; st_rdev;&nbsp;&nbsp;&nbsp;&nbsp; /*device type (if inodedevice)*/<br />&nbsp;&nbsp;&nbsp;&nbsp; off_t&nbsp;&nbsp;&nbsp;&nbsp; st_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*total size,&nbsp; in bytes*/<br />&nbsp;&nbsp;&nbsp;&nbsp; unsigned long&nbsp; st_blksize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*blocksize for filesystem I/O*/<br />&nbsp;&nbsp;&nbsp;&nbsp; unsigned long&nbsp; st_blocks;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of blocks allocated*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_atime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last access*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_mtime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last modification*/<br />&nbsp;&nbsp;&nbsp;&nbsp; time_t&nbsp;&nbsp; st_ctime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*time of last change*/<br />};</p>
</blockquote>
<p>　　当然你也可能更改文件的权限信息，譬如本来一个文件是0600的权限，你想更改为0644的权限，即如同Linux下chmod命令。在Linux下我们可以用：<br />
<blockquote>
<p>#chmod 0644 myfile</p>
</blockquote>
<p>　　来更改文件的权限，那么在C语言下，其实也提供了类似的函数。<br />
<blockquote>
<p>#include &lt;stdio.h&gt;<br />#include &lt;sys/stat.h&gt;
<p>void main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *fileName = "/home/user/test/myfile";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chmod(fileName, 0644);<br />}</p>
</blockquote>
<p>　　其实呢，还有<a href="http://man.chinaunix.net/develop/c&amp;c++/linux_c/main.htm" target="_blank">更多的函数</a>，跟Linux里的命令很相近。</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-file-find-out" title="C语言实现文件查找操作">C语言实现文件查找操作</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/cpp-link-sort-override-wrfile" title="C++单链表冒泡排序、运算符重载和文件读写">C++单链表冒泡排序、运算符重载和文件读写</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/c-change-file-permission/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Source-Insight-看大规模大工程源代码</title>
		<link>http://wangliping.net/source-insight-see-source-code</link>
		<comments>http://wangliping.net/source-insight-see-source-code#comments</comments>
		<pubDate>Thu, 07 Jan 2010 08:49:20 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android-x86]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[Source-Insight]]></category>

		<guid isPermaLink="false">http://wangliping.net/source-insight-see-source-code</guid>
		<description><![CDATA[如果你只是看或者编写一个小应用，这个东西当然还没有UltraEdit好，但是你要管理成百上千，成千上万的代码，那你最好还是考虑一下这个吧，UltraEdit此时只能是束手无策或者是黔驴技穷了。你估计想说，有那么多文件需要管理吗？其实，最简单最广泛的，Linux的Kernel就是一个典型的例子。解压后的代码都有几百M，你说你怎么看？说实话最初我不知道这软件的时候，是一个目录一个目录，一个文件一个文件看的。]]></description>
			<content:encoded><![CDATA[<p>　　如果你只是看或者编写一个小应用，这个东西当然还没有UltraEdit好，但是你要管理成百上千，成千上万的代码，那你最好还是考虑一下这个吧，UltraEdit此时只能是束手无策或者是黔驴技穷了。你估计想说，有那么多文件需要管理吗？其实，最简单最广泛的，Linux的Kernel就是一个典型的例子。解压后的代码都有几百M，你说你怎么看？说实话最初我不知道这软件的时候，是一个目录一个目录，一个文件一个文件看的。</p>
<p><span id="more-599"></span>　　然而你要知道，翻目录翻文件，你的确需要毅力。还有就是想找一个文件，你又得用find，找一个函数你还得有search，更或者要用grep，如此这般。然后你想知道一个函数被谁调用，你却无从下手，然后你想知道一个变量怎么改变的，你依然要费大力气。那么，就从这些劳动中解脱出来吧，用上Source Insight或许就可以减轻你这样的负担了。</p>
<p>　　原来看Android的源码树时，用的是Eclipse，当时觉得挺好用的。但是后来发现Eclair居然不能导入到Eclipse。得，本来也觉得Eclipse不能很好地看C代码很不爽，那么就用SourceInsight吧。全部导入并sync后，发现貌似SourceInsight看源码树比Eclipse还好一些，特别是最近几乎看的都是C和C++部分的代码，其实对于Java代码也一样好。可以在代码间跳转，可以很快地定位需要的文件，虽然不能完全所有想定位的都能定位，但已经足以比Eclipse好一些了。</p>
<p>　　建议看源代码时，要将代码sync一下，这样就可以跳转了。虽然这样要花费较多的时间去sync，花费较多的磁盘空间，不过，磁盘嘛，1G总是相对比较少的，时间嘛，花一次这样的时间，以后都方便还是很好的。而且这个软件还是免费的，最初看到这个软件的推荐是在IBM的开发网站上，呵～IBM推荐的，也可以让大家信任吧。截图看一下：</p>
<p><a href="http://pimg.swodestatic.com/NjQxMTc3Nixzd2FuZGxl.jpg" target="_blank"><img style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" title="Source-Insight" src="http://pimg.swodestatic.com/NjQxMTc3Nixzd2FuZGxl_medium.jpg" border="0" alt="Source-Insight" width="484" height="295" /></a></p>
<p align="center"><strong>原创文章，如需转载请注明【</strong><a href="http://wangliping.net" target="_blank"><strong>转烛空间</strong></a><strong>】：</strong><a href="http://wangliping.net"><strong>http://wangliping.net</strong></a></p>
<p align="center"><strong>本文地址：</strong><a href="http://wangliping.net/source-insight-see-source-code"><strong>http://wangliping.net/source-insight-see-source-code</strong></a></p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/android-x86-donut-r2" title="Android-x86 1.6-r2 釋出">Android-x86 1.6-r2 釋出</a></li><li><a href="http://wangliping.net/android-x86-20-eclair-release" title="Android-x86-2.0-eclair出pub-test版了">Android-x86-2.0-eclair出pub-test版了</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/eclair-virtuebox-boot" title="Eclair已经在VirtualBox上跑起来了">Eclair已经在VirtualBox上跑起来了</a></li><li><a href="http://wangliping.net/android-x86-camrecord-and-opensource" title="Android-x86录像功能完善——兼谈开源">Android-x86录像功能完善——兼谈开源</a></li><li><a href="http://wangliping.net/android-x86-begin-to-accept-donate" title="Android-x86项目开始接受捐款">Android-x86项目开始接受捐款</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/source-insight-see-source-code/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Linux下测试键盘鼠标触摸屏触摸板</title>
		<link>http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen</link>
		<comments>http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen#comments</comments>
		<pubDate>Wed, 23 Dec 2009 11:29:56 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[android-x86]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[测试]]></category>

		<guid isPermaLink="false">http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen</guid>
		<description><![CDATA[在Linux或者Android-x86系统下，会用到测试键盘、鼠标、触摸屏、触摸板等各种输入设备的功能，那么下面的这段代码是个好的选择。以下文章出自于猫出没的地方，本文做了一些小改动。

　　最近玩了下Android-x86的eclair，主题风格相对之前的1.6好看了很多，而且还加了不少之前没有的功能。但是触摸屏不能用，于是想自己试着去解决这个问题，首先编写了个Linux输入设备的测试小程序来检测问题所在，测试结果发现没有校正，总算也小有成就。接下来应该再dig触摸屏的校正问题：-)

　　现在把写的测试程序放上来供大家参考：
　　代码中宏定义KEY_DEV、MOU_DEV、TOUS_DEV、TOUP_DEV是Linux下键盘，鼠标，触摸屏和触摸板的设备文件路径，对于不同的系统和机器可能有所不同，大家可以用cat /proc/bus/input/devices查看自己机器的设备文件。]]></description>
			<content:encoded><![CDATA[<p>　　在Linux或者Android-x86系统下，会用到测试键盘、鼠标、触摸屏、触摸板等各种输入设备的功能，那么下面的这段代码是个好的选择。以下文章出自于猫出没的地方，本文做了一些小改动。
<p>　　最近玩了下Android-x86的eclair，主题风格相对之前的1.6好看了很多，而且还加了不少之前没有的功能。但是触摸屏不能用，于是想自己试着去解决这个问题，首先编写了个Linux输入设备的测试小程序来检测问题所在，测试结果发现没有校正，总算也小有成就。接下来应该再dig触摸屏的校正问题：-)
<p>　　现在把写的测试程序放上来供大家参考：<br />　　代码中宏定义KEY_DEV、MOU_DEV、TOUS_DEV、TOUP_DEV是Linux下键盘，鼠标，触摸屏和触摸板的设备文件路径，对于不同的系统和机器可能有所不同，大家可以用cat /proc/bus/input/devices查看自己机器的设备文件。</p>
<p><span id="more-555"></span>
<p>　　用gcc -o outfilename filename编译生成可执行文件。如你将代码保存为test.c，那么你可以用gcc -o test test.c来编译连接。然后在目录下使用./test运行文件，注意修改生成的可执行文件权限(sudo chmod a+x test)，不想修改权限的用sudo ./test。目前还没加入测试过程中切换测试设备的功能，只能用CTRL+Z结束程序，再重新执行文件。有时间可以再摸索下加个这个功能，呵呵~~
<div style="border-bottom: #a9a9a9 1px solid; border-left: #a9a9a9 1px solid; background-color: rgb(249,247,237); font-family: consolas, 'Lucida Console', 'Courier New'; color: rgb(0,0,0); border-top: #a9a9a9 1px solid; border-right: #a9a9a9 1px solid" class="source"><span style="color: rgb(0,136,0)">#include &lt;stdio.h&gt;</span><br /><span style="color: rgb(0,136,0)">#include &lt;unistd.h&gt;</span><br /><span style="color: rgb(0,136,0)">#include &lt;sys/types.h&gt;</span><br /><span style="color: rgb(0,136,0)">#include &lt;fcntl.h&gt;</span><br /><span style="color: rgb(0,136,0)">#include &lt;linux/input.h&gt;</span><br /><span style="color: rgb(0,136,0)">#define KEY_DEV "/dev/input/event5"</span><br /><span style="color: rgb(0,136,0)">#define MOU_DEV "/dev/input/event6″</span><br /><span style="color: rgb(0,136,0)">#define TOUS_DEV "/dev/input/event7″</span><br /><span style="color: rgb(0,136,0)">#define TOUP_DEV "/dev/input/event11″</span></p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,0,0)">ts_fd</span> <span style="color: rgb(102,102,102)">=</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br /><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(170,34,255); font-weight: bold">struct</span> <span style="color: rgb(0,0,0)">input_event</span> <span style="color: rgb(0,0,0)">data</span>;</p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">init_device</span>(<span style="color: rgb(0,187,0); font-weight: bold">char</span> <span style="color: rgb(102,102,102)">*</span><span style="color: rgb(0,0,0)">TS_DEV</span>)<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span>((<span style="color: rgb(0,0,0)">ts_fd</span> <span style="color: rgb(102,102,102)">=</span> <span style="color: rgb(0,0,0)">open</span>(<span style="color: rgb(0,0,0)">TS_DEV</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">O_RDONLY</span>)) <span style="color: rgb(102,102,102)">&lt;</span> <span style="color: rgb(102,102,102)">0</span>)<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"Error open %s</span><span style="color: rgb(187,102,34); font-weight: bold">\n\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">TS_DEV</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(0,0,0)">ts_fd</span>;<br /><span style="color: rgb(0,0,0)">}</span></p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">test_key</span>()<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">init_device</span>(<span style="color: rgb(0,0,0)">KEY_DEV</span>) <span style="color: rgb(102,102,102)">&lt;</span> <span style="color: rgb(102,102,102)">0</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">while</span>(<span style="color: rgb(102,102,102)">1</span>)<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">read</span>(<span style="color: rgb(0,0,0)">ts_fd</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(102,102,102)">&amp;</span><span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(170,34,255); font-weight: bold">sizeof</span>(<span style="color: rgb(0,0,0)">data</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span> (<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_KEY</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type: EV_KEY, event = %d, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">0</span>;<br /><span style="color: rgb(0,0,0)">}</span></p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">test_mouse</span>()<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">init_device</span>(<span style="color: rgb(0,0,0)">MOU_DEV</span>) <span style="color: rgb(102,102,102)">&lt;</span> <span style="color: rgb(102,102,102)">0</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">while</span>(<span style="color: rgb(102,102,102)">1</span>)<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">read</span>(<span style="color: rgb(0,0,0)">ts_fd</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(102,102,102)">&amp;</span><span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(170,34,255); font-weight: bold">sizeof</span>(<span style="color: rgb(0,0,0)">data</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span> (<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_KEY</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type = EV_KEY, code = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_LEFT</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_LEFT"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_RIGHT</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_RIGHT"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_MIDDLE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_MIDDLE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_SIDE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_SIDE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(187,68,68)">"Unkonw"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">else</span> <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_REL</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type = EV_ABS, code = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">REL_X</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_X"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">REL_Y</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_Y"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_WHEEL</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_WHEEL"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_PRESSURE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_PRESSURE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(187,68,68)">"Unkown"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">0</span>;<br /><span style="color: rgb(0,0,0)">}</span></p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">test_touch_screen</span>()<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">init_device</span>(<span style="color: rgb(0,0,0)">TOUS_DEV</span>) <span style="color: rgb(102,102,102)">&lt;</span> <span style="color: rgb(102,102,102)">0</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">while</span>(<span style="color: rgb(102,102,102)">1</span>)<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">read</span>(<span style="color: rgb(0,0,0)">ts_fd</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(102,102,102)">&amp;</span><span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(170,34,255); font-weight: bold">sizeof</span>(<span style="color: rgb(0,0,0)">data</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span> (<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_KEY</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type: EV_KEY, event = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_TOUCH</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"BTN_TOUCH"</span> <span style="color: rgb(102,102,102)">:</span> <span style="color: rgb(187,68,68)">"Unkown"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">else</span> <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_ABS</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type: EV_ABS, event = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_X</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_X"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_Y</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_Y"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_PRESSURE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_PRESSURE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(187,68,68)">"Unkown"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">0</span>;<br /><span style="color: rgb(0,0,0)">}</span></p>
<p><span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">test_touch_pancel</span>()<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">init_device</span>(<span style="color: rgb(0,0,0)">TOUP_DEV</span>) <span style="color: rgb(102,102,102)">&lt;</span> <span style="color: rgb(102,102,102)">0</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">-</span><span style="color: rgb(102,102,102)">1</span>;<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">while</span>(<span style="color: rgb(102,102,102)">1</span>)<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">read</span>(<span style="color: rgb(0,0,0)">ts_fd</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(102,102,102)">&amp;</span><span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(170,34,255); font-weight: bold">sizeof</span>(<span style="color: rgb(0,0,0)">data</span>));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">if</span> (<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_KEY</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type = EV_KEY, code = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_LEFT</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_LEFT"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_RIGHT</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_RIGHT"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_MIDDLE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_MIDDLE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">BTN_SIDE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_SIDE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(187,68,68)">"Unkonw"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">else</span> <span style="color: rgb(170,34,255); font-weight: bold">if</span>(<span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">type</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">EV_REL</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"&nbsp; type = EV_ABS, code = %s, value = %d</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">"</span><span style="color: rgb(0,0,0)">,</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">REL_X</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_X"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">REL_Y</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_Y"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_WHEEL</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"MOUSE_WHEEL"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">code</span> <span style="color: rgb(102,102,102)">==</span> <span style="color: rgb(0,0,0)">ABS_PRESSURE</span> <span style="color: rgb(102,102,102)">?</span> <span style="color: rgb(187,68,68)">"ABS_PRESSURE"</span> <span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(187,68,68)">"Unkown"</span><span style="color: rgb(0,0,0)">,</span> <span style="color: rgb(0,0,0)">data</span><span style="color: rgb(0,0,0)">.</span><span style="color: rgb(0,0,0)">value</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">0</span>;<br /><span style="color: rgb(0,0,0)">}</span></p>
<p><span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,160,0)">main</span>()<br /><span style="color: rgb(0,0,0)">{</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">static</span> <span style="color: rgb(0,187,0); font-weight: bold">int</span> <span style="color: rgb(0,0,0)">i</span>;<br /><span style="color: rgb(160,160,0)">select:</span>&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"Please select device:</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">0.KeyBoard</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">1.Mouse</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">2.TouchScreen</span><span style="color: rgb(187,102,34); font-weight: bold">\n</span><span style="color: rgb(187,68,68)">3.TouchPanel</span><span style="color: rgb(187,102,34); font-weight: bold">\n\Your choice is:</span><span style="color: rgb(187,68,68)">"</span>);<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">scanf</span>(<span style="color: rgb(187,68,68)">"%d"</span><span style="color: rgb(0,0,0)">,</span><span style="color: rgb(102,102,102)">&amp;</span><span style="color: rgb(0,0,0)">i</span>);<br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">switch</span>(<span style="color: rgb(0,0,0)">i</span><span style="color: rgb(0,0,0)">){</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">case</span> <span style="color: rgb(102,102,102)">0</span><span style="color: rgb(0,0,0)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">test_key</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">case</span> <span style="color: rgb(102,102,102)">1</span><span style="color: rgb(0,0,0)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">test_mouse</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">case</span> <span style="color: rgb(102,102,102)">2</span><span style="color: rgb(0,0,0)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">test_touch_screen</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">case</span> <span style="color: rgb(102,102,102)">3</span><span style="color: rgb(0,0,0)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">test_touch_pancel</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">default</span><span style="color: rgb(102,102,102)">:</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">printf</span>(<span style="color: rgb(187,68,68)">"Wrong device, Please select again!</span><span style="color: rgb(187,102,34); font-weight: bold">\n\n</span><span style="color: rgb(187,68,68)">"</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">break</span>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(0,0,0)">}</span><br />&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">goto</span> <span style="color: rgb(0,0,0)">select</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: rgb(170,34,255); font-weight: bold">return</span> <span style="color: rgb(102,102,102)">0</span>;<br /><span style="color: rgb(0,0,0)">}</span></div>
<p>原文出处：<a href="http://zhougaofeng.ixiezi.com/2009/12/23/inputtest/">http://zhougaofeng.ixiezi.com/2009/12/23/inputtest/</a></p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/android-x86-donut-r2" title="Android-x86 1.6-r2 釋出">Android-x86 1.6-r2 釋出</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/android-x86-20-eclair-release" title="Android-x86-2.0-eclair出pub-test版了">Android-x86-2.0-eclair出pub-test版了</a></li><li><a href="http://wangliping.net/eclair-virtuebox-boot" title="Eclair已经在VirtualBox上跑起来了">Eclair已经在VirtualBox上跑起来了</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Linux内存信息查看相关</title>
		<link>http://wangliping.net/linux_mem_info_watch</link>
		<comments>http://wangliping.net/linux_mem_info_watch#comments</comments>
		<pubDate>Wed, 25 Nov 2009 08:13:52 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[buffer]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://wangliping.net/linux_mem_info_watch</guid>
		<description><![CDATA[free 命令相对于top 提供了更简洁的查看系统内存使用情况： 

　　$ free
　　　total used free shared buffers cachedMem: 

　　　255268 238332 16936 0 85540 126384
　　　-/+ buffers/cache: 26408 228860Swap: 265000 0 265000]]></description>
			<content:encoded><![CDATA[<p>free 命令相对于top 提供了更简洁的查看系统内存使用情况：
<p>　　$ free<br />　　　total used free shared buffers cachedMem:
<p>　　　255268 238332 16936 0 85540 126384<br />　　　-/+ buffers/cache: 26408 228860Swap: 265000 0 265000
<p>　　Mem：表示物理内存统计</p>
<p>　　-/+ buffers/cached：表示物理内存的缓存统计</p>
<p><span id="more-516"></span>
<p>　　Swap：表示硬盘上交换分区的使用情况，这里我们不去关心。 </p>
<p>　　系统的总物理内存：255268Kb（256M），但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb，它仅代表未被分配的内存。
<p>　　我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值，1、2 分别代表第一行和第二行的数据。
<p>　　total1：表示物理内存总量。
<p>　　used1：表示总计分配给缓存（包含buffers 与cache ）使用的数量，但其中可能部分缓存并未实际使用。
<p>　　free1：未被分配的内存。
<p>　　shared1：共享内存，一般系统不会用到，这里也不讨论。
<p>　　buffers1：系统分配但未被使用的buffers 数量。
<p>　　cached1：系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
<p>　　used2：实际使用的buffers 与cache 总量，也是实际使用的内存总量。
<p>　　free2：未被使用的buffers 与cache 和未被分配的内存之和，这就是系统当前实际可用内存。
<p>　　可以整理出如下等式：<br />　　total1 = used1 + free1total1 = used2 + free2used1 = buffers1 + cached1 + used2free2 = buffers1 + cached1 + free1
<p>　　<strong>buffer 与cache 的区别</strong></p>
<blockquote><p>　　A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use. </p>
</blockquote>
<p>　　更详细的解释参考：Difference Between Buffer and Cache
<p>　　对于共享内存（Shared memory），主要用于在UNIX 环境下不同进程之间共享数据，是进程间通信的一种方法，一般的应用程序不会申请使用共享内存，笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣， 请参考：What is Shared Memory?
<p>　　<strong>Cache</strong>：高速缓存，是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存，CPU直接从内存中存取数据要等待一 定时间周期，Cache中保存着CPU刚用过或循环使用的一部分数据，当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待 时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache)，L1 Cache集成在CPU内部，L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部，常见的容量有256KB或512KB L2 Cache。 </p>
<p>　　<strong>Buffer</strong>：缓冲区，一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区，可以使进程之间的相互等待变少，从而使从速度慢的设备读入数据时，速度快的设备的操作进程不发生间断。
<p>　　Free中的buffer和cache：（它们都是占用内存）：
<p>　　buffer : 作为buffer cache的内存，是块设备的读写缓冲区
<p>　　cache: 作为page cache的内存, 文件系统的cache
<p>　　参考：<a title="http://zhougaofeng.ixiezi.com/2009/11/25/linux%e4%b8%ad%e5%86%85%e5%ad%98%e4%bf%a1%e6%81%af/" href="http://zhougaofeng.ixiezi.com/2009/11/25/linux%e4%b8%ad%e5%86%85%e5%ad%98%e4%bf%a1%e6%81%af/">http://zhougaofeng.ixiezi.com/2009/11/25/linux%e4%b8%ad%e5%86%85%e5%ad%98%e4%bf%a1%e6%81%af/</a></p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/how_to_add_swap_method" title="Linux中增加Swap的方法">Linux中增加Swap的方法</a></li><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/make_linux_kernel_update" title="编译Linux内核教程（Ubuntu为例）">编译Linux内核教程（Ubuntu为例）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/linux_mem_info_watch/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux中增加Swap的方法</title>
		<link>http://wangliping.net/how_to_add_swap_method</link>
		<comments>http://wangliping.net/how_to_add_swap_method#comments</comments>
		<pubDate>Wed, 18 Nov 2009 08:31:28 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[swap]]></category>
		<category><![CDATA[内存]]></category>

		<guid isPermaLink="false">http://wangliping.net/how_to_add_swap_method</guid>
		<description><![CDATA[从网上总结的方法，步骤如下所示，请在root权限下操作命令：

1、检查当前的分区情况（使用free －m或cat /proc/swaps ）：

# free –m

通过这个命令，你可以得到mem和swap以及buffer/cache的信息。

2、增加交换分区文件及大小：
判定新交换文件的大小，将大小乘以1024来判定块的大小。例如，大小为64MB的交换文件的块大小为65536,在 shell 提示下以根用户身份键入以下命令，其中的 count 等于想要的块大小。

 # dd if=/dev/zero of=/home/swap bs=1024 count=1024000]]></description>
			<content:encoded><![CDATA[<p>从网上总结的方法，步骤如下所示，请在root权限下操作命令：</p>
<p><strong>1、检查当前的分区情况（使用free －m或cat /proc/swaps ）：</strong></p>
<blockquote><p># free –m</p></blockquote>
<p>通过这个命令，你可以得到mem和swap以及buffer/cache的信息。</p>
<p><strong>2、增加交换分区文件及大小：</strong><br />
判定新交换文件的大小，将大小乘以1024来判定块的大小。例如，大小为64MB的交换文件的块大小为65536,在 shell 提示下以根用户身份键入以下命令，其中的 count 等于想要的块大小。<span id="more-475"></span></p>
<blockquote><p># dd if=/dev/zero of=/home/swap bs=1024 count=1024000</p></blockquote>
<p>其中/home/swap是你要创建分区文件的位置，可以根据自己的情况考虑。因为是分配的连续空间，所以要考虑清楚。</p>
<p><strong>3、使用以下命令来设置交换文件：</strong></p>
<blockquote><p># mkswap /home/swap</p></blockquote>
<p>这个命令会得到新增加的swap信息，但此时还未启用，所以得启用。</p>
<p><strong>4、启用交换分区文件：<br />
</strong>要立即启用交换文件而不是在引导时自动启用，使用以下命令：</p>
<blockquote><p># swapon /home/swap</p></blockquote>
<p><strong>5、检查增加后的交换情况</strong>（如果你只是在尝试，增加了很小一块，你可以用top命令#top，同理，第一步也可以用这个命令查看。）：</p>
<blockquote><p># free –m</p></blockquote>
<p>看是不是增加了啊？呵呵～不过这个只是临时增加的，如果你重启后还想利用这个新增的，还得走下一步。如果不要，则可以忽略下一步。</p>
<p><strong>6、要在引导时启用</strong>，编辑 /etc/fstab 文件来包含以下行</p>
<blockquote><p>/home/swap               swap                    swap    defaults        0 0</p></blockquote>
<blockquote><p>[root@db2 root]# vi /etc/fstab# &lt;file system&gt; &lt;mount point&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt;<br />
proc            /proc           proc    defaults        0       0<br />
# / was on /dev/sda1 during installation<br />
UUID=050d4e1f-eb58-4b5b-8902-d65999fa6bb3 /               ext3    relatime,errors=remount-ro 0       1<br />
# /home was on /dev/sda8 during installation<br />
UUID=c8864358-d848-43ec-94c0-a9ee3e01f16d /home           ext3    relatime        0       2<br />
swap was on /dev/sda7 during installation<br />
UUID=49a2aed9-e720-4d57-a8a4-61f726b9c8c2 none            swap    sw              0       0<br />
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0<br />
        /home/swap               swap                    swap    defaults        0 0  </p></blockquote>
<p>系统下次引导时，它就会启用新建的交换文件</p>
<p><strong>7、如果想停用，就用swapoff</strong></p>
<blockquote><p># swapoff /home/swap</p></blockquote>
<p>这样你就可以停用这个swap了，可以用free -m或者top来检查。</p>
<p><strong>8、最后提一点，</strong>如果你不小心停用了某个swap分区，譬如说你想测试一下，就像我把/dev/sda7给停用了，但是你事实上又不想停用，怎么办？重复两条命令就可以了：</p>
<blockquote><p># mkswap /dev/sda7<br />
# swapon /dev/sda7</p></blockquote>
<p><strong>9、还有就是显示swap文件，可以在/proc/swaps里查看或者直接使用命令# swapon -s：</strong></p>
<blockquote><p># cat /proc/swaps</p></blockquote>
<blockquote><p># swapon -s</p></blockquote>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/make_linux_kernel_update" title="编译Linux内核教程（Ubuntu为例）">编译Linux内核教程（Ubuntu为例）</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/how_to_add_swap_method/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>编译Linux内核教程（Ubuntu为例）</title>
		<link>http://wangliping.net/make_linux_kernel_update</link>
		<comments>http://wangliping.net/make_linux_kernel_update#comments</comments>
		<pubDate>Mon, 16 Nov 2009 08:22:22 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[内核]]></category>
		<category><![CDATA[升级]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://wangliping.net/?p=460</guid>
		<description><![CDATA[　　有时候觉得Linux内核版本太低，想升级一下，或者想研究一下，我们就需要以下方法了。顺带说，Linux的开放性在此也体现出来了优越性，呵呵～

　　以下先介绍简单快捷的方法，根据各大教程总结出来的。步骤：

　　一、到http://kernel.org下载最新的kernel（或者你想要的版本，以下以linux-2.6.31.6为例说明，并假设在root权限，否则加sudo）。
　　二、拷贝到/usr/src目录下，$ cp ~/linux-2.6.31.6.tar.bz2 /usr/src。（其实在任意目录都可以，只是在这个目录看起来正规一点，呵呵～）
　　三、到/usr/src目录下，$ cd /usr/src。解压kernel。$ tar jxf  linux-2.6.31.6.tar.bz2。（想了解jxf参数的意思，可以tar --help）。
　　四、编译config，最简单的方法就是将已有的config拷贝过来。查看/boot目录，cd到linux-2.6.31.6目录，$ cd linux-2.6.31.6。譬如我的，$ cp config--2.6.28-16-generic config。然后$make config。当然还有推荐$make menuconfig $make xconfig 可视化比较好，可以很直观，不过这两者都需要安装一些包，看你个人。make config用文字方式列出很多很多参数，你看着选择（后面转载文章详细列出参数）。]]></description>
			<content:encoded><![CDATA[<p>　　有时候觉得Linux内核版本太低，想升级一下，或者想研究一下，我们就需要以下方法了。顺带说，Linux的开放性在此也体现出来了优越性，呵呵～</p>
<p>　　总的来说，根据各大教程总结出来，在你解压的Kernel目录下执行以下步骤就完成了。</p>
<blockquote><p># make config<br />
# make bzImage<br />
# make modules<br />
# make modules_install<br />
# mkinitramfs -o yourinitrd.img 2.3.31.6(或mkinitrd yourinitrd.img)<br />
# make install</p></blockquote>
<p><span id="more-460"></span>　　以下简单说明一下上述方法：</p>
<p>　　一、到<a href="http://kernel.org">http://kernel.org</a>下载最新的kernel（或者你想要的版本，以下以linux-2.6.31.6为例说明，并假设在root权限，否则加sudo）。<br />
　　二、拷贝到/usr/src目录下，$ cp ~/linux-2.6.31.6.tar.bz2 /usr/src。（其实在任意目录都可以，只是在这个目录看起来正规一点，呵呵～）<br />
　　三、到/usr/src目录下，$ cd /usr/src。解压kernel。$ tar jxf  linux-2.6.31.6.tar.bz2。（想了解jxf参数的意思，可以tar --help）。<br />
　　四、编译config，最简单的方法就是将已有的config拷贝过来。查看/boot目录，cd到linux-2.6.31.6目录，$ cd linux-2.6.31.6。譬如我的，$ cp /boot/config--2.6.28-16-generic config。然后$make config。当然还有推荐$make menuconfig $make xconfig 可视化比较好，可以很直观，不过这两者都需要安装一些包，看你个人。make config用文字方式列出很多很多参数，你看着选择（后面转载文章详细列出参数）。当然还有两个比较简便的方法。$ make defconfig 就是利用默认的选项，据说Linus的i386机子就是这个配置，哈哈～$ make allyesconfig 就是将所有选项都选yes，这个编译要花的时间就很长很长了，4小时以上，当然得看你机子的配置了。<br />
　　五、清楚一些不要的东西，$ make clean。当然如果你是刚下载下来，从来没编译过的，可以忽略此步骤。<br />
　　六、$make bzImage。一般大于512K用这个，当然你说一定要用$make zImage我也没辙，不过还是推荐$ make bzImage吧。<br />
　　七、$ make modules。编译模块。<br />
　　八、$ make modules_install。安装模块。<br />
　　九、制作initrd.img文件。SCSI硬盘需要制作，IDE盘好像可以省略，我没试，因为自己的是SCSI。$ mkinitramfs -o initrd-newkernel.img 2.6.31.6。这个是在Ubuntu下的，因为Ubuntu下mkinitrd命令不可以用。至于参数可以自己用help（其实如果你敲错了，它自己就会出来提示，呵呵）<br />
　　十、$ make install。将上述的东西安装到/boot下，执行完此命令后，你就可以到/boot目录下看到System.map-2.6.31.6/vmlinuz-2.6.31.6/config-2.6.31.6。你如果看到以上文件，恭喜你，你编译成功了。记得手动把生成的initrd-newkernel.img也栲过来，想重新命名随你。<br />
　　十一、接下来就是编写menu了。有的是menu.lst，有的是grub.conf，看你的发行版本来，以Ubuntu为例，添加以下代码到原来的menu之后：</p>
<blockquote><p>title           Ubuntu new, kernel 2.6.31.6<br />
uuid            050d4e1f-eb58-4b5b-8902-d65999fa6bb3<br />
kernel          /boot/vmlinuz-2.6.31.6 root=UUID=050d4e1f-eb58-4b5b-8902-d65999fa6bb3 ro quiet splash<br />
initrd          /boot/initrd-newkernel.img.img</p></blockquote>
<p>　　上面uuid和root=后面的东西都是依照原来的menu画出来的，你可以参考自己的menu。</p>
<p>　　至此，系统编译完成，你可以reboot你的电脑了。$ reboot。重启后，选择你的系统进去，享受你的过程吧。利用$ uname -r查看你的版本号。</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/tar_ubuntu" title="使用tar命令备份Ubuntu系统">使用tar命令备份Ubuntu系统</a></li><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/make_linux_kernel_update/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux下git简单使用教程（以Android为例）</title>
		<link>http://wangliping.net/git</link>
		<comments>http://wangliping.net/git#comments</comments>
		<pubDate>Mon, 28 Sep 2009 01:55:00 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[教程]]></category>

		<guid isPermaLink="false">http://blog.wangliping.net/linux%e4%b8%8bgit%e7%ae%80%e5%8d%95%e4%bd%bf%e7%94%a8%e6%95%99%e7%a8%8b%ef%bc%88%e4%bb%a5android%e4%b8%ba%e4%be%8b%ef%bc%89/</guid>
		<description><![CDATA[<br />]]></description>
			<content:encoded><![CDATA[<p>在项目开发过程中，由于经常要修改文件然后共享发布，但我们只是单独改变，拷来拷去比较麻烦。现介绍一点简单的git命令用于我们的开发。</p>
<p>首先我们知道服务器IP是：10.66.3.200</p>
<p>我们当前最新的代码在机子的目录：/home/user/android-0916</p>
<p>如果我们仅仅想修改某一个工程，如Settings这个package，那么我们可以先从服务器上将其下载下来，命令：</p>
<p>$ git clone <a href="mailto:user@10.66.3.200:~/android-0916/packages/apps/Settings">user@10.66.3.200:~/android-0916/packages/apps/Settings</a></p>
<p>这个命令会将代码下载到你本地的当前工作目录下，包括.git文件夹。<span id="more-114"></span></p>
<p>在本地，进入Settings目录，你可以利用命令</p>
<p>$ git whatchanged</p>
<p>获得修改的信息，其信息格式一般为：</p>
<p>Commit 22XXXXXXXXXXXXXXX(一串字符)</p>
<p>……..</p>
<p>Commit 11XXXXXXXXXXXXXXXX</p>
<p>………</p>
<p>诸如这样的信息，它会列出哪些文件被修改过。当然你可能更想知道文件的哪些地方被修改过，那么diff命令就可以派上用场</p>
<p>如果直接是git diff，那么是与最近的一次commit进行比较，这就是为什么我们可以直接用git diff命令获得我们修改的代码（注意，前提是我们没有commit过）。</p>
<p>如果想知道更多的修改信息，我们需要用到以下命令：</p>
<p>$ git diff &lt;commit&gt;</p>
<p>如上面的信息，如果利用以下命令：</p>
<p>$ git diff 11XXXXXXXXXXXXXXXX</p>
<p>则可以获得与commit 11XXXXXXXXXXXX的不同信息，利用这个信息，我们就可以很容易地知道文件的哪些东西在哪一次被改变过，从而也使我们有目的地去看代码。</p>
<p>那么，我们修改了代码，同样要commit，这样才能将我们的代码加入到git下。当然commit之前我们需要add进去。还是以Settings为例，假如我们修改了Settings/src/com/android/settings/EthernetSettings.java这个文件，并且还添加了Settings/src/com/android/settings/Ethernet/EthernetProxyConfigDialog.java这个文件，然后准备发布出去，那么我们现在要做的就是如下的工作：</p>
<p>首先，你可以利用$ git status获得当前的git里的信息，它会告知你以上两个文件修改过，但还没有add(或是update)进去，因此我们需要add进去，命令如下：</p>
<p>$ git add –A</p>
<p>这个命令将全部修改（添加）过的文件add进去，当然你也可以单独add，如：</p>
<p>$git add src/com/android/settings/EthernetSettings.java</p>
<p>此时你虽然将其add进去了，但是你需要注意的是仅仅刷新了git，而没有将你修改的内容添加进去，此时，你紧接着需要commit，将内容commit进去，命令：</p>
<p>$git commit –m &lt;commit&gt;</p>
<p>如可以利用下面的命令</p>
<p>$git commit –m “Enable ehternet proxy”</p>
<p>这样你就将你刚刚add进去的文件进行了一次commit，如果你此时利用$ git status获得信息，你在最上面的一行可以看到你自己的commit</p>
<p>进行了commit之后，你就可以与远程的工程进行合并了，命令</p>
<p>$ git push <a href="mailto:user@10.66.3.200:~/android-0916/packages/apps/Settings">user@10.66.3.200:~/android-0916/packages/apps/Settings</a></p>
<p>它会将你修改过的内容与原工程进行合并，并且将你的commit加进去，至此完成了代码的修改和合并。</p>
<p>不过，初步试的结果是这个远程push还不行，不知道是不是哪里出问题了。于是可以先将代码ssh上去再进行合并，如下进行：</p>
<p>Scp –r . <a href="mailto:user@10.66.3.200">user@10.66.3.200</a>:. // 将自己的目录拷贝到服务器的home/user下</p>
<p>Ssh <a href="mailto:user@10.66.3.200">user@10.66.3.200</a> // 登录到服务器</p>
<p>Cd android-0916/packages/apps/Settings // 进入到服务器原目录</p>
<p>Git pull ~/Settings // 将修改后的与原目录合并</p>
<p>以上方法仅是因为远程push暂时好像不能用的才不得已的做法，与git push等效。</p>
<p>那么我们往往又会出现将代码修改得面目全非，需要恢复以前的代码。这样我们就要借助git reset了</p>
<p>刚才我们利用git whatchanged可以得到commit，从而知道修改的信息，那么利用</p>
<p>$git reset &lt;commit&gt;</p>
<p>就可以恢复到你所需要的commit，如：</p>
<p>$git reset 11XXXXXXXXXXXX</p>
<p>就恢复到commit为11XXXXXXXXXXXXXXXXXX的那个修改了。但是我们得知道git reset 默认不修改代码，即commit恢复了，代码并没有改变。</p>
<p>最后可以利用：</p>
<p>$git checkout –f</p>
<p>恢复代码，至此代码可以恢复到最近的commit</p>
<p>因此，如果我们自己没有进行commit的话，直接利用$git checkout –f 就可以恢复到我们下载时的代码，因为那个commit是最近的一次commit。</p>
<p>总结来说，用到的命令有：</p>
<p>Git clone  ，  git status， git whatchanged ，   git diff， git add，  git commit， git push，  git pull，  git reset，  git checkout</p>
<p>即可完成现有的一些工作。</p>
<p>另：</p>
<p>在合并时，最好能先检查一下代码，因为有可能两个人在修改同一个文件，如果修改的是同一个地方，则会出现合并错误（同一文件的不同地方不会出错）。</p>
<p>如果万一你没检查就合并并且出现错误，利用git reset恢复一下，再进行检查后合并。</p>
<p>为了得到带commit信息的patch文件，我们在获得patch时可按以下步骤：<br />
1. 进入到当前目录，改变你的用户名和邮件<br />
   $ git config user.email "your name"<br />
   $ git config user.email "your email"<br />
2. 添加并提交你的修改，这个跟上次git简单使用方法一样<br />
   $ git add xxx.java<br />
   $ git commit -m "what you want to describe"<br />
3. 获得patch<br />
   $ git log  (此处是为了获得你提交修改的上一级commit信息，如2xxxxxx)<br />
   $ git format-patch 2xxxxxxx  (获得带有commit信息的patch文件)<br />
4. patch文件默认在你当前目录下，可以自行查找并修改文件名。<br />
5. 将上述patch文件打到自己的目录下<br />
   $ git am xxx.patch (这样你的目录下就有了commit信息)<br />
6. 另：原来打patch使用patch -p1 &lt; xx.patch 较为复杂，其实，在git下有<br />
   $ git apply xx.patch  (可以打patch，不带commit信息)<br />
   再另：上次写的git whatchanged可以直接用git log代替，获得修改信息。</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/git-clone-spec-branch" title="git-clone指定branch">git-clone指定branch</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/android-add-shortcut" title="Android添加桌面快捷图标">Android添加桌面快捷图标</a></li><li><a href="http://wangliping.net/android-ksoap2-weather" title="Android利用ksoap2写天气预报应用">Android利用ksoap2写天气预报应用</a></li><li><a href="http://wangliping.net/android-buttonbar-bottom" title="Android将ButtonBar放在屏幕底部">Android将ButtonBar放在屏幕底部</a></li><li><a href="http://wangliping.net/android-tab-bottom" title="Android将TAB选项卡放在屏幕底部">Android将TAB选项卡放在屏幕底部</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/git/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用tar命令备份Ubuntu系统</title>
		<link>http://wangliping.net/tar_ubuntu</link>
		<comments>http://wangliping.net/tar_ubuntu#comments</comments>
		<pubDate>Sun, 27 Sep 2009 03:28:00 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[备份]]></category>
		<category><![CDATA[系统]]></category>

		<guid isPermaLink="false">http://blog.wangliping.net/%e4%bd%bf%e7%94%a8tar%e5%91%bd%e4%bb%a4%e5%a4%87%e4%bb%bdubuntu%e7%b3%bb%e7%bb%9f/</guid>
		<description><![CDATA[使用过Windows的用户都很熟悉DHOST工具，GHOST备份WINDOWS的系统是比较麻烦的，你要先重启计算到DOS模式，然后运行GHOST程序，再选择备份分区，备份为gho文件。然后再启动你的机器到WINDOWS系统了。如果你没有用过LINUX的话，那你一定认为这样做是天经地义的事。那么，如果你用了LINUX的系统的话，你肯定要说，WINDOWS系统就是给人没事找事干的。]]></description>
			<content:encoded><![CDATA[<p>使用过Windows的用户都很熟悉DHOST工具，GHOST备份WINDOWS的系统是比较麻烦的，你要先重启计算到DOS模式，然后运行GHOST程序，再选择备份分区，备份为gho文件。然后再启动你的机器到WINDOWS系统了。如果你没有用过LINUX的话，那你一定认为这样做是天经地义的事。那么，如果你用了<a href="http://www.redbots.cn/category/linux" target="_blank">LINUX</a>的系统的话，你肯定要说，WINDOWS系统就是给人没事找事干的。</p>
<p><strong>那么，你现在开始使用<a href="http://www.redbots.cn/category/ubuntu" target="_blank">Ubuntu</a>了，那么又该如何备份Ubuntu系统呢？方法很多，备份Ubuntu其实很简单，LINUX系统不需要你重新启动系统就可以对系统文件进行读写操作，所以，我们也就可以在系统正在运行中去备份系统了。也不需要什么GHOST软件，一个小小的tar压缩就可以备份系统了。备份系统前，我们要先进行清理工作，把回收站里的垃圾清理掉吧。<span id="more-115"></span></strong></p>
<p>    <strong>下面是备份Ubuntu系统的方法：</strong></p>
<p>    首先打开终端，输入以下命令：</p>
<p>    1、成为根用户：   sudo su<br />
    2、转到根目录：   cd /</p>
<p>    然後，下面就是我用来备份我的系统的完整的命令：</p>
<p>    tar -cvpzf /media/sda7/backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/mnt –exclude=/sys –exclude=/media /</p>
<p>    接着，让我们稍微解释一下：</p>
<p>         tar 是用来备份的程序<br />
         c - 新建一个备份文档<br />
         v - 详细模式， tar程序将在屏幕上实时输出所有信息。<br />
         p - 保存许可，并应用到所有文件。<br />
         z - 采用‘gzip’压缩备份文件，以减小备份文件体积。<br />
         f - 说明备份文件存放的路径， /media/sda7/backup.tgz 是本例子中备份文件名。这个备份文件备份的位置是其它分区，也就是原来的WIN分区中。因为我的根目录的空间不足，所以只有备份在其它的地方了。</p>
<p>    来看看我们想要包含的目录。我们不想备份所有的东西，因为有些目录是没有多大用处的。确认你不想包含的文件，否则您会得到一个很奇怪的结果。您也不必备份/mnt 目录下的东西，除非您有其他分区挂在它下面或者你坚持要备份。您还必须确保没有任何资源挂在 /media目录下(比如，任何CD或者移动存储介质).否则，剔除/media。</p>
<p>    * 最後一个参数是我们想要保存的目录. 我们想要保存所有的东西，使用 / 作为根目录。</p>
<p>    然后就是将来还原系统备份了：</p>
<p>    警告: 求您了，看在上帝的份上，千万小心这儿。如果您不明白您正在干什么，那很有可能复盖掉您重要的数据，所以请特别小心！</p>
<p>    好了，继续我们前面所讲的例子，我们在其它分区（sda7）目录下创建了一个名为backup.tgz的备份文件。</p>
<p>    Linux中美妙的事情之一就是在系统正在运行的情况下可以进行还原操作，而不需要启动光盘或者其他任何乱七八糟的东西。当然，如果您的系统已经崩溃，那您必须选择使用live CD，但是结果还是一样。你甚至可以在Linux系统正在运行的时候，移除它里面所有文件。可是我不告诉你那个命令！</p>
<p>    好了，言归正传。这是我要用的命令，如果你的备份不是在和我一样的位置的位置的话，那请相应地修改/media/sda7这一点：</p>
<p>    tar -xvpzf /media/sda7/backup.tgz -C /</p>
<p>    如果您使用的是bz2压缩的：</p>
<p>    tar -xvpjf /media/sda7/backup.tar.bz2 -C /</p>
<p>    参数x是告诉tar程序解压缩备份文件。 -C 参数是指定tar程序解压缩到的目录。</p>
<p>    最后请记住，进入纯命令模式下执行以上操作，如果你在桌面上用命令提示符备份后会有个错误：tar:error exit delayed from previous error</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/make_linux_kernel_update" title="编译Linux内核教程（Ubuntu为例）">编译Linux内核教程（Ubuntu为例）</a></li><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/tar_ubuntu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux如何mount Usb盘</title>
		<link>http://wangliping.net/linux_mount_usb</link>
		<comments>http://wangliping.net/linux_mount_usb#comments</comments>
		<pubDate>Thu, 17 Sep 2009 07:23:00 +0000</pubDate>
		<dc:creator>转烛</dc:creator>
				<category><![CDATA[编程技术]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mount]]></category>
		<category><![CDATA[usb]]></category>

		<guid isPermaLink="false">http://blog.wangliping.net/linux%e5%a6%82%e4%bd%95mount-usb%e7%9b%98/</guid>
		<description><![CDATA[<br />]]></description>
			<content:encoded><![CDATA[<p>看看U盘是那个设备，然后mount -t vfat /dev/查到的磁盘 /你的某个目录</p>
<p>一</p>
<p>Linux不像Windows一样，接上新硬件后可以自动识别，在Linux下无法自动识别新硬件的，需要手动去识别。USB移动存储设备通常被识别为sda1，具体可以通过fdisk -l命令查询。</p>
<p>在使用U盘前，我们先要为外挂点新建一个子目录，一般外挂点的子目录都是建立在/mnt里面的，我们也建在那里，当然也可以建在/目录下，名字可以自己定，我们就取名为usb，终端下的命令如下： <span id="more-118"></span></p>
<p>mkdir /mnt/usb</p>
<p>然后我们就可以接上我的U盘了，然后在终端下输入命令并击Enter键即可：</p>
<p>mount /dev/sda1 /mnt/usb</p>
<p>在Windows下当我们用完U盘后，在我们取下U盘前我们先要删除，同样在Linux下我们也要删除挂起点，方法是：</p>
<p>umount /dev/sda1 /mnt/usb 或 umount /dev/sda1</p>
<p>如果不把U盘给umount掉，那样很容易造成数据的丢失。</p>
<p>二</p>
<p>把你的优盘插上去，打开系统终端，先看看有没有认出来<br />
＃lsusb</p>
<p>如果认出来了，你会看到usb什么的设备的</p>
<p>接着进入mnt这个目录<br />
＃cd /mnt</p>
<p>新建一个目录，比如：usbdisk<br />
＃mkdir usbdisk</p>
<p>在运行命令<br />
#mount -t vfat -o iocharset=cp936 /dev/sda1 /mnt/usbdiak<br />
(这个是在一行里的哦，－t 和 －o是两个参数，sda1是你的优盘盘符)</p>
<p>这样在进入/mnt/usbdisk这个目录里去看看有没有东西</p>
<p>要卸载的话<br />
＃umount /dev/sda1<br />
就可以了</p>
<p>三</p>
<p>基本是不用配置.<br />
和windows系统下一样使用.<br />
所不同的是在linux下需要挂载一下.<br />
在这里我们先建立一个目录，用来将U盘挂载到该目录下：mkdir /mnt/usb</p>
<p>四</p>
<p>red hat linux9 GNOME桌面环境下怎样用U盘</p>
<p>方案一：<br />
Linux不像Windows一样，接上新硬件后可以自动识别，在Linux下无法自动识别新硬件的，需要手动去识别。USB移动存储设备通常被识别为sda1，具体可以通过fdisk -l命令查询。</p>
<p>在使用U盘前，我们先要为外挂点新建一个子目录，一般外挂点的子目录都是建立在/mnt里面的，我们也建在那里，当然也可以建在/目录下，名字可以自己定，我们就取名为usb，终端下的命令如下：</p>
<p>mkdir /mnt/usb</p>
<p>然后我们就可以接上我的U盘了，然后在终端下输入命令并击Enter键即可：</p>
<p>mount /dev/sda1 /mnt/usb</p>
<p>在Windows下当我们用完U盘后，在我们取下U盘前我们先要删除，同样在Linux下我们也要删除挂起点，方法是：</p>
<p>umount /dev/sda1 /mnt/usb 或 umount /dev/sda1</p>
<p>如果不把U盘给umount掉，那样很容易造成数据的丢失</p>
<p>方案二：<br />
USB的支持关键在于驱动，没有驱动设备时mount执行是肯定不成的。我在Red Hat里使用U盘的通用方法如下，屡试不爽</p>
<p>1. 先别插U盘，/sbin/lsmod看是否有usb-storage。如果没有的话：</p>
<p>cd /lib/modules/2.4.20-8/kernel/drivers/usb</p>
<p>for v in *.o storage/*.o ; do /sbin/insmod $v ; done</p>
<p>2. 这里再/sbin/lsmod，应该有usbcore、usb-ohci（或usb-uhci，根据主板芯片组而不同）、usb-storage、scsi_mod等。其中usb-storage的状态应该为</p>
<p>（unused）。</p>
<p>3. 插入U盘，不停的/sbin/lsmod，这期间usb-storage的状态应为Initializing，持续时间大约半分钟，其实就相当于Windows在右下角不停的弹汽球:)</p>
<p>4. 初始化结束后, /sbin/fdisk -l，应该能看到/dev/sda1设备。这时，执行</p>
<p>mount /dev/sda1 /mnt/udisk 才能成功。如果是MSDOS格式，又想看到中文，可以</p>
<p>mount -t vfat /dev/sda1 /mnt/udisk -o iocharset=gb2312。</p>
<p>(为方便可以/etc/fstab加一行，以后就可以 mount /mnt/udisk就行了）。</p>
<p>5. 奇怪的是有时候fdisk是看不到sda1，但是也能mount上</p>
<p>使用以上步骤挂U盘基本上可说是“万全”了。台式机、笔记本、VMware都一样。</p>
<p>mkdir /mnt/usb</p>
<p>mount /dev/sda1 /mnt/usb</p>
<p>笔记本上安装linux用法和台式机一样</p>
<p>ps:</p>
<p>首先要检查lsmod|grep usb-storage 这是支持USB的模块。如果没有的话,是无法操作USB接口的设备的。</p>
<p>如没有的话,可以手功modprobe usb-storage,一般查看U盘可以用fdisk -l可以很清楚的看到这个硬件的设备名,比猜测硬件名要准确多了.<br />
这样就在mnt下建立了一个叫做usb的文件夹。<br />
现在应该挂载了：mount -t -vfat /dev/sda1 /mnt/usb<br />
以上语句便将u盘挂载到了usb文件夹中。其中的-t -vfat是您u盘的分区格式。</p>
<p>五</p>
<p>mount是挂载usb的命令，只是后面被挂载的对象没写对。而且挂载对象不存在<br />
正确做法如下：</p>
<p>插好usb之后<br />
先用disk -l命令看一下你的usb设备名称是什么，列出的表格里面有fat格式的就是你的usb设备名字，可能是sda1，或者sda2什么的<br />
假设是sda1的话，就<br />
mount -t vfat /dev/sda1（注意这里是你usb在linux设备名） /mnt/</p>
<p>就可以了。</p>
<p>然后进入mnt目录就是你usb内容了。</p>
<p><span style="color: #ff0000">以下是脚本</span></p>
<p>通常情况下，U盘设备应该是 /dev/sda1， 但是，有时候先后使用两个不同的U盘时，后面插入的一个是 /dev/sdb1，所以，使用了 fdisk -l | grep sd[b-z]1 | awk '{print $1}' 来取得它的设备名。代码只能mount 一个U盘，因为我基本上不会同时插入两个U盘，有这一需求的朋友可以自己修改。</p>
<p>#! /bin/sh<br />
#<br />
# Mount/Unmount a USB disk.<br />
#<br />
# Mount:<br />
#    We try to mount /dev/sda1 first, if failed, search /dev/sdb1, /dev/sdc1 ...,<br />
#    and try to mount the 1st one we found.<br />
#</p>
<p>MOUNT_DIR=/mnt/usb<br />
MOUNT_DEV=/dev/sda1</p>
<p>mount | grep $MOUNT_DIR</p>
<p>if [ "$?" = "0" ]<br />
then</p>
<p>    # Kill all process locked the USB disk<br />
    fuser -m -v -k -i $MOUNT_DIR</p>
<p>    umount $MOUNT_DIR<br />
    if [ "$?" = "0" ]<br />
    then<br />
        echo USB disk at $MOUNT_DIR has been unmounted<br />
    else<br />
        echo Can not unmount $MOUNT_DIR<br />
    fi</p>
<p>else<br />
    mount -t vfat /dev/sda1 $MOUNT_DIR -o codepage=936,iocharset=cp936 2&gt;/dev/null</p>
<p>    if [ "$?" = "0" ]<br />
    then<br />
        echo USB disk $MOUNT_DEV has been mounted at $MOUNT_DIR<br />
    else</p>
<p>        #<br />
        # Search all USB disk devices, and mount the first one<br />
        #<br />
        for MOUNT_DEV in $(fdisk -l | grep sd[b-z]1 | awk '{print $1}')<br />
        do<br />
            if [ "$?" = "0" ]<br />
            then<br />
                mount -t vfat $MOUNT_DEV $MOUNT_DIR -o codepage=936,iocharset=cp936 2&gt;/dev/null<br />
                if [ "$?" = "0" ]<br />
                then<br />
                    echo USB disk $MOUNT_DEV has been mounted at $MOUNT_DIR<br />
                    exit 0<br />
                fi<br />
            fi<br />
        done</p>
<p>        echo Can not mount $MOUNT_DEV to $MOUNT_DIR</p>
<p>    fi</p>
<p>fi</p>
<p>exit 0</p>
<p>注意：如果U盘是在Windows下格式化的，则上面可能没有分区，所以，U盘设备是/dev/sda (而不是/dev/sda1)，则上面的脚本不合适，需要修改。</p>
<h3  class="related_post_title">你可能也感兴趣的文章：</h3><ul class="related_post"><li><a href="http://wangliping.net/how-to-use-fdisk-in-linux" title="实例解说 fdisk 使用方法">实例解说 fdisk 使用方法</a></li><li><a href="http://wangliping.net/c-change-file-permission" title="C语言查看和更改文件的权限">C语言查看和更改文件的权限</a></li><li><a href="http://wangliping.net/source-insight-see-source-code" title="Source-Insight-看大规模大工程源代码">Source-Insight-看大规模大工程源代码</a></li><li><a href="http://wangliping.net/linux-android-x86-test-keyboard-mouse-touch-screen" title="Linux下测试键盘鼠标触摸屏触摸板">Linux下测试键盘鼠标触摸屏触摸板</a></li><li><a href="http://wangliping.net/linux_mem_info_watch" title="Linux内存信息查看相关">Linux内存信息查看相关</a></li><li><a href="http://wangliping.net/how_to_add_swap_method" title="Linux中增加Swap的方法">Linux中增加Swap的方法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://wangliping.net/linux_mount_usb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
