??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲午夜高清国产拍精品,亚洲综合校园春色,国产日产亚洲系列http://m.tkk7.com/bcims/category/7097.html<font color="red"><b>什么样的素质决定什么样的技?lt;/b></font> <div style="font-size:12px;cursor:pointer"> <span title="www"> www.WoMenSou.com <我们?gt;</span></divzh-cnSat, 05 Apr 2008 07:08:07 GMTSat, 05 Apr 2008 07:08:07 GMT60redhat linux 9 下蝲http://m.tkk7.com/bcims/archive/2008/04/05/190916.htmlEricWongEricWongSat, 05 Apr 2008 07:02:00 GMThttp://m.tkk7.com/bcims/archive/2008/04/05/190916.htmlhttp://m.tkk7.com/bcims/comments/190916.htmlhttp://m.tkk7.com/bcims/archive/2008/04/05/190916.html#Feedback0http://m.tkk7.com/bcims/comments/commentRss/190916.htmlhttp://m.tkk7.com/bcims/services/trackbacks/190916.html提供个地址l大Ӟ(x)
http://ftp.ccc.uba.ar/download/pub/linux/redhat/redhat-9-en/iso/i386/shrike-i386-disc1.iso
http://ftp.ccc.uba.ar/download/pub/linux/redhat/redhat-9-en/iso/i386/shrike-i386-disc2.iso
http://ftp.ccc.uba.ar/download/pub/linux/redhat/redhat-9-en/iso/i386/shrike-i386-disc3.iso
源代码盘找不C(jin)Q这三个是安装盘?
但Redhat Linux9不支持SATA?img src ="http://m.tkk7.com/bcims/aggbug/190916.html" width = "1" height = "1" />

