Intel ICH10 设备编号及其驱动的安装

0

分类 : 网络日志 | 发表时间 26-02-2009

有关AHCI设备驱动的安装,以前Linker已经介绍过许多,不过在很多故障处理中,几乎每一个设备的ICH设备都不大相同,因此处理起来就稍费些周折;以前处理过一例针对ICH9R的hp 6531s的驱动安装–实战hp 6531s安装xp和2003由IDE转为AHCI模式,当时也提供了驱动,但当时的inf文件中,有关ich设备的编号,没有涉及到ich10,在网络上搜索呢,也没找到有关ich10的硬件设备编号的对应值,因此,没有办法,只有大海捞针般的搜索相关的驱动,好在不负有心人,还是找到了针对ICH10的对应硬件设备编号,有了设备编号,驱动问题就简单了。

通过以前文章就可以知道,在用IDE接口模式下安装好操作系统后,如果要在BIOS中转换接口模式为AHCI,是要事先把驱动安装正确的,不然会在系统启动过程中蓝屏,这个小秘密其实也很简单,安装那个install.cmd的秘密也就在于,其一:是往C:\WINDOWS\system32\drivers下拷贝了iastor.sys,二是写了注册表键值,增加了iastor这个服务,此时再重启在BIOS里切换到AHCI模式时就不会蓝屏0x0000007B了,关键的关键就是增加iaston这个服务,是否在注册表中写得正确,所以在开篇Linker提到了寻找ich10(注意不带R,带与不带绝对是两码事),寻找到了,在replace文件夹中的IMSM_PRE.inf文件,就可以修改ich10所对应的硬件设备编号了。如下图:

Intel ICH10 设备编号及其驱动的安装

上图中可以知道,ICH10对应的硬件设备编号是:3A22,因此在这种匹配适合的情况下,执行完install.cmd,然后重启系统,系统才不会蓝屏,重启后系统才会重新识别硬件等SATA接口设备,安装intel的intel_msm即STOR_allOS_8.7.0.1007_PV.exe时,才不会提示“当前系统版本不适合安装”之类的提示,网络上充斥着无数的这类解决方案:如果要转换IDC接口模式为AHCI,只要安装这个intel安装包就ok了;纯粹不负责任的胡扯嘛,接口没有转换过来,安装时提示不匹配;如果转换过来,启动时又蓝屏,更不用提安装了,这本就是矛盾的情况,被转载来转载去的,耽误人嘛。

在找到这篇“全球同步更新P43/45的ICH10/R打开AHCI-NCQ驱动”才发现这个ich10对应的编号设备,这个名称中强调了ich10不带R,所以一下一试即中。

方法:硬盘就接在ICH7/8/9/10的SATA接口用IDE模式进去系统,下载驱动解压然后进去目录里面PREPARE的文件夹双击install安装驱动,然后重起电脑进BIOS打开AHCI模式从新进系统后自动发现新硬件,手动指定你下载的驱动目录安装就能打开ICH7/8/9/10的AHCI/NCQ,英特尔强调ICH10是硬件AHCI的(为什么ICH7/8/9没说是硬件AHCI而ICH10强调是呢?),装好驱动右下角有安全册除图标的,ICH7/8/9是没有的。

外部下载链接:AHCI-NCQ驱动32位版    AHCI-NCQ驱动64位版  

林网博客本地提供下载:AHCI-NCQ驱动.rar              AHCI-NCQ驱动64.rar 解压密码:林网博客

Intel ICH10 设备编号及其驱动的安装

还有比较生猛的安装方法,Linker觉得也有可取之处,可以一试,但就是比较危险,有可能会造成系统无法启动,如果要试,建议事先ghost下系统,然后再试:具体方法就是强行更新驱动,如下图中红圈的部分。具体看这里:http://www.beareyes.com.cn/2/lib/200805/25/20080525003_0.htm

Intel ICH10 设备编号及其驱动的安装

不多说了,发上来几个相关知识链接,这里面分析的不乏高手,有相关问题的可以参考一下这里:

实战hp 6531s安装xp和2003由IDE转为AHCI模式
ICH10 SATA AHCI xp下驱动及安装
Intel英特尔芯片组Intel Chipset Device Software驱动最新9.0.0.1007 Beta版泄露天机
如何安装AHCI驱动
独家秘籍-免软驱免重装开启AHCI功略

实战hp 6531s安装xp和2003由IDE转为AHCI模式

4

分类 : 网络日志 | 发表时间 10-12-2008

惠普(hp)6531s采用的芯片组是:Intel PM45+ICH9M,安装系统蓝屏,归根结义是由于其主板芯片采用的是ich9m芯片组,只要能够把这个解决掉,蓝屏就不是问题。

昨天说的几个有关hp 6531s安装xp系统以及2003服务器版本操作系统,遇见的几个问题,笔记本windows 2003 R2 SP2系统解决SATA串口蓝屏的驱动安装,解决惠普(HP)6531s笔记本安装XP时的AHCI蓝屏问题,惠普HP6531s安装win2003时未知设备的驱动安装说得有些凌乱,今天特意又抽出一点时间,把这个"先通过IDE模式安装系统,然后再修改为AHCI模式"的方法和需要的相关驱动和软件,分别给列清楚,以备以后解决问题,以后的ich7、ich9、ich10这方面的芯片设备越来越普遍了,这个问题必将会越来越多。

安装方法和解决惠普(HP)6531s笔记本安装XP时的AHCI蓝屏问题几乎一致,只是那个是针对hp550的,这次是林网博客亲自在6531s下实测的。

第一步:在IDE模式中,安装好WINXP或WIN2003;

第二步:下载IMSM驱动并执行预安装脚本,下载地址:http://www-900.ibm.com/cn/support/download/attachment/XJCI-6N5C5P/79im06ww.exe ;直接下载不到的请使用迅雷下载,本日志末尾会提供附件下载,直接点击下载即可;

第三步:运行"79im06ww.exe",这个脚本程序会被解压到C:\DRIVERS\WIN\IMSM\PREPARE目录下,该脚本用来避免在IDE切换到AHCI模式后系统出现蓝屏。

第四步:由于这个脚本是专门提供给THINKPAD笔记本主板使用的,所以必须先修改一下才可以用在你的笔记本上,用记事本打开C:\DRIVERS\WIN\IMSM\PREPARE\IMSM_PRE.INF,用记事本的“替换”功能将原来ICH7M芯片组的AHCI设备编号27C5全部替换成HP6531s的AHCI设备编号2929(hp6531s正巧采用的也是ich9m芯片组);

注意:HP550使用的是GM45+ICH9M芯片组,AHCI设备编号为2929;其它芯片组AHCI设备编号:ICH6R:2652、 ICH7R/DH:27C1 、ICH7M:27C5 、ICH9R:2922,如果你的芯片组不在以上列表,就需要你去google了。

全部替换保存后,接下来双击执行INSTALL.CMD,脚本成功执行后就可以重启电脑,进CMOS将IDE模式修改为AHCI模式。

进入系统后会提示找到新的硬件设备,我测试在xp sp3中是直接安装sata2-ICH9M驱动的,但在2003中却提示找不到驱动,需要手工指定,可能是我在xp中测试多次时已经在之前的IDE模式下安装过这样的驱动,虽然没有安装成功,但驱动文件已经拷贝至系统文件夹了,才促使在xp下系统自己直接寻找并正确安装了sata2-ICH9M驱动;

在2003服务器系统下,提示安装新硬件,指向到之前的C:\DRIVERS\WIN\IMSM\PREPARE,不行;再指向到网上风传的sp36131.exe解压的目录,也不对;最后在网上找到了一个"intel_msm_flpy_8501032_32"的下载,才算把驱动正确安装上,这个文件稍后本日志也一并提供下载。

 win2003安装ich9驱动

安装完成重启电脑,进入系统后打开开始菜单-程序-Intel® Matrix Storage Manager,查看“高级模式”就可以检查AHCI模式是否工作,如下图所示,显示ATA串口模式工作在"第二代"状态,这就对了。

 实战hp 6531s安装xp和2003由IDE转为AHCI模式

