﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-netldds-文章分类-操作系统</title><link>http://www.cnitblog.com/ldds/category/3654.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 19:30:03 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 19:30:03 GMT</pubDate><ttl>60</ttl><item><title>Linux操作系统内核编译详解</title><link>http://www.cnitblog.com/ldds/articles/16046.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sun, 27 Aug 2006 10:15:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16046.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16046.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16046.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16046.html</trackback:ping><description><![CDATA[
		<a href="http://www.yesky.com/458/1853958.shtml">http://www.yesky.com/458/1853958.shtml</a>
<img src ="http://www.cnitblog.com/ldds/aggbug/16046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-27 18:15 <a href="http://www.cnitblog.com/ldds/articles/16046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]linux指令大全(完整篇)</title><link>http://www.cnitblog.com/ldds/articles/16012.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sat, 26 Aug 2006 10:34:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16012.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16012.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16012.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16012.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">
						<span class="tpc_title">[转载]linux指令大全(完整篇)</span>
						<br />
				</span>
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">信息来源：猪头党乐园<br /><br />cat cd <br />chmod chown <br />cp cut <br /><br />名称：cat <br />使用权限：所有使用者 <br />使用方式：cat [-AbeEnstTuv] [--help] [--version] fileName <br />说明：把档案串连接后传到基本输出（萤幕或加 &gt; fileName 到另一个档案） <br />参数： <br />-n 或 --number 由 1 开始对所有输出的行数编号 <br />-b 或 --number-nonblank 和 -n 相似，只不过对于空白行不编号 <br />-s 或 --squeeze-blank 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br />-v 或 --show-nonprinting <br /><br />范例： <br />cat -n textfile1 &gt; textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 <br />cat -b textfile1 textfile2 &gt;&gt; textfile3 把 textfile1 和 textfile2 的档案内容加上行号（空白行不加）之后将内容附加到 textfile3 <br /><br />名称 : cd <br />使用权限 : 所有使用者 <br /><br />使用方式 : cd [dirName] <br /><br />说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略，则变换至使用者的 home directory (也就是刚 login 时所在的目录)。 <br /><br />另外，"~" 也表示为 home directory 的意思，"." 则是表示目前所在的目录，".." 则表示目前目录位置的上一层目录。 <br /><br />范例 : 跳到 /usr/bin/ : <br />cd /usr/bin <br /><br />跳到自己的 home directory : <br />cd ~ <br /><br />跳到目前目录的上上两层 : <br />cd ../.. <br /><br /><br /><br />指令名称 : chmod <br />使用权限 : 所有使用者 <br /><br />使用方式 : chmod [-cfvR] [--help] [--version] mode file... <br /><br />说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。 <br /><br />把计 : <br /><br />mode : 权限设定字串，格式如下 : [ugoa...][+-=][rwxX]...][,...]，其中u 表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是。 <br />+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 <br />r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br />-c : 若该档案权限确实已经更改，才显示其更改动作 <br />-f : 若该档案权限无法被更改也不要显示错误讯息 <br />-v : 显示权限变更的详细资料 <br />-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br />--help : 显示辅助说明 <br />--version : 显示版本 <br /><br />范例 :将档案 file1.txt 设为所有人皆可读取 : <br />chmod ugo+r file1.txt <br /><br />将档案 file1.txt 设为所有人皆可读取 : <br />chmod a+r file1.txt <br /><br />将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入 : <br />chmod ug+w,o-w file1.txt file2.txt <br /><br />将 ex1.py 设定为只有该档案拥有者可以执行 : <br />chmod u+x ex1.py <br /><br />将目前目录下的所有档案与子目录皆设为任何人可读取 : <br />chmod -R a+r * <br /><br />此外chmod也可以用数字来表示权限如 chmod 777 file <br />语法为：chmod abc file <br /><br />其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 <br /><br />r=4，w=2，x=1 <br />若要rwx属性则4+2+1=7； <br />若要rw-属性则4+2=6； <br />若要r-x属性则4+1=7。 <br /><br />范例： <br />chmod a=rwx file <br /><br />和 <br />chmod 777 file <br /><br />效果相同 <br />chmod ug=rwx,o=x file <br /><br />和 <br />chmod 771 file <br /><br />效果相同 <br /><br /><br /><br /><br /><br />若用chmod 4755 filename可使此程式具有root的权限 <br /><br /><br />指令名称 : chown <br />使用权限 : root <br /><br />使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... <br /><br />说明 : Linux/Unix 是多人多工作业系统，所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说，这个指令只有是由系统管理者(root)所使用，一般使用者没有权限可以改变别人的档案拥有者，也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 <br /><br />把计 : <br /><br />user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改，才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更，而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本 <br /><br />范例 : <br />将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : <br />chown jessie:users file1.txt <br /><br />将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : <br />chmod -R lamport:users * <br /><br /><br />名称：cp <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />cp [options] source dest <br />cp [options] source... directory <br /><br />说明：将一个档案拷贝至另一档案，或将数个档案拷贝至另一目录。 <br /><br />把计� <br /><br />-a 尽可能将档案状态、权限等资料都照原状予以复制。 <br />-r 若 source 中含有目录名，则将目录下之档案亦皆依序拷贝至目的地。 <br />-f 若目的地已经有相同档名的档案存在，则在复制前先予以删除再行复制。 <br />范例： <br />将档案 aaa 复制(已存在)，并命名为 bbb : <br />cp aaa bbb <br /><br />将所有的C语言程式拷贝至 Finished 子目录中 : <br />cp *.c Finished <br /><br /><br /><br />名称：cut <br /><br />使用权限：所有使用者 <br /><br />用法：cut -cnum1-num2 filename <br /><br />说明：显示每行从开头算起 num1 到 num2 的文字。 <br /><br />范例： <br /><br />shell&gt;&gt; cat example <br />test2 <br />this is test1 <br />shell&gt;&gt; cut -c0-6 example ## print 开头算起前 6 个字元 <br />test2 <br />this i <br /><br /><br />名称 : find <br />用法 : find <br />使用说明 : <br /><br />将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合，只有完全相符的才会被列出来。 <br /><br />find 根据下列规则判断 path 和 expression，在命令列上第一个 - ( ) , ! 之前的部份为 path，之后的是 expression。如果 path 是空字串则使用目前路径，如果 expression 是空字串则使用 -print 为预设 expression� <br /><br />expression 中可使用的选项有二三十个之多，在此只介绍最常用的部份。 <br /><br />-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案，避免列出其它档案系统中的档案 <br />-amin n : 在过去 n 分钟内被读取过 <br />-anewer file : 比档案 file 更晚被读取过的档案 <br />-atime n : 在过去 n 天过读取过的档案 <br />-cmin n : 在过去 n 分钟内被修改过 <br />-cnewer file :比档案 file 更新的档案 <br />-ctime n : 在过去 n 天过修改过的档案 <br />-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name <br />-ipath p, -path p : 路径名称符合 p 的档案，ipath 会忽略大小写 <br />-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写 <br />-size n : 档案大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。-type c : 档案类型是 c 的档案。 <br />d: 目录 <br />c: 字型装置档案 <br />b: 区块装置档案 <br />p: 具名贮列 <br />f: 一般档案 <br />l: 符号连结 <br />s: socket <br />-pid n : process id 是 n 的档案 <br /><br />你可以使用 ( ) 将运算式分隔，并使用下列运算。 <br />exp1 -and exp2 <br />! expr <br />-not expr <br />exp1 -or exp2 <br />exp1, exp2 <br />范例: <br />将目前目录及其子目录下所有延伸档名是 c 的档案列出来。 <br /># find . -name "*.c" <br /><br /><br />将目前目录其其下子目录中所有一般档案列出 <br /># find . -ftype f <br /><br /><br />将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 <br /># find . -ctime -20 <br /><br /><br /><br />名称：less <br /><br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />less [Option] filename <br /><br />说明： <br />less 的作用与 more 十分相似，都可以用来浏览文字档案的内容，不同的是 less 允许使用者往回卷动 <br />以浏览已经看过的部份，同时因为 less 并未在一开始就读入整个档案，因此在遇上大型档案的开启时，会比一般的文书编辑器(如 vi)来的快速。 <br /><br /><br />范例： <br /><br /><br />指令名称 : ln <br />使用权限 : 所有使用者 <br /><br />使用方式 : ln [options] source dist，其中 option 的格式为 : <br /><br />[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] <br />[--help] [--version] [--] <br />说明 : Linux/Unix 档案系统中，有所谓的连结(link)，我们可以将其视为档案的别名，而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link)，硬连结的意思是一个档案可以有多个名称，而软连结的方式则是产生一个特殊的档案，该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中，而软连结却可以跨越不同的档案系统。 <br />ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则由参数决定。 <br /><br />不论是硬连结或软链结都不会将原本的档案复制一份，只会占用非常少量的磁碟空间。 <br /><br /><br />-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时，将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本 <br />范例 : <br />将档案 yy 产生一个 symbolic link : zz <br />ln -s yy zz <br /><br />将档案 yy 产生一个 hard link : zz <br />ln yy xx <br /><br /><br /><br />名称：locate <br />使用权限：所有使用者 <br />使用方式： locate [-q] [-d ] [--database=] <br />locate [-r ] [--regexp=] <br />locate [-qv] [-o ] [--output=] <br />locate [-e ] [-f ] &lt;[-l ] [-c] <br />&lt;[-U ] [-u]&gt; <br />locate [-Vh] [--version] [--help] <br />说明： <br />locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库，之后当寻找时就只需查询这个资料库，而不必实际深入档案系统之中了。 <br /><br />在一般的 distribution 之中，资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用 <br /><br /># locate your_file_name <br /><br />的型式就可以了。 参数： <br />-u <br />-U <br /><br />建立资料库，-u 会由根目录开始，-U 则可以指定开始的位置。 <br /><br />-e <br /><br />将 <br />排除在寻找的范围之外。 <br /><br />-l <br />如果 是 1．则启动安全模式。在安全模式下，使用者不会看到权限无法看到的档案。这会始速度减慢，因为 locate 必须至实际的档案系统中取得档案的权限资料。 <br /><br />-f <br />将特定的档案系统排除在外，例如我们没有到理要把 proc 档案系统中的档案放在资料库中。 <br /><br />-q <br />安静模式，不会显示任何错误讯息。 <br /><br />-n <br />至多显示 个输出。 <br /><br />-r <br />使用正规运算式 做寻找的条件。 <br /><br />-o <br />指定资料库存的名称。 <br /><br />-d <br /><br />指定资料库的路径 <br /><br />-h <br />显示辅助讯息 <br /><br />-v <br />显示更多的讯息 <br /><br />-V <br />显示程式的版本讯息 范例： <br /><br />locate chdrv : 寻找所有叫 chdrv 的档案 <br />locate -n 100 a.out : 寻找所有叫 a.out 的档案，但最多只显示 100 个 <br />locate -u : 建立资料库 <br /><br /><br />名称 : ls <br />使用权限 : 所有使用者 <br /><br />使用方式 : ls [-alrtAFR] [name...] <br /><br />说明 : 显示指定工作目录下之内容（列出目前工作目录所含之档案及子目录)。 <br /><br /><br />-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档，不会列出) <br />-l 除档案名称外，亦将档案型态、权限、拥有者、档案大小等资讯详细列出 <br />-r 将档案以相反次序显示(原定依英文字母次序) <br />-t 将档案依建立时间之先后次序列出 <br />-A 同 -a ，但不列出 "." (目前目录) 及 ".." (父目录) <br />-F 在列出的档案名称后加一符号；例如可执行档则加 "*", 目录则加 "/" <br />-R 若目录下有档案，则以下之档案亦皆依序列出 <br /><br />范例： <br />列出目前工作目录下所有名称是 s 开头的档案，愈新的排愈后面 : <br />ls -ltr s* <br /><br />将 /bin 目录以下所有目录及档案详细资料列出 : <br />ls -lR /bin <br /><br />列出目前工作目录下所有档案及目录；目录于名称后加 "/", 可执行档于名称后加 "*" : <br />ls -AF <br /><br />名称：more <br />使用权限：所有使用者 <br />使用方式：more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] <br />说明：类似 cat ，不过会以一页一页的显示方便使用者逐页阅读，而最基本的指令就是按空白键（space）就往下一页显示，按 b 键就会往回（back）一页显示，而且还有搜寻字串的功能（与 vi 相似），使用中的说明文件，请按 h 。 <br />参数：-num 一次显示的行数 <br />-d 提示使用者，在画面下方显示 [Press space to continue, q to quit.] ，如果使用者按错键，则会显示 [Press h for instructions.] 而不是 哔 声 <br />-l 取消遇见特殊字元 ^L（送纸字元）时会暂停的功能 <br />-f 计算行数时，以实际上的行数，而非自动换行过后的行数（有些单行字数太长的会被扩展为两行或两行以上） <br />-p 不以卷动的方式显示每一页，而是先清除萤幕后再显示内容 <br />-c 跟 -p 相似，不同的是先显示内容再清除其他旧资料 <br />-s 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br />-u 不显示下引号 （根据环境变数 TERM 指定的 terminal 而有所不同） <br />+/ 在每个档案显示前搜寻该字串（pattern），然后从该字串之后开始显示 <br />+num 从第 num 行开始显示 <br />fileNames 欲显示内容的档案，可为复数个数 <br />范例： <br />more -s testfile 逐页显示 testfile 之档案内容，如有连续两行以上空白行则以一行空白行显示。 <br />more +20 testfile 从第 20 行开始显示 testfile 之档案内容。 <br /><br /><br />名称：mv <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />mv [options] source dest <br />mv [options] source... directory <br />说明：将一个档案移至另一档案，或将数个档案移至另一目录。 <br />参数：-i 若目的地已有同名档案，则先询问是否覆盖旧档。 <br /><br />范例： <br /><br />将档案 aaa 更名为 bbb : <br />mv aaa bbb <br /><br />将所有的C语言程式移至 Finished 子目录中 : <br />mv -i *.c <br /><br /><br /><br />名称：rm <br />使用权限：所有使用者 <br /><br />使用方式：rm [options] name... <br /><br />说明：删除档案及目录。 <br /><br />把计� <br /><br />-i 删除前逐一询问确认。 <br />-f 即使原档案属性设为唯读，亦直接删除，无需逐一确认。 <br />-r 将目录及以下之档案亦逐一删除。 <br />范例： <br />删除所有C语言程式档；删除前逐一询问确认 : <br />rm -i *.c <br /><br />将 Finished 子目录及子目录中所有档案删除 : <br />rm -r Finished <br /><br /><br /><br />名称：rmdir <br />使用权限：于目前目录有适当权限的所有使用者 <br /><br />使用方式： rmdir [-p] dirName <br /><br />说明： 删除空的目录。 <br /><br />参数： -p 是当子目录被删除后使它也成为空目录的话，则顺便一并删除。 <br /><br />范例： <br /><br />将工作目录下，名为 AAA 的子目录删除 : <br />rmdir AAA <br /><br />在工作目录下的 BBB 目录中，删除名为 Test 的子目录。若 Test 删除后，BBB 目录成为空目录，则 BBB 亦予删除。 <br />rmdir -p BBB/Test <br /><br /><br /><br />名称：split <br />使用权限：所有使用者 <br /><br />使用方式：split [OPTION] [INPUT [PREFIX] <br /><br />说明： <br /><br />将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案，其档名依序为 PREFIXaa, PREFIXab...；PREFIX 预设值为 `x。若没有 INPUT 档或为 `-，则从标准输入读进资料。 <br /><br />匡兜� <br /><br />-b, --bytes=SIZE <br /><br />SIZE 值为每一输出档案的大小，单位为 byte。 <br />-C, --line-bytes=SIZE <br /><br />每一输出档中，单行的最大 byte 数。 <br />-l, --lines=NUMBER <br /><br />NUMBER 值为每一输出档的列数大小。 <br />-NUMBER <br /><br />与 -l NUMBER 相同。 <br />--verbose <br /><br />于每个输出档被开启前，列印出侦错资讯到标准错误输出。 <br />--help <br /><br />显示辅助资讯然后离开。 <br />--version <br /><br />列出版本资讯然后离开。 <br />SIZE 可加入单位: b 代表 512， k 代表 1K， m 代表 1 Meg。 <br /><br />范例： <br /><br />PostgresSQL 大型资料库备份与回存： <br /><br />因 Postgres 允许表格大过你系统档案的最大容量，所以要将表格 dump 到单一的档案可能会有问题，使用 split进行档案分割。 <br /><br /><br />% pg_dump dbname | split -b 1m - filename.dump. <br /><br /><br /><br />重新载入 <br /><br /><br />% createdb dbname <br />% cat filename.dump.* | pgsql dbname <br /><br /><br /><br />名称：touch <br />使用权限：所有使用者 <br /><br />使用方式： <br />touch [-acfm] <br />[-r reference-file] [--file=reference-file] <br />[-t MMDDhhmm[CC]YY][.ss] <br />[-d time] [--date=time] [--time={atime,access,use,mtime,modify}] <br />[--no-create] [--help] [--version] <br />file1 [file2 ...] <br /><br /><br />说明： <br />touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。 <br /><br /><br />参数： <br />a 改变档案的读取时间记录。 <br />m 改变档案的修改时间记录。 <br />c 假如目的档案不存在，不会建立新的档案。与 --no-create 的效果一样。 <br />f 不使用，是为了与其他 unix 系统的相容性而保留。 <br />r 使用参考档的时间记录，与 --file 的效果一样。 <br />d 设定时间与日期，可以使用各种不同的格式。 <br />t 设定档案的时间记录，格式与 date 指令相同。 <br />--no-create 不会建立新档案。 <br />--help 列出指令格式。 <br />--version 列出版本讯息。 <br /><br /><br />范例： <br /><br /><br />最简单的使用方式，将档案的时候记录改为现在的时间。若档案不存在，系统会建立一个新的档案。 <br /><br />touch file <br />touch file1 file2 <br /><br />将 file 的时间记录改为 5 月 6 日 18 点 3 分，公元两千年。时间的格式可以参考 date 指令，至少需输入 MMDDHHmm ，就是月日时与分。 <br /><br />touch -c -t 05061803 file <br />touch -c -t 050618032000 file <br /><br />将 file 的时间记录改变成与 referencefile 一样。 <br /><br />touch -r referencefile file <br /><br />将 file 的时间记录改成 5 月 6 日 18 点 3 分，公元两千年。时间可以使用 am, pm 或是 24 小时的格式，日期可以使用其他格式如 6 May 2000 。 <br /><br />touch -d "6:03pm" file <br />touch -d "05/06/2000" file <br />touch -d "6:03pm 05/06/2000" file <br />名称 : at <br />使用权限 : 所有使用者 <br /><br />使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME <br /><br />说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令，TIME 的格式是 HH:MM其中的 HH 为小时，MM 为分钟，甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。 <br /><br />如果想要指定超过一天内的时间，则可以用 MMDDYY 或者 MM/DD/YY 的格式，其中 MM 是分钟，DD 是第几日，YY 是指年份。另外，使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间，其中的时间间隔可以是 minutes, hours, days, weeks� <br /><br />另外，使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后，at 会进入交谈模式并要求输入指令或程式，当你输入完后按下 ctrl+D 即可完成所有动作，至于执行的结果将会寄回你的帐号中。 <br /><br />把计 : <br /><br />-V : 印出版本编号 <br />-q : 使用指定的伫列(Queue)来储存，at 的资料是存放在所谓的 queue 中，使用者可以同时使用多个 queue，而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 <br />-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者 <br />-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入，可以先将所有的指定先写入档案后再一次读入 <br />-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) <br />-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) <br />-v : 列出所有已经完成但尚未删除的指定 <br /><br />例子 : <br />三天后的下午 5 点锺执行 /bin/ls : <br />at 5pm + 3 days /bin/ls <br /><br />三个星期后的下午 5 点锺执行 /bin/ls : <br />at 5pm + 2 weeks /bin/ls <br /><br />明天的 17:20 执行 /bin/date : <br />at 17:20 tomorrow /bin/date <br /><br />1999 年的最后一天的最后一分钟印出 the end of world ! <br />at 23:59 12/31/1999 echo the end of world ! <br /><br /><br /><br /><br />名称：cal <br /><br />使用权限：所有使用者 <br /><br />使用方式：cal [-mjy] [month [year] <br /><br />说明： <br /><br />显示日历。若只有一个参数，则代表年份(1-9999)，显示该年的年历。年份必须全部写出：``cal 89 将不会是显示 1989 年的年历。使用两个参数，则表示月份及年份。若没有参数则显示这个月的月历。 <br />1752 年 9 月第 3 日起改用西洋新历，因这时大部份的国家都采用新历，有 10 天被去除，所以该月份的月历有些不同。在此之前为西洋旧历。 <br /><br />匡兜� <br /><br />-m : 以星期一为每周的第一天方式显示。 <br />-j : 以凯撒历显示，即以一月一日起的天数显示。 <br />-y : 显示今年年历。 <br /><br />范例： <br /><br />cal : 显示本月的月历。 <br /><br /><br /><br />[root@mylinux. /root]# date <br />Tue Aug 15 08:00:18 CST 2000 <br />[root@mylinux. /root]# cal <br />August 2000 <br />Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 <br />6 7 8 9 10 11 12 <br />13 14 15 16 17 18 19 <br />20 21 22 23 24 25 26 <br />27 28 29 30 31 <br /><br />[root@mylinux. /root]# <br /><br /><br />cal 2001 : 显示公元 2001 年年历。 <br /><br />[root@mylinux. /root]# cal 2001 <br />2001 <br /><br />January February March <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 1 2 3 1 2 3 <br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 <br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 <br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 <br />28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 <br /><br />April May June <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 7 1 2 3 4 5 1 2 <br />8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 <br />15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 <br />22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 <br />29 30 27 28 29 30 31 24 25 26 27 28 29 30 <br /><br />July August September <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 7 1 2 3 4 1 <br />8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 <br />15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 <br />22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 <br />29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 <br />30 <br />October November December <br />Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 6 1 2 3 1 <br />7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 <br />14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 <br />21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 <br />28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 <br />30 31 <br /><br />[root@mylinux. /root]# <br /><br /><br /><br /><br /><br />cal 5 2001 : 显示公元 2001 年 5 月月历。 <br /><br /><br /><br />[root@mylinux. /root]# cal 5 2001 <br />May 2001 <br />Su Mo Tu We Th Fr Sa <br />1 2 3 4 5 <br />6 7 8 9 10 11 12 <br />13 14 15 16 17 18 19 <br />20 21 22 23 24 25 26 <br />27 28 29 30 31 <br /><br />[root@mylinux. /root]# <br /><br /><br /><br /><br /><br />cal -m : 以星期一为每周的第一天方式，显示本月的月历。 <br /><br /><br /><br />[root@mylinux. /root]# cal -m <br />August 2000 <br />Mo Tu We Th Fr Sa Su <br />1 2 3 4 5 6 <br />7 8 9 10 11 12 13 <br />14 15 16 17 18 19 20 <br />21 22 23 24 25 26 27 <br />28 29 30 31 <br /><br />[root@mylinux. /root]# <br /><br /><br /><br /><br /><br />cal -jy : 以一月一日起的天数显示今年的年历。 <br /><br /><br /><br />[root@mylinux. /root]# cal -jy <br />2000 <br /><br />January February <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />1 32 33 34 35 36 <br />2 3 4 5 6 7 8 37 38 39 40 41 42 43 <br />9 10 11 12 13 14 15 44 45 46 47 48 49 50 <br />16 17 18 19 20 21 22 51 52 53 54 55 56 57 <br />23 24 25 26 27 28 29 58 59 60 <br />30 31 <br />March April <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />61 62 63 64 92 <br />65 66 67 68 69 70 71 93 94 95 96 97 98 99 <br />72 73 74 75 76 77 78 100 101 102 103 104 105 106 <br />79 80 81 82 83 84 85 107 108 109 110 111 112 113 <br />86 87 88 89 90 91 114 115 116 117 118 119 120 <br />121 <br />May June <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />122 123 124 125 126 127 153 154 155 <br />128 129 130 131 132 133 134 156 157 158 159 160 161 162 <br />135 136 137 138 139 140 141 163 164 165 166 167 168 169 <br />142 143 144 145 146 147 148 170 171 172 173 174 175 176 <br />149 150 151 152 177 178 179 180 181 182 <br /><br />July August <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />183 214 215 216 217 218 <br />184 185 186 187 188 189 190 219 220 221 222 223 224 225 <br />191 192 193 194 195 196 197 226 227 228 229 230 231 232 <br />198 199 200 201 202 203 204 233 234 235 236 237 238 239 <br />205 206 207 208 209 210 211 240 241 242 243 244 <br />212 213 <br />September October <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />245 246 275 276 277 278 279 280 281 <br />247 248 249 250 251 252 253 282 283 284 285 286 287 288 <br />254 255 256 257 258 259 260 289 290 291 292 293 294 295 <br />261 262 263 264 265 266 267 296 297 298 299 300 301 302 <br />268 269 270 271 272 273 274 303 304 305 <br /><br />November December <br />Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br />306 307 308 309 336 337 <br />310 311 312 313 314 315 316 338 339 340 341 342 343 344 <br />317 318 319 320 321 322 323 345 346 347 348 349 350 351 <br />324 325 326 327 328 329 330 352 353 354 355 356 357 358 <br />331 332 333 334 335 359 360 361 362 363 364 365 <br />366 <br /><br />[root@mylinux. /root]# <br /><br /><br /><br /><br />名称 : crontab <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } <br />说明 : <br />crontab 是用来让使用者在固定时间或固定间隔执行程式之用，换句话说，也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表，这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话，就是表示设定自己的时程表。 <br /><br />餐数 : <br /><br />-e : 执行文字编辑器来设定时程表，内定的文字编辑器是 VI，如果你想用别的文字编辑器，则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) <br />-r : 删除目前的时程表 <br />-l : 列出目前的时程表 <br /><br />时程表的格式如下 : <br />f1 f2 f3 f4 f5 program <br /><br />其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份，f5 表示一个星期中的第几天。program 表示要执行的程式。 <br />当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程式，其余类推 <br />当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时表示从第 a 到第 b 小时都要执行，其余类推 <br />当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时个时间间隔执行一次，其余类推 <br />当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行，其余类推 <br /><br />使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来设定时程表。 <br />例子 : <br /><br />每月每天每小时的第 0 分钟执行一次 /bin/ls : <br />0 7 * * * /bin/ls <br /><br />在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次 /usr/bin/backup : <br />0 6-12/3 * 12 * /usr/bin/backup <br /><br />周一到周五每天下午 5:00 寄一封信给 </font>
				<a href="mailto:alex@domain.name">
						<font size="2">alex@domain.name</font>
				</a>
				<font size="2">. : <br />0 17 * * 1-5 mail -s "hi" </font>
				<a href="mailto:alex@domain.name">
						<font size="2">alex@domain.name</font>
				</a>
				<font size="2">. &lt; /tmp/maildata <br /><br />每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" <br />20 0-23/2 * * * echo "haha" <br /><br />注意 : <br /><br />当程式在你所指定的时间执行后，系统会寄一封信给你，显示该程式执行的内容，若是你不希望收到这样的信，请在每一行空一格之后加上 &gt; /dev/null 2&gt;&amp;1 即可。 <br /><br />名称 : date <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+formAT] [MMDDhhmm[CC]YY][.ss] <br /><br />说明 : <br /><br />date 可以用来显示或设定系统的日期与时间，在显示方面，使用者可以设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 : <br /><br />时间方面 : <br /><br />% : 印出 % <br />%n : 下一行 <br />%t : 跳格 <br />%H : 小时(00..23) <br />%I : 小时(01..12) <br />%k : 小时(0..23) <br />%l : 小时(1..12) <br />%M : 分钟(00..59) <br />%p : 显示本地 AM 或 PM <br />%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M) <br />%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 <br />%S : 秒(00..61) <br />%T : 直接显示时间 (24 小时制) <br />%X : 相当于 %H:%M:%S <br />%Z : 显示时区 <br /><br />日期方面 : <br />%a : 星期几 (Sun..Sat) <br />%A : 星期几 (Sunday..Saturday) <br />%b : 月份 (Jan..Dec) <br />%B : 月份 (January..December) <br />%c : 直接显示日期与时间 <br />%d : 日 (01..31) <br />%D : 直接显示日期 (mm/dd/yy) <br />%h : 同 %b <br />%j : 一年中的第几天 (001..366) <br />%m : 月份 (01..12) <br />%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形) <br />%w : 一周中的第几天 (0..6) <br />%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形) <br />%x : 直接显示日期 (mm/dd/yy) <br />%y : 年份的最后两位数字 (00.99) <br />%Y : 完整年份 (0000..9999) <br /><br />若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[CC]YY][.ss]，其中 MM 为月份，DD 为日，hh 为小时，mm 为分钟，CC 为年份前两位数字，YY 为年份后两位数字，ss 为秒数 <br />把计 : <br /><br />-d datestr : 显示 datestr 中所设定的时间 (非系统时间) <br />--help : 显示辅助讯息 <br />-s datestr : 将系统时间设为 datestr 中所设定的时间 <br />-u : 显示目前的格林威治时间 <br />--version : 显示版本编号 <br /><br />例子 : <br />显示时间后跳行，再显示目前日期 : <br />date +%T%n%D <br /><br />显示月份与日数 : <br />date +%B %d <br /><br />显示日期与设定时间(12:34:56) : <br />date --date 12:34:56 <br /><br />注意 : <br /><br />当你不希望出现无意义的 0 时(比如说 1999/03/07)，则可以在标记中插入 - 符号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。 <br /><br />当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。 <br /><br /><br />名称 : sleep <br />使用权限 : 所有使用者 <br /><br />使用方式 : sleep [--help] [--version] number[smhd] <br /><br />说明 : sleep 可以用来将目前动作延迟一段时间 <br /><br />参数说明 : <br /><br />--help : 显示辅助讯息 <br />--version : 显示版本编号 <br />number : 时间长度，后面可接 s、m、h 或 d <br />其中 s 为秒，m 为 分钟，h 为小时，d 为日数 <br /><br />例子 : <br />显示目前时间后延迟 1 分钟，之后再次显示时间 : <br />date;sleep 1m;date <br /><br /><br /><br />名称： time <br />使用权限： 所有使用者 <br /><br />使用方式： time [options] COMMAND [arguments] <br /><br />说明： time 指令的用途，在于量测特定指令执行时所需消耗的时间及系统资源等资讯。例如 CPU 时间、记忆体、输入输出等等。需要特别注意的是，部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同，以致于 time 指令无法取得这些资料。 <br /><br />把计� <br /><br />-o or --output=FILE <br />设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在，系统将覆写其内容。 <br />-a or --append <br />配合 -o 使用，会将结果写到档案的末端，而不会覆盖掉原来的内容。 <br />-f formAT or --format=formAT <br />以 formAT 字串设定显示方式。当这个选项没有被设定的时候，会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式，如此一来就不必每次登入系统都要设定一次。 <br />一般设定上，你可以用 <br />t <br />表示跳栏，或者是用 <br />n <br />表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号，就用 。（学过 C 语言的人大概会觉得很熟悉） <br />time 指令可以显示的资源有四大项，分别是： <br /><br />Time resources <br />Memory resources <br />IO resources <br />Command info <br /><br />详细的内容如下： <br /><br /><br />Time Resources <br />E 执行指令所花费的时间，格式是：[hour]:minute:second。请注意这个数字并不代表实际的 CPU 时间。 <br />e 执行指令所花费的时间，单位是秒。请注意这个数字并不代表实际的 CPU 时间。 <br />S 指令执行时在核心模式（kernel mode）所花费的时间，单位是秒。 <br />U 指令执行时在使用者模式（user mode）所花费的时间，单位是秒。 <br />P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。 <br /><br /><br />Memory Resources <br />M 执行时所占用的实体记忆体的最大值。单位是 KB <br />t 执行时所占用的实体记忆体的平均值，单位是 KB <br />K 执行程序所占用的记忆体总量（stack+data+text）的平均大小，单位是 KB <br />D 执行程序的自有资料区（unshared data area）的平均大小，单位是 KB <br />p 执行程序的自有堆叠（unshared stack）的平均大小，单位是 KB <br />X 执行程序间共享内容（shared text）的平均值，单位是 KB <br />Z 系统记忆体页的大小，单位是 byte。对同一个系统来说这是个常数 <br /><br /><br />IO Resources <br />F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档（swap file)中，而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。 <br />R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中，但尚未分配给其他程序。此时该页的内容并未被破坏，不必从置换档里读出来 <br />W 此程序被交换到置换档的次数 <br />c 此程序被强迫中断（像是分配到的 CPU 时间耗尽）的次数 <br />w 此程序自愿中断（像是在等待某一个 I/O 执行完毕，像是磁碟读取等等）的次数 <br />I 此程序所输入的档案数 <br />O 此程序所输出的档案数 <br />r 此程序所收到的 Socket Message <br />s 此程序所送出的 Socket Message <br />k 此程序所收到的信号 ( Signal )数量 <br /><br /><br />Command Info <br />C 执行时的参数以及指令名称 <br />x 指令的结束代码 ( Exit Status ) <br /><br /><br /><br /><br />-p or --portability <br />这个选项会自动把显示格式设定成为： <br />real %e <br />user %U <br />sys %S <br />这么做的目的是为了与 POSIX 规格相容。 <br />-v or --verbose <br />这个选项会把所有程式中用到的资源通通列出来，不但如一般英文语句，还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。 <br /><br />范例： <br />利用下面的指令 <br />time -v ps -aux <br /><br />我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料： <br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init <br />root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd] <br />root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod] <br />...... <br />root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux <br /><br />Command being timed: "ps -aux" <br />User time (seconds): 0.05 <br />System time (seconds): 0.06 <br />Percent of CPU this job got: 68% <br />Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16 <br />Average shared text size (kbytes): 0 <br />Average unshared data size (kbytes): 0 <br />Average stack size (kbytes): 0 <br />Average total size (kbytes): 0 <br />Maximum resident set size (kbytes): 0 <br />Average resident set size (kbytes): 0 <br />Major (requiring I/O) page faults: 238 <br />Minor (reclaiming a frame) page faults: 46 <br />Voluntary context switches: 0 <br />Involuntary context switches: 0 <br />Swaps: 0 <br />File system inputs: 0 <br />File system outputs: 0 <br />Socket messages sent: 0 <br />Socket messages received: 0 <br />Signals delivered: 0 <br />Page size (bytes): 4096 <br />Exit status: 0 <br /><br /><br /><br />名称： uptime <br />使用权限： 所有使用者 <br />使用方式： uptime [-V] <br />说明： uptime 提供使用者下面的资讯，不需其他参数： <br /><br />现在的时间 <br />系统开机运转到现在经过的时间 <br />连线的使用者数量 <br />最近一分钟，五分钟和十五分钟的系统负载 <br />参数： -V 显示版本资讯。 <br />范例： uptime <br />其结果为： <br />10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99 <br /><br />名称：chfn <br /><br />使用权限：所有使用者 <br /><br />用法：shell&gt;&gt; chfn <br /><br />说明：提供使用者更改个人资讯，用于 finger and mail username <br /><br />范例： <br /><br />shell&gt;&gt; chfn <br />Changing finger information for user <br />Password: [del] <br />Name[]:Johnney Huang ### 提供 finger 时的资料 <br />Office[]:NCCU <br />Office Phone[]: [del] <br />Home Phone[]: [del] <br /><br /><br />名称：chsh <br /><br />使用权限：所有使用者 <br /><br />用法：shell&gt;&gt; chsh <br /><br />说明：更改使用者 shell 设定 <br /><br />范例： <br /><br />shell&gt;&gt; chsh <br />Changing fihanging shell for user1 <br />Password: [del] <br />New shell [/bin/tcsh]: ### [是目前使用的 shell] <br />[del] <br /><br />shell&gt;&gt; chsh -l ### 展示 /etc/shells 档案内容 <br />/bin/bash <br />/bin/sh <br />/bin/ash <br />/bin/bsh <br />/bin/tcsh <br />/bin/csh <br /><br /><br /><br />” finger [返回] <br />名称： finger <br />使用权限： 所有使用者 <br /><br />使用方式： finger [options] user[@address] <br /><br />说明：finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有： <br /><br />Login Name <br />User Name <br />Home directory <br />Shell <br />Login status <br />mail status <br />.plan <br />.project <br />.forward <br /><br />其中 .plan ，.project 和 .forward 就是使用者在他的 Home Directory 里的 .plan ， .project 和 .forward 等档案里的资料。如果没有就没有。finger 指令并不限定于在同一伺服器上查询，也可以寻找某一个远端伺服器上的使用者。只要给一个像是 E-mail address 一般的地址即可。 <br />把计� <br /><br />-l <br />多行显示。 <br /><br />-s <br />单行显示。这个选项只显示登入名称，真实姓名，终端机名称，闲置时间，登入时间，办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者，这个选项无效。 <br /><br />范例：下列指令可以查询本机管理员的资料： <br />finger root <br /><br />其结果如下： <br />Login: root Name: root <br />Directory: /root Shell: /bin/bash <br />Never logged in. <br />No mail. <br />No Plan. <br /><br /><br /><br /><br />名称：last <br /><br />使用权限：所有使用者 <br /><br />使用方式：shell&gt;&gt; last [options] <br /><br />说明：显示系统开机以来获是从每月初登入者的讯息 <br /><br />把计� <br /><br />-R 省略 hostname 的栏位 <br />-num 展示前 num 个 <br />username 展示 username 的登入讯息 <br />tty 限制登入讯息包含终端机代号 <br /><br />范例： <br /><br />shell&gt;&gt; last -R -2 <br />johnney pts/1 Mon Aug 14 20:42 still logged in <br />johnney pts/0 Mon Aug 14 19:59 still logged in <br /><br />wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp <br /><br /><br />shell&gt;&gt; last -2 minery <br />minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03) <br />minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02) <br /><br />wtmp begins Tue Aug 1 09:01:10 2000 <br /><br /><br /><br /><br />名称:login <br /><br />这个命令都不会就不要干算了！呵呵我也不在这里多费笔墨耽误大家美好青春了^_^ <br /><br /><br /><br />名称：passwd <br /><br />使用权限：所有使用者 <br /><br />使用方式：passwd [-k] [-l] [-u [-f] [-d] [-S] [username] <br /><br />说明：用来更改使用者的密码 <br /><br />参数： <br />-k <br /><br />-l <br /><br />-u <br /><br />-f <br /><br />-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用. <br /><br />-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用. <br /><br />[username] 指定帐号名称. <br /><br /><br />名称 : who <br />使用权线 : 所有使用者都可使用 <br /><br />使用方式 : who - [husfV] [user] <br /><br />说明 : 显示系统中有那些使用者正在上面，显示的资料包含了使用者 ID，使用的终端机，从那边连上来的，上线时间，呆滞时间，CPU 使用量，动作等等。 <br /><br />把计 : <br /><br />-h : 不要显示标题列 <br />-u : 不要显示使用者的动作/工作 <br />-s : 使用简短的格式来显示 <br />-f : 不要显示使用者的上线位置 <br />-V : 显示程式版本 <br />名称：/etc/aliases <br />使用权限：系统管理者 <br />使用方式： 请用 newaliases 更新资料库 <br />说明： <br />sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 </font>
				<a href="mailto:redlinux@link.ece.uci.edu">
						<font size="2">redlinux@link.ece.uci.edu</font>
				</a>
				<font size="2">. 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br /><br />/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。范例： <br /># newaliases <br /><br />下面命令会做相同的事， <br /># sendmail -bi <br /><br />相关命令: <br />mail, mailq, newaliases, sendmail <br /><br />” mail [返回] <br />名称：mail <br /><br />使用权限：所有使用者 <br /><br /><br />使用方式：mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...] <br /><br /><br />说明： <br />mail 不仅只是一个指令， mail 还是一个电子邮件程式，不过利用 mail 来读信的人应该很少吧！对于系统管理者来说 mail 就很有用，因为管理者可以用 mail 写成 script ，定期寄一些备忘录提醒系统的使用者。 <br /><br /><br />参数： <br />i 忽略 tty 的中断讯号。 (interrupt) <br />I 强迫设成互动模式。 (Interactive) <br />v 列印出讯息，例如送信的地点、状态等等。 (verbose) <br />n 不读入 mail.rc 设定档。 <br />s 邮件标题。 <br />c cc 邮件地址。 <br />b bcc 邮件地址。 <br /><br /><br />范例： <br /><br /><br />将信件送给一个或以上的电子邮件地址，由于没有加入其他的选项，使用者必须输入标题与信件的内容等。而 user2 没有主机位置，就会送给邮件伺服器的 user2 使用者。 <br /><br />mail </font>
				<a href="mailto:user1@email.addr">
						<font size="2">user1@email.addr</font>
				</a>
				<font size="2">ess. <br />mail </font>
				<a href="mailto:user1@email.addr">
						<font size="2">user1@email.addr</font>
				</a>
				<font size="2">ess. user2 <br /><br />将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成 cronjob 就可以定时将备忘录寄给系统使用者。 <br /><br />mail -s 标题 -c user1 user2 &lt; mail.txt <br /><br />指令：mesg <br />使用权限 : 所有使用者 <br /><br />使用方式 : mesg [y|n] <br /><br />说明 ： 决定是否允许其他人传讯息到自己的终端机介面 <br /><br /><br />把计 � <br /><br />y : 允许讯息传到终端机介面上。 <br />n : 不允许讯息传到终端机介面上 。 <br />如果没有设定，则讯息传递与否则由终端机界面目前状态而定。 <br /><br />例子 : <br />改变目前讯息设定，改成不允许讯息传到终端机介面上 : <br />mesg n <br /><br /><br />与 mesg 相关的指令有： talk，write，wall。 <br /><br /><br />名称：/etc/aliases <br />使用权限：系统管理者 <br />使用方式： newaliases <br />说明： <br />sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 </font>
				<a href="mailto:redlinux@link.ece.uci.edu">
						<font size="2">redlinux@link.ece.uci.edu</font>
				</a>
				<font size="2">. 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br /><br />/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。 <br /><br />参数：没有任何参数。 范例： <br /># newaliases <br /><br />下面命令会做相同的事， <br /># sendmail -bi <br /><br />相关命令: <br />mail, mailq, newaliases, sendmail <br /><br />名称 : talk <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />talk person [ttyname] <br />说明 : 与其他使用者对谈 <br /><br />把计 : <br /><br />person : 预备对谈的使用者帐号，如果该使用者在其他机器上，则可输入 </font>
				<a href="mailto:person@machine.name">
						<font size="2">person@machine.name</font>
				</a>
				<font size="2">. <br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br /><br />例子.1 : <br /><br />与现在机器上的使用者Rollaend对谈，此时 Rollaend 只有一个连线 : <br />talk Rollaend <br /><br /><br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee`即可开始对谈，结束请按 ctrl+c <br /><br />例子.2 :与linuxfab.cx上的使用者Rollaend对谈，使用pts/2来对谈 : <br />talk </font>
				<a href="mailto:Rollaend@linuxfab.cx">
						<font size="2">Rollaend@linuxfab.cx</font>
				</a>
				<font size="2">. pts/2 <br /><br /><br />接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk </font>
				<a href="mailto:jzlee@jzlee.home">
						<font size="2">jzlee@jzlee.home</font>
				</a>
				<font size="2">`即可开始对谈，结束请按. ctrl+c <br /><br />注意 : 若萤幕的字会出现不正常的字元，试着按 ctrl+l 更新萤幕画面。 <br /><br /><br />名称 : wall <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />wall [ message ] <br />使用说明： <br />wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)� <br /><br />例子 : <br /><br />传讯息"hi" 给每一个使用者 : <br />wall hi <br /><br /><br />名称 : write <br />使用权限 : 所有使用者 <br /><br />使用方式 : <br /><br />write user [ttyname] <br />说明 : 传讯息给其他使用者 <br /><br />把计 : <br /><br />user : 预备传讯息的使用者帐号 <br />ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br /><br />例子.1 : <br /><br />传讯息给 Rollaend，此时 Rollaend 只有一个连线 : <br />write Rollaend <br /><br /><br />接下来就是将讯息打上去，结束请按 ctrl+c <br /><br />例子.2 :传讯息给 Rollaend，Rollaend 的连线有 pts/2，pts/3 : <br />write Rollaend pts/2 <br /><br /><br />接下来就是将讯息打上去，结束请按 ctrl+c <br /><br />注意 : 若对方设定 mesg n，则此时讯席将无法传给对方 <br /><br />名称：kill <br />使用权限：所有使用者 <br /><br />使用方式： <br /><br />kill [ -s signal | -p ] [ -a ] pid ... <br />kill -l [ signal ] <br />说明：kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号 <br />把计� <br /><br />-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, 结束; 详细的信号可以用 kill -l <br />-p : 印出 pid , 并不送出信号 <br />-l (signal) : 列出所有可用的信号名称 <br />范例： <br /><br />将 pid 为 323 的行程砍掉 (kill) : <br />kill -9 323 <br /><br />将 pid 为 456 的行程重跑 (restart) : <br />kill -HUP 456 <br /><br /><br />名称：nice <br />使用权限：所有使用者 <br /><br />使用方式：nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]] <br /><br />说明：以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序) <br /><br /><br />把计� <br /><br />-n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序的增加 adjustment <br />--help 显示求助讯息 <br />--version 显示版本资讯 <br />范例： <br />将 ls 的优先序加 1 并执行 : <br />nice -n 1 ls <br /><br />将 ls 的优先序加 10 并执行 : <br />nice ls将 ls 的优先序加 10 并执行 <br /><br />注意 : 优先序 (priority) 为作业系统用来决定 CPU 分配的参数，Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程，优先序越高，所可能获得的 CPU时间就越多。 <br /><br />名称：ps <br />使用权限：所有使用者 <br />使用方式：ps [options] [--help] <br />说明：显示瞬间行程 (process) 的动态 <br />参数： <br />ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 <br />-A 列出所有的行程 <br />-w 显示加宽可以显示较多的资讯 <br />-au 显示较详细的资讯 <br />-aux 显示所有包含其他使用者的行程 <br /><br />au(x) 输出格式 : <br /><br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />USER: 行程拥有者 <br />PID: pid <br />%CPU: 占用的 CPU 使用率 <br />%MEM: 占用的记忆体使用率 <br />VSZ: 占用的虚拟记忆体大小 <br />RSS: 占用的记忆体大小 <br />TTY: 终端的次要装置号码 (minor device number of tty) <br />STAT: 该行程的状态: <br />D: 不可中断的静止 (通悸□□缜b进行 I/O 动作) <br />R: 正在执行中 <br />S: 静止状态 <br />T: 暂停执行 <br />Z: 不存在但暂时无法消除 <br />W: 没有足够的记忆体分页可分配 <br />&lt;: 高优先序的行程 <br />N: 低优先序的行程 <br />L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O) <br />START: 行程开始时间 <br />TIME: 执行的时间 <br />COMMAND:所执行的指令 <br /><br />范例： <br /><br />ps <br />PID TTY TIME CMD <br />2791 ttyp0 00:00:00 tcsh <br />3092 ttyp0 00:00:00 ps <br />% ps -A <br />PID TTY TIME CMD <br />1 ? 00:00:03 init <br />2 ? 00:00:00 kflushd <br />3 ? 00:00:00 kpiod <br />4 ? 00:00:00 kswapd <br />5 ? 00:00:00 mdrecoveryd <br />....... <br />% ps -aux <br />USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br />root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3] <br />root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd] <br />root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod] <br />root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd] <br />........ <br /><br />名称：pstree <br />使用权限：所有使用者 <br />使用方式： <br />pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user] <br />pstree -V <br />说明：将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程 <br />参数： <br />-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号 <br />-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 * <br />范例： <br /><br />pstree <br /><br />init-+-amd <br />|-apmd <br />|-atd <br />|-httpd---10*[httpd] <br />%pstree -p <br />init(1)-+-amd(447) <br />|-apmd(105) <br />|-atd(339) <br />%pstree -c <br />init-+-amd <br />|-apmd <br />|-atd <br />|-httpd-+-httpd <br />| |-httpd <br />| |-httpd <br />| |-httpd <br />.... <br /><br />名称：renice <br />使用权限：所有使用者 <br /><br />使用方式：renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...] <br /><br />说明：重新指定一个或多个行程(Process)的优先序(一个或多个将根据所下的参数而定) <br /><br />把计� <br /><br />-p pid 重新指定行程的 id 为 pid 的行程的优先序 <br />-g pgrp 重新指定行程群组(process group)的 id 为 pgrp 的行程 (一个或多个) 的优先序 <br />-u user 重新指定行程拥有者为 user 的行程的优先序 <br />范例： <br />将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 : <br />renice +1 987 -u daemon root -p 32 <br /><br />注意 : 每一个行程(Process)都有一个唯一的 (unique) id� <br /><br />名称：top <br />使用权限：所有使用者 <br /><br />使用方式：top [-] [d delay] [q] [c] [S] [s] </font>
				<font size="2">
						<em>[n] </em>
				</font>
				<br />
				<br />
				<font size="2">说明：即时显示 process 的动态 <br /><br />把计� <br /><br />d : 改变显示的更新速度，或是在交谈式指令列( interactive command)按 s <br />q : 没有任何延迟的显示速度，如果使用者是有 superuser 的权限，则 top 将会以最高的优先序执行 <br />c : 切换显示模式，共有两种模式，一是只显示执行档的名称，另一种是显示完整的路径与名称S : 累积模式，会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来 <br />s : 安全模式，将交谈式指令取消, 避免潜在的危机 <br />i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程 <br />n : 更新的次数，完成后将会退出 top <br />b : 批次档模式，搭配 "n" 参数一起使用，可以用来将 top 的结果输出到档案内 <br /><br />范例： <br />显示更新十次后退出 ; <br />top -n 10 <br /><br />使用者将不能利用交谈式指令来对行程下命令 : <br />top -s <br /><br />将更新显示二次的结果输入到名称为 top.log 的档案里 : <br />top -n 2 -b &lt; top.log <br /><br />名称：skill <br /><br />使用权限：所有使用者 <br /><br />使用方式： skill [signal to send] [options] 选择程序的规则 <br /><br />说明： <br /><br />送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 较常使用的讯息为 HUP , INT , KILL , STOP , CONT ,和 0 <br /><br />讯息有三种写法:分别为 -9 , -SIGKILL , -KILL , 可以使用 -l 或 -L 已列出可使用的讯息。 <br /><br />一般参数： <br /><br />-f 快速模式/尚未完成 <br /><br />-i 互动模式/ 每个动作将要被确认 <br /><br />-v 详细输出/ 列出所选择程序的资讯 <br /><br />-w 智能警告讯息/ 尚未完成 <br /><br />-n 没有动作/ 显示程序代号 <br /><br />参数：选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。 <br /><br />-t 终端机代号 ( tty 或 pty ) <br /><br />-u 使用者名称 <br /><br />-p 程序代号 ( pid ) <br /><br />-c 命令名称 可使用的讯号: <br /><br />以下列出已知的讯号名称,讯号代号,功能。 <br /><br />名称 (代号) 功能/ 描述 <br /><br />ALRM 14 离开 <br /><br />HUP 1 离开 <br /><br />INT 2 离开 <br /><br />KILL 9 离开/ 强迫关闭 <br /><br />PIPE 13 离开 <br /><br />POLL 离开 <br /><br />PROF 离开 <br /><br />TERM 15 离开 <br /><br />USR1 离开 <br /><br />USR2 离开 <br /><br />VTALRM 离开 <br /><br />STKFLT 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br /><br />UNUSED 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br /><br />TSTP 停止 /产生与内容相关的行为 <br /><br />TTIN 停止 /产生与内容相关的行为 <br /><br />TTOU 停止 /产生与内容相关的行为 <br /><br />STOP 停止 /强迫关闭 <br /><br />CONT 从新启动 /如果在停止状态则从新启动,否则忽略 <br /><br />PWR 忽略 /在某些系统中会离开 <br /><br />WINCH 忽略 <br /><br />CHLD 忽略 <br /><br />ABRT 6 核心 <br /><br />FPE 8 核心 <br /><br />ILL 4 核心 <br /><br />QUIT 3 核心 <br /><br />SEGV 11 核心 <br /><br />TRAP 5 核心 <br /><br />SYS 核心 /或许尚未实作 <br /><br />EMT 核心 /或许尚未实作 <br /><br />BUS 核心 /核心失败 <br /><br />XCPU 核心 /核心失败 <br /><br />XFSZ 核心 /核心失败 <br /><br />范例： <br /><br />停止所有在 PTY 装置上的程序 <br />skill -KILL -v pts/* <br /><br />停止三个使用者 user1 , user2 , user3 <br />skill -STOP user1 user2 user3 <br /><br />其他相关的命令: kill <br /><br />名称：expr <br /><br />使用权限：所有使用者 <br />### 字串长度 <br /><br />shell&gt;&gt; expr length "this is a test" <br />14 <br /><br />### 数字商数 <br /><br />shell&gt;&gt; expr 14 % 9 <br />5 <br /><br />### 从位置处抓取字串 <br /><br />shell&gt;&gt; expr substr "this is a test" 3 5 <br />is is <br /><br />### 数字串 only the first character <br /><br />shell&gt;&gt; expr index "testforthegame" e <br />2 <br /><br />### 字串真实重现 <br /><br />shell&gt;&gt; expr quote thisisatestformela <br />thisisatestformela <br /><br /><br />名称: tr <br /><br />### 1.比方说要把目录下所有的大写档名换为小写档名? <br /><br />似乎有很多方式，"tr"是其中一种: <br /><br />#!/bin/sh <br /><br />dir="/tmp/testdir"; <br />files=`find $dir -type f`; <br />for i in $files <br />do <br />dir_name=`dirname $i`; <br />ori_filename=`basename $i` <br />new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` &gt; /dev/null; <br />#echo $new_filename; <br />mv $dir_name/$ori_filename $dir_name/$new_filename <br />done <br /><br /><br />### 2.自己试验中...lowercase to uppercase <br /><br />tr abcdef...[del] ABCDE...[del] <br />tr a-z A-Z <br />tr [:lower:] [:upper:] <br /><br />shell&gt;&gt; echo "this is a test" | tr a-z A-Z &gt; www <br />shell&gt;&gt; cat www <br />THIS IS A TEST <br /><br />### 3.去掉不想要的字串 <br /><br />shell&gt;&gt; tr -d this ### 去掉有关 t.e.s.t <br />this <br /><br />man <br />man <br />test <br />e <br /><br />### 4.取代字串 <br /><br />shell&gt;&gt; tr -s "this" "TEST" <br />this <br />TEST <br />th <br />TE <br /><br /><br />指令：clear <br />用途：清除萤幕用。 <br /><br />使用方法：在 console 上输入 clear。 <br /><br /><br />名称: reset, tset <br />使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal] <br /><br />使用说明: <br /><br />reset 其实和 tset 是一同个命令，它的用途是设定终端机的状态。一般而言，这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 ? 的话，这个程式会要求使用者输入终端机的型别。 <br /><br />由于这个程式会将终端机设回原始的状态，除了在 login 时使用外，当系统终端机因为程式不正常执行而进入一些奇怪的状态时，你也可以用它来重设终端机o 例如不小心把二进位档用 cat 指令进到终端机，常会有终端机不再回应键盘输入，或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明: <br /><br /><br />-p <br />将终端机类别显示在萤幕上，但不做设定的动作。这个命令可以用来取得目前终端机的类别。 <br />-e ch <br />将 erase 字元设成 ch <br />-i ch <br />将中断字元设成 ch <br />-k ch <br />将删除一行的字元设成 ch <br />-I <br />不要做设定的动作，如果没有使用选项 -Q 的话，erase、中断及删除字元的目前值依然会送到萤幕上。 <br />-Q <br />不要显示 erase、中断及删除字元的值到萤幕上。 <br />-r <br />将终端机类别印在萤幕上。 <br />-s <br />将设定 TERM 用的命令用字串的型式送到终端机中，通常在 .login 或 .profile 中用 <br />范例: <br />让使用者输入一个终端机型别并将终端机设到该型别的预设状态。 <br /># reset ? <br /><br />将 erase 字元设定 control-h <br /># reset -e ^B <br /><br />将设定用的字串显示在萤幕上 <br /># reset -s <br />Erase is control-B (^B). <br />Kill is control-U (^U). <br />Interrupt is control-C (^C). <br />TERM=xterm; <br /><br />名称：compress <br /><br />使用权限：所有使用者 <br /><br /><br />使用方式：compress [-dfvcV] [-b maxbits] [file ...] <br /><br /><br />说明： <br />compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。 <br /><br /><br />参数： <br />c 输出结果至标准输出设备（一般指荧幕） <br />f 强迫写入档案，若目的档已经存在，则会被覆盖 (force) <br />v 将程式执行的讯息印在荧幕上 (verbose) <br />b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16 bits (bits) <br />d 将压缩档解压缩 <br />V 列出版本讯息 <br /><br /><br />范例： <br /><br /><br />将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会被压缩档覆盖。 <br /><br />compress -f source.dat <br /><br />将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。 <br />-v 与 -f 可以一起使用 <br /><br />compress -vf source.dat <br /><br />将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。 <br /><br />compress -c source.dat &gt; target.dat.Z <br /><br />-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。 <br /><br />compress -b 12 source.dat <br /><br />将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆盖档案，若使用 -df 程式则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名，所以 source.dat 会自动当作 source.dat.Z 处理。 <br /><br />compress -d source.dat <br />compress -d source.dat.Z <br /><br /><br />名称： lpd <br /><br />使用权限： 所有使用者 <br /><br />使用方式：lpd [-l] [#port] <br />lpd 是一个常驻的印表机管理程式，它会根据 /etc/printcap 的内容来管理本地或远端的印表机。/etc/printcap 中定义的每一个印表机必须在 /var/lpd 中有一个相对应的目录，目录中以 cf 开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生。 <br /><br />lpr 和 lpd 组成了一个可以离线工作的系统，当你使用 lpr 时，印表机不需要能立即可用，甚至不用存在。lpd 会自动监视印表机的状况，当印表机上线后，便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。 <br /><br />参数： <br /><br /><br />-l: 将一些除错讯息显示在标准输出上。 <br />#port: 一般而言，lpd 会使用 getservbyname 取得适当的 TCP/IP port，你可以使用这个参数强迫 lpd 使用指定的 port。 <br /><br />范例： <br />这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。 <br /><br />名称 lpq <br />-- 显示列表机贮列中未完成的工作 用法 <br /><br />lpq [l] [P] [user] <br /><br />说明 <br />lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。 <br /><br />范例 <br />范例 1. 显示所有在 lp 列表机贮列中的工作 <br /><br /><br /># lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) 1428646 bytes <br /><br /><br />相关函数 <br />lpr,lpc,lpd <br /><br />名称： lpr <br /><br />使用权限： 所有使用者 <br /><br />使用方式：lpr [ -P printer ] <br />将档案或是由标准输入送进来的资料送到印表机贮列之中，印表机管理程式 lpd 会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地或是远端的主机来处理。 <br /><br />参数： <br /><br /><br />-p Printer: 将资料送至指定的印表机 Printer，预设值为 lp。 <br /><br />范例： <br />将 </font>
				<a href="http://www.c/" target="_blank">
						<font size="2">www.c</font>
				</a>
				<font size="2"> 和 kkk.c 送到印表机 lp。 <br />lpr -Plp </font>
				<a href="http://www.c/" target="_blank">
						<font size="2">www.c</font>
				</a>
				<font size="2"> kkk.c <br /><br /><br />名称: lprm <br />-- 将一个工作由印表机贮列中移除 用法 <br /><br />/usr/bin/lprm [P] [file...] <br /><br />说明 <br />尚未完成的印表机工作会被放在印表机贮列之中，这个命令可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列，你可以用 -P 这个命令设定想要作用的印列机。如果没有设定的话，会使用系统预设的印表机。 <br /><br />这个命令会检查使用者是否有足够的权限删除指定的档案，一般而言，只有档案的拥有者或是系统管理员才有这个权限。 <br /><br />范例 <br />将印表机 hpprinter 中的第 1123 号工作移除 <br /><br /><br />lprm -Phpprinter 1123 <br /><br /><br />将第 1011 号工作由预设印表机中移除 <br /><br /><br />lprm 1011 <br /><br /><br />名称： fdformat <br /><br />使用权限： 所有使用者 <br /><br />使用方式：fdformat [-n] device <br /><br />使用说明 : <br />对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候，最好指定像是下面的装置： <br /><br /><br />/dev/fd0d360 磁碟机 A: ，磁片为 360KB 磁碟 <br />/dev/fd0h1440 磁碟机 A: ，磁片为 1.4MB 磁碟 <br />/dev/fd1h1200 磁碟机 B: ，磁片为 1.2MB 磁碟 <br />如果使用像是 /dev/fd0 之类的装置，如果里面的磁碟不是标准容量，格式化可能会失败。在这种情况之下，使用者可以用 setfdprm 指令先行指定必要参数。 <br /><br />参数： <br /><br /><br />-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。 <br /><br />范例： <br /><br />fdformat -n /dev/fd0h1440 <br /><br />将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。 <br /><br />名称： mformat <br /><br />使用权限： 所有使用者 <br /><br />使用方式： <br /><br />mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F] [-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A rate_on_other_tracks] [-1] [-k] drive: <br /><br />在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候把 USE_2M 的参数打开，部分与 2M 格式相关的参数就会发生作用。否则这些参数（像是 S,2,1,M）不会发生作用。 <br /><br />参数： <br /><br />-t 磁柱（synlider）数 <br />-h 磁头（head）数 <br />-s 每一磁轨的磁区数 <br />-l 标签 <br />-F 将磁碟格式化为 FAT32 格式，不过这个参数还在实验中。 <br />-I 设定 FAT32 中的版本号。这当然也还在实验中。 <br />-S 磁区大小代码，计算方式为 sector = 2^(大小代码+7) <br />-c 磁丛（cluster）的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的限制，mformat 会自动放大磁区数。 <br />-s <br />-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同。 <br />-a 如果加上这个参数，mformat 会产生一组 Atari 系统的序号给这块软碟。 <br />-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式化的动作。 <br />-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档（disk image）。当然对一个实体磁碟机下这个参数是没有意义的。 <br />-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时，因为通常一个分割区的前面还有分割表。这个参数未经测试，能不用就不用。 <br />-n 磁碟序号 <br />-r 根目录的大小，单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。 <br />-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当然当中的硬体参数会随之更动。 <br />-k 尽量保持原有的开机磁区。 <br />-0 第 0 轨的资料传输率 <br />-A 第 0 轨以外的资料传输率 <br />-2 使用 2m 格式 <br />-1 不使用 2m 格式 <br /><br />范例： <br />mformat a: <br /><br />这样会用预设值把 a: （就是 /dev/fd0）里的磁碟片格式化。 <br /><br />名称： mkdosfs <br /><br />使用权限： 所有使用者 <br /><br />使用方式： mkdosfs [ -c | -l filename ] <br />[ -f number_of_FATs ] <br />[ -F FAT_size ] <br />[ -i volume_id ] <br />[ -m message_file ] <br />[ -n volume_name ] <br />[ -r root_dir_entry ] <br />[ -s sector_per_cluster ] <br />[ -v ] <br />device <br />[ block_count ] <br /><br />说明： 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果 block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。 <br /><br />参数： <br /><br /><br />-c 建立档案系统之前先检查是否有坏轨。 <br />-l 从得定的档案中读取坏轨记录。 <br />-f 指定档案配置表（FAT , File Allocation Table)的数量。预设值为 2 。目前 Linux 的 FAT 档案系统不支援超过 2 个 FAT 表。通常这个不需要改。 <br />-F 指定 FAT 表的大小，通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片，16 位元组用于一般硬碟的分割区，也就是所谓的 FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用，反之在硬碟上用 FAT12 亦然。 <br />-i 指定 Volume ID。一般是一个 4 个位元组的数字，像是 2e203a47 。如果不给系统会自己产生。 <br />-m 当使用者试图用这片磁片或是分割区开机，而上面没有作业系统时，系统会给使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑好，然后用这个参数指定，或是用 <br />-m - <br />这样系统会要求你直接输入这段文字。要特别注意的是，档案里的字串长度不要超过 418 个字，包括展开的跳栏符号（TAB）和换行符号（换行符号在 DOS 底下算两个字元！） <br />-n 指定 Volume Name，就是磁碟标签。如同在 DOS 底下的 format 指令一样，给不给都可以。没有预设值。 <br />-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟上是 112 或是 224 ，在硬碟上是 512。没事不要改这个数字。 <br />-s 每一个磁丛（cluster）的磁区数。必须是 2 的次方数。不过除非你知道你在作什么，这个值不要乱给。 <br />-v 提供额外的讯息 <br /><br />范例： <br />mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式，并将标签设为 Tester*/</font>
		</span>
		<br />