EricWong 2008-04-05 15:02 发表评论
]]>
shell - bash?/title><link>http://m.tkk7.com/bcims/archive/2006/01/17/28350.html</link><dc:creator>EricWong</dc:creator><author>EricWong</author><pubDate>Tue, 17 Jan 2006 12:00:00 GMT</pubDate><guid>http://m.tkk7.com/bcims/archive/2006/01/17/28350.html</guid><wfw:comment>http://m.tkk7.com/bcims/comments/28350.html</wfw:comment><comments>http://m.tkk7.com/bcims/archive/2006/01/17/28350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/bcims/comments/commentRss/28350.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/bcims/services/trackbacks/28350.html</trackback:ping><description><![CDATA[<BR><BR><SPAN id=uline style="LINE-HEIGHT: 180%">bash?/FONT></B></FONT><BR><FONT class=smallfont color=#ff9900>2004-04-23 15:18 pm</FONT><BR><FONT 作者:(x)作?br>来自QLinux文档<BR>现蝲QWww.8s8s.coM<BR>地址Q无?BR><BR>  bash(Bourne Again Shell) ?Red Hat 的缺?shell. 它有40个内建命令和12个命令行参数?BR>  shell 是一个命令语a解释器(command-language interpreterQ?shell是用户和linux内核之间的接口程序。你在提C符下输入的每个命o(h)都由shell先解释然后传lLinux内核?BR>  shell 如何启动 shell在你成功地登录进入系l后启动Qƈ始终作ؓ(f)你与pȝ内核的交互手D늛至你退出系l。你pȝ上的每位用户都有一个缺省的shell。每个用L(fng)~省shell在系l里的passwd文g里被指定Q该文g的\径是/etc/passwd?BR><BR>  bash 命o(h)概要<BR><BR>  q是几个最常用的bash内部命o(h)Q?BR>alias: 讄bash别名?BR>bg: 使一个被挂v的进E在后台l箋(hu)执行?BR>cd: 改变当前工作目录?BR>exit: l止shell?BR>export: 使变量的值对当前shell的所有子q程都可??BR>fc: 用来~辑历史命o(h)列表里的命o(h)?BR>fg: 使一个被挂v的进E在前台l箋(hu)执行?BR>help: 昄bash内部命o(h)的帮助信息?BR>kill: l止某个q程?BR>pwd: 昄当前工作目录?BR>unalias: 删除已定义的别名?BR><BR>bash q有许多命o(h)Q但q些是最常用的,想了(jin)解更详细的情况,请参考bash的手?-在提C符下键?man bash?BR><BR>bash 变量<BR><BR>q里是几个最有用的bash变量Q包括变量名和简单描q?BR>EDITOR, FCEDIT: bsah fc 命o(h)的缺省编辑器?BR>HISTFILE: 用于贮存历史命o(h)的文件?BR>HISTSIZE: 历史命o(h)列表的大?BR>HOME: 当前用户的用L(fng)录?BR>OLDPWD: 前一个工作目录?BR>PATH: bashL可执行文件的搜烦(ch)路径?BR>PS1: 命o(h)行的一U提C符?BR>PS2: 命o(h)行的二提示W?BR>PWD: 当前工作目录?BR>SECONDS: 当前shell开始后所逝的U数?BR><BR>bash的特性:(x)<BR><BR>1.命o(h)补齐QCommand-Line CompletionQ?BR>?bash 下输入命令时你不必把命o(h)输全 shell p判断Z所要输入的命o(h)。只要输入命令的一部分Q再按下 Tab 键,当你q样做以后,bash 帮你补齐命令ƈ昄在屏q上。但在你按下回R键以前命令ƈ没有被执行,bash ?x)让你检验补齐的命o(h)是否是你真正需要的。在输入象这L(fng)的命令时你也许看不出它的价值所在,甚至在命令很短时q(sh)(x)慢输入的速度Q但是当你要输入的命令有炚wӞ你会(x)发现q个Ҏ(gu)是多么的美好?BR><BR>2. 通配W?<BR>另一个命o(h)输入变得更简单的Ҏ(gu)是在命o(h)中用通配W。bash 支持三种通配W:(x)<BR><BR>* 匚wM字符和Q何数目的字符<BR>? 匚wM单字W?BR>[...] 匚wM包含在括号里的单字符<BR><BR>3. 命o(h)历史记录 <BR>bash 支持命o(h)历史记录。这意味着 bash 保留?jin)一定数目的你先前已l在shell 里输入过的命令。这个数目取决于一个叫做HISTSIZE的变量。有?HISTSIZE 的更多信息,L(fng)本文后面的“bash 变量”一节?BR><BR>bash 把你先前输入的命令文本保存在一个历史列表中。当你用你的帐号d后历史列表将Ҏ(gu)一个历史文件被初始化。历史文件的文g名被一个叫 HISTFILE ?bash变量指定。历史文件的~省名字?.bash_history。这个文仉常在你的用L(fng)录中。(注意该文件的文g名以一个句号开_(d)q意味着它是隐含的,仅当你带 -a ?-A参数?ls 命o(h)列目录时才可见)(j)<BR><BR>使用历史记录列表最单的Ҏ(gu)是用上方向键。按下上方向键后最后键入的命o(h)出现在命o(h)行上。再按一下则倒数W二条命令会(x)出现Q以此类推。如果上d?jin)的话也可以用向下的方向键来下翻。显C在命o(h)行上的历史命令可以被~辑?BR><BR>另一个用命令历史文件的Ҏ(gu)是用 bash 的内部命?history ?fc(fix 命o(h))命o(h)来显C和~辑历史命o(h)。history 命o(h)能以两种不同的方法来调用。第一U是Q?BR><BR>history [n]<BR><BR>?history 命o(h)没有参数Ӟ整个历史命o(h)列表的内容将被显C出来。下面是一个命令历史列表的例子Q?BR><BR>使用 n 参数的作用是仅有最?n 个历史命令会(x)被列出。例如,history 5 昄最?5 个命令?BR>调用 history 命o(h)的第二种Ҏ(gu)用于修改命o(h)历史列表文g的内宏V命令的语法如下Q?BR><BR>history [-r|w|a|n] [filename]<BR><BR>q种形式中,-r 选项告诉 history 命o(h)d令历史列表文件的内容q且把它们当作当前的命o(h)历史列表?w 选项把当前的命令历史记录写入文件中q覆盖文件原来的内容?a 选项把当前的命o(h)历史记录q加到文件中?n 选项读取文件中的内容ƈ加入到当前历史命令列表中。如?filename 选项没有被指定,history 命o(h)用变量HISTFILE 的值来代替?BR><BR>fc 命o(h)能用两种Ҏ(gu)来编辑历史命令。第一U用下列语法:(x)<BR><BR>fc [-e editor_name] [-n] [-l] [-r] [first] [last]<BR><BR>q里所有参数都是可选的?e editor_name 选项用来指定用于~辑命o(h)的文本编辑器?first ?last 选项用于选择列出历史命o(h)的范_(d)既可以是数字也可以是字符丌Ӏ?n 选项止列出命o(h)的编受?r 选项反向列出匚w的命令?l 选项把匹配的命o(h)行列在屏q上Q而不是在~辑器中Q。如?e editor_name参数没有被指定,则以变量FCEDIT的值来代替Q如果该变量不存在的话,则用变量EDITOR的值来代替Q都不存在的话将使用vi~辑器?BR><BR><BR>4.别名 <BR>命o(h)别名通常是其他命令的~写Q用来减键盘输入?BR><BR>alias file='ls -l | grep ^-'<BR><BR>alias ls='ls --color'<BR><BR>alias sub='ls -F -l | grep /$'<BR><BR>q是一些很多用戯为有用的别名Q你可以把它们写入你?profile文g中提高工作效 Q?BR><BR>如果惛_消别名,可以使用下面的命令:(x)<BR><BR>unalias <alias name><BR><BR><BR>定义别名Ӟ{号的两头不能有I格Q否?shell 不能军_你需要做什么?BR><BR>5.输入重定?<BR><BR>输入重定向用于改变(sh)个命令的输入源。一些命令需要在命o(h)行里输入_的信息才能工作?输入重定向ƈ不经怋用因为大多数命o(h)都以参数的Ş式在命o(h)行上指定输入文g的文件名。尽如此,当你使用一个不接受文g名ؓ(f)输入参数的命令,而需要的输入又是在一个已存在的文仉Ӟ你就能用输入重定向解决问题?BR><BR>6.输出重定?<BR><BR>输出重定向比输入重定向更常用。输出重定向使你能把一个命令的输出重定向到一个文仉Q而不是显C在屏幕上?BR><BR>7.道 <BR><BR>道可以把一pd命o(h)q接h。这意味着W一个命令的输出?x)通过道传给W二个命令而作为第二个命o(h)的输入,W二个命令的输出又会(x)作ؓ(f)W三个命令的输入 Q以此类推。而管道行中最后一个命令的输出才会(x)昄在屏q上Q如果命令行里用了(jin)输出重定向的话,会(x)放进一个文仉Q?BR><BR>8.提示W?<BR><BR>bash 有两U用hC符。第一U是你经常看到的 bash 在等待命令输入时的提C符。缺省的一U提C符是字W?Q如果是用户Q则?P(j)。你可以通过改变bash 的PS1变量的值来改变?sh)的~省提示W?BR><BR>把bash shell 的提C符该ؓ(f)指定的字W串?BR><BR>当bash 期待输入更多的信息以完成命o(h)时显C第二提示W。缺省的W二U提C符?>?果你要改变第二提示W,可以通过讄PS2变量的值来实现?BR><BR>另外你还可以用特D的字符来定义你的提C符Q下面的列表列出?jin)最常用的特D字W?<BR><BR>字符 <BR>含义<BR><BR>!<BR>昄该命令的历史记录~号?BR># 昄当前命o(h)的命令编受?BR>$ 昄$W作为提C符Q如果用hroot的话Q则昄#受?BR>昄反斜杠?BR>d 昄当前日期?BR>h 昄L名?BR>打印新行?BR>nn 昄nnn的八q制倹{?BR>s 昄当前q行的shell的名字?BR>昄当前旉?BR>u 昄当前用户的用户名?BR>W 昄当前工作目录的名字?BR>w 昄当前工作目录的\径?BR><BR><BR><BR>9. 作业控制QJob ControlQ?<BR><BR>作业控制能够控制当前正在q行的进E的行ؓ(f)。特别地Q你能把一个正在运行的q程挂vQ稍后再恢复它的q行。bash 保持Ҏ(gu)有已启动的进E的跟踪Q你能在一个正在运行的q程的生命期内的M时候把它挂h是它恢复运行?BR><BR>按下 Ctrl-Z 使一个运行的q程挂v。bg 命o(h)使一个被挂v的进E在后台恢复q行Q反?fg 命o(h)使进E在前台恢复q行。这几个命o(h)在当用户惛_后台q行而意外的把它攑ֈ?jin)前台时Q经常被用到。当一个命令在前台被运行时Q它?x)禁止用户?shell 的交互,直到该命令结束。这通常不会(x)造成ȝ(ch)Q因为大多数命o(h)很快执行完?jin)。如果你要运行的命o(h)要花费很长的旉的话Q我们通常?x)把它放到后収ͼ以我们能在前台l箋(hu)输入其他命o(h)?BR><BR><BR>10. 用户化配|bash <BR><BR>Z(jin)保存q些用户化配|,必须把它们保存到一个bash的初始化文g里?你能把Q何想每次q入bash都执行的命o(h)攑ֈ初始化文仉。这个文仉最常见到的命o(h)通常是alias和变量的初始化。bash的初始化文g叫做 profile。每个用bash的用户都有一?.profile文g在他的用L(fng)录里。bash在每ơ启动时都读取这个文Ӟq执行所有包含的命o(h)?BR><BR>下面的代码是~省?profile文g的内宏V这个文件的位置?/etc目录。如果你惌|自qbash 的话把它拷到你的用户目录里(如果q没有的话)(j)q命名ؓ(f).profile?BR><BR></FONT><BR><FONT < span></FONT></SPAN><img src ="http://m.tkk7.com/bcims/aggbug/28350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/bcims/" target="_blank">EricWong</a> 2006-01-17 20:00 <a href="http://m.tkk7.com/bcims/archive/2006/01/17/28350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux Shells?http://m.tkk7.com/bcims/archive/2006/01/17/28351.htmlEricWongEricWongTue, 17 Jan 2006 12:00:00 GMThttp://m.tkk7.com/bcims/archive/2006/01/17/28351.htmlhttp://m.tkk7.com/bcims/comments/28351.htmlhttp://m.tkk7.com/bcims/archive/2006/01/17/28351.html#Feedback0http://m.tkk7.com/bcims/comments/commentRss/28351.htmlhttp://m.tkk7.com/bcims/services/trackbacks/28351.html