实战hp 6531s安装xp和2003由IDE转为AHCI模式

之前所说的笔记本windows 2003 R2 SP2系统解决SATA串口蓝屏的驱动安装,经过林网博客的实测,不适合惠普6531s,只能作为参考方案。

另外提供HP Compaq 6531s 笔记本电脑 (推荐安装)芯片组驱动(Intel Chipset Installation Utility for ICH9 for Microsoft Windows Vista),看好了,这个是vista版本:http://h30445.www3.hp.com/pub/softpaq/sp39001-39500/sp39317.exe

在寻找有关插图的时候,找到了一篇免软驱免重装开启AHCI功略 ,分析得也不错,推荐下。

win2003下的sata二代驱动程序(最起码包括本例的ich9m)下载:intel_msm_flpy_8501032_32.rar

避免在IDE切换到AHCI模式后系统出现蓝屏必不可少的下载:79im06ww.rar

上述文件解压密码:林网博客

免费获得googol Writely帐号的方法

0

分类 : 技术文摘 | 发表时间 07-05-2006

从月光博客那里看到的,不敢独享,和大家一块分享一下;
我刚注册了一下,刚收到一封自动回信:

引用:
Thanks for your email. Writely invite will be sent to you shortly.


我等不及收到再发了,发上来给大伙也试试,成功的给回个贴。


月光博客上所示原文如下:

引用:
获得Writely帐号的方法我也透露一下,有兴趣的人也可以参照这个方法申请一个Writely帐号:访问google.vc这个网站,看右边会有一段信息说如何获得Writely帐号,是说给goooogle.writely(at)gmail.com这个信箱发一封邮件,就可以获得一个邀请帐号,最好用GMail邮件发送,标题内容使用英文。我发送后很快就获得了一个Writely帐号。


这个网站我看了一下,右上角那个地方,也可以免费获得gmail的邀请,发送邮件给:goooooooooooooooooooooogle@gmail.com;这个大伙也可以试下。

Writely是一项在线文字处理服务,只要你连上网络,只需用浏览器即可完成日常的文字处理工作,无需再安装任何软件,是完全免费的。具有自动保存功能,类似Gmail那样。

Google近日正式收购了Writely,而后者提供的主要是在线文档编辑服务,Google很可能在今后给出类似的服务。Writely现有的文档编辑功能已经支持Word、OpenOffice、RTF、HTML、TEXT等文档的编辑,同时采用所见即所得界面,用户可以方便实现文档格式控制和拼写检查。

这些功能主要是针对微软的office市场。

有兴趣的朋友可以到http://www.writely.com 去看看这项google今后的服务。

Writely (via Writely) 致 我
更多选项 17:04 (35分钟前)



* * *

You can access the secure document called ‘Google’ from Writely (writely.invites4@gmail.com) as:

E-mail address: *******@gmail.com (这里是你申请时用的gmail)
Password:****** (这里是登陆密码)

Click here to sign in and view the document: http://www.writely.com/Doc.aspx?id=bdf7kp9q2fxk8(用这里的网址登陆,第一次登陆会提示你设置密码)

* * *

Replies to this message will be forwarded to writely.invites4@gmail.com.

* * *

Writely is a simple, secure online word processor.

At Writely, we have a very strict NO-SPAM policy, which means we won’t ever sell, trade or give away any e-mail address you enter.

We also take data security very seriously. Only people you authorize can view or modify a document.

To edit documents with Writely, you will need a fairly up-to-date version of IE, FireFox or Mozilla, and to enable pop-ups for the writely.com domain (we promise not to show any pop-up ads!). Document text can be up to 500KB in length, and images can be up to 2MB.

More questions? Check out our Help Center at http://www.writely.com/?action=help.

上面的信息简单介绍了一下writely的情况,比如最大文本500K,最大图片上传2M;等……
预祝大伙成功!速度有点慢,但功能确实新颖!

文件也有“身份证”——交换数据流

0

分类 : 技术文摘 | 发表时间 28-04-2006

文件也有“身份证”——交换数据流(1)
笔者的办公室配了一台新的品牌机,最近发现在下载软件时多出了一个“安全警告”对话框(如图1),这可是以前都没有遇见过的。办公室里的品牌机和旧电脑都是使用的Windows XP,可是为什么用旧电脑下载软件就没有这个对话框呢?经过仔细对比品牌机和旧电脑,发现品牌机的操作系统安装了SP2,而旧电脑则没有安装,兴许问题就在这儿了。后来咨询了一位专家,证实了笔者的猜想,这是微软的一项安全技术——交换数据流。


什么是交换数据流

NTFS文件系统中有一个很少被大家注意的特性,通过该特性,我们可以在保证一个文件完整的情况下给该文件附加一些额外的信息,这些本不属于该文件的信息就叫做“交换数据流(Alternate Data Stream)”;而文件本身则叫做该文件的“主数据流(Primary Data Stream)”。在用IE浏览器下载软件时通常会弹出一个下载提示框时,可以选择直接运行或是保存到本地,如果选择了直接运行的话,软件就会被下载到临时文件夹,然后自动运行。当可执行文件在下载完成后自动运行时就会出现图1所示的对话框。由于这些可执行文件可能含有病毒或者其它危险因素,随意运行这些文件就有可能给我们的系统带来损害。为了防止用户错误地运行这种文件,微软在Windows XP SP2中使用了这样一个新功能来提醒用户,该功能就是依赖交换数据流工作的。

当我们使用IE浏览器把网上的可执行文件保存到NTFS文件系统的分区上,IE浏览器就会自动给下载回来的文件附加一个交换数据流,当我们双击运行带有这种数据流的文件时,系统就会出现图2所示的提示。通过这个实例我们知道,要使该选项生效,需要同时满足下列条件:1、文件是从网络中获得的;2、文件必须保存在NTFS文件系统的分区上;3、文件必须使用IE浏览器下载到本地,使用其它下载工具下载的文件不会被添加这一数据流。


取消安全警告

虽然这是一种善意的提示,但我们有可能会觉得麻烦,希望能够取消这种提示。我们可以直接在图1所示的对话框中取消“打开此文件前总是询问”的选中状态。或者直接查看文件属性,在“属性”对话框的“常规”标签上点击“解除锁定”按钮,也可以禁用这种提示。这两种方法都可以删除文件中的交换数据流,但是要注意,通过这两种方法删除的只是特定文件中的交换数据流,其它文件不受影响。换句话说,在运行其它包含交换数据流的文件时同样会出现这种提示,除非对其它文件重新执行上述操作。

·文件也有“身份证”——交换数据流文件也有“身份证”——交换数据流(2)
查看交换数据流

我们如何查看某个文件里是否含有交换数据流呢?可以使用一个叫做Streams的工具。这是一个命令行工具,需要先打开命令提示符,再从命令提示符窗口中运行Streams,直接双击Streams.exe是无法运行程序的。假设我们要查看保存在C盘根目录下的dxwebsetup.exe文件的交换数据流,可以使用命令“streams c:\dxwebsetup.exe”。为了方便对比,我们对同一文件分别使用了该命令两次,第一次是在文件带有交换数据流的情况下使用的,运行结果显示为“:Zone.Identifier:$DATA 26”;而第二次则是删除交换数据流之后使用的,结果显示为“No files with streams found”,这充分说明了交换数据流的存在(如图3)。

提示:在运行streams时添加参数“-d”可以删除文件的交换数据流。

交换数据流的其它作用

想知道交换数据流还有什么其它作用吗?不说远了,就说电脑迷光盘中的卡巴斯基杀毒软件,该软件就利用了类似交换数据流的特性,只不过在卡巴斯基中该功能被称为“iChecker”(用于FAT32文件系统)和“iStreams”(用于NTFS文件系统)。

当我们第一次使用5.0以上版本的卡巴斯基杀毒软件对整个系统查毒的时候,杀毒软件会自动给所有扫描过的文件添加交换数据流信息,标记该文件已经被检查过,是安全无毒的。日后再次扫描文件时杀毒软件会首先检查每个文件的交换数据流中有没有自己标记的信息,如果有,则会跳过这个文件,这会极大地提高扫描速度。