<img src ="http://www.cnitblog.com/ldds/aggbug/16012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-26 18:34 <a href="http://www.cnitblog.com/ldds/articles/16012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]在linux8.0下批量添加用户</title><link>http://www.cnitblog.com/ldds/articles/16011.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sat, 26 Aug 2006 10:30:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16011.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16011.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16011.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16011.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">[转载]在linux8.0下批量添加用户</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">文章作者：北南南北<br />信息来源：邪恶八进制信息安全团队（</font>
				<a href="http://www.eviloctal.com/" target="_blank">
						<font size="2">www.eviloctal.com</font>
				</a>
				<font size="2">）<br /><br />下面的错误信息。我把自己的实践说一下，我是对照/etc/passwd来做的。方法也是用上面提到的办法。<br /><br />一。建两个文件，一个是用户名的文件，另外的一个是密码文件。用户名的文件，我们可以随便起一个名，比如叫newlist，密码文件我们也一样可以随意的文件名，比如用 newlistpwd。<br />方法可以这样做<br />[root@linuxsir01 root]# touch userlist<br />[root@linuxsir01 root]# touch userpwd<br /><br />然后用kate分别打开userlist文件以及userlistpwd文件。在userlist中，我们可以根据/etc/passwd的内容的格式来添加。/etc/passwd文件中的格式如下：<br /><br />win03:x:501:501::/home/win03:/bin/bash<br /><br /><br />根据这个说法，我们可以这样来写newlist这个文件。<br /><br /><br />win04:x:504:504::/home/win04:/bin/bash<br />win05:x:505:505::/home/win05:/bin/bash<br />win06:x:506:506::/home/win06:/bin/bash<br />win07:x:507:507::/home/win07:/bin/bash<br />win08:x:508:508::/home/win08:/bin/bash<br />win09:x:509:509::/home/win09:/bin/bash<br /><br />再来说几句吧，关于/etc/passwd这个文件中共有七个段。每段中以：号分开。还是用下面的例子：<br /><br />win03:x:501:501::/home/win03:/bin/bash<br /><br />在上面的蓝色的字中，第一段中的win03是用户名；x是密码，因为经过影射后，以x出现。这里当然不可见了：)：)如果可见，那安全性就大打折扣了。。x后面有两个501，第一个501，我们称之为用户标识码[UID]，也就是User ID。第二个501是用户组的ID[也就是GID，Group ID]；UID是唯一的，0是root的UID，1-499是系统预留给各种服务和服务器用的。所以我们自己添加的帐号，应该从500开始。GID，每个组也是仅有一个GID。/home/win03是用户目录，/bin/bash是用户所用的工作环境。也就是说用户输入的命令，要通过它来解释，让计算机能“听的懂”。这里用的是bash，也就是系统所默认的。<br /><br />了解以后，我们就还是说newlist这个文件的内容。因为我们要成批添加用户，然后再成批添加用户的密码，所以我们应该按/etc/passwd中的格式来编写，在newlist中，我们要把这个位置不要添什么东西。我自己制作的newlist的内容如下：<br /><br />win04:x:504:504::/home/win04:/bin/bash<br />win05:x:505:505::/home/win05:/bin/bash<br />win06:x:506:506::/home/win06:/bin/bash<br />win07:x:507:507::/home/win07:/bin/bash<br />win08:x:508:508::/home/win08:/bin/bash<br />win09:x:509:509::/home/win09:/bin/bash<br />注：最后一行，不要换行，也就是说不要留空行。<br /><br />我们再编辑newlist的密码文本newlistpwd，这个文件的用户名，也就是win04到win09的，要和上面的文件一一对应。<br /><br />win04:在这里，你自己要输入密码<br />win05:在这里，你自己要输入密码<br />win06:在这里，你自己要输入密码<br />win07:在这里，你自己要输入密码<br />win08:在这里，你自己要输入密码<br />win09:在这里，你自己要输入密码[注：这是最后一行，不要在后面留空行]<br /><br />然后执行一系列命令：<br /><br />[root@linuxsir01 root]# newusers &lt; userlist<br />在上面的一句中，是通过输入向导&lt;，把帐号加进去的。用下面的命令来看是否成功了？按:q!退出。<br /><br />[root@linuxsir01 root]# vipw<br /><br />用pwunconv命令，关闭投射密码，也就是把/etc/passwd文件中的空码移走，我们能看到我们刚才加入的用户的行中，密码段中都x已经成空的了<br /><br />[root@linuxsir01 root]# pwunconv<br /><br />看一下/etc/passwd中的密码位置上是不是有的变成!!，而我们新加入的用户，密码段则是空的，对不对？？<br /><br />[root@linuxsir01 root]#more /etc/passwd<br /><br />我们把密码文件输进去，用的也是输入向导&lt;<br /><br />[root@linuxsir01 root]# chpasswd &lt; userlistpwd<br /><br />我们再把密码影射回去。用的就是下面的命令。<br /><br />[root@linuxsir01 root]# pwconv<br />我们然后再按[CTRL]+ALT+F2来切换到控制台下，用我们生成的用户和密码来登入系统。这时就不会出现下面的提示了。。。<br /><br />[root linuxsir01 root]# chpasswd &lt; userpwd<br />chpasswd: line 6: line too long<br /><br />在redhat 8.0中，我们也可以用下面的办法来添加，还是比较麻烦。<br /><br />[root@linuxsir01 root]# redhat-config-users<br /><br />还有一个整批处理帐号的软件，也就是pdadduser，据说是强劲无比。下面的就是。<br /><br /></font>
				<a href="http://www.linux.org/apps/AppId_162.html" target="_blank">
						<font size="2">http://www.linux.org/apps/AppId_162.html</font>
				</a>
		</span>
		<br />