什么是 Shell?
Shell是一U具备特D功能的E颍?ch)墙橛谑褂谜?UNIX/Linux 操作pȝ之核?j)程序(kernelQ间的一个接口。ؓ(f)什么我们说 shell 是一U介于系l核?j)程序与使用者间的中介者呢Q读q操作系l概论的读者们都知道操作系l是一个系l资源的理者与分配者,当?zhn)有需求时Q?zhn)得向pȝ提出Q从操作pȝ的角度来看,它也必须防止使用者因为错误的操作而造成pȝ的伤宻I众所周知Q对计算Z命o(h)得透过命o(h)QcommandQ或是程序(programQ;E序有编译器QcompilerQ将E序转ؓ(f)二进制代码,可是命o(h)呢?其实shell 也是一支程序,它由输入讑֤d命o(h)Q再其转ؓ(f)计算机可以了(jin)解的机械码,然后执行它?BR>各种操作pȝ都有它自q shellQ以 DOS ZQ它?shell 是 command.com 檔。如?DOS 下有 NDOSQ?DOSQDRDOS {不同的命o(h)解译E序可以取代标准?command.com QUNIX 下除?Bourne shellQ?bin/shQ?外还?C shellQ?bin/cshQ、Korn shellQ?bin/kshQ、Bourne again shellQ?bin/bashQ、Tenex C shellQtcshQ??{其它的 shell。UNIX/Linux ?shell 独立于核?j)程序之外,使得它就如同一般的应用E序Q可以在不媄(jing)响操作系l本w的情况下进行修攏V更新版本或是添加新的功能?BR>Shell 的激z?BR>在系lv动的时候,核心(j)E序?x)被加蝲内存Q负责管理系l的工作Q直到系l关闭ؓ(f)止。它建立q控制着处理E序Q管理内存、档案系l、通讯{等。而其它的E序Q包?shell E序Q都存放在磁盘(sh)。核?j)程序将它们加蝲内存Q执行它们,q且在它们中止后清理pȝ。Shell 是一个公用程序,它在(zhn)签入时起动。藉p译用者输入的命o(h)Q由命o(h)列或命o(h)档)(j)QShell 提供使用者和核心(j)E序产生交谈的功能?BR>当?zhn){օQloginQ时Q一个交谈式的shell ?x)跟着起动Qƈ提示(zhn)输入命令。在(zhn)键入一个命令后Q接着是 shell 的工作了(jin)Q它?x)进行?x)
1. 语法分析命o(h)?BR>2. 处理万用字符QwildcardsQ、{向(redirectionQ、管U(pipesQ与工作控制Qjob controlQ?BR>3. 搜寻q执行命?BR>当?zhn)刚开始学UNIX/LinuxpȝӞ(zhn)大部䆾的时间会(x)花在于提C符PpromptQ下执行命o(h)?BR>如果(zhn)经怼(x)输入一l相同Ş式的命o(h)Q?zhn)可能会(x)想要自动执行那些工作。如此,(zhn)可以将一些命令放入一个档案(UCؓ(f)命o(h)档,scriptQ,然后执行该档。一个shell 命o(h)档很像是 DOS 下的Ҏ(gu)檔(?Autoexec.batQ:(x)它把一q串?UNIX 命o(h)存入一个档案,然后执行该档。较成熟的命令档q支持若q现代程序语a的控制结构,譬如说能做条件判断、@环、档案测试、传送参数等。要写着写命令档Q不仅要学习(fn)E序设计的结构和技巧,而且?UNIX/Linux 公用E序?qing)如何运作需有深入的?jin)解。有些公用程序的功能非常强大Q例?grep、sed 和awkQ,它们常被用于命o(h)档来操控命o(h)输出和档案。在(zhn)对那些工具和程序设计结构变得熟(zhn)之后,(zhn)就可以开始写命o(h)档。当由命令档执行命o(h)Ӟ此刻Q?zhn)已l把 shell 当做E序语言使用?jin)?BR>l说 Shell 的生q?BR>W一个有重要意义的,标准?UNIX shell 是V7QAT&T的第七版QUNIXQ在1979 q底被提出,且以它的创造?Stephen Bourne 来命名。Bourne shell 是以 Algol q种语言为基来设计,主要被用来做自动化系l管理工作。虽?Bourne shell 以简单和速度而受Ƣ迎Q但它缺许多交谈性用的特色Q例如历E、别名和工作控制?BR>C shell 是在加州大学柏克来分校于70q代末期发展而成Q而以2BSD UNIX的部分发行。这?shell 主要是由 Bill Joy 写成Q提供了(jin)一些在标准 Bourne shell 所看不到的额外特色。C shell 是以C E序语言作ؓ(f)基础Q且它被用来当程序语aӞ能共享类似的语法。它也提供在交谈式运用上的改q,例如命o(h)列历E、别名和工作控制。因?C shell 是在大型机器上设计出来,且增加了(jin)一些额外功能,所?C shell 有在型机器上跑得较慢,即在大型机器上?Bourne shell 比v来也昑־~慢?BR>有了(jin) Bourne shell ?C shell 之后QUNIX 使用者就有了(jin)选择Q且争论那一?shell 较好。AT&T 的David Korn ?80 q代中期发明?Korn shellQ在 1986 q发行且?1988 q成为正式的部分 SVR4 UNIX。Korn shell 实际上是 Bourne shell 的超集,且不只可?UNIX pȝ上执行,同时也可?OS/2、VMS、和 DOS上执行。它提供?jin)?Bourne shell 向上兼容的能力,且增加了(jin)许多?C shell 上受Ƣ迎的特Ԍ更增加了(jin)速度和效率?Korn shell 已历l许多修正版Q要扑֯(zhn)用的是那一个版本可?ksh 提示W号下按 Ctrl-v 键?BR>三种主要?Shell 与其分n
在大部䆾的UNIXpȝQ三U著名且q被支持的shell 是Bourne shellQAT&T shellQ在 Linux 下是BASHQ、C shellQBerkeley shellQ在 Linux 下是TCSHQ和 Korn shellQBourne shell的超集)(j)。这三种 shell 在交谈(interactiveQ模式下的表现相当类|但作为命令文件语aӞ在语法和执行效率上就有些不同?jin)?BR>Bourne shell 是标准的 UNIX shellQ以前常被用来做为管理系l之用。大部䆾的系l管理命令文Ӟ例如 rc start、stop 与shutdown 都是Bourne shell 的命令档Q且在单一使用者模式(single user modeQ下?root {օ时它常被pȝ理者用。Bourne shell 是由 AT&T 发展的,以简z、快速著名?Bourne shell 提示W号的默认值是 $?BR>C shell 是柏克莱大学QBerkeleyQ所开发的Q且加入?jin)一些新Ҏ(gu),如命令列历程QhistoryQ、别名(aliasQ、内建算术、档名完成(filename completionQ、和工作控制Qjob controlQ。对于常在交谈模式下执行 shell 的用者而言Q他们较喜爱使用 C shellQ但对于pȝ理者而言Q则较偏好以 Bourne shell 来做命o(h)档,因ؓ(f) Bourne shell 命o(h)檔比 C shell 命o(h)档来的简单及(qing)快速。C shell 提示W号的默认值是 %?BR>Korn shell 是Bourne shell 的超集(supersetQ,?AT&T ?David Korn 所开发。它增加?jin)一些特Ԍ?C shell 更ؓ(f)先进。Korn shell 的特色包括了(jin)可编辑的历程、别名、函式、正规表辑ּ万用字符Qregular expression wildcardQ、内建算术、工作控Ӟjob controlQ、共作处理(coprocessingQ、和Ҏ(gu)的除错功能。Bourne shell 几乎?Korn shell 完全向上兼容Qupward compatibleQ,所以在 Bourne shell 下开发的E序仍能?Korn shell 上执行。Korn shell 提示W号的默认g?$。在 Linux pȝ使用?Korn shell 叫做 pdkshQ它是指 Public Domain Korn Shell?BR>除了(jin)执行效率E差外,Korn shell 在许多方面都?Bourne shell ZQ但是,若将 Korn shell ?C shell 相比很困难Q因Z者在许多斚w都各有所长,效率和Ҏ(gu)使用上看QKorn shell 是优?sh)?C shellQ相信许多用者对?C Shell 的执行效率都有负面的印象?BR>在shell 的语法方面,Korn shell 是比较接q一般程序语aQ而且它具有子E序的功能及(qing)提供较多的资料型态。至?Bourne shellQ它所拥有的资料型态是三种 shell 中最的Q仅提供字符串变量和布尔型态。在整体考量?Korn shell 是三者中表现最佌,其次?C shellQ最后才?Bourne shellQ但是在实际使用中仍有其它应列入考虑的因素,如速度是最重要的选择Ӟ很可能应该采?Bourne shellQ因它是最基本?shellQ执行的速度最快?BR>tcsh 是近几年崛v的一个免费YӞLinux 下的C shell 其实是使用 tcshQ执行,它虽然不是UNIX 的标准配备,但是从许多地Ҏ(gu)都可以下载到它。如果?zhn)?C shell 的拥护者,W者徏议不妨试?tcshQ因为?zhn)臛_可以它当作?C shell 来用。如果?zhn)愿意q旉学习(fn)Q?zhn)q可以n受许多它新增的优功能,例如Q?
1. tcsh 提供?jin)一个命令列Qcommand lineQ编辑程序?
2. 提供?jin)命令列补全功能?
3. 提供?jin)拼字更正功能。它能够自动(g)ƈ且更正在命o(h)列拼错的命o(h)或是单字?
4. 危险命o(h)侦测q提醒的功能Q避免?zhn)一个不心(j)执行?jin)rm* q种杀伤力极大的命令?
5. 提供常用命o(h)的快h式(shortcutQ?
bash ?Bourne shell 是向下兼容(backward compatibleQ,q融入许多C shell 与Korn shell 的功能。这些功能其?C shellQ当然也包括?jin)tcshQ都有,只是q去 Bourne shell 都未支持。以下笔者将介绍 bash 六点重要的改q(详细的用说明笔者会(x)在以后的章节介绍Q:(x)
1. 工作控制Qjob contorlQ。bash 支持?jin)关于工作的讯号与指令,本章E后?x)提及(qing)?BR>2. 别名功能QaliasesQ。alias 命o(h)是用来ؓ(f)一个命令徏立另一个名Uͼ它的q作像一个宏Q展开成ؓ(f)它所代表的命令。别名ƈ不会(x)替代掉命令的名称Q它只是赋予那个命o(h)另一个名字?BR>3. 命o(h)历程Qcommand historyQ。BASH shell 加入?jin)C shell 所提供的命令历E功能,它以 history 工具E序记录?jin)最q?zhn)执行q的命o(h)。命令是?1 开始编P默认gؓ(f)500。history 工具E序是一U短期记忆,记录(zhn)最q所执行的命令。要看看q些命o(h)Q?zhn)可以在命令列键?historyQ如此将?x)显C最q执行过之命令的清单Qƈ在前方加上编受?BR>q些命o(h)在技术上每个都称Z个事件。事件描q的是一个已l采取的行动Q已l被执行的命令)(j)。事件是依照执行的顺序而编P近的事件其~号码越大,q些事g都是以它的编h命o(h)的开头字W来辨认的。history 工具E序让?zhn)参照一个先前发生过的事Ӟ它攑֜命o(h)列上q允许?zhn)执行它。最单的Ҏ(gu)是用上下键一ơ放一个历E事件在(zhn)的命o(h)列上Q?zhn)q不需要先?history 昄清单。按一ơ向上键?x)将最后一个历E事件放在?zhn)的命令列上,再按一ơ会(x)攑օ下一个历E事件。按向下键则?x)将前一个事件放在命令列上?BR>4. 命o(h)列编辑程序。BASH shell 命o(h)列编辑能力是内徏的,让?zhn)L地在执行之前修改(zhn)输入的命o(h)。若是?zhn)在输入命令时拼错了(jin)字Q?zhn)不需重新输入整个命o(h)Q只需在执行命令之前用编辑功能纠正错误即可。这其适合于用冗长的路径名称当作参数的命令时。命令列~辑作业?Emacs ~辑命o(h)的一部䆾。?zhn)可以?Ctrl-F 或向右键往前移一个字W,Ctrl-b 或向左键往回移一个字W。Ctrl-d 或DEL 键会(x)删除光标目前所在处的字W。要增加文字的话Q?zhn)只需要将光标Ud(zhn)要插入文字的地方ƈ键入新字W即可。无ZӞ(zhn)都可以?ENTER 键执行命令?BR>5. 允许使用者自订按键?BR>6. 提供更丰富的变量型态、命令与控制l构?shell 中?BR> 
bash 与tcsh 一样可以从许多|站上免费下载,它们的性质也十分类|都是整合其前一代的产品然后增添新的功能Q这些新增的功能主要都着重在强化 shell 的程序设计能力以?qing)让使用者能够自行定义自己偏好的作业环境。除?jin)上q的五种 shell 之外Qzsh 也是一个广为UNIX E序设计人员?sh)进阶用者所采用?shellQzsh 基本上也?Bourne shell 功能的扩充?BR>Shell 的?BR>不论是哪一UShellQ它最主要的功用都是解译用者在命o(h)列提C符号下输入的指令。Shell 语法分析命o(h)列,把它分解成以I白区分开的符PtokenQ,在此I白包括?jin)蟩位键QtabQ、空白和换行QNew LineQ。如果这些字包含?jin)metacharacterQshell 会(x)评估QevaluateQ它们的正确用法。另外,shell q管理档案输入输出及(qing)q后处理Qbackground processingQ。在处理命o(h)列之后,shell ?x)寻扑֑令ƈ开始执行它们?BR>Shell 的另一个重要功用是提供个h化的使用者环境,q通常?shell 的初始化档案中完成(.profile?login?cshrc?tcshrc {等Q。这些档案包括了(jin)讑֮l端机键盘和定义H口的特征;讑֮变量Q定义搜寻\径、权限限、提C符号和l端机类形;以及(qing)讑֮Ҏ(gu)应用E序所需要的变量Q例如窗口、文字处理程序、及(qing)E序语言的链接库。Korn shell ?C shell 加强?jin)个别化的能?增加历程、别名、和内徏变量集以避免使用者误杀档案、不慎签出、ƈ在当工作完成旉知使用者?BR>Shell 也能当解译性的E序语言Qinterpreted programing languageQ。Shell E序Q通常叫做命o(h)文gQ它由列在档案内的命令所构成。此E序在编辑器中编辑(虽然也可以直接在命o(h)列下写作E序, online scriptingQ,?UNIX 命o(h)和基本的E序l构Q例如变量的指定、测试条件、和循环所构成。?zhn)不需要编?shell 命o(h)檔。Shell 本n?x)解译命令档中的每一行,如同由键盘输入一栗shell 负责解译命o(h)Q而用者则必须?jin)解q些命o(h)能做什么。这本书的烦(ch)引列Z(jin)一些有用的命o(h)和它们的使用Ҏ(gu)?BR>Shell 的功?BR>Z(jin)保M提示W号下输入的命o(h)都能够适当地执行。shell 担Q的工作包括有Q?
1. d输入和语法分析命令列
2. 对特D字W求?
3. 讄线、{向、和q后处理
4. 处理讯号
5. 讄E序来执?


EricWong 2006-01-17 20:00 发表评论
]]>
shell - cut的用?http://m.tkk7.com/bcims/archive/2006/01/17/28349.htmlEricWongEricWongTue, 17 Jan 2006 11:59:00 GMThttp://m.tkk7.com/bcims/archive/2006/01/17/28349.htmlhttp://m.tkk7.com/bcims/comments/28349.htmlhttp://m.tkk7.com/bcims/archive/2006/01/17/28349.html#Feedback0http://m.tkk7.com/bcims/comments/commentRss/28349.htmlhttp://m.tkk7.com/bcims/services/trackbacks/28349.html
来自QLinux文档
现蝲QWww.8s8s.coM
地址Q无?BR>
我们l常?x)遇到需要取出分字段的文件的某些特定字段Q例?/etc/password是通过":"分隔各个字段的。可以通过cut命o(h)来实现。例如,我们希望系l̎号名保存到特定的文gQ就可以Q?BR>cut -d: -f 1 /etc/passwd > /tmp/users
-d用来定义分隔W,默认为tab键,-f表示需要取得哪个字D?BR>
当然也可以通过cut取得文g中每行中特定的几个字W,例如Q?BR>cut -c3-5 /etc/passwd
是输出/etc/passwd文g中每行的W三到第五个字符?BR>-c ?Qf 参数可以跟以下子参数Q?BR>N WN个字W或字段
N- 从第一个字W或字段到文件结?BR>N-M 从第N个到WM个字W或字段
-M 从第一个到WN个字W或字段