你可能会担心每一个文件都被卡巴斯基添加了交换数据流后会占用很多硬盘空间,其实这个担心是多余的,交换数据流并不会占用硬盘空间,大家可以用前面的方法删除一个文件的交换数据流,然后对比删除前后的文件体积来验证。也许你还会想如果不再使用卡巴斯基了,该如何删除大量文件中留下的交换数据流呢?这里就需要用到卡巴斯基公司提供的一个小程序KLStreamRemover,与使用Streams一样,KLStreamRemover也需要用命令提示符来运行。将文件保存在想要清除数据流的文件所在的硬盘分区,然后打开命令提示符窗口,运行“Klstreamremover.exe -r”命令,程序就会自动将该分区下被卡巴斯基杀毒软件附加的交换数据流全部删除。

提示:在使用KLStreamRemover之前应先把巴斯基杀毒软件卸载掉。KLStreamRemover一次只能清除一个分区内文件的数据流,若要清除多个分区的话,需要重复运行KLStreamRemover多次。

安全研究十大臭名昭著的瞬间

0

分类 : 技术文摘 | 发表时间 20-04-2006

计世网消息
1、SQL Slammer 在微软发布SQL补丁软件一周后,研究人员大卫在Black Hat会议上展示了该缺陷。利用该缺陷的Slammer蠕虫在2003年曾经使互联网出现大塞车。
2、Windows即插即用 互联网安全系统公司的研究人员在2005年4月份发现了该Windows缺陷,它使黑客能够控制有缺陷的系统,并远程地执行代码。到8月份,出现了利用该缺陷的Zotob蠕虫。
3、思科IOS堆栈溢出 前ISS研究人员迈克尔在2005年7月份表明,利用此缺陷黑客能够控制一家公司的网络。思科后来发布了补丁软件,但它还是起诉了迈克尔。
4、Windows图元文件 研究人员摩尔和其他研究人员在1月份发布了利用该缺陷的代码,研究人员吉尔凡诺夫则开发了非官方的解决方法,这促使微软提前5天发布了补丁软件。
5、甲骨文的数据加密 Red-Database-Security的研究人员亚历山大在2006年1月份向甲骨文报告了这一缺陷,甲骨文在同月发布了补丁软件。
6、甲骨文PLSQL网关 大卫在1月份向Black Hat的与会者展示了甲骨文的SQL过程语言扩展中的这一缺陷。甲骨文还没有发布相应的补丁软件。
7、苹果的Mac iChat 2006年2月13日,一匿名人士在MacRumors.com上发布了指向OSX/Leap.a特洛伊木马病毒的链接,这也是苹果的Mac OS X平台上的第一种病毒。
8、IE createTextRange()缺陷 研究人员安德里亚斯在3月份发现了这一缺陷,它使黑客能够在有缺陷的系统上安装与恶意软件类似的击键记录软件。eEye数字安全公司发布了非官方的补丁软件。
9、IE HTA文件 荷兰研究人员杰佛里在3月份向微软报告了这一与IE处理HTML应用软件相关的问题。当微软表示不满后,杰佛里从其网站上删除了与该缺陷相关的资料。
10、Sendmail SMTP服务器软件 ISS于3月份在这一流行的互联网电子邮件软件中发现了缺陷,Sendmail立即发布了相关的补丁软件

让window服务进程中自动加载MYSQL

0

分类 : 技术文摘 | 发表时间 17-04-2006

在安装mysql解压包时虽然安装成功但在WINDOW自动启动时无法加载MYSQL服务,通过在网上不断的找资料还有自己的实践终于搞定,希望对遇到这要问题的朋友有点作用,
  如何让MYSQL服务进程中自动加载MYSQL

  1.在 开始--》运行中执行 c:\mysql\bin\mysqld-nt -install (卸载时执行-uninstall)

  2.把c:/mysql/my-medium.ini改名为my.ini并修改里面的相关配置拷到c:/winnt 或c:/winnts c:/windows 下

  3.然后在开始--》运行 中执行 net start|stop|restart mysql


  下面在本地机上采用安装的方式生成的my.ini

  [注:要根据自己的实际情况修改相应的参数即可]

# MySQL Server Instance Configuration File
# ———————————————————————-
# Generated by the MySQL Server Instance Configuration Wizard
#
#
# Installation Instructions
# ———————————————————————-
#
# On Linux you can copy this file to /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options
# (@localstatedir@ for this installation) or to
# ~/.my.cnf to set user-specific options.
#
# On Windows you should keep this file in the installation directory
# of your server (e.g. C:\Program Files\MySQL\MySQL Server 4.1). To
# make sure the server reads the config file use the startup option
# “–defaults-file”.
#
# To run run the server from the command line, execute this in a
# command line shell, e.g.
# mysqld –defaults-file=”C:\Program Files\MySQL\MySQL Server 4.1\my.ini”
#
# To install the server as a Windows service manually, execute this in a
# command line shell, e.g.
# mysqld –install MySQL41 –defaults-file=”C:\Program Files\MySQL\MySQL Server 4.1\my.ini”
#
# And then execute this in a command line shell to start the server, e.g.
# net start MySQL41
#
#
# Guildlines for editing this file
# ———————————————————————-
#
# In this file, you can use all long options that the program supports.
# If you want to know the options a program supports, start the program
# with the “–help” option.
#
# More detailed information about the individual options can also be
# found in the manual.
#
#
# CLIENT SECTION
# ———————————————————————-
#
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
#
[client]

port=3306

[mysql]

default-character-set=latin1


# SERVER SECTION
# ———————————————————————-
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306


#Path to installation directory. All paths are usually resolved relative to this.
basedir=”C:/Program Files/MySQL/MySQL Server 5.0/”

#Path to the database root
datadir=”C:/Program Files/MySQL/MySQL Server 5.0/Data/”

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin1

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB

# Set the SQL mode to strict
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

# The maximum amount of concurrent sessions the MySQL server will
# allow. One of these connections will be reserved for a user with
# SUPER privileges to allow the administrator to login even if the
# connection limit has been reached.
max_connections=100

# Query cache is used to cache SELECT results and later return them
# without actual executing the same query once again. Having the query
# cache enabled may result in significant speed improvements, if your
# have a lot of identical queries and rarely changing tables. See the
# “Qcache_lowmem_prunes” status variable to check if the current value
# is high enough for your load.
# Note: In case your tables change very often or if your queries are
# textually different every time, the query cache may result in a
# slowdown instead of a performance improvement.
query_cache_size=0

# The number of open tables for all threads. Increasing this value
# increases the number of file descriptors that mysqld requires.
# Therefore you have to make sure to set the amount of open files
# allowed to at least 4096 in the variable “open-files-limit” in
# section [mysqld_safe]
table_cache=256

# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
tmp_table_size=5M


# How many threads we should keep in a cache for reuse. When a client
# disconnects, the client’s threads are put in the cache if there aren’t
# more than thread_cache_size threads from before. This greatly reduces
# the amount of thread creations needed if you have a lot of new
# connections. (Normally this doesn’t give a notable performance
# improvement if you have a good thread implementation.)
thread_cache_size=8

#*** MyISAM Specific options

# The maximum size of the temporary file MySQL is allowed to use while
# recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE.
# If the file-size would be bigger than this, the index will be created
# through the key cache (which is slower).
myisam_max_sort_file_size=100G

# If the temporary file used for fast index creation would be bigger
# than using the key cache by the amount specified here, then prefer the
# key cache method. This is mainly used to force long character keys in
# large tables to use the slower key cache method to create the index.
myisam_max_extra_sort_file_size=100G

# If the temporary file used for fast index creation would be bigger
# than using the key cache by the amount specified here, then prefer the
# key cache method. This is mainly used to force long character keys in
# large tables to use the slower key cache method to create the index.
myisam_sort_buffer_size=8M