<img src ="http://www.cnitblog.com/ldds/aggbug/16011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-26 18:30 <a href="http://www.cnitblog.com/ldds/articles/16011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]写给Linux内核新手-关于Linux内核学习的误区</title><link>http://www.cnitblog.com/ldds/articles/16010.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sat, 26 Aug 2006 10:28:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16010.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16010.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16010.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16010.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">[转载]写给Linux内核新手-关于Linux内核学习的误区</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">原始连接：</font>
				<a href="http://www.chinaunix.net/jh/4/626486.html" target="_blank">
						<font size="2">http://www.chinaunix.net/jh/4/626486.html</font>
				</a>
				<br />
				<br />
				<br />
				<br />
				<font size="2">写给Linux内核新手-关于Linux内核学习的误区<br /><br />　　　　　　　　　写给Linux内核新手-关于Linux内核学习的误区<br /><br />　　先说句正经的：其实我没资格写这篇文章，因为自己也就一两个月以来才开始有所领悟的。因此，这里与其说是关于Linux内核学习的经验，不如说是自己的教训吧，希望不要扔鸡蛋砸我^_^<br /><br />　　　常常有人问：我想学习内核，需要什么基础吗？Linus Torvalds本人是这样回答的：你必须使用过Linux。 这个……还是有点太泛了吧，我想下面几个基础可能还是需要的，尽管不一定必需：<br />　　1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著，但总要知道分时（time-shared）和实时（real-time）的区别是什么，进程是个什么东西，CPU和系统总线、内存的关系（很粗略即可），等等。<br />　　2, 关于C语言。不需要已经很精通C语言，只要能熟练编写C程序，能看懂链表、散列表等数据结构的C实现，用过gcc编译器，就可以了。当然，如果已经精通C语言显然是大占便宜的。<br />　　3, 关于CPU的知识。这块儿可以在学习内核过程中补，但这样的话你就需要看讲解很详细的书，比方后面将会提到的《情景分析》。你是否熟悉Intel 80386 CPU？尝试着回答这几个问题来判断一下：1）说出80386的中断门和陷阱门的区别；2）说出保护模式与实模式的区别；3）多处理器机器上，普通的读-改-写回一块内存这样的动作，为什么需要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的书，目前好象只有一本《IA64Linux内核：设计与实现》──也还是Intel的，其它都是讲解基于IA32的。<br />　　以上算是知识方面吧，如果还要再补充一条，我想就是：动手编译过内核。<br /><br /><br />　　好了，我们接下来走。好多人装上Linux之后，第一件事找到内核源码所在的路径，打开一个C程序文件，开始哗哗哗翻页，看看大名鼎鼎的Linux内核代码到底长啥模样──然后关闭。这是可理解的，但却不是学习的方法。刚开始，必须从读书入手。至少要对内核有一个Overview之后，才有可能带着问题去试图阅读源代码本身。 下面就讲一下我读过的几本书：<br />　　1, 《Linux内核设计与实现》，英文名Linux Kernel Development（所以有人叫它LKD），机械工业出版社，￥35, 美国Robert Love著，陈莉君译者。 评说：<br />　　此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢占的人，对调度部分非常精通，而调度是整个系统的核心，因此本书是很权威的。这本书讲解浅显易懂，全书没有列举一条汇编语句，但是给出了整个Linux操作系统2.6内核的概观，使你能通过阅读迅速获得一个overview。而且对内核中较为混乱的部分（如下半部），它的讲解是最透彻的。对没怎么深入内核的人来说，这是强烈推荐的一本书。<br />　　　翻译：翻译水平、负责任程度都不错，但是印刷存在一些错误。买了此书的朋友可以参考我在Linux高级应用版的《Linux内核设计与实现中文版勘误》：<br /></font>
				<a href="http://bbs.chinaunix.net/forum/viewtopic.php?t=541234" target="_blank">
						<font size="2">http://bbs.chinaunix.net/forum/viewtopic.php?t=541234</font>
				</a>
				<br />
				<font size="2">另外，此书2005年有了第二版，目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。<br /><br />　　2, 《Linux内核源代码情景分析》上、下。毛德操、胡希明著，浙江大学出版社，上册￥80,下册￥70. 评说：<br />　　本书是基于2.4.0内核的，比较早，也没听说会出第二版。上册讲解内存管理、中断、异常与系统调用、进程控制、文件系统与传统Unix IPC；下册讲解socket、设备驱动、SMP和引导。关于这套书的评价褒贬不一，我个人认为其深度是同类著作中最优秀的。本书基于Intel IA32体系，由于厚度大，很多体系上的知识都捎带讲解了，所以如果你想深入了解内核的工作机制而又不非常熟悉Intel CPU的体系构造，本书是最合适的。缺点是：版本较老，没有TCP/IP协议栈部分（它讲的socket只是Unix域协议的），图表太少，不适合初学者入门。还有就是对学生朋友来说，可能书价偏高，这样的话可以考虑先买上册，因为上册是核心部分，下册一大部分都在讲具体PCI/ISA/USB设备的驱动。<br />　　翻译：没什么翻译，作者是国人，而且行文流畅。本人书桌上诸多计算机经典图书当中，这套是唯一又经典又无阅读障碍的。<br />　　</font>
				<a href="http://www.linuxforum.net/" target="_blank">
						<font size="2">www.linuxforum.net</font>
				</a>
				<font size="2">内核版好多朋友已经把这书读到六七遍了，我很惭愧，上册差不多读熟了，下册就SMP部分还看过──但这就花费了整整1年的时间，还有好多弄不懂的。这里顺便说明另外一个研究内核常见的误区：目标太庞大。要知道Linux内核（最新的2.6.13）bzip2压缩之后37M，解压缩之后244M，根本不是哪个人能够吃透的。即使是内核的核心开发团队中，恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥数人会有比较全面的了解，其它人都是做自己专门的部分。 我自己来说，目前已经决定放弃内存管理的全部（slab层、LRU、rbtree等）、文件系统部分、外设驱动部分，暂时也没打算弄IA32以外的其它体系的部分。<br /><br />　　3, 《深入理解Linux内核》第二版。中国电力出版社。也是陈莉君译。此书是Linux内核黑客在推荐图书时的首选。 评说：<br />　　此书C版的converse兄送了我一本第一版，因此就没买第二版，比较后悔。因此只就第一版说一说，第一版基于2.2,第二版2.4 。我见O'Reilly官方主页上说第三版的英文版将于2005年11月出版，也不知咱们何时才能见到。此书图表很多，形象地给出了关键数据结构的定义，与《情景分析》相比，本书内容紧凑，不会一个问题讲解动辄上百页，有提纲挈领的功用，但是深度上要逊于《情景分析》。<br /><br />　　4, 其它的几本书。市面上能见到的其它的Linux内核的图书，象《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核分析及编程》等。<br />　　《Linux设备驱动程序》第二版是基于2.4的，中文翻译不错，中国电力出版。这书强调动手实践，但它是讲解“设备驱动”的，不是最核心的东西，而且有些东西没硬件的话无法实践，可能更适合驱动开发的程序员吧，不太适合那些For fun and profit的人。此书有第三版英文版，东南大学出版社影印，讲解2.6的，行文流畅，讲解的面也比第二版更广泛，我读过其中关于同步与互斥、内存分配的部分，感觉很不错。<br />　　《Linux内核源代码完全注释》（机械工业出版社）是同济大学的博士生赵炯的著作，讲解0.1Linux内核，我没买也没看，有看过的朋友说一说。<br />　　《Linux内核分析及编程》（电子工业出版社）是刚刚出版的，国人写的，讲解2.6.11 。很多人说好，但有人说不够系统，我没买，不敢评说。<br />　　还有一本清华出的《Linux内核编程指南（第三版）》，原书应该是好书，但是翻译、排版十分糟烂，脱字跳行，根本没法看，我买了一本又扔掉了。<br /><br />　　5, 其它资源。 TLDP（The Linux Documentation Project）有大量文档，其中不少是关于内核的，有些是在国外出版过的，象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等，作者都是亲身参加开发的人，著作较为可信。<br /></font>
				<a href="http://www.linuxforum.net/" target="_blank">
						<font size="2">http://www.linuxforum.net/</font>
				</a>
				<br />
				<font size="2">　　中国Linux论坛的内核版。该版是研究内核的中文Linux社区中水平最高的，有很多专家级别的牛人，强烈推荐去学习一下（但建议不要问太过分简单的问题，人家脾气再好也会烦的^_^），它的置顶贴简直是一个包罗万象的FAQ，精华区也有很多资料。只可惜太过曲高和寡，人气不是很旺。<br /><br />　　6, 一本不是讲解Linux的书：《现代体系结构上的Unix系统：内核程序员的SMP和Caching技术》，人民邮电出版社2003版，定价￥39. 本书虽然不是讲解Linux，但是对所有Unix内核都是适用的，适合对SMP和CPU的Cache这些组成原理知识不是很熟的朋友，而且是很多国外牛人推荐的书。中文版翻译非常负责。<br /><br /><br />　　还有个很重要的问题：怎样浏览内核源代码。有的朋友喜欢在Windows上工作，用Source Insight；有的在Linux，用Source Navigator；还有专门浏览源代码的软件，象lxr（Linux Cross Reference）；还有用ctags/ectags/cscope等，这些都是很优秀的软件。我个人用Vim + ctags浏览（参考了</font>
				<a href="http://www.linuxforum.net/" target="_blank">
						<font size="2">www.linuxforum.net</font>
				</a>
				<font size="2">内核版wheelz大侠的文档，）。<br /><br />　　此外，前边已经提到的一个重要的问题是：你研究内核的目的是什么， 开发？ 乐趣？如果是开发，而且是国内做开发，把kernel API熟悉一下就差不太多了（你也知道国内的水平有多差），比方说copy_from_user()、kmalloc()函数等，kernel API在Internet上找得到，编译内核时也可以用DocBook生成（具体请参考内核源代码包下的README文件）；如果是研究，那就差别很大了，需要下很大的苦功：会用kmalloc()绝不说明你懂得Linux内核的虚存管理子系统，正如同会讲汉语不说明你懂中国文化一样。<br /><br /><br /><br /><br />　　说完了，发现前面讲的太罗嗦了，简化一下：<br />　　1, 动手编译内核<br />　　2, 精读《Linux内核设计与实现》<br />　　3, 上</font>
				<a href="http://www.linuxforum.net/" target="_blank">
						<font size="2">www.linuxforum.net</font>
				</a>
				<font size="2">内核版看置顶贴与精华区<br />　　此外就凭自己兴趣选择吧。<br /><br />下面是一篇没写完的《Linux内核模块编程入门》，不补写了，将就着看吧。 <br /><br />albcamus 2005-10-13 02:41 <br /><br />写给Linux内核新手-关于Linux内核学习的误区<br /><br />Linux内核模块编程入门<br />看到昨天有好几个问linux内核编程问题的帖子，不少是卡在了入门问题上，就整理一下入门的初步流程。针对2.6内核的Linux系统，需要你的机器上已经安装了kernel-devel这个包，也就是编译模块所必须的东西：内核的头文件和一些Makefile。<br /><br />一，Hello World程序：<br /></font>
				<div style="FONT-SIZE: 9px; MARGIN-LEFT: 5px">
						<b>CODE:</b>
				</div>
				<div class="quote" id="code1">/*file: hello.c*/<br />#ifndef __KERNEL__<br />#define __KERNEL__<br />#endif<br />#ifndef MODULE<br />#define MODULE<br />#endif<br />#include &lt;linux/init.h&gt;;<br />#include &lt;linux/module.h&gt;;<br />#include &lt;linux/kernel.h&gt;;<br /><br />static int hello_init(void)<br />{<br />printk(KERN_ALERT "Hello, The fucking crazy world\n");<br />return 0;<br />}<br /><br />static void hello_exit(void)<br />{<br />printk(KERN_ALERT "Bye, The fucking crazy world!\n");<br />}<br /><br />module_init(hello_init);<br />module_exit(hello_exit);<br /><br />MODULE_LICENSE("GPL");<br />MODULE_AUTHOR("albcamus &lt;[email]albcamus@163.com[/email]&gt;;");</div>
				<div style="FONT-SIZE: 11px; MARGIN-LEFT: 5px">
						<a onclick="CopyCode(document.getElementById('code1'));" href="javascript:">[Copy to clipboard]</a>
				</div>
				<br />
				<br />2.6内核的kbuild子系统跟2.4相比有本质的改变。我们下面尝试两种方式编译这个程序：<br />1, 你可以在本目录下这样写一个Makefile<br /><div style="FONT-SIZE: 9px; MARGIN-LEFT: 5px"><b>CODE:</b></div><div class="quote" id="code2">obj-m := hell.o<br />clean:<br />rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions</div><div style="FONT-SIZE: 11px; MARGIN-LEFT: 5px"><a onclick="CopyCode(document.getElementById('code2'));" href="javascript:">[Copy to clipboard]</a></div><br />然后用这样的命令行编译：<br />make -C /lib/modules/`uname -r`/build M=`pwd` modules<br />这时ls一下，就能看到生成了很多文件，其中hello.ko就是我们需要的内核模块。<br />2, 专业点儿，Makefile这样写：<br /><div style="FONT-SIZE: 9px; MARGIN-LEFT: 5px"><b>CODE:</b></div><div class="quote" id="code3">obj-m := hello.o<br />KERNELBUILD := /lib/modules/`uname -r`/build<br />default:<br />make -C $(KERNELBUILD) M=$(shell pwd) modules<br />clean:<br />rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions</div><div style="FONT-SIZE: 11px; MARGIN-LEFT: 5px"><a onclick="CopyCode(document.getElementById('code3'));" href="javascript:">[Copy to clipboard]</a></div><br />然后只要make一下就可以了。<br /><br />插入模块用insmod命令：<br />insmod ./hello.ko<br />这时候大家可能会问：为什么我的屏幕上没有见到输出？这个是console的日志记录级别和你printk消息时指定的级别（本例中指定为KERN_ALERT，为次高，仅次于KERN_EMERG）决定的。无论如何，你可以tail 或者cat看看系统日志的最后几行，系统日志一般为/var/log/messages，或者直接用dmesg命令，肯定能看到输出了。<br /><br />二，头文件问题。<br />C程序员都知道，要使用某个外部的函数，应当#include某个头文件，这个头文件包含了那个函数的原型(prototype)。内核的头文件在include/下，其中include/asm是个符号链接，指向你所用内核的具体的体系结构目录，比方说我的系统是i386的，那么include/asm就指向include/asm-i386 。<br />内核编程中我们不能链接libc库，不能使用libc库中的函数，所以很有些麻烦。一些重要的函数，象strcpy/strcmp/snprintf等，kernel也为我们实现并导出（export）了，而我们需要#include相关的头文件，在include/linux和include/asm中，你需要自己寻找你所要使用的函数在哪个头文件中声明，并将其#include进来。 <br /><br /><br />写给Linux内核新手-关于Linux内核学习的误区<br /><br />说点别的<br />1、楼主4K太屈材了，但是中国现在这个状况没法说。我曾经去清华紫光面试，做AS400的售前／后支持「当时他们说有Unix基础就可以，不需要很了解400」，底薪4K＋提成，提成完全看销售业绩，估计很大一部分工作是配合销售去把产品骗出去，技术性工作估计不多。如果销售情况好的话收入还是很可观的，但是具他们内部人说没有销售挣得多。在国内许多大公司，一群本科是什么杂7杂8专业的，后来混了个“计算机”方面的“研究生”，啥都不懂成天混的人也都随便拿上5K+<br /><br />2、牛人在中国会是什么下场？牛人就是象老牛一样多干活，还不一定有草吃。去年冬天我出差去昆明部署一个我们的软件，本来我只负责技术支持，职责就是按照文档把整个系统搭建起来。临走前开发人员和测试人员拍胸匍向我发誓程序完全没有问题了，我去到那里只要安装一下即可。结果到了那里，首先是客户系统被入侵而瘫痪，费了好大劲重建了系统恢复了数据库；接着发现程序有很严重bug，花了整整一天时间我给它debug。<br />知道我最终的下场是什么吗？400块长途手机费不给报销，领导说按照规定每天只给报20。嗯，“按照规定”的话，发现被黑我就应该立刻打110『没必要估计客户的面子』，然后叫合作伙伴的人来装系统（系统原来是他们装的），这样就省下200块打电话请示领导、联络客户领导的手机费；“按照规定”的话，我作为非开发人员和测试人员没义务给程序debug，当我发现程序不能正常运作的时候就应该打道回府，这样就又能省下200块了<br />我当时所在中国非常有名的一家软件上市公司「比红旗用友什么的大得多」，在这里我就不点名了<br /><br />3、“到一家实力强劲的公司（如IBM,redflag）给人家打下手”？<br />IBM内部的中国开发人员，只能从老美那里拿到裁减版的API手册，很多“牛人”的主要工作是汉化、debug、写文档和打包<br />redflag？以前曾经有一个项目需要邮件系统，看了一下redflag的邮件服务器宣传还不错，联系了一下，跟一个什么产品经理谈了谈，结果是，为了拿到项目，他们完全可以放弃linux平台把它移植到客户指定的Solaris上去，总之就是只要能中标，怎么都行！所以我看redflag需要的不是“打下手”的，需要的是能够拿到单子的sells<br /><br /><br />中国阿，就这么回事了<br />PS:我现在在搞linux教育培训工作，收入还凑合，感觉这个环境铜臭味道少一些，可以有一些闲暇时间和精力去搞自给喜欢的研究，而且没人管^_^</span>
		<br />