EricWong 2006-01-17 19:59 发表评论
]]>
深入分析Windows和Linux动态库应用异同 http://m.tkk7.com/bcims/archive/2006/01/17/28342.htmlEricWongEricWongTue, 17 Jan 2006 11:54:00 GMThttp://m.tkk7.com/bcims/archive/2006/01/17/28342.htmlhttp://m.tkk7.com/bcims/comments/28342.htmlhttp://m.tkk7.com/bcims/archive/2006/01/17/28342.html#Feedback0http://m.tkk7.com/bcims/comments/commentRss/28342.htmlhttp://m.tkk7.com/bcims/services/trackbacks/28342.html

深入分析Windows和Linux动态库应用异同

作者:(x)刘(sh)?杨林

摘要Q动态链接库技术实现和设计E序常用的技术,在Windows和Linuxpȝ中都有动态库的概念,采用动态库可以有效的减程序大,节省I间Q提高效率,增加E序的可扩展性,便于模块化管理?/P>

但不同操作系l的动态库׃格式 不同Q在需要不同操作系l调用时需要进行动态库E序UL。本文分析和比较?jin)两U操作系l动态库技术,q给Z(jin)Visual C++~制的动态库UL到Linux上的Ҏ(gu)和经验?/P>

1、引a

动态库QDynamic Link Library abbrQDLLQ技术是E序设计中经帔R用的技术。其目的减少E序的大,节省I间Q提高效率,h很高的灵zL?/P>