# Size of the Key Buffer, used to cache index blocks for MyISAM tables.
# Do not set it larger than 30% of your available memory, as some memory
# is also required by the OS to cache rows. Even if you’re not using
# MyISAM tables, you should still set it to 8-64M as it will also be
# used for internal temporary disk tables.
key_buffer_size=8M

# Size of the buffer used for doing full table scans of MyISAM tables.
# Allocated per thread, if a full scan is needed.
read_buffer_size=64K
read_rnd_buffer_size=256K

# This buffer is allocated when MySQL needs to rebuild the index in
# REPAIR, OPTIMZE, ALTER table statements as well as in LOAD DATA INFILE
# into an empty table. It is allocated per thread so be careful with
# large settings.
sort_buffer_size=212K


#*** INNODB Specific options ***


# Use this option if you have a MySQL server with InnoDB support enabled
# but you do not plan to use it. This will save memory and disk space
# and speed up some things.
#skip-innodb

# Additional memory pool
that is used by InnoDB to store metadata
# information. If InnoDB requires more memory for this purpose it will
# start to allocate it from the OS. As this is fast enough on most
# recent operating systems, you normally do not need to change this
# value. SHOW INNODB STATUS will display the current amount used.
innodb_additional_mem_pool_size=2M

# If set to 1, InnoDB will flush (fsync) the transaction logs to the
# disk at each commit, which offers full ACID behavior. If you are
# willing to compromise this safety, and you are running small
# transactions, you may set this to 0 or 2 to reduce disk I/O to the
# logs. Value 0 means that the log is only written to the log file and
# the log file flushed to disk approximately once per second. Value 2
# means the log is written to the log file at each commit, but the log
# file is only flushed to disk approximately once per second.
innodb_flush_log_at_trx_commit=1

# The size of the buffer InnoDB uses for buffering log data. As soon as
# it is full, InnoDB will have to flush it to disk. As it is flushed
# once per second anyway, it does not make sense to have it very large
# (even with long transactions).
innodb_log_buffer_size=1M

# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
innodb_buffer_pool_size=8M

# Size of each log file in a log group. You should set the combined size
# of log files to about 25%-100% of your buffer pool size to avoid
# unneeded buffer pool flush activity on log file overwrite. However,
# note that a larger logfile size will increase the time needed for the
# recovery process.
innodb_log_file_size=10M

# Number of threads allowed inside the InnoDB kernel. The optimal value
# depends highly on the application, hardware as well as the OS
# scheduler properties. A too high value may lead to thread thrashing.
innodb_thread_concurrency=8

网络活宝——后舍男孩[作品全集]

0

分类 : 网络日志 | 发表时间 27-03-2006

as long as you love me

不得不爱

Radio in My Head(最新)

分开旅行

I want it that way

新花样访谈视频

全面才艺大展示

做客国际在线


后舍男生”简介:

  他们的名字在网络世界热辣火爆,他们的MV在网络的点击下载率超过百万,他们是一对超级爆笑无厘头的男生组合。

  他们就是传说中的“后舍男生”!

  “后舍男生”是一对年轻的男生组合,他们翻唱,不,应该是假唱流行歌曲,翻拍这些歌曲的MV,用他们独特的夸张的古灵精怪的表演手法,重新演绎,他们的表演令人捧腹大笑,笑完再笑,笑后狂笑,笑个不停。他们是年轻人的无厘头典范,超级搞笑的大学男生活宝级人物!


艺名:小LONG 

    身高(cm):189

    体重(kg):90 

    三围(cm):109 88 109

    韦炜,真正高大威猛的男生,打眼一看像葛明辉的全能运动型帅哥。“出道”较早,拍摄过无数平面模特写真,其中最知名的当属喜之郎广告。如此强悍的他,酱爆聪也敬称他为“猛将兄”!

    他曾读于广州美院附中,后与黄艺馨同时考入广州美院2002级雕刻系。两人在大学时多次合作参加广州各类表演活动。
艺名:大LONG 

    年龄:23

    身高(cm):173 

    体重:保密

    三围:保密

    黄艺馨,学习成绩优异,擅长相声/小品/主持表演,曾多次参加广州大学城文艺表演,是典型的陈浩民型帅哥!

    曾读于广州美院附中,与韦炜同时考入广州美院2002级雕刻系。两人在大学时多次合作参加广州各类表演活动,其中还曾在广州/深圳电视台有过精彩的创意广告表演,所以配合起来表演这些,应该是水到渠成,天衣无缝!

  后舍男生的第一部《as long as you love me》

  后舍男生的第一部“假唱作品”《as long as you love me》,恶搞的风格令人捧腹,在网络上掀起一股不小的波澜。数据统计,下载看过这部小品的人数过百万——孰真孰假,暂时无从考证,但可以肯定的是,他们的成名与其他“网络名人”有着相当的不同。

  后舍男生第二部MV《分开旅行》

  后舍男生第二部MV《分开旅行》——也有很多疯狂的FANS看了之后对两位帅哥的“亲密关系”想入非非,咳咳,大家要CJ啊!不过这也不能怪耽美女狼们,黄GG和韦GG的身材容貌实在在这部作品中形成强烈的对比,几乎不必怎么多表演,一个皱眉就不小心变成“绝配怨偶”了。(下面把韦GG称为他的呢称VIVI吧,不然读起来有点别扭,大家不要想歪,要CJ啊!)

    开篇娇小的黄GG整了整衣领,浓眉倒挂,秀气的面孔呈幽怨状;而VIVI则头戴黑帽、玄色墨镜、身穿背心,露出健硕的古铜色肌肉——按照一般的形容词,这叫做“man”,或者“maennlich”,总之男子气十足。这年头美男如花,但要找几个有男人味的演员明星却很困难(个人觉得德国国门卡恩非常有男人味,当然VIVI比卡恩好看)。

    看到这时候,我最关心的则是——第三者在哪里?看过他们作品的人都不会忘记那个埋首打CS的人肉背景,如果少了这个熟悉的背影,只怕后宿舍组合会有一种残缺感。好在第三者——肖GG,及时出现,并且赤搏上阵,头上包了一条毛巾,忠实地打开了电脑——遗憾的是这次他没有打CS(好像在做功课,好学生哦)。不过难得地出现了第四者(VIVI还递过去一个打招呼的笑容),据说这位第四者GG是个拿国家一等奖学金的才子,不过他拍PP的动作相信观众都会铭记于心。

    具体表演就不多谈了,黄GG的“怨妇”造型扇傻悖峙跸嗉埽ɡ锩婧孟袷撬约旱恼掌∧褚廊俗戳钆酝蕴静蝗纾叱贝Ω敲鸵怀兑陆螅星槭苌耸降谋⒘κ志恕?

    而VIVI

缓冲区溢出的保护方法

0

分类 : 娱乐休闲 | 发表时间 15-03-2006

目前有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。

编写正确的代码 非执行的缓冲区 数组边界检查 程序指针完整性检查

 

一、编写正确的代码 Top

编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序组具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。

最简单的方法就是用grep来搜索源代码中容易产生漏洞的库的调用,比如对strcpy和sprintf的调用,这两个函数都没有检查输入参数的长度。事实上,各个版本C的标准库均有这样的问题存在。为了寻找一些常见的诸如缓冲区溢出和操作系统竞争条件等漏洞,一些代码检查小组检查了很多的代码。然而依然有漏网之鱼存在。尽管采用了strcpy和sprintf这些替代函数来防止缓冲区溢出的发生,但是由于编写代码的问题,仍旧会有这种情况发生。比如lprm程序就是最好的例子,虽然它通过了代码的安全检查,但仍然有缓冲区溢出的问题存在。

为了对付这些问题,人们开发了一些高级的查错工具,如faultinjection等。这些工具的目的在于通过人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。还有一些静态分析工具用于侦测缓冲区溢出的存在。虽然这些工具可以帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在,除非程序员能保证他的程序万元一失。

二、非执行的缓冲区 Top