<img src ="http://www.cnitblog.com/ldds/aggbug/16010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-26 18:28 <a href="http://www.cnitblog.com/ldds/articles/16010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]Linux系统学习方向和方法浅谈</title><link>http://www.cnitblog.com/ldds/articles/16009.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sat, 26 Aug 2006 10:27:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16009.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16009.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16009.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16009.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">[转载]Linux系统学习方向和方法浅谈</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">信息来源：Internet<br /><br />　　由于笔者是做Linux培训的，所以对于初学Linux系统的朋友接触的比较多，对于初学Linux时遇到的问题了解的也够深刻，以下言论有不周到的地方望朋友们指出：<br />　　首先说明希望学Linux的朋友能够忘记Windows2000，最起码忘记Windows下的盘符、应用程序等基础的东西，其次要深刻明白Linux和Windows是2个不同的系统平台，可以去对比着学习，但不要直接拿Windows那套东西直接套用到Linux学习中。<br />　　学习方向：<br />　　一、桌面系统<br />　　就是系统安装好后的视窗系统，在Windows下叫Windows，在Linux下叫 X Windows，其实只是名字不一样而已(看看红旗做的桌面，真是跟Windows要多象有多象，这样虽然有助于Linux桌面的使用，但对于Linux系统的推广真是没什么好处)。<br />　　很多初学Linux人的安装好Linux后，进入其 X Windows桌面，兴奋不已，以为大功告成，Linux自己会了，这种想法是很可怕的;如果笔者告诉你Linux的X Windows环境不是Linux 系统，它只是在Linux下面运行的应用程序(类似于在Windows下运行office2000)，你是怎么想的？<br />　　Windows下的应用程序几乎是不能直接在Linux系统下安装和使用，学编程的应该明白，所以不要去找Windows工具盘安装你的RAR，QQ，RealOne等常用工具，你是装不上的。<br />　　你可以尝试去安装你硬件的最新驱动程序，安装Linux下的常用工具，做一些Linux简单的汉化，你就会理解经常在论坛里问这方面问题的朋友的困难了。<br />　　总之，学桌面，不是学Linux系统。<br /><br />　　二、内核源代码学习。跟Unix操作系统一样都是用C语言编写。<br />　　去买正版的Linux系统(不是很贵)，会附带一张或者2张Linux源代码盘，Linux程序员从这里开始，是起点也是终点。<br /><br />　　三、系统管理<br />　　也就是管理Linux系统环境:SHELL、图形、系统服务、硬件驱动等等。<br />　　系统管理Linux跟UNIX类似(是看了些Unix系统管理才这样说的)，基本上都是通过命令→配置文件→脚本文件。<br />　　笔者建议你不要一味去安装XWindows，这个X Windows环境只要你尽量保持经常使用，相信学会是自然而然的事情(感觉那真实没什么好学的，只要计算机应用在1年以上的朋友，应该都能在上面操作吧)。<br /><br />　　四、应用开发<br />　　在Linux应用上，Linux确实跟它的竞争对手Windows相比还有一定的差距。不过在高端的应用上，Linux的市场是越来越大，如：<br />　　Linux内核开发：<br />　　——PDA个人掌上电脑；<br />　　——专用的网络设备；防火墙设备，VPN设备等是用Linux编写的，国产的，现在销售的十分不错；<br />　　——硬件驱动程序；<br /><br />　　Linux网络编程：<br />　　——php编程；<br />　　——jsp编程；<br />　　——perl，cgi编程；<br /><br />　　Linux系统下数据库的开发：<br />　　——My Sql中小型数据库系统；<br />　　——Oracle数据库；<br />　　——DB2数据库，IBM数据库系统；<br /><br />　　服务器领域<br />　　一说Linux，很多自然就想到了做服务器，但现在网络服务器方面，Linux的市场占有率确实是第一的；<br /><br />　　Linux服务器领域：<br />　　——代理服务器，使用的是Linux的iptables功能；<br />　　——电影服务器，使用的是Linux的samba服务的功能，文件和打印共享服务器；<br />　　——游戏服务器，cs服务器，在Linux系统下使用cs的Linux版本建立的服务器；<br />　　——客户存档服务器，采用的Linux的ftp服务器，常用的有:wu-ftp，pro-ftp软件建立的；<br />　　——WWW服务器，使用的是Linux下的Apache服务器软件；<br />　　——FTP服务器，下载服务器，使用的是Linux下的wu-ftp，pro-ftp，vs-ftp软件：<br />　　——Mail服务器，采用的是Linux下的sendmail，qmail软件；<br />　　——dns服务器，使用的是Linux下的bind软件；<br />　　——数据库服务器，使用的是MySql或者Oracle软件；<br />　　——防火墙，软件防火墙服务器，使用的是Linux的iptables功能建立的；<br />　　——路由器，软路由器，使用的是Linux下的routed软件建立的；<br />　　——拨号服务器，vpn服务器等等；<br /><br />　　六、系统集成<br />　　范围太广，内容太多。相信IBM等建立的Linux研发中心主要就是做这个的。</font>
		</span>
		<br />