采用动态库技术对于升UY件版本更加容易。与?rn)态库QStatic Link LibraryQ不同,动态库里面的函C是执行程序本w的一部分Q而是Ҏ(gu)执行需要按需载入Q其执行代码可以同时在多个程序中׃n?/P>

在Windows和Linux操作pȝ中,都可采用q种方式q行软g设计Q但他们的调用方式以?qing)程序编制方式不相同。本文首先分析了(jin)在这两种操作pȝ中通常采用的动态库调用Ҏ(gu)以及(qing)E序~制方式Q然后分析比较了(jin)q两U方式的不同之处Q最后根据实际移植程序经验,介绍?jin)将VC++~制的Windows动态库UL到Linux下的Ҏ(gu)?/P>

2、动态库技?/P>

2.1 Windows动态库技?/P>

动态链接库是实现Windows应用E序׃n资源、节省内存空间、提高(sh)用效率的一个重要技术手Dc(din)常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文gQ称之ؓ(f)资源动态链接库。通常动态库?dllQ?drv?fon{作为后~?/P>

相应的windows?rn)态库通常?libl尾QW(xu)indows自己将一些主要的pȝ功能以动态库模块的Ş式实现?/P>

Windows动态库在运行时被系l加载到q程的虚拟空间中Q用从调用q程的虚拟地址I间分配的内存,成ؓ(f)调用q程的一部分。DLL也只能被该进E的U程所讉K。DLL的句柄可以被调用q程使用Q调用进E的句柄可以被DLL使用?/P>