通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。事实上,很多老的Unix系统都是这样设计的,但是近来的Unix和MS Windows系统为实现更好的性能和功能,往往在数据段中动态地放人可执行的代码。所以为了保持程序的兼容性不可能使得所有程序的数据段不可执行。但是我们可以设定堆栈数据段不可执行,这样就可以最大限度地保证了程序的兼容性。Linux和Solaris都发布了有关这方面的内核补丁。因为几乎没有任何合的
程序会在堆栈中存放代码,这种做法几乎不产生任何兼容性问题,除了在Linux中的两个特例,这时可执行的代码必须被放入堆栈中:

1.信号传递

Linux通过向进程堆栈释放代码然后引发中断来执行在堆栈中的代码进而实现向进程发送Unix信号.非执行缓冲区的补丁在发送信号的时候是允许缓冲区可执行的.

2.GCC的在线重用

研究发现gcc在堆栈区里放置了可执行的代码以便在线重用。然而,关闭这个功能并不产生任何问题.只有部分功能似乎不能使用。非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果。通过引用一个驻留
的程序的指针,就可以跳过这种保护措施。其他的攻击可以采用把代码植入堆或者静态数据段中来跳过保护。

三、数组边界检查 Top

植入代码引起缓冲区溢出是一个方面,扰乱程序的执行流程是另一个方面。不像非执行缓冲区保护,数组边界检查完全没有了缓冲区溢出的产生和攻击。这样,只要数组不能被溢出,溢出攻击也就无从谈起。为了实现数组边界检查,则所有的对数组的读写操作都应当被检查以确保对数组的操作在正确的范围内。最直接的方法是检查所有的数组操作,但是通常可以来用一些优化的技术来减少检查的次数。目前有以下的几种检查方法:

1、Compaq C编译器

Compaq公司为Alpha CPU开发的C编译器支持有限度的边界检查(使用—check_bounds参数)。这些限制是:只有显示的数组引用才被检查,比如“a[3]”会被检查,而“*(a
+3)”则不会。由于所有的C数组在传送的时候是指针传递的,所以传递给函数的的数组不会被检查。带有危险性的库函数如strcpy不会在编译的时候进行边界检查,即便是指定了边界检查。在C语言中利用指针进行数组操作和传递是非常频繁的,因此这种局限性是非常严重的。通常这种边界检查用来程序的查错,而且不能保证不发生缓冲区溢出的漏洞。

2、Jones&Kelly:C的数组边界检查

Richard Jones和Paul Kelly开发了一个gcc的补丁,用来实现对C程序完全的数组边界检查。由于没有改变指针的含义,所以被编译的程序和其他的gcc模块具有很好的兼容性。更进一步的是,他们由此从没有指针的表达式中导出了一个“基”指针,然后通过检查这个基指针来侦测表达式的结果是否在容许的范围之内。当然,这样付出的性能上的代价是巨大的:对于一个频繁使用指针的程序,如向量乘法,将由于指针的频繁使用而使速度慢30倍。这个编译器目前还很不成熟,一些复杂的程序(如elm)还不能在这个上面编译、执行通过。然而在它的一个更新版本之下,它至少能编译执行ssh软件的加密软件包,但其实现的性能要下降12倍。

3、Purify:存储器存取检查

Purify是C程序调试时查看存储器使用的工具而不是专用的安全工具。Purify使用”目标代码插入”技术来检查所有的存储器存取。通过用Purify连接工具连接,可执行代码在执行的时候带来的性能的损失要下降3—5倍。

4、类型——安全语言

所有的缓冲区溢出漏洞都源于C语言的类型安全。如果只有类型—安全的操作才可以被允许执行,这样就不可能出现对变量的强制操作。如果作为新手,可以推荐使用具有类型—安全的语言如JAVA和ML。

但是作为Java执行平台的Java虚拟机是C程序.因此攻击JVM的一条途径是使JVM的缓冲区溢出。因此在系统中采用缓冲区溢出防卫技术来使用强制类型—安全的语言可以收到预想不到的效果。

四、程序指针完整性检查 Top

程序指针完整性检查和边界检查有略微的不同。与防止程序指针被改变不同,程序指针完整性检查在程序指针被引用之前检测到它的改变。因此,即便一个攻击者成功地改变程序的指针,由于系统事先检测到了指针的改变,因此这个指针将不会被使用。与数组边界检查相比,这种方法不能解决所有的缓冲区溢出问题;采用其他的缓冲区溢出方法就可以避免这种检测。但是这种方法在性能上有很大的优势,而且兼容性也很好。

l、手写的堆栈监测

Snarskii为FreeBSD开发丁一套定制的能通过监测cpu堆栈来确定缓冲区溢出的libc。这个应用完全用手工汇编写的,而且只保护libc中的当前有效纪录函数.这个应用达到了设计要求,对于基于libc库函数的攻击具有很好的防卫,但是不能防卫其它方式的攻击.

2、堆栈保护

堆栈保护是一种提供程序指针完整性检查的编译器技术.通过检查函数活动纪录中的返回地址来实现。堆栈保护作为gcc的一个小的补丁,在每个函数中,加入了函数建立和销毁的代码。加入的函数建立代码实际上在堆栈中函数返回地址后面加了一些附加的字节。而在函

妙用脚本代理提升权限

0

分类 : 技术文摘 | 发表时间 15-03-2006

By:Lcx

可能很多人还不是很了解我所说的web脚本代理是个什么概念。WEB脚本代理就是在服务器上放一个asp或php等的动态的脚本,然后调用这个脚本去访问别的网站,那么被访问网站的显示你来访的IP就是服务器的IP。4ngel的PhpSpy后门和Marcos的aspadmin站长助手这两个webshell都集成了这个功能。无论是php或是asp的脚本代理其实都是调用了xmlhttp这一组件,将远程网站的数据用你所放webshell的服务器上来进行一次中转然后再将内容呈现给你而已。很多程序员都用这个原理来写一些小偷程序,像在网站上只放几个脚本文件就可以调用别的网站数据。如果我们把它用在了黑客攻击上,那能用它来做什么呢?我恰好用它来做了一点事,就是提升权限和内网入侵。

一、提升权限

这应当是一个特例,不过确确实实被我碰到了。我在一个被入侵的网站上放了一个海阳顶端网asp木马。这个网站是一个公司的独立服务器,所以目录权限并没有像虚拟主机设置的那样变态,几乎所有目录都有可写权限,wscript.shell等命令也能运行。不过也正是因为是公司的独立服务器,所以也没有装serv-u这样容易的提权软件,也没有额外的第三方服务软件,系统补丁打得也很快,提权还是比较困难。替换服务是一个可行的办法,不过需要时间等待。经过仔细查看,得到了一些有用信息。该服务器是IIS+ASP+ACCESS搭配的web服务器,装有防火墙,对外只开放了80端口。另外,还装有了一个apache+tomcat+jsp的内部web系统,开放的是8080端口,内部web系统的物理目录也查明是C:\ApacheGroup\Tomcat 5.0\server\webapps。这也是我以前装过apache+tomcat+jsp,凭经验判断出来的。通过在海阳顶端里运行netstat -an和用海阳顶端asp木马的查看服务选项及目录信息能够了解到这3点的,如图1、图2、图3所示。另外用ipconfig/all这个命令可以明确知道图1中显示的10.0.16.16这一内网ip的确就是该服务器的内网ip。






信息有了,提权思路也就来了。如果我能绕过防火墙,直接访问它内网的web系统http://10.0.16.16:8080,那么我就可以先用海阳顶端asp木马传一个jsp的webshell到它的物理目录C:\ApacheGroup\Tomcat 5.0\server\webapps,然后再来调用这个jsp的webshell了。它的tomcat是以服务的形式安装的,jsp一般是继承了其系统权限。开始我以为好办,直接用htran.exe这个工具将其8080端口转到外网,我不就可以成功了吗?结果令我很失望,端口是转出来了,不过还是访问不了它的jsp系统,不知是什么原因。冥思苦想中,突然想到了我传一个asp脚本代理到它的网站,再调用这个脚本代理去访问它的内网的jsp web系统不就可以了吗?它的内网web和外网web都在同一服务器上,用脚本代理去访问绕过防火墙是根本不成问题的,因为这个脚本代理会让内网web系统误认为是同一台机器在访问它。我手头上有一个Marcos写的WebProxy.asp脚本,就是起代理作用的。于是我改名为imgae.asp传到了外网asp系统的某个目录,先来看看它的效果:提交http://www.g****.com/uploadimages/image.asp?url=http://www.haiyang.net/safety/ip.asp,效果如图4所示。可以看到我的访问ip的确变成了www.g****.com该服务器的ip了。