<img src ="http://www.cnitblog.com/ldds/aggbug/16009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-26 18:27 <a href="http://www.cnitblog.com/ldds/articles/16009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]API函数大全</title><link>http://www.cnitblog.com/ldds/articles/16007.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Sat, 26 Aug 2006 10:25:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/16007.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/16007.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/16007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/16007.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/16007.html</trackback:ping><description><![CDATA[
		<strong>
				<span class="tpc_title">[转载]API函数大全</span>
				<br />
				<br />
		</strong>
		<span class="tpc_content">
				<font size="2">文章作者：刘景军[Eddie Liu]<br />信息来源：</font>
				<a href="http://blog.csdn.net/eddieliugd/archive/2004/12/06/206387.aspx" target="_blank">
						<font size="2">http://blog.csdn.net/eddieliugd/archive/2004/12/06/206387.aspx</font>
				</a>
				<br />
				<br />
				<font size="2">1. API之网络函数 <br /><br />WNetAddConnection 创建同一个网络资源的永久性连接 <br />WNetAddConnection2 创建同一个网络资源的连接 <br />WNetAddConnection3 创建同一个网络资源的连接 <br />WNetCancelConnection 结束一个网络连接 <br />WNetCancelConnection2 结束一个网络连接 <br />WNetCloseEnum 结束一次枚举操作 <br />WNetConnectionDialog 启动一个标准对话框，以便建立同网络资源的连接 <br />WNetDisconnectDialog 启动一个标准对话框，以便断开同网络资源的连接 <br />WNetEnumResource 枚举网络资源 <br />WNetGetConnection 获取本地或已连接的一个资源的网络名称 <br />WNetGetLastError 获取网络错误的扩展错误信息 <br />WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC（统一命名规范）名称 <br />WNetGetUser 获取一个网络资源用以连接的名字 <br />WNetOpenEnum 启动对网络资源进行枚举的过程 <br /><br />2. API之消息函数 <br /><br />BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 <br />GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 <br />GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 <br />PostMessage 将一条消息投递到指定窗口的消息队列 <br />PostThreadMessage 将一条消息投递给应用程序 <br />RegisterWindowMessage 获取分配给一个字串标识符的消息编号 <br />ReplyMessage 答复一个消息 <br />SendMessage 调用一个窗口的窗口函数，将一条消息发给那个窗口 <br />SendMessageCallback 将一条消息发给窗口 <br />SendMessageTimeout 向窗口发送一条消息 <br />SendNotifyMessage 向窗口发送一条消息 <br /><br />3. API之文件处理函数 <br /><br />CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 <br />CompareFileTime 对比两个文件的时间 <br />CopyFile 复制文件 <br />CreateDirectory 创建一个新目录 <br />CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 <br />CreateFileMapping 创建一个新的文件映射对象 <br />DeleteFile 删除指定文件 <br />DeviceIoControl 对设备执行指定的操作 <br />DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 <br />FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 <br />FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 <br />FileTimeToSystemTime 根据一个FILETIME结构的内容，装载一个SYSTEMTIME结构 <br />FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 <br />FindFirstFile 根据文件名查找文件 <br />FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 <br />FlushFileBuffers 针对指定的文件句柄，刷新内部文件缓冲区 <br />FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 <br />GetBinaryType 判断文件是否可以执行 <br />GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 <br />GetCurrentDirectory 在一个缓冲区中装载当前目录 <br />GetDiskFreeSpace 获取与一个磁盘的组织有关的信息，以及了解剩余空间的容量 <br />GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 <br />GetDriveType 判断一个磁盘驱动器的类型 <br />GetExpandedName 取得一个压缩文件的全名 <br />GetFileAttributes 判断指定文件的属性 <br />GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 <br />GetFileSize 判断文件长度 <br />GetFileTime 取得指定文件的时间信息 <br />GetFileType 在给出文件句柄的前提下，判断文件类型 <br />GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息 <br />GetFileVersionInfoSize 针对包含了版本资源的一个文件，判断容纳文件版本信息需要一个多大的缓冲区 <br />GetFullPathName 获取指定文件的完整路径名 <br />GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 <br />GetLogicalDriveStrings 获取一个字串，其中包含了当前所有逻辑驱动器的根驱动器路径 <br />GetOverlappedResult 判断一个重叠操作当前的状态 <br />GetPrivateProfileInt 为初始化文件（.ini文件）中指定的条目获取一个整数值 <br />GetPrivateProfileSection 获取指定小节（在.ini文件中）所有项名和值的一个列表 <br />GetPrivateProfileString 为初始化文件中指定的条目取得字串 <br />GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值 <br />GetProfileSection 获取指定小节（在win.ini文件中）所有项名和值的一个列表 <br />GetProfileString 为win.ini初始化文件中指定的条目取得字串 <br />GetShortPathName 获取指定文件的短路径名 <br />GetSystemDirectory 取得Windows系统目录（即System目录）的完整路径名 <br />GetTempFileName 这个函数包含了一个临时文件的名字，它可由应用程序使用 <br />GetTempPath 获取为临时文件指定的路径 <br />GetVolumeInformation 获取与一个磁盘卷有关的信息 <br />GetWindowsDirectory 获取Windows目录的完整路径名 <br />hread 参考lread <br />hwrite 参考lwrite函数 <br />lclose 关闭指定的文件 <br />lcreat 创建一个文件 <br />llseek 设置文件中进行读写的当前位置 <br />LockFile 锁定文件的某一部分，使其不与其他应用程序共享 <br />LockFileEx 与LockFile相似，只是它提供了更多的功能 <br />lopen 以二进制模式打开指定的文件 <br />lread 将文件中的数据读入内存缓冲区 <br />lwrite 将数据从内存缓冲区写入一个文件 <br />LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件 <br />LZCopy 复制一个文件 <br />LZInit 这个函数用于初始化内部缓冲区 <br />LZOpenFile 该函数能执行大量不同的文件处理，而且兼容于压缩文件 <br />LZRead 将数据从文件读入内存缓冲区 <br />LZSeek 设置一个文件中进行读写的当前位置 <br />MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间 <br />MoveFile 移动文件 <br />OpenFile 这个函数能执行大量不同的文件操作 <br />OpenFileMapping 打开一个现成的文件映射对象 <br />QueryDosDevice 在Windows NT中，DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况 <br />ReadFile 从文件中读出数据 <br />ReadFileEx 与ReadFile相似，只是它只能用于异步读操作，并包含了一个完整的回调 <br />RegCloseKey 关闭系统注册表中的一个项（或键） <br />RegConnectRegistry 访问远程系统的部分注册表 <br />RegCreateKey 在指定的项下创建或打开一个项 <br />RegCreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数 <br />RegDeleteKey 删除现有项下方一个指定的子项 <br />RegDeleteValue 删除指定项下方的一个值 <br />RegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx <br />RegEnumKeyEx 枚举指定项下方的子项 <br />RegEnumValue 枚举指定项的值 <br />RegFlushKey 将对项和它的子项作出的改动实际写入磁盘 <br />RegGetKeySecurity 获取与一个注册表项有关的安全信息 <br />RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息 <br />RegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时，用这个函数提供一种通知机制 <br />RegOpenKey 打开一个现有的注册表项 <br />RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数 <br />RegQueryInfoKey 获取与一个项有关的信息 <br />RegQueryValue 取得指定项或子项的默认（未命名）值 <br />RegQueryValueEx 获取一个项的设置值 <br />RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息；并创建一个备份，在其中包含当前注册表信息 <br />RegRestoreKey 从一个磁盘文件恢复注册表信息 <br />RegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件 <br />RegSetKeySecurity 设置指定项的安全特性 <br />RegSetValue 设置指定项或子项的默认值 <br />RegSetValueEx 设置指定项的值 <br />RegUnLoadKey 卸载指定的项以及它的所有子项 <br />RemoveDirectory 删除指定目录 <br />SearchPath 查找指定文件 <br />SetCurrentDirectory 设置当前目录 <br />SetEndOfFile 针对一个打开的文件，将当前文件位置设为文件末尾 <br />SetFileAttributes 设置文件属性 <br />SetFilePointer 在一个文件中设置当前的读写位置 <br />SetFileTime 设置文件的创建、访问及上次修改时间 <br />SetHandleCount 这个函数不必在win32下使用；即使使用，也不会有任何效果 <br />SetVolumeLabel 设置一个磁盘的卷标（Label） <br />SystemTimeToFileTime 根据一个FILETIME结构的内容，载入一个SYSTEMTIME结构 <br />UnlockFile 解除对一个文件的锁定 <br />UnlockFileEx 解除对一个文件的锁定 <br />UnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射 <br />VerFindFile 用这个函数决定一个文件应安装到哪里 <br />VerInstallFile 用这个函数安装一个文件 <br />VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 <br />VerQueryValue 这个函数用于从版本资源中获取信息 <br />WriteFile 将数据写入一个文件 <br />WriteFileEx 与WriteFile类似，只是它只能用于异步写操作，并包括了一个完整的回调 <br />WritePrivateProfileSection 为一个初始化文件（.ini）中指定的小节设置所有项名和值 <br />WritePrivateProfileString 在初始化文件指定小节内设置一个字串 <br />WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值 <br />WriteProfileString 在Win.ini初始化文件指定小节内设置一个字串 <br /><br />4. API之打印函数 <br />AbortDoc 取消一份文档的打印 <br />AbortPrinter 删除与一台打印机关联在一起的缓冲文件 <br />AddForm 为打印机的表单列表添加一个新表单 <br />AddJob 用于获取一个有效的路径名，以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 <br />AddMonitor 为系统添加一个打印机监视器 <br />AddPort 启动“添加端口”对话框，允许用户在系统可用端口列表中加入一个新端口 <br />AddPrinter 在系统中添加一台新打印机 <br />AddPrinterConnection 连接指定的打印机 <br />AddPrinterDriver 为指定的系统添加一个打印驱动程序 <br />AddPrintProcessor 为指定的系统添加一个打印处理器 <br />AddPrintProvidor 为系统添加一个打印供应商 <br />AdvancedDocumentProperties 启动打印机文档设置对话框 <br />ClosePrinter 关闭一个打开的打印机对象 <br />ConfigurePort 针对指定的端口，启动一个端口配置对话框 <br />ConnectToPrinterDlg 启动连接打印机对话框，用它同访问网络的打印机连接 <br />DeleteForm 从打印机可用表单列表中删除一个表单 <br />DeleteMonitor 删除指定的打印监视器 <br />DeletePort 启动“删除端口”对话框，允许用户从当前系统删除一个端口 <br />DeletePrinter 将指定的打印机标志为从系统中删除 <br />DeletePrinterConnection 删除与指定打印机的连接 <br />DeletePrinterDriver 从系统删除一个打印机驱动程序 <br />DeletePrintProcessor 从指定系统删除一个打印处理器 <br />DeletePrintProvidor 从系统中删除一个打印供应商 <br />DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 <br />DocumentProperties 打印机配置控制函数 <br />EndDocAPI 结束一个成功的打印作业 <br />EndDocPrinter 在后台打印程序的级别指定一个文档的结束 <br />EndPage 用这个函数完成一个页面的打印，并准备设备场景，以便打印下一个页 <br />EndPagePrinter 指定一个页在打印作业中的结尾 <br />EnumForms 枚举一台打印机可用的表单 <br />EnumJobs 枚举打印队列中的作业 <br />EnumMonitors 枚举可用的打印监视器 <br />EnumPorts 枚举一个系统可用的端口 <br />EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 <br />EnumPrinters 枚举系统中安装的打印机 <br />EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 <br />EnumPrintProcessors 枚举系统中可用的打印处理器 <br />Escape 设备控制函数 <br />FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 <br />FindFirstPrinterChangeNotification 创建一个新的改变通告对象，以便我们注意打印机状态的各种变化 <br />FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 <br />FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 <br />GetForm 取得与指定表单有关的信息 <br />GetJob 获取与指定作业有关的信息 <br />GetPrinter 取得与指定打印机有关的信息 <br />GetPrinterData 为打印机设置注册表配置信息 <br />GetPrinterDriver 针对指定的打印机，获取与打印机驱动程序有关的信息 <br />GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 <br />GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 <br />OpenPrinter 打开指定的打印机，并获取打印机的句柄 <br />PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 <br />PrinterProperties 启动打印机属性对话框，以便对打印机进行配置 <br />ReadPrinter 从打印机读入数据 <br />ResetDC 重设一个设备场景 <br />ResetPrinter 改变指定打印机的默认数据类型及文档设置 <br />ScheduleJob 提交一个要打印的作业 <br />SetAbortProc 为Windows指定取消函数的地址 <br />SetForm 为指定的表单设置信息 <br />SetJob 对一个打印作业的状态进行控制 <br />SetPrinter 对一台打印机的状态进行控制 <br />SetPrinterData 设置打印机的注册表配置信息 <br />StartDoc 开始一个打印作业 <br />StartDocPrinter 在后台打印的级别启动一个新文档 <br />StartPage 打印一个新页前要先调用这个函数 <br />StartPagePrinter 在打印作业中指定一个新页的开始 <br />WritePrinter 将发送目录中的数据写入打印机 <br /><br />5. API之文本和字体函数 <br /><br />AddFontResource 在Windows系统中添加一种字体资源 <br />CreateFont 用指定的属性创建一种逻辑字体 <br />CreateFontIndirect 用指定的属性创建一种逻辑字体 <br />CreateScalableFontResource 为一种TureType字体创建一个资源文件，以便能用API函数AddFontResource将其加入Windows系统 <br />DrawText 将文本描绘到指定的矩形中 <br />DrawTextEx 与DrawText相似，只是加入了更多的功能 <br />EnumFontFamilies 列举指定设备可用的字体 <br />EnumFontFamiliesEx 列举指定设备可用的字体 <br />EnumFonts 列举指定设备可用的字体 <br />ExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数 <br />GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时，本函数可判断纵横比大小 <br />GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小 <br />GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 <br />GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 <br />GetCharWidth 调查字体中一个或多个字符的宽度 <br />GetFontData 接收一种可缩放字体文件的数据 <br />GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息 <br />GetGlyphOutline 取得TureType字体中构成一个字符的曲线信息 <br />GetKerningPairs 取得指定字体的字距信息 <br />GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息 <br />GetRasterizerCaps 了解系统是否有能力支持可缩放的字体 <br />GetTabbedTextExtent 判断一个字串占据的范围，同时考虑制表站扩充的因素 <br />GetTextAlign 接收一个设备场景当前的文本对齐标志 <br />GetTextCharacterExtra 判断额外字符间距的当前值 <br />GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符 <br />GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息 <br />GetTextColor 判断当前字体颜色。通常也称为“前景色” <br />GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 <br />GetTextExtentPoint 判断一个字串的大小（范围） <br />GetTextFace 获取一种字体的字样名 <br />GetTextMetrics 获取与选入一种设备场景的物理字体有关的信息 <br />GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态 <br />PolyTextOut 描绘一系列字串 <br />RemoveFontResource 从Windows系统中删除一种字体资源 <br />SetMapperFlags Windows对字体进行映射时，可用该函数选择与目标设备的纵横比相符的光栅字体 <br />SetTextAlign 设置文本对齐方式，并指定在文本输出过程中使用设备场景的当前位置 <br />SetTextCharacterExtra 描绘文本的时候，指定要在字符间插入的额外间距 <br />SetTextColor 设置当前文本颜色。这种颜色也称为“前景色” <br />SetTextJustification 通过指定一个文本行应占据的额外空间，可用这个函数对文本进行两端对齐处理 <br />TabbedTextOut 支持制表站的一个文本描绘函数 <br />TextOut 文本绘图函数 <br /><br />6. API之菜单函数 <br /><br />AppendMenu 在指定的菜单里添加一个菜单项 <br />CheckMenuItem 复选或撤消复选指定的菜单条目 <br />CheckMenuRadioItem 指定一个菜单条目被复选成“单选”项目 <br />CreateMenu 创建新菜单 <br />CreatePopupMenu 创建一个空的弹出式菜单 <br />DeleteMenu 删除指定的菜单条目 <br />DestroyMenu 删除指定的菜单 <br />DrawMenuBar 为指定的窗口重画菜单 <br />EnableMenuItem 允许或禁止指定的菜单条目 <br />GetMenu 取得窗口中一个菜单的句柄 <br />GetMenuCheckMarkDimensions 返回一个菜单复选符的大小 <br />GetMenuContextHelpId 取得一个菜单的帮助场景ID <br />GetMenuDefaultItem 判断菜单中的哪个条目是默认条目 <br />GetMenuItemCount 返回菜单中条目（菜单项）的数量 <br />GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID <br />GetMenuItemInfo 取得（接收）与一个菜单条目有关的特定信息 <br />GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息 <br />GetMenuState 取得与指定菜单条目状态有关的信息 <br />GetMenuString 取得指定菜单条目的字串 <br />GetSubMenu 取得一个弹出式菜单的句柄，它位于菜单中指定的位置 <br />GetSystemMenu 取得指定窗口的系统菜单的句柄 <br />HiliteMenuItem 控制顶级菜单条目的加亮显示状态 <br />InsertMenu 在菜单的指定位置处插入一个菜单条目，并根据需要将其他条目向下移动 <br />InsertMenuItem 插入一个新菜单条目 <br />IsMenu 判断指定的句柄是否为一个菜单的句柄 <br />LoadMenu 从指定的模块或应用程序实例中载入一个菜单 <br />LoadMenuIndirect 载入一个菜单 <br />MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点 <br />ModifyMenu 改变菜单条目 <br />RemoveMenu 删除指定的菜单条目 <br />SetMenu 设置窗口菜单 <br />SetMenuContextHelpId 设置一个菜单的帮助场景ID <br />SetMenuDefaultItem 将一个菜单条目设为默认条目 <br />SetMenuItemBitmaps 设置一幅特定位图，令其在指定的菜单条目中使用，代替标准的复选符号（√） <br />SetMenuItemInfo 为一个菜单条目设置指定的信息 <br />TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单 <br />TrackPopupMenuEx 与TrackPopupMenu相似，只是它提供了额外的功能 <br /><br />7. API之位图、图标和光栅运算函数 <br />BitBlt 将一幅位图从一个设备场景复制到另一个 <br />CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 <br />CopyImage 复制位图、图标或指针，同时在复制过程中进行一些转换工作 <br />CreateBitmap 按照规定的格式创建一幅与设备有关位图 <br />CreateBitmapIndirect 创建一幅与设备有关位图 <br />CreateCompatibleBitmap 创建一幅与设备有关位图，它与指定的设备场景兼容 <br />CreateCursor 创建一个鼠标指针 <br />CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 <br />CreateDIBSection 创建一个DIBSection <br />CreateIcon 创建一个图标 <br />CreateIconIndirect 创建一个图标 <br />DestroyCursor 清除指定的鼠标指针，并释放它占用的所有系统资源 <br />DestroyIcon 清除图标 <br />DrawIcon 在指定的位置画一个图标 <br />DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比，这个函数提供了更多的功能 <br />ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标，或是否有图标与系统注册表中指定的文件存在关联并提取之 <br />ExtractIcon 判断一个可执行文件或DLL中是否有图标存在，并将其提取出来 <br />GetBitmapBits 将来自位图的二进制位复制到一个缓冲区 <br />GetBitmapDimensionEx 取得一幅位图的宽度和高度 <br />GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息 <br />GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 <br />GetIconInfo 取得与图标有关的信息 <br />GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式 <br />LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 <br />LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 <br />LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 <br />LoadIcon 从指定的模块或应用程序实例中载入一个图标 <br />LoadImage 载入一个位图、图标或指针 <br />MaskBlt 执行复杂的图象传输，同时进行掩模（MASK）处理 <br />PatBlt 在当前选定的刷子的基础上，用一个图案填充指定的设备场景 <br />PlgBlt 复制一幅位图，同时将其转换成一个平行四边形。利用它可对位图进行旋转处理 <br />SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 <br />SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位 <br />SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息 <br />SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 <br />SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备 <br />SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式 <br />StretchBlt 将一幅位图从一个设备场景复制到另一个 <br />StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 <br /><br />8. API之绘图函数 <br /><br />AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作 <br />AngleArc 用一个连接弧画一条线 <br />Arc 画一个圆弧 <br />BeginPath 启动一个路径分支 <br />CancelDC 取消另一个线程里的长时间绘图操作 <br />Chord 画一个弦 <br />CloseEnhMetaFile 关闭指定的增强型图元文件设备场景，并将新建的图元文件返回一个句柄 <br />CloseFigure 描绘到一个路径时，关闭当前打开的图形 <br />CloseMetaFile 关闭指定的图元文件设备场景，并向新建的图元文件返回一个句柄 <br />CopyEnhMetaFile 制作指定增强型图元文件的一个副本（拷贝） <br />CopyMetaFile 制作指定（标准）图元文件的一个副本 <br />CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 <br />CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子，以便指定刷子样式（图案） <br />CreateEnhMetaFile 创建一个增强型的图元文件设备场景 <br />CreateHatchBrush 创建带有阴影图案的一个刷子 <br />CreateMetaFile 创建一个图元文件设备场景 <br />CreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 <br />CreatePen 用指定的样式、宽度和颜色创建一个画笔 <br />CreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 <br />CreateSolidBrush 用纯色创建一个刷子 <br />DeleteEnhMetaFile 删除指定的增强型图元文件 <br />DeleteMetaFile 删除指定的图元文件 <br />DeleteObject 删除GDI对象，对象使用的所有系统资源都会被释放 <br />DrawEdge 用指定的样式描绘一个矩形的边框 <br />DrawEscape 换码（Escape）函数将数据直接发至显示设备驱动程序 <br />DrawFocusRect 画一个焦点矩形 <br />DrawFrameControl 描绘一个标准控件 <br />DrawState 为一幅图象或绘图操作应用各式各样的效果 <br />Ellipse 描绘一个椭圆，由指定的矩形围绕 <br />EndPath 停止定义一个路径 <br />EnumEnhMetaFile 针对一个增强型图元文件，列举其中单独的图元文件记录 <br />EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 <br />EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 <br />ExtCreatePen 创建一个扩展画笔（装饰或几何） <br />ExtFloodFill 在指定的设备场景里，用当前选择的刷子填充一个区域 <br />FillPath 关闭路径中任何打开的图形，并用当前刷子填充 <br />FillRect 用指定的刷子填充一个矩形 <br />FlattenPath 将一个路径中的所有曲线都转换成线段 <br />FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 <br />FrameRect 用指定的刷子围绕一个矩形画一个边框 <br />GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 <br />GdiFlush 执行任何未决的绘图操作 <br />GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中 <br />GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列 <br />GetArcDirection 画圆弧的时候，判断当前采用的绘图方向 <br />GetBkColor 取得指定设备场景当前的背景颜色 <br />GetBkMode 针对指定的设备场景，取得当前的背景填充模式 <br />GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 <br />GetCurrentObject 获得指定类型的当前选定对象 <br />GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置 <br />GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄 <br />GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 <br />GetEnhMetaFileDescription 返回对一个增强型图元文件的说明 <br />GetEnhMetaFileHeader 取得增强型图元文件的图元文件头 <br />GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 <br />GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄 <br />GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区 <br />GetMiterLimit 取得设备场景的斜率限制（Miter）设置 <br />GetNearestColor 根据设备的显示能力，取得与指定颜色最接近的一种纯色 <br />GetObjectAPI 取得对指定对象进行说明的一个结构 <br />GetObjectType 判断由指定句柄引用的GDI对象的类型 <br />GetPath 取得对当前路径进行定义的一系列数据 <br />GetPixel 在指定的设备场景中取得一个像素的RGB值 <br />GetPolyFillMode 针对指定的设备场景，获得多边形填充模式 <br />GetROP2 针对指定的设备场景，取得当前的绘图模式 <br />GetStockObject 取得一个固有对象（Stock） <br />GetSysColorBrush 为任何一种标准系统颜色取得一个刷子 <br />GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据，将一个增强型图元文件转换成标准windows图元文件 <br />InvertRect 通过反转每个像素的值，从而反转一个设备场景中指定的矩形 <br />LineDDA 枚举指定线段中的所有点 <br />LineTo 用当前画笔画一条线，从当前位置连到一个指定的点 <br />MoveToEx 为指定的设备场景指定一个新的当前画笔位置 <br />PaintDesk 在指定的设备场景中描绘桌面墙纸图案 <br />PathToRegion 将当前选定的路径转换到一个区域里 <br />Pie 画一个饼图 <br />PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 <br />PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录 <br />PlayMetaFile 在指定的设备场景中回放一个图元文件 <br />PlayMetaFileRecord 回放来自图元文件的单条记录 <br />PolyBezier 描绘一条或多条贝塞尔（Bezier）曲线 <br />PolyDraw 描绘一条复杂的曲线，由线段及贝塞尔曲线组成 <br />Polygon 描绘一个多边形 <br />Polyline 用当前画笔描绘一系列线段 <br />PolyPolygon 用当前选定画笔描绘两个或多个多边形 <br />PolyPolyline 用当前选定画笔描绘两个或多个多边形 <br />Rectangle 用当前选定的画笔描绘矩形，并用当前选定的刷子填充 <br />RoundRect 用当前选定的画笔画一个圆角矩形，并用当前选定的刷子在其中填充 <br />SelectClipPath 将设备场景当前的路径合并到剪切区域里 <br />SelectObject 为当前设备场景选择图形对象 <br />SetArcDirection 设置圆弧的描绘方向 <br />SetBkColor 为指定的设备场景设置背景颜色 <br />SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 <br />SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 <br />SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 <br />SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 <br />SetMiterLimit 设置设备场景当前的斜率限制 <br />SetPixel 在指定的设备场景中设置一个像素的RGB值 <br />SetPixelV 在指定的设备场景中设置一个像素的RGB值 <br />SetPolyFillMode 设置多边形的填充模式 <br />SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 <br />SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件 <br />StrokeAndFillPath 针对指定的设备场景，关闭路径上打开的所有区域 <br />StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭 <br />UnrealizeObject 将一个刷子对象选入设备场景之前，如刷子的起点准备用SetBrushOrgEx修改，则必须先调用本函数 <br />WidenPath 根据选定画笔的宽度，重新定义当前选定的路径 <br /><br />9. API之设备场景函数 <br /><br />CombineRgn 将两个区域组合为一个新区域 <br />CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 <br />CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 <br />CreateDC 为专门设备创建设备场景 <br />CreateEllipticRgn 创建一个椭圆 <br />CreateEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域 <br />CreateIC 为专用设备创建一个信息场景 <br />CreatePolygonRgn 创建一个由一系列点围成的区域 <br />CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 <br />CreateRectRgn 创建一个矩形区域 <br />CreateRectRgnIndirect 创建一个矩形区域 <br />CreateRoundRectRgn 创建一个圆角矩形 <br />DeleteDC 删除专用设备场景或信息场景，释放所有相关窗口资源 <br />DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标 <br />EqualRgn 确定两个区域是否相等 <br />ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图 <br />ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域 <br />ExtCreateRegion 根据世界转换修改区域 <br />ExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区 <br />FillRgn 用指定刷子填充指定区域 <br />FrameRgn 用指定刷子围绕指定区域画一个外框 <br />GetBoundsRect 获取指定设备场景的边界矩形 <br />GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形 <br />GetClipRgn 获取设备场景当前剪裁区 <br />GetDC 获取指定窗口的设备场景 <br />GetDCEx 为指定窗口获取设备场景。相比GetDC，本函数提供了更多的选项 <br />GetDCOrgEx 获取指定设备场景起点位置（以屏幕坐标表示） <br />GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息 <br />GetGraphicsMode 确定是否允许增强图形模式（世界转换） <br />GetMapMode 为特定设备场景调入映象模式 <br />GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区 <br />GetRgnBox 获取完全包含指定区域的最小矩形 <br />GetUpdateRgn 确定指定窗口的刷新区域。该区域当前无效，需要刷新 <br />GetViewportExtEx 获取设备场景视口（viewport）范围 <br />GetViewportOrgEx 获取设备场景视口起点 <br />GetWindowDC 获取整个窗口（包括边框、滚动条、标题栏、菜单等）的设备场景 <br />GetWindowExtEx 获取指定设备场景的窗口范围 <br />GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点 <br />GetWindowRgn 获取窗口区域 <br />GetWorldTransform 如果有世界转换，为设备场景获取当前世界转换 <br />IntersectClipRect 为指定设备定义一个新的剪裁区 <br />InvalidateRgn 使窗口指定区域不活动，并将它加入窗口刷新区，使之可随后被重画 <br />InvertRgn 通过颠倒每个像素值反转设备场景指定区域 <br />LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标 <br />ModifyWorldTransform 根据指定的模式修改世界转换 <br />OffsetClipRgn 按指定量平移设备场景剪裁区 <br />OffsetRgn 按指定偏移量平移指定区域 <br />OffsetViewportOrgEx 平移设备场景视口区域 <br />OffsetWindowOrgEx 平移指定设备场景窗口起点 <br />PaintRgn 用当前刷子背景色填充指定区域 <br />PtInRegion 确定点是否在指定区域内 <br />PtVisible 确定指定点是否可见（即，点是否在设备场景剪裁区内） <br />RectInRegion 确定矩形是否有部分在指定区域内 <br />RectVisible 确定指定矩形是否有部分可见（是否在设备场景剪裁区内） <br />ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景 <br />RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景 <br />SaveDC 将指定设备场景状态保存到Windows设备场景堆栈 <br />ScaleViewportExtEx 缩放设备场景视口的范围 <br />ScaleWindowExtEx 缩放指定设备场景窗口范围 <br />ScrollDC 在窗口（由设备场景代表）中水平和（或）垂直滚动矩形 <br />SelectClipRgn 为指定设备场景选择新的剪裁区 <br />SetBoundsRect 设置指定设备场景的边界矩形 <br />SetGraphicsMode 允许或禁止增强图形模式，以提供某些支持（包括世界转换） <br />SetMapMode 设置指定设备场景的映射模式 <br />SetRectRgn 设置区域为指定的矩形 <br />SetViewportExtEx 设置设备场景视口范围 <br />SetViewportOrgEx 设置设备场景视口起点 <br />SetWindowExtEx 设置指定设备场景窗口范围 <br />SetWindowOrgEx 设置指定设备场景窗口起点 <br />SetWindowRgn 设置窗口区域 <br />SetWorldTransform 设置世界转换 <br />ValidateRgn 激活窗口中指定区域，把它从刷新区移走 <br />WindowFromDC 取回与某一设备场景相关的窗口的句柄 <br /><br />10. API之硬件与系统函数 <br />ActivateKeyboardLayout 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义 <br />Beep 用于生成简单的声音 <br />CharToOem 将一个字串从ANSI字符集转换到OEM字符集 <br />ClipCursor 将指针限制到指定区域 <br />ConvertDefaultLocale 将一个特殊的地方标识符转换成真实的地方ID <br />CreateCaret 根据指定的信息创建一个插入符（光标），并将它选定为指定窗口的默认插入符 <br />DestroyCaret 清除（破坏）一个插入符 <br />EnumCalendarInfo 枚举在指定“地方”环境中可用的日历信息 <br />EnumDateFormats 列举指定的“当地”设置中可用的长、短日期格式 <br />EnumSystemCodePages 枚举系统中已安装或支持的代码页 <br />EnumSystemLocales 枚举系统已经安装或提供支持的“地方”设置 <br />EnumTimeFormats 枚举一个指定的地方适用的时间格式 <br />ExitWindowsEx 退出windows，并用特定的选项重新启动 <br />ExpandEnvironmentStrings 扩充环境字串 <br />FreeEnvironmentStrings 翻译指定的环境字串块 <br />GetACP 判断目前正在生效的ANSI代码页 <br />GetAsyncKeyState 判断函数调用时指定虚拟键的状态 <br />GetCaretBlinkTime 判断插入符光标的闪烁频率 <br />GetCaretPos 判断插入符的当前位置 <br />GetClipCursor 取得一个矩形，用于描述目前为鼠标指针规定的剪切区域 <br />GetCommandLine 获得指向当前命令行缓冲区的一个指针 <br />GetComputerName 取得这台计算机的名称 <br />GetCPInfo 取得与指定代码页有关的信息 <br />GetCurrencyFormat 针对指定的“地方”设置，根据货币格式格式化一个数字 <br />GetCursor 获取目前选择的鼠标指针的句柄 <br />GetCursorPos 获取鼠标指针的当前位置 <br />GetDateFormat 针对指定的“当地”格式，对一个系统日期进行格式化 <br />GetDoubleClickTime 判断连续两次鼠标单击之间会被处理成双击事件的间隔时间 <br />GetEnvironmentStrings 为包含了当前环境字串设置的一个内存块分配和返回一个句柄 <br />GetEnvironmentVariable 取得一个环境变量的值 <br />GetInputState 判断是否存在任何待决（等待处理）的鼠标或键盘事件 <br />GetKBCodePage 由GetOEMCP取代，两者功能完全相同 <br />GetKeyboardLayout 取得一个句柄，描述指定应用程序的键盘布局 <br />GetKeyboardLayoutList 获得系统适用的所有键盘布局的一个列表 <br />GetKeyboardLayoutName 取得当前活动键盘布局的名称 <br />GetKeyboardState 取得键盘上每个虚拟键当前的状态 <br />GetKeyboardType 了解与正在使用的键盘有关的信息 <br />GetKeyNameText 在给出扫描码的前提下，判断键名 <br />GetKeyState 针对已处理过的按键，在最近一次输入信息时，判断指定虚拟键的状态 <br />GetLastError 针对之前调用的api函数，用这个函数取得扩展错误信息 <br />GetLocaleInfo 取得与指定“地方”有关的信息 <br />GetLocalTime 取得本地日期和时间 <br />GetNumberFormat 针对指定的“地方”，按特定的格式格式化一个数字 <br />GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码页 <br />GetQueueStatus 判断应用程序消息队列中待决（等待处理）的消息类型 <br />GetSysColor 判断指定windows显示对象的颜色 <br />GetSystemDefaultLangID 取得系统的默认语言ID <br />GetSystemDefaultLCID 取得当前的默认系统“地方” <br />GetSystemInfo 取得与底层硬件平台有关的信息 <br />GetSystemMetrics 返回与windows环境有关的信息 <br />GetSystemPowerStatus 获得与当前系统电源状态有关的信息 <br />GetSystemTime 取得当前系统时间，这个时间采用的是“协同世界时间”（即UTC，也叫做GMT）格式 <br />GetSystemTimeAdjustment 使内部系统时钟与一个外部的时钟信号源同步 <br />GetThreadLocale 取得当前线程的地方ID <br />GetTickCount 用于获取自windows启动以来经历的时间长度（毫秒） <br />GetTimeFormat 针对当前指定的“地方”，按特定的格式格式化一个系统时间 <br />GetTimeZoneInformation 取得与系统时区设置有关的信息 <br />GetUserDefaultLangID 为当前用户取得默认语言ID <br />GetUserDefaultLCID 取得当前用户的默认“地方”设置 <br />GetUserName 取得当前用户的名字 <br />GetVersion 判断当前运行的Windows和DOS版本 <br />GetVersionEx 取得与平台和操作系统有关的版本信息 <br />HideCaret 在指定的窗口隐藏插入符（光标） <br />IsValidCodePage 判断一个代码页是否有效 <br />IsValidLocale 判断地方标识符是否有效 <br />keybd_event 这个函数模拟了键盘行动 <br />LoadKeyboardLayout 载入一个键盘布局 <br />MapVirtualKey 根据指定的映射类型，执行不同的扫描码和字符转换 <br />MapVirtualKeyEx 根据指定的映射类型，执行不同的扫描码和字符转换 <br />MessageBeep 播放一个系统声音。系统声音的分配方案是在控制面板里决定的 <br />mouse_event 模拟一次鼠标事件 <br />OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态 <br />OemToChar 将OEM字符集的一个字串转换到ANSI字符集 <br />SetCaretBlinkTime 指定插入符（光标）的闪烁频率 <br />SetCaretPos 指定插入符的位置 <br />SetComputerName 设置新的计算机名 <br />SetCursor 将指定的鼠标指针设为当前指针 <br />SetCursorPos 设置指针的位置 <br />SetDoubleClickTime 设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间 <br />SetEnvironmentVariable 将一个环境变量设为指定的值 <br />SetKeyboardState 设置每个虚拟键当前在键盘上的状态 <br />SetLocaleInfo 改变用户“地方”设置信息 <br />SetLocalTime 设置当前地方时间 <br />SetSysColors 设置指定窗口显示对象的颜色 <br />SetSystemCursor 改变任何一个标准系统指针 <br />SetSystemTime 设置当前系统时间 <br />SetSystemTimeAdjustment 定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步 <br />SetThreadLocale 为当前线程设置地方 <br />SetTimeZoneInformation 设置系统时区信息 <br />ShowCaret 在指定的窗口里显示插入符（光标） <br />ShowCursor 控制鼠标指针的可视性 <br />SwapMouseButton 决定是否互换鼠标左右键的功能 <br />SystemParametersInfo 获取和设置数量众多的windows系统参数 <br />SystemTimeToTzSpecificLocalTime 将系统时间转换成地方时间 <br />ToAscii 根据当前的扫描码和键盘信息，将一个虚拟键转换成ASCII字符 <br />ToUnicode 根据当前的扫描码和键盘信息，将一个虚拟键转换成Unicode字符 <br />UnloadKeyboardLayout 卸载指定的键盘布局 <br />VkKeyScan 针对Windows字符集中一个ASCII字符，判断虚拟键码和Shift键的状态 <br /><br />11. API之进程和线程函数 <br /><br />CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作 <br />CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 <br />ConnectNamedPipe 指示一台服务器等待下去，直至客户机同一个命名管道连接 <br />CreateEvent 创建一个事件对象 <br />CreateMailslot 创建一个邮路。返回的句柄由邮路服务器使用（收件人） <br />CreateMutex 创建一个互斥体（MUTEX） <br />CreateNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用 <br />CreatePipe 创建一个匿名管道 <br />CreateProcess 创建一个新进程（比如执行一个程序） <br />CreateSemaphore 创建一个新的信号机 <br />CreateWaitableTimer 创建一个可等待的计时器对象 <br />DisconnectNamedPipe 断开一个客户与一个命名管道的连接 <br />DuplicateHandle 在指出一个现有系统对象当前句柄的情况下，为那个对象创建一个新句柄 <br />ExitProcess 中止一个进程 <br />FindCloseChangeNotification 关闭一个改动通知对象 <br />FindExecutable 查找与一个指定文件关联在一起的程序的文件名 <br />FindFirstChangeNotification 创建一个文件通知对象。该对象用于监视文件系统发生的变化 <br />FindNextChangeNotification 重设一个文件改变通知对象，令其继续监视下一次变化 <br />FreeLibrary 释放指定的动态链接库 <br />GetCurrentProcess 获取当前进程的一个伪句柄 <br />GetCurrentProcessId 获取当前进程一个唯一的标识符 <br />GetCurrentThread 获取当前线程的一个伪句柄 <br />GetCurrentThreadId 获取当前线程一个唯一的线程标识符 <br />GetExitCodeProces 获取一个已中断进程的退出代码 <br />GetExitCodeThread 获取一个已中止线程的退出代码 <br />GetHandleInformation 获取与一个系统对象句柄有关的信息 <br />GetMailslotInfo 获取与一个邮路有关的信息 <br />GetModuleFileName 获取一个已装载模板的完整路径名称 <br />GetModuleHandle 获取一个应用程序或动态链接库的模块句柄 <br />GetPriorityClass 获取特定进程的优先级别 <br />GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况 <br />GetProcessTimes 获取与一个进程的经过时间有关的信息 <br />GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存 <br />GetSartupInfo 获取一个进程的启动信息 <br />GetThreadPriority 获取特定线程的优先级别 <br />GetTheardTimes 获取与一个线程的经过时间有关的信息 <br />GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符 <br />LoadLibrary 载入指定的动态链接库，并将它映射到当前进程使用的地址空间 <br />LoadLibraryEx 装载指定的动态链接库，并为当前进程把它映射到地址空间 <br />LoadModule 载入一个Windows应用程序，并在指定的环境中运行 <br />MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。如返回条件已经满足，则立即返回 <br />SetPriorityClass 设置一个进程的优先级别 <br />SetProcessShutdownParameters 在系统关闭期间，为指定进程设置他相对于其它程序的关闭顺序 <br />SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量 <br />SetThreadPriority 设定线程的优先级别 <br />ShellExecute 查找与指定文件关联在一起的程序的文件名 <br />TerminateProcess 结束一个进程 <br />WinExec 运行指定的程序 <br /><br />12. API之控件与消息函数 <br /><br />AdjustWindowRect 给定一种窗口样式，计算获得目标客户区矩形所需的窗口大小 <br />AnyPopup 判断屏幕上是否存在任何弹出式窗口 <br />ArrangeIconicWindows 排列一个父窗口的最小化子窗口 <br />AttachThreadInput 连接线程输入函数 <br />BeginDeferWindowPos 启动构建一系列新窗口位置的过程 <br />BringWindowToTop 将指定的窗口带至窗口列表顶部 <br />CascadeWindows 以层叠方式排列窗口 <br />ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄 <br />ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标 <br />CloseWindow 最小化指定的窗口 <br />CopyRect 矩形内容复制 <br />DeferWindowPos 该函数为特定的窗口指定一个新窗口位置 <br />DestroyWindow 清除指定的窗口以及它的所有子窗口 <br />DrawAnimatedRects 描绘一系列动态矩形 <br />EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入 <br />EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 <br />EnumChildWindows 为指定的父窗口枚举子窗口 <br />EnumThreadWindows 枚举与指定任务相关的窗口 <br />EnumWindows 枚举窗口列表中的所有父窗口 <br />EqualRect 判断两个矩形结构是否相同 <br />FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口 <br />FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口 <br />FlashWindow 闪烁显示指定窗口 <br />GetActiveWindow 获得活动窗口的句柄 <br />GetCapture 获得一个窗口的句柄，这个窗口位于当前输入线程，且拥有鼠标捕获（鼠标活动由它接收） <br />GetClassInfo 取得WNDCLASS结构（或WNDCLASSEX结构）的一个副本，结构中包含了与指定类有关的信息 <br />GetClassLong 取得窗口类的一个Long变量条目 <br />GetClassName 为指定的窗口取得类名 <br />GetClassWord 为窗口类取得一个整数变量 <br />GetClientRect 返回指定窗口客户区矩形的大小 <br />GetDesktopWindow 获得代表整个屏幕的一个窗口（桌面窗口）句柄 <br />GetFocus 获得拥有输入焦点的窗口的句柄 <br />GetForegroundWindow 获得前台窗口的句柄 <br />GetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄 <br />GetParent 判断指定窗口的父窗口 <br />GetTopWindow 搜索内部窗口列表，寻找隶属于指定窗口的头一个窗口的句柄 <br />GetUpdateRect 获得一个矩形，它描叙了指定窗口中需要更新的那一部分 <br />GetWindow 获得一个窗口的句柄，该窗口与某源窗口有特定的关系 <br />GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID <br />GetWindowLong 从指定窗口的结构中取得信息 <br />GetWindowPlacement 获得指定窗口的状态及位置信息 <br />GetWindowRect 获得整个窗口的范围矩形，窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 <br />GetWindowText 取得一个窗体的标题（caption）文字，或者一个控件的内容 <br />GetWindowTextLength 调查窗口标题文字或控件内容的长短 <br />GetWindowWord 获得指定窗口结构的信息 <br />InflateRect 增大或减小一个矩形的大小 <br />IntersectRect 这个函数在lpDestRect里载入一个矩形，它是lpSrc1Rect与lpSrc2Rect两个矩形的交集 <br />InvalidateRect 屏蔽一个窗口客户区的全部或部分区域 <br />IsChild 判断一个窗口是否为另一窗口的子或隶属窗口 <br />IsIconic 判断窗口是否已最小化 <br />IsRectEmpty 判断一个矩形是否为空 <br />IsWindow 判断一个窗口句柄是否有效 <br />IsWindowEnabled 判断窗口是否处于活动状态 <br />IsWindowUnicode 判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字 <br />IsWindowVisible 判断窗口是否可见 <br />IsZoomed 判断窗口是否最大化 <br />LockWindowUpdate 锁定指定窗口，禁止它更新 <br />MapWindowPoints 将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统 <br />MoveWindow 改变指定窗口的位置和大小 <br />OffsetRect 通过应用一个指定的偏移，从而让矩形移动起来 <br />OpenIcon 恢复一个最小化的程序，并将其激活 <br />PtInRect 判断指定的点是否位于矩形内部 <br />RedrawWindow 重画全部或部分窗口 <br />ReleaseCapture 为当前的应用程序释放鼠标捕获 <br />ScreenToClient 判断屏幕上一个指定点的客户区坐标 <br />ScrollWindow 滚动窗口客户区的全部或一部分 <br />ScrollWindowEx 根据附加的选项，滚动窗口客户区的全部或部分 <br />SetActiveWindow 激活指定的窗口 <br />SetCapture 将鼠标捕获设置到指定的窗口 <br />SetClassLong 为窗口类设置一个Long变量条目 <br />SetClassWord 为窗口类设置一个条目 <br />SetFocusAPI 将输入焦点设到指定的窗口。如有必要，会激活窗口 <br />SetForegroundWindow 将窗口设为系统的前台窗口 <br />SetParent 指定一个窗口的新父 <br />SetRect 设置指定矩形的内容 <br />SetRectEmpty 将矩形设为一个空矩形 <br />SetWindowContextHelpId 为指定的窗口设置帮助场景（上下文）ID <br />SetWindowLong 在窗口结构中为指定的窗口设置信息 <br />SetWindowPlacement 设置窗口状态和位置信息 <br />SetWindowPos 为窗口指定一个新位置和状态 <br />SetWindowText 设置窗口的标题文字或控件的内容 <br />SetWindowWord 在窗口结构中为指定的窗口设置信息 <br />ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口 <br />ShowWindow 控制窗口的可见性 <br />ShowWindowAsync 与ShowWindow相似 <br />SubtractRect 装载矩形lprcDst，它是在矩形lprcSrc1中减去lprcSrc2得到的结果 <br />TileWindows 以平铺顺序排列窗口 <br />UnionRect 装载一个lpDestRect目标矩形，它是lpSrc1Rect和lpSrc2Rect联合起来的结果 <br />UpdateWindow 强制立即更新窗口 <br />ValidateRect 校验窗口的全部或部分客户区 <br />WindowFromPoint 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口</font>
		</span>
		<br />