DLL模块中包含各U导出函敎ͼ用于向外界提供服务。DLL可以有自q数据D,但没有自q堆栈Q用与调用它的应用E序相同的堆栈模式;一个DLL在内存(sh)只有一个实例;DLL实现?jin)代码封装性;DLL的编制与具体的编E语a?qing)编译器无关Q可以通过DLL来实现؜合语a~程。DLL函数中的代码所创徏的Q何对象(包括变量Q都归调用它的线E或q程所有?/P>

Ҏ(gu)调用方式的不同,对动态库的调用可分ؓ(f)?rn)态调用方式和动态调用方式?/P>

(1)?rn)态调用,也称为隐式调用,q译系l完成对DLL的加载和应用E序l束时DLL卸蝲的编码(Windowspȝ负责对DLL调用ơ数的计敎ͼ(j)Q调用方式简单,能够满通常的要求。通常采用的调用方式是把生动态连接库时生的.LIB文g加入到应用程序的工程中,想用DLL中的函数Ӟ只须在源文g中声明一下?/P>

LIB文g包含?jin)每一个DLL导出函数的符号名和可选择的标识号以及(qing)DLL文g名,不含有实际的代码。Lib文g包含的信息进入到生成的应用程序中Q被调用的DLL文g?x)在应用E序加蝲时同时加载在到内存(sh)?/P>

(2)动态调用,x(chng)式调用方式,是由~程者用API函数加蝲和卸载DLL来达到调用DLL的目的,比较复杂Q但能更加有效地使用内存Q是~制大型应用E序时的重要方式。在Windowspȝ中,与动态库调用有关的函数包括:(x)

①LoadLibraryQ或MFC 的AfxLoadLibraryQ,装蝲动态库?/P>

②GetProcAddressQ获取要引入的函敎ͼ符号名或标识号转换为DLL内部地址?/P>

③FreeLibraryQ或MFC的AfxFreeLibraryQ,释放动态链接库?/P>