www.haiyang.net/safety/ip.asp是我写的一个验证来访者ip、端口的小程序,代码很简单,如下:


ip->->port
->actfor->



好,脚本代理没有bug,那么再写一个jsp的webshell传到内网jsp web系统的物理目录下吧。jsp的webshell我写得很简单,就是一个直接运行命令加用户的的小脚本tlist.jsp,代码如下:


<%@page import="java.io.*,java.util.*,java.net.*" %>


也许会有人问,那为什么不采用现成一些jsp木马呢。开始我还真试过了,因为我用的这个WebProxy.asp后边只能直接跟一个url文件,url文件里的某些post参数并不起作用,现成的jsp的木马写得都有点复杂,功能也多,因此一些命令不可避免地要运用到一些参数。我把这个tlist.jsp传到了内网web的物理目录下,然后直接运行http://www.generalichina.com/uploadimages/image.asp?url=http://10.0.16.16:8080/manager/tlist.jsp就在服务器上成功加了一个id为lcx的用户!如果要运行木马的话,你只要把tlist.jsp里的“●String cmd =”cmd.exe /c net user lcx lcx /add”;●”这句改动一下就可以了。像我传了一个tlist.exe到服务器的系统目录底下,然后改为“●String cmd =”tlist.exe”;●”,运行http://www.generalichina.com/uploadimages/image.asp?url=http://10.0.16.16:8080/manager/tlist.jsp运行效果如图5所示。


在实际操作过程中要注意一点,如果你用tlist.asp运行了一次命令的话,想改下代码运行其它的程序就要把tlist.asp改一次名,要不然还是回显上一次执行的结果。另外,不知是此台服务器特殊还是其它的原因,我把木马放在非系统目录,像c:\muma.exe,然后修改●String cmd =”cmd.exe /c net user lcx lcx /add”;●为●String cmd =”c:\muma.exe”;●木马并没有运行,只有放到系统目录system32底下才成功运行了,这个原因我现在也不是很明确。

二、入侵内网及其它妙用

入侵内网,在提升权限的第一个例子里其实已经很明确了,如果那台机器的内网web放在别的机器上,做法与提升权限的方法都是一样的,不过没有内外网在同一台机器上方便而已,这也算是脚本入侵内网的一个思路吧,实际意义不是很大,聊胜于无。其它妙用是什么呢?如果你在学校内网里,只能上内网和访问学校的web服务器,学校的web服务器与外网又是相同的,那你在web服务器放一个WebProxy.asp或其它的脚本代理,是不是你在内网访问http://学校的web服务器/WebProxy.asp?url=http://www.163.net/index.html就可以上外网了呢?一个asp脚本我估计就会解决以前很多学生的烦恼了吧?

http://lvhuana.bokee.com/inc/WebProxy.asp.rar
[最后修改由 neeao, 于 2006-03-14 17:13:51]

Linux主要shell命令详解

0

分类 : 系统安全 | 发表时间 10-03-2006

shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。

 什么是shell

Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。

shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。

shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。
 
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。

当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。

当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

我们来实习一下shell是如何工作的。

$ make work

make:***No rule to make target ‘work’. Stop.

$

注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。

在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在 “make work”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。

另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:

$ myprog

bash:myprog:command not found

$

可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息。

shell的种类

Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三种shell各有优缺点。Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。

Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途,有些shell是有专利的,有些能从Internet网上或其他来源获得。要决定使用哪个shell,只需读一下各种shell的联机帮助,并试用一下。

用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如:

# fgrep lisa /etc/passwd

lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash

shell被列每行的末尾(/bin/bash)。

由于Bash是Linux上缺省的shell,本章主要介绍Bash及其相关知识。

shell命令

命令行c

用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如:

$ date

二 11 23 01:34:58 CST 1999

$

用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下:

$ Command Option Arguments

1. 选项和参数

选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型。例如:

$ ls

motd passwd

$

这是没有选项的ls命令,可列出当前目录中所有文件,只列出各个文件的名字,而不显示其他更多的信息。

$ ls -l

total 2

-rw-r–r– 2 wzh book 22 Apr 20 20:37 motd

-rw-r–r– 2 wzh book 796 Apr 20 20:37 passwd

$

加入-l选项,将会为每个文件列出一行信息,诸如数据大小和数据最后被修改的时间。

大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如:

$ ls -l text

-rw-r–r– 2 wzh book 22 Apr 20 20:37 motd

-rw-r–r– 2 wzh book 796 Apr 20 20:37 passwd

$

将显示text目录下的所有文件及其信息。

有些命令,如ls可以带参数,而有一些命令可能需要一些最小数目的参数。例如,cp命令至少需要两个参数,如果参数的数目与命令要求不符,shell将会给出出错信息。例如:

$ cp -i mydata newdata

注意:命令行中选项先于参数
输入。
2. 命令行特征

命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。比如利用BACKSPACE键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。

利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无须重新键入该命令。

bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。按动上箭头,便可以在命令行上逐次显示各条命令。同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。

在一个命令行中还可以置入多个命令,用分号将各个命令隔开。例如:

$ ls -F;cp -i mydata newdata

也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。

$ cp –i

mydata

newdata

 

上面的cp命令是在三行中输入的,开始的两行以反斜杠结束,把三行作为一个命令行。

shell中的特殊字符

shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。

1. 通配符

通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。

* 代表任何字符串(长度可以不等),例如:“f*”匹配以f打头的任意字符串。但应注意,文件名前的圆点(.)和路经名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。

? 代表任何单个字符。

[] 代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[]中指定的范围之内,那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f [a- d] 与f [abcd]的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数,形成最终的命令,然后再执行这个命令。

下面我们给出表10-1说明这些通配符的具体含义。

表10-1 通配符含义举例

模式串

意 义

*

当前目录下所有文件的名称。

*Text*

当前目录下所有文件名中包含有Text的文件的名称。

[ab-dm]*

当前目录下所有以a、b、c、d、m开头的文件的名称。

[ab-dm]?

当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称。

/usr/bin/??

目录/usr/bin下所有名称为两个字符的文件的名称。

 

特别需要注意的是,连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了。例如,模式“- a[*?]abc”中只有一对方括号是通配符,*和?均为普通字符,因此,它匹配的字符串只能是- a*abc和- a?abc。

最后说明一下使用通配符时需要注意的一些问题。由于*、?和[]对于shell来说具有比较特殊的意义,因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷的递归下去。另外要注意的一点是:如果目录中没有与指定的模式串相匹配的文件名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。
2. 引号

在shell中引号分为三种:单引号,双引号和反引号。

* 单引号 ‘

由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:

$ string=’$PATH’

$ echo $string

$PATH

$

可见$保持了其本身的含义,作为普通字符出现。

* 双引号 “

由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上的只有四个字符$,,’和”本身。而对”号,若其前面没有加,则Shell会将它同前一个”号匹配。

例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:

$ TestString=”$PATH\”$PATH”

$ echo $TestString

.:/usr/bin:/ bin”$PATH

$

读者可以自己试一下在第二个双引号之前不加会产生什么结果。

 