<img src ="http://www.cnitblog.com/ldds/aggbug/16007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-26 18:25 <a href="http://www.cnitblog.com/ldds/articles/16007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX适合做啥?</title><link>http://www.cnitblog.com/ldds/articles/15896.html</link><dc:creator>netldds</dc:creator><author>netldds</author><pubDate>Thu, 24 Aug 2006 13:55:00 GMT</pubDate><guid>http://www.cnitblog.com/ldds/articles/15896.html</guid><wfw:comment>http://www.cnitblog.com/ldds/comments/15896.html</wfw:comment><comments>http://www.cnitblog.com/ldds/articles/15896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ldds/comments/commentRss/15896.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ldds/services/trackbacks/15896.html</trackback:ping><description><![CDATA[我看了不少有关于LINUX的东西了 ..<br /><br />还是觉得不够...对LINUX这个系统整体的了解可以说是一头牛身上的毛...<br /><br />有很多极端的人推荐LINUX,我觉得不大必要...<br /><br />说LINUX是开源免费的...可以自己动手改造它..可是象俺这样的菜鸟没那样的能力....<br /><br />在一篇&lt;&lt;如何成为一个黑客&gt;&gt;的文章上看到写有"首先得到一个UNIX,很好的利用和维护它..."等等的字样..<br /><br />以前盲目的要"追求",所以去找了这个系统..但是看了其他的文章和介绍后决定装LINUX了....到现在我手头上<br /><br />还没有UNIX的系统盘...<br /><br />对于LINUX想说的是"没有功底的,象我一样菜菜的人最好先去学学LINUX",记得以前看类似于WIN VS <br /><br />LINUX的文章的时候大概看到了类似某某专家说LINUX适合专家学者以上的人来使用..说的通俗点就是对<br /><br />人的要求是比较高的.说到WINDOWS的时候好像是这个意思吧"适合大众,操作容易..."等等<br /><br />还有我发现一个问题...在D版泛滥的今天..大家对WINDOWS的依赖非常了得....没有一个网吧的操作系统有<br /><br />LINUX的.虽然现在说什么推广LINXU....说什么做开源也不会饿死.....但是考虑到实际的问题...做开源也死对<br /><br />个人意志的考验...打个比方..你写了一套软件..用在非商务的LINUX系统...在没有公司支持或别人给你酬劳<br /><br />时候...你想会怎么做? 在如果那套软件死可以跨平台的..如果在WINDOWS下光卖软件(不包括代码)可以<br /><br />获得很客观的收入,更别说是卖代码了...相形很多的国人都顶不住诱惑转向对WINDOWS软件的开发的吧..<br /><br />这里我只是举了一个在特定情况下的例子..大家意思明白就好...^_^<br /><br /><br />那个对我的关系不大...还有就是现在LINUX对硬件的支持显然没有WINDOWS做的出色...绝大多数的游戏<br /><br />都只支持WIN系列,很多的第三方软件大多数也都支持WINDOWS.(国内情况)..至少我还没有找到向华军或<br /><br />天空那样全的专门有LINUX软件的网站..似乎根本没有那么多的软件吧?....谁叫它们是盈利的系统呢,,,,没盈<br /><br />利的系统是跟不上人家的哦..这也是社会上很显示<br /><br />的问题....<br /><br />对LINUX的好感和建议:<br /><br />     让我感觉到如果有能力,就可以驾驶LINUX到处跑...即使哪里坏了也可以自己动手修...对LINUX你可以对<br /><br />任何你想要改的地方修改....你甚至可以把显卡的技术文档拿来自己写驱动...哇塞....COOL!<br /><br />    唯一的条件就是你有这个能力和时间+精力....当然最重要的还是能力问题....有别人说到LINUX的时候就<br /><br />会时不时的说WINDOWS时傻瓜的操作等等.....相对而言..最新版本的LINUX对硬件的支持我觉得总是在<br /><br />WINOWS的后面..觉得这2个总是一个矛盾体...有钱就可以投入数千万$叫人来做系统的开发..没钱只能等着<br /><br />别人来帮你做...WINDOWS的垄断不时一天两天就可以的..当然LINUX的反垄断也不是轻而易举就可以实现<br /><br />的..国内有人专门做LINUX的公司比如RED FLAG,和一些软件企业...个人认为...当你找不到在LINUX让你<br /><br />娱乐的理由的时候还是好好的把好你的WINDOS吧....虽然它的BUG比较的多..谁叫它这么受欢迎呢?<br /><br />     最后说下我的目标吧...能在LINUX下做WINDOWS下一样的事情...加上LINUX先天的优势..那我就爱死<br /><br />LINUX了..^_^<img src ="http://www.cnitblog.com/ldds/aggbug/15896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ldds/" target="_blank">netldds</a> 2006-08-24 21:55 <a href="http://www.cnitblog.com/ldds/articles/15896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>