在windows中创建动态库也非常方便和单。在Visual C++中,可以创徏不用MFC而直接用C语言写的DLLE序Q也可以创徏ZMFCcd的DLLE序。每一个DLL必须有一个入口点Q在VC++中,DllMain是一个缺省的入口函数。DllMain负责初始?Initialization)和结?Termination)工作?/P>

动态库输出函数也有两种U定Q分别是Z调用U定和名字修饰约定。DLLE序定义的函数分为内部函数和导出函数Q动态库导出的函C其它E序模块调用。通常可以有下面几U方法导出函敎ͼ(x)

①采用模块定义文件的EXPORT部分指定要输入的函数或者变量?/P>

②用MFC提供的修饰符号_declspec(dllexport)?/P>

③以命o(h)行方式,采用/EXPORT命o(h)行输出有兛_数?/P>

在windows动态库中,有时需要编写模块定义文?.DEF)Q它是用于描qDLL属性的模块语句l成的文本文件?/P>

2.2 Linux׃n对象技?/P>

在Linux操作pȝ中,采用?jin)很多共享对象技术(Shared ObjectQ,虽然它和W(xu)indows里的动态库相对应,但它q不UCؓ(f)动态库。相应的׃n对象文g?so作ؓ(f)后缀Qؓ(f)?jin)方便,在本文中Q对该概念不q行专门区分。Linuxpȝ?lib以及(qing)标准囑Ş界面?usr/X11R6/lib{目录里面,有许多以sol尾的共享对象?/P>

同样Q在Linux下,也有?rn)态函数库q种调用方式Q相应的后缀?al束。Linux采用该共享对象技术以方便E序间共享,节省E序占有I间Q增加程序的可扩展性和灉|性。Linuxq可以通过LD-PRELOAD变量让开发h员可以用自qE序库中的模块来替换pȝ模块?/P>

同W(xu)indowspȝ一P在Linux中创建和使用动态库是比较容易的事情Q在~译函数库源E序时加?shared选项卛_Q这h生成的执行程序就是动态链接库。通常q样的程序以so为后~Q在Linux动态库E序设计q程中,通常程是编写用L(fng)接口文gQ通常?h文gQ编写实际的函数文gQ以.c?cpp为后~Q再~写makefile文g。对于较?yu)的动态库E序可以不用如此Q但q样设计使程序更加合理?/P>

~译生成动态连接库后,q而可以在E序中进行调用。在Linux中,可以采用多种调用方式Q同W(xu)indows的系l目?..\system32{?一P可以动态库文g拯?lib目录或者在/lib目录里面建立W号q接Q以便所有用户用?/P>

下面介绍Linux调用动态库l常使用的函敎ͼ但在使用动态库Ӟ源程序必d含dlfcn.h头文Ӟ该文件定义调用动态链接库的函数的原型?/P>

(1)_打开动态链接库QdlopenQ函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库Qƈq回操作句柄?/P>

(2)取函数执行地址QdlsymQ函数原型ؓ(f): void *dlsym(void *handle, char *symbol); dlsymҎ(gu)动态链接库操作句柄(handle)与符?symbol)Q返回符号对应的函数的执行代码地址?/P>

(3)关闭动态链接库QdlcloseQ函数原型ؓ(f): int dlclose (void *handle); dlclose用于关闭指定句柄的动态链接库Q只有当此动态链接库的用计Cؓ(f)0?才会(x)真正被系l卸载?/P>

(4)动态库错误函数QdlerrorQ函数原型ؓ(f): const char *dlerror(void); 当动态链接库操作函数执行p|Ӟdlerror可以q回出错信息Q返回gؓ(f)NULL时表C操作函数执行成功?/P>

在取到函数执行地址后,可以在动态库的用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在~写调用动态库的程序的makefile文gӞ需要加入编译选项-rdynamic?ldl?/P>

除了(jin)采用q种方式~写和调用动态库之外QLinux操作pȝ也提供了(jin)一U更为方便的动态库调用方式Q也方便?jin)其它程序调用,q种方式与Windowspȝ的隐式链接类伹{其动态库命名方式为“lib*.so.*”。在q个命名方式中,W一?表示动态链接库的库名,W二?通常表示该动态库的版本号Q也可以没有版本受?/P>

在这U调用方式中Q需要维护动态链接库的配|文?etc/ld.so.conf来让动态链接库为系l所使用Q通常动态链接库所在目录名q加到动态链接库配置文g中。如hX windowH口pȝ发行版该文g中都h/usr/X11R6/libQ它指向X windowH口pȝ的动态链接库所在目录?/P>

Z(jin)使动态链接库能ؓ(f)pȝ所׃nQ还需q行动态链接库的管理命?/sbin/ldconfig。在~译所引用的动态库Ӟ可以在gcc采用 –l?L选项或直接引用所需的动态链接库方式q行~译。在Linux里面Q可以采用ldd命o(h)来检查程序依赖共享库?/P>

3、两U系l动态库比较分析

Windows和Linux采用动态链接库技术目的是基本一致的Q但׃操作pȝ的不同,他们在许多方面还是不相同,下面从以下几个方面进行阐q?/P>

(1)动态库E序~写Q在Windowspȝ下的执行文g格式是PE格式Q动态库需要一个DllMain函数作ؓ(f)初始化的人口Q通常在导出函数的声明旉要有_declspec(dllexport)关键字。Linux下的gcc~译的执行文仉认是ELF格式Q不需要初始化入口Q亦不需要到函数做特别声明,~写比较方便?/P>

(2)动态库~译Q在windowspȝ下面Q有方便的调试编译环境,通常不用自己ȝ写makefile文gQ但在linux下面Q需要自己动手去~写makefile文gQ因此,必须掌握一定的makefile~写技巧,另外Q通常Linux~译规则相对严格?/P>

(3)动态库调用斚wQW(xu)indows和Linux对其下编制的动态库都可以采用显式调用或隐式调用Q但具体的调用方式也不尽相同?/P>

(4)动态库输出函数查看Q在Windows中,有许多工具和软g可以q行查看DLL中所输出的函敎ͼ例如命o(h)行方式的dumpbin以及(qing)VC++工具中的DEPENDSE序。在Linuxpȝ中通常采用nm来查看输出函敎ͼ也可以用ldd查看E序隐式链接的共享对象文件?/P>

(5)Ҏ(gu)作系l的依赖Q这两种动态库q行依赖于各自的操作pȝQ不能跨q_使用。因此,对于实现相同功能的动态库Q必Mؓ(f)两种不同的操作系l提供不同的动态库版本?/P>

4、动态库ULҎ(gu)

如果要编制在两个pȝ中都能用的动态链接库Q通常?x)先选择在Windows的VC++提供的调试环境中完成初始的开发,毕竟VC++提供的图形化~辑和调试界面比vi和gcc方便许多。完成测试之后,再进行动态库的程序移植?/P>