* 反引号 `

反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:

$ pwd

/home/xyz

$ string=”current directory is `pwd`”

$ echo $string

current directour is /home/xyz

$

shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。

利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如:

$ today=`date`

$ echo Today is $today

Today is Mon Apr 15 16:20:13 CST 1999

$

反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线()将其转义。例如:

$ abc=`echo The number of users is `who| wc-l“

$ echo $abc

The number of users is 5

$

在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到“中命令的结果,它实际上要去执行“中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且“所包含的可以是任何一个合法的Shell命令,如:

$ ls

note readme.txt Notice Unix.dir

$ TestString=”`echo $HOME ` ` ls [nN]*`”

$ echo $TestString

/home/yxz note Notice

$

其他情况,读者可自行试之。

1. 注释符

在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。

此外还有一些特殊字符如:用于输入/输出重定向与管道的<、>、<<、>>和|;执行后台命令的&;命令执行操作符&&和||及表示命令组的{}将在下面各小节中加以介绍。

标准输入/输出和重定向

1. 标准输入与输出

我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(
stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

我们以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

$ cat config

将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:

$ cat

Hello world

Hello world

Bye

Bye



$

用户输入的每一行都立刻被cat命令输出到屏幕上。

另一个例子,命令sort按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。

$ sort

bananas

carrots

apples



apples

bananas

carrots

$

这时我们在屏幕上得到了已排序的采购单。

直接使用标准输入/输出文件存在以下问题:

输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

2. 输入重定向

输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

$ wc

wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。

如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。

$ wc /etc/passwd

20 23 726 /etc/passwd

$

另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:

$ wc < /etc/passwd

20 23 726

$

另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。

$ wc<
>this text forms the content

>of the here document,which

>continues until the end of

>text delimter

>delim

4 17 98

在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。

由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。

1. 输出重定向

输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。

输出重定向的一般形式为:命令>文件名。例如:

$ ls > directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

$

将ls命令的输出保存为一个名为directory.out的文件。

注:如果>符号后边的文件已存在,那么这个文件将被重写。

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。

如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令>>文件名。例如:

$ ls *.doc>>directory.out

$ cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/ test/

ch1.doc ch2.doc ch3.doc

$

和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:

$ ls /usr/tmp 2> err.file

可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。

还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。例如:

$ ls /usr/tmp &> output.file

利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列:

$ ls /usr/bin > /tmp/dir

$ wc –w < /tmp/dir

459

统计了/usr/bin目录下的文件个数。

管 道

将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个例子中的/tmp/dir文件将ls和wc命令联在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更好。

管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。

通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:

$ ls /usr/bin|wc -w

1789

再如:

$ cat sample.txt|grep “High”|wc -l

管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输出则是所有包含单词Hig
h的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件的内容如下:

Things to do today:

Low:Go grocery shopping

High:Return movie

High:Clear level 3 in Alien vs. Predator

Medium:Pick up clothes from dry cleaner

那么该管道行的结果是2。

命令替换

命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:

command1 `command2`

其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:

$ cd `pwd`

该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。

第二十二课 在Bash中的操作      2000年/5月/29日

命令和文件名扩展特性

Bash命令行具有命令和文件名扩展特性。当输入一个还没完成的命令或文件名时,只需键入Tab键就能激活命令和文件名扩展特性,从而完成该命令的剩余输入。如果有多个命令或文件的前缀相同,Bash将响铃并等待用户输入足够的字符,以便选择唯一的命令或文件名,如果找到,系统将自动补齐搜索到的命令或文件名,用户按回车键后,系统将执行这条指令。例如:

$ cat pre

$ cat preface

Bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc,然后键入?,shell将列出所有与输入的字符串相匹配的文件名。例如下例,在没有完成的输入后键入Esc ?,shell将列出所有与输入的字符串相匹配的字符串,然后shell回显命令行,根据列出的文件名,可以键入要输入的文件名或按下Tab键来完成文件名扩展。例如:

$ ls

document docudrama

$ cat doc

document

docudrama

$ cat docudrama

[例】下面是一个目录包含的文件列表:

Firebird2.7.tgz Firebird.README Firebird2.60.tgz

FireBird Firebird2.60.tgz.README

现在要删除Firebird2.60.tgz.README文件,键入:

$ rm –f Fi

系统会发出警报声,并且自动将命令行补全为:

$ rm –f Fire

并等待用户进一步输入文件名的后面部分。现在再键入:

b

系统再次发出警报声,并且自动将命令行补全为:

$ rm –f Firebird

并等待用户进一步输入文件名的后面部分。现在再键入:

2.6

系统再次发出警报声,并且自动将命令行补全为:

$ rm –f Firebird2.60.tgz

并等待用户进一步输入文件名的后面部分。现在再键入:

.

此时命令将被补全为:

$ rm –f Firebird2.60.tgz..README

从上例可以看到,bash总是尽力根据用户输入的信息来补全命令。当无法根据现有信息补全命令时,则提示用户再给出更多的信息,然后再根据用户的提示来进一步补全命令。作为用户最好是能够一次性给出足够的信息以便于bash进行命令补全;否则多按几次,时间也就消耗掉了。

命令行编辑

在Bash中可以对命令行进行编辑,以便用户在执行所键入的命令之前能够修改所键入的命令。如果在键入命令时出现拼写错误,只需在运行所键入的命令之前,使用编辑命令来纠正编辑错误,然后执行它,而不用重新输入整行命令。这个功能对以长路径文件名作参数的命令特别有用。

表10-2是对命令行编辑操作的一个总结。

表10-2 命令行编辑操作

 

命令行编辑操作

功能

Ctrl+b或左箭头键

左移一个字符(移至前一个字符)

Ctrl+f或右箭头键

右移一个字符(移至后一个字符)

Ctrl+a

移至行首

Ctrl+e

移至行尾

Esc b

左移一个单词

Esc f

右移一个单词

Del

删除光标所在处的字符

Ctrl+d

删除光标所在处的字符

BACKSPACE或Ctrl+h

删除光标左边的字符

Ctrl+k

删除至行尾

 

命令历史

在Bash中,history命令能够保存最近所执行的命令。这些命令的历史记录号从1开始,只有有限个命令可以被保存起来,最多500个,即 history命令的历史记录号缺省值为500。要查看最近执行的命令,只要键入history命令,然后键入回车键,最近执行过的命令即按先后顺序被显示出来(各条命令前的数字为历史记录号)。

[例】

$ history

1 cp mydata today

2 vi mydata

3 mv mydata reports

4 cd reports

5 ls



所有这些命令都被称为事件(event),一个事件表示一个操作已经发生,即一个命令已被执行。这些事件根据它们被执行的先后顺序用数字标识,这一标识称为历史事件号。最后执行的历史事件的事件号最大。每个事件都可由它的历史事件号或命令的初始字符或字符串等确定。

利用history命令能够查询以前的事件,并可把它们显示到命令行上执行这一事件。最简便的方法就是利用上下箭头键,把先前的事件逐次显示到命令行。这个操作不需要运行history命令就可以执行。按动一下上箭头键,那么上一次执行的一个事件就将出现在命令行上,再按一下,上一次的前一事件又会出现在命令行上;按动一下下箭头键,将会使当前事件的下一事件出现在命令行上。

Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准命令行扩展特性一样,键入历史事件的部分字符串,然后键入Esc,再键入 Tab键,与刚才键入的字符串相匹配的历史事件将自动扩展并回显到命令行处。如果不止一个事件与输入的字符串相匹配,就会听到一声响铃,继续键入字符或字符串,shell将会唯一确定用户所要键入的历史事件。

还有一个查询和执行历史事件的命令——!命令。在!命令后键入与历史事件相关联的字符,这个关联字符可以是历史事件的历史事件号,也可以是该事件的前几个字符。在下面的例子中,查询到历史事件号为3的事件,然后又用其开头的几个字符去匹配,也查询到该命令。

[例】

$ !3

mv mydata reports

$ !mv

mv mydata reports

也可以用一个偏移量(相对于历史事件列表中最后一个事件)来查询历史事件。负的偏移量将从历史事件列表表尾向前偏移。在下面的例子中,历史事件号为2的事件“vi mydata”就是用一个负的偏移量查询到的。必须注意的是,这个偏移量是相对于历史事件列表中的最后一个事件的。在本例中,历史事件列表中最后一个事件是事件5,历史事件列表中第一个事件为1。从历史事件号为5的事件,往前偏移4,即是历史事件号为2的事件。

[例】

$ !-4

vi mydata

如果键入!!,则系统默认为上一事件。下面的例子中,用户在命令行上键入!!命令,系统将执行上一事件:“ls”命令。

[例】

$ !!

ls

mydata today reports

也可以用“模式”来搜索一个历史事件。搜索的“模式”必须用符号“?”括起来。下例是用“模式”“?myd?”来搜索历史事件号为3的历史事件“vi mydata”。

[例】

$ !
?myd?

vi mydata

1. 查询历史事件

可以在命令行上编辑历史事件列表中的事件。表10-3列出了查询历史事件列表的各种操作。

表10-3 查询历史事件操作

查询历史事件操作

功能

Ctrl+n或向下光标键

移至历史事件列表中当前事件的下一历史事件

Ctrl+p或向上光标键

移至历史事件列表中当前事件的前一历史事件

Esc <

移至历史事件列表表首

Esc >

移至历史事件列表表尾

!event_num

用历史事件号来定位一个历史事件

!characters

用历史事件的字符前缀来查询一个历史事件

!?pattern

用“模式”来查询历史事件列表中的事件

!-event_num

通过偏移量来定位历史事件
2. 配置history:HISTFILE及HISTSIZE

系统保存的历史事件数被保存在一个特定的系统变量中,这个变量就是HISTSIZE。这个变量的缺省值通常被设置为500。这个值可以被修改。例如:

$ HISTSIZE=10

将HISTSIZE的值重新设置为10。

历史事件被保存在一个文件中,文件名由变量HISTFILE指定。通常这个文件的缺省名是.bash_history。通过给变量HISTFILE赋值,可以指定新的文件名。

[例】

$ echo $HISTFILE

/home/lisa/.bash_history

$ HISTFILE=”/home/lisa/newhist”

$ echo $HISTFILE

/home/lisa/newhist

以上操作先显示变量HISTFILE的值,然后赋予它新的值“/home/lisa/newhist”,以后所有的历史事件将被保存在newhist文件中。

别名

还有一个使工作变得轻松的方法是使用命令别名。命令别名通常是其他命令的缩写,用来减少键盘输入。

命令格式为:

alias [alias-name=’original-command’]

其中,alias-name是用户给命令取的别名,original-command是原来的命令和参数。需要注意的是,由于Bash是以空格或者回车来识别原来的命令的,所以如果不使用引号就可能导致Bash只截取第一个字,从而出现错误。如果alias命令后面不使用任何参数,则显示当前正在使用的被别名化的命令及其别名。为命令取的别名在该次登录期间始终有效。如果用户需要别名在每次登录时都有效,那么就将alias命令写到初始化脚本文件中。

[例]如果经常要键入如下的命令,最好为它建立一个别名来减少工作量。

$ cd /usr/X11/lib/X11

假如为这个长命令建立一个名为goconfig的别名,在Bash提示符下键入如下命令:

$ alias goconfig=’cd /usr/X11/lib/X11’

现在,除非您退出Bash,键入goconfig将和原来的长命令有同样的作用。如果想取消别名,可以使用下面的命令:

$ unalias goconfig

这是一些很多人认为有用的别名,可以把它们写入初始化脚本文件中来提高工作效率:

alias ll=’ls –l’

alias log=’logout’

alias ls=’ls –F’

如果您是一名DOS用户并且习惯了DOS命令,可以用下面的别名定义使Linux表现得象DOS一样:

alias dir=’ls’

alias copy=’cp’

alias rename=’mv’

alias md=’mkdir’

alias rd=’rmdir’

注意:在定义别名时,等号两边不能有空格,否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号。

如果键入不带任何参数的alias命令,将显示所有已定义的别名。

提示符

Bash有两级提示符。第一级提示符是经常见到的Bash在等待命令输入时的情况。第一级提示符的默认值是$符号。如果用户不喜欢这个符号,或者愿意自己定义提示符,只需修改PS1变量的值。例如将其改为:

PS1=”Enter a command:”

第二级提示符是当Bash为执行某条命令需要用户输入更多信息时显示的。第二级提示符默认为>。如果需要自己定义该提示符,只需改变PS2变量的值。例如将其改为:

PS2=”More information:”

上面的两个例子都是设定提示符为静态字符串的情况。其实用户也可以使用一些事先已经定义好的特殊字符。这些特殊字符将使提示符中包含当前时间之类的信息。表10-4列出了最常用的一些特殊字符及其含义。

表10-4 bash提示符常用特殊字符

 

特殊字符

说 明

!

显示该命令的历史编号

#

显示shell激活后,当前命令的历史编号

$

显示一个$符号,如果当前用户是root则显示#符号

\

显示一个反斜杠

d

显示当前日期

h

显示运行该shell的计算机主机名

n

打印一个换行符,这将导致提示符跨行

s

显示正在运行的Shell的名称

t

显示当前时间

u

显示当前用户的用户名

W

显示当前工作目录基准名

w

显示当前工作目录

 

这些特殊字符可以组合起来,为用户提供一些提示符,提供很有用的信息。下面来看几个实际例子:

PS1=”t”

将使提示符变成如下所示:

02:16:15

而 PS1=t

将使提示符变成如下所示:

t

若PS1=”t\”

将使提示符变成如下所示:

02:16:30

该例就是使用两个特殊字符的组合得到的。

控制shell的运行方式

Bash有一些特殊变量,能控制shell以不同的方式工作。例如,变量noclobber能防止在重定向输出时意外地覆盖一个文件。通过set命令可以设置noclobber变量的有效或无效。set命令有两个参数:一个是指定变量开(on)或关(off)的选项,一个是特殊变量的变量名。要使某一特殊变量开(有效),用-o选项,要使其关(无效),用+o选项。例如:

$ set –o noclobber // 使noclobber变量开

$ set +o noclobber // 使noclobber变量关

三个最常用的shell特殊变量有:ignoreeof、noclobber及noglob。

ignoreeof

ignoreeof变量用来禁止使用ctrl+d来退出shell(ctrl+d不仅用来退出shell,而且可以终止用户直接输往标准输出上的输入。该操作经常在一些shell实用命令中使用,例如实用命令cat。在这些实用程序操作中,非常容易误操作而意外地退出shell。ignoreeof特殊变量正是用来防止这种意外的退出。例如:

$ set –o ignoreeof

之后,用户只能用logout或exit命令退出shell。

noclobber

noclobber变量可以在重定向输出时保护已存在的文件,防止被意外地覆盖。在下例中,用户设置noclobber为有效,在重定向时,用户试图去覆盖已经存在的文件myfile,此时系统将返回一个错误信息。

[例]

$ set –o noclobber

$ cat preface>myfile

bash: myfile: cannot overwrite existing file

$

noglob

设置noglob变量后,shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、[]等将不再作为通配符。如果用户希望列出结尾为?的文件名answer?,可通过如下步骤:首先,用户使noglob变量为无效,然后再列出文件名。可以看到,目前命令行上的问号?被认为是文件名中的一个字符,而不再被看作通配符。

$ set –o noglob

$ ls answer?

answer?

子shell与export命令

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可
以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

[例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。

dispfile脚本程序清单:

/**************begin dispfile**************/

myfile=”List”

export myfile

echo “Displaying $myfile”

pr –t –n $myfile

printfile

/**************end dispfile***************/

 

printfile脚本程序清单:

/**************begin printfile**************/

echo “Printing $myfile”

lpr $myfile&

/**************end printfile**************/

$dispfile

Displaying List

1 screen

2 modem

3 paper

Printing List

$

定制Bash

在本节中已经介绍了很多定制Bash的方法,但是迄今为止,这些方法都只是对当前Bash对话有用。只要用户退出登录,所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。

用户可以将每次启动Bash所需要执行的命令放入初始化文件中,最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文件,Bash每次启动时都将读取该文件,其中包含的所有命令都将被执行。

下面便是默认.bash_profile文件的代码:

#.bash_profile

#Get the aliases and functions

if [-f ~/.bashrc ];then

.~/.bashrc

fi

#User specific environment and startup programs

PATH=$PATH:$HOME/bin

ENV=$HOME/.bashrc

USERNAME=””

Export USERNAME ENV PATH

无觅相关文章插件,快速提升流量