通常gcc默认的编译规则比VC++默认的编译规则严|即在VC++下面没有M警告错误的程序在gcc调试中也?x)出现许多警告错误,可以在gcc中采?w选项关闭警告错误?/P>

下面l出E序UL需要遵循的规则以及(qing)l验?/P>

(1)量不要改变原有动态库头文件的序。通常在C/C++语言中,头文件的序有相当的关系。另外虽然C/C++语言区分大小写,但在包含头文件时QLinux必须与头文g的大写相同Q因为ext2文gpȝҎ(gu)件名是大写敏感Q否则不能正编译,而在Windows下面Q头文g大小写可以正编译?/P>

(2)不同pȝ独有的头文g。在Windowspȝ中,通常?x)包括windows.h头文Ӟ如果调用底层的通信函数Q则?x)包含winsock..h头文件。因此在UL到LinuxpȝӞ要注释掉q些Windowspȝ独有的头文g以及(qing)一些windowspȝ的常量定义说明,增加Linux都底层通信的支持的头文件等?/P>

(3)数据cd。VC++h许多独有的数据类型,如__int16Q__int32QTRUEQSOCKET{,gcc~译器不支持它们。通常做法是需要将windows.h和basetypes.h中对q些数据q行定义的语句复制到一个头文g中,再在Linux中包含这个头文g。例如将套接字的cd为SOCKET改ؓ(f)int?/P>

(4)关键字。VC++中具有许多标准C中所没有采用的关键字Q如BOOLQBYTEQDWORDQ__asm{,通常在ؓ(f)?jin)移植方便,量不用它们,如果实在无法避免可以采?ifdef ?endif为LINUX和W(xu)INDOWS~写两个版本?/P>

(5)函数原型的修攏V通常如果采用标准的C/C++语言~写的动态库Q基本上不用再重新编写函敎ͼ但对于系l调用函敎ͼ׃两种pȝ的区别,需要改变函数的调用方式{,如在Linux~制的网l通信动态库中,用close()函数代替windows操作pȝ下的closesocket()函数来关闭套接字。另外在Linux下没有文件句柄,要打开文g可用open和fopen函数Q具体这两个函数的用法可参考文献[2]?/P>

(6)makefile的编写。在windows下面通常由VC++~译器来负责调试Q但gcc需要自己动手编写makefile文gQ也可以参照VC++生成的makefile文g。对于动态库ULQ编译动态库旉要加?shared选项。对于采用数学函敎ͼ如幂U数的程序,在调用动态库是,需要加?lm?/P>

(7)其它一些需要注意的地方

①程序设计结构分析,对于UL它h~写的动态库E序Q程序结构分析是必不可少的步骤,通常在动态库E序中,不会(x)包含界面{操作,所以相对容易一些?/P>

②在Linux中,Ҏ(gu)件或目录的权限分为拥有者、群l、其它。所以在存取文gӞ要注意对文g是读q是写操作,如果是对文gq行写操作,要注意修Ҏ(gu)件或目录的权限,否则无法Ҏ(gu)件进行写?/P>

③指针的使用Q定义一个指针只l它分配四个字节的内存,如果要对指针所指向的变量赋|必须用malloc函数为它分配内存或不把它定义为指针而定义ؓ(f)变量卛_Q这点在linux下面比windows~译严格。同L(fng)构不能在函数中传|如果要在函数中进行结构传|必须把函C的结构定义ؓ(f)l构指针?/P>

④\径标识符Q在Linux下是?”,在Windows下是“\”,注意windows和Linux的对动态库搜烦(ch)路径的不同?/P>

⑤编E和调试技巧方面。对不同的调试环境有不同的调试技巧,在这里不多叙q?/P>

5、结束语

本文pȝ分析?jin)windows和Linux动态库实现和用方式,从程序编写、编译、调用以?qing)对操作pȝ依赖{方面综合分析比较了(jin)q两U调用方式的不同之处Q根据实际程序移植经验,l出?jin)将VC++~制的Windows动态库UL到Linux下的Ҏ(gu)以及(qing)需要注意的问题Q同时ƈl出?jin)程序示例片断,实际在程序移植过E中Q由于系l的设计{方面,可能ULh需要注意的斚wq比上面复杂Q本文通过ȝ归纳q而ؓ(f)不同操作pȝE序UL提供?jin)有意的l验和技巧?BR>



EricWong 2006-01-17 19:54 发表评论
]]>
վ֩ģ壺 vaƷѹۿ| պƷרѲ| Ů18һëƬѹۿ| AV| ԻȫƵ߹ۿ| Ʒ޾Ʒۿ| Ƶһ| պһĺ| ˸徫ƷѼ| ѹվ߹ۿҪ| ҹAVëƬþ| aëƬ߹ۿ| þþƷAV鶹| ޻ɫѵӰ| ŮƷĻ| ޹Ʒ˰| ߾Ʒһ㽶| ëƬպëƬ| ˻ƶվƵ| ŮƵӴȫƵѵ| ޾Ʒɫ| þþƷר| ձһ߲Ͷ| ƷþƵ| ƷƵѲ| 99riƷ| ɫ˿߹ۿ| һҹƵ| ޸һ| Ʒ| ij˾þþþӰԺѹۿ | ޳aƬ߹ۿapp| ŮƵ| Ƶ| ޾ƷĻAV| ĻӰѹۿַ| þҹҹ³³Ƭ| ˳վ߹ۿ| һƷ| Ů˱Ƶվ| ƬѸ|