发布新日志

  • Liunx软件安装:文件传输工具RZSZ软件包的安装

    2008-12-16 15:16:52

    Linux系统的文件传输工具RZSZ

    RZSZ简介

    一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地;

       ssh有关的两个命令可以提供很方便的操作:

          sz:将选定的文件发送(send)到本地机器

          rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器

    rzszLinux/UnixWindows进行ZModem文件传输的命令行工具,windows端需要支持ZModemtelnet/ssh客户端,例如:SecureCRT,用SecureCRT登陆到Unix/Linux主机(telnetssh均可)。运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录(默认使用二进制方式传送),运行命令sz <file1name> <file2name>…(可以同时传送多个文件)就是发文件到windows上(保存的位置是可以配置,稍后描述)。

    优点: ftp命令方便,而且服务器不用打开FTP服务。

    安装rzsz软件包

    一般来说,安装Linux系统时会安装rzsz软件包,但有些定制安装的linux可能没有把rzsz包安装到系统,这对用SecureCRT这样的windows工具传输文件特别不方便,可以在安装Liunx后手动安装rzsz软件包。

    1.获取rzsz软件包

    方式1:登录linux

    用命令wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。

    方式2:在windows下访问http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz

    下载rzsz-3.48.tar.gz软件包,使用ftp或其他文件传输工具上传到Linux服务器进行安装

    2、解压软件包

    # tar zxvf  rzsz-3.48.tar.gz

    如图,将解压出一个名为src的目录。

    3、安装rzsz软件包(使用make posix

    注意:一定要进入到rzsz软件包解压出目录中,本案例是/home/src目录

    # cd src

    # ls

    如图所示:rzsz的软件包安装与常规的GNU软件不同,没有configure(配置)make install (安装过程)文件。

    执行命令make,查看相关提示信息

    # make

    根据自己的系统选择make的位置参数,一般情况下,选posixlinux就可以了,我选择posix参数执行如下:

    # make posix

    从输出部分可以看make所进行的工作,如下图:

    4、将rzsz脚本复制到目录/usr/bin下面,以便于使用。(或者写到用户$PATH环境变量中)

    # cp rz sz  /usr/bin

    5、设置环境变量

    # export  RZSZLINE=/dev/modem

    如果不设置这个环境变量,执行命令rz的时候,会有如下提示:

    Warning: Missing environment variable 'RZSZLINE' (Linux)

    rz ready. Type "sz file ..." to your modem program”

    注:这种方法设置的环境变量只在当前的shell下有效,如果想要永久生效,参见我的另一篇文章《Linux设置环境变量小结》

    6、验证安装

    测试1rz命令(将windows中的文件上传到Liunx服务器)

    使用SecureCRT连接到linux服务器,然后执行命令rz,会弹出选择本机(windows)文件的对话框。

    # rz

    选择需要上传的文件后,点击确定按钮就可把windows主机上的文件通过ssh协议上传到Linux服务器。

    上传文件所在位置:执行rz命令时所在的目录。

    例如:本案例是[root@localhost root]# rz    ///root目录下执行的rz命令

    则上传的jdk安装包会存储在/root目录下

    技巧:通过“Shifs”“Ctrl”键可以实现多个文件的传输。

    测试2sz命令(将Linux下的文件下载到windows

    # sz <file1name> <file2name> …

     

    下载成功!

    配置文件下载位置:

    文件是下载成功了,但是有一个问题:文件下载到windows的什么位置?

    很简单,文件下载位置的设置是通过SecureCRT设置的,见下图所示:

    点击【选项】-【会话选项】

    配置【X/Y/Zmodem】项

    进入如图所示的下载目录D:\Program Files\SecureCRT\download查看文件是否正确下载。

    OK,一切正常,rzsz软件包安装成功。

  • 性能测试使用的一些计数器 (2)

    2008-12-16 14:55:10

    性能测试使用的一些计数器 2

    Memory object

    Memory object记录了当前系统中整体内存的统计信息。

    Available Mbytes Committed Bytes

    Available Mbytes记录了当前剩余的物理内存数量。Committed Bytes记录了所有进程commit的内存数量。结合两个计数器可以观察到:

    1) 两者相加可以粗略估计系统总体可用内存多少,便于估计物理配置

    2) Available Mbytes少于100MB的时候,说明系统总体内存吃紧,会影响到整个系统所有进程的性能。应该考虑增加物理内存或者监察内存泄露

    3) 通过比较Process\Private BytesVirtual Bytes,便于进一步确认是否有内存泄露,判断内存泄露是否是某一单个进程导致

    Free System Page Table EntriesPool Paged BytesPool Paged Bytes

    这三个计数器可以衡量核心态空闲内存的数量。特别是当使用/3GB开关后,核心态内存地址被压缩,容易导致核心态内存不足,继而引发一些非常奇怪的问题。可以参考前面提到的文章:

    .NET CLR Memory object

    .NET CLR Memory object记录了CLR进程中跟CLR相关的内存信息。该类别下的所有计数器都很有意思,而且意思也非常直接。建议用一个例子程序进行测试和研究。下面是两个最常用的计数器

    Bytes in all heaps

    Bytes in all heaps记录了上次GC发生时候所统计到的,进程中不能被回收的所有CLR object占用的内存空间。该计数器不是实时的,每次GC发生的时候该计数器才更新。跟同一进程的Process\Private bytes比较,可以区分出managed heapnative memory的变化情况。对于memory leak,便于区分是managed heapleak还是native memoryleak

    %Time in GC

    %Time in GC记录了GC发生的频繁程度。一般来说15%以内算比较正常。当超过20%说明GC发生过于频繁。由于GC不仅仅带来很高的CPU开销,还需要挂起目标进程的CLR线程,所以高频率GC是非常危险的。通过跟CPU利用率和其他性能指标比较,往往能够看出GC对性能的影响。高频率的GC往往因为

    1) 负载过高

    2) 不合理的架构,对内存使用效率不高

    3) 内存泄露,内存分片导致内存压力

    如果目标程序是ASP.NET,在ASP.NET开头的object中,下面这些计数器对于测量ASP.NET的性能非常有用。由于不少计数器存在于多个object类别中,下面只列出具体的计数器名字,而不去对应到具体的object:

    Application Restarts

    Application Restarts记录了ASP.NET Application Domain重启的次数。导致ASP.NET appDomain重启的原因往往是虚拟目录中被修改。比如修改了web.config文件,或者防毒程序对虚拟目录进行扫描。通过该计数器可以观察是否有异常的重启现象

    Request Execution time

    Request Execution time记录了请求的执行时间,是衡量ASP.NET性能的最直接参数。通过该计数器的平均值来衡量性能是否合乎预期值。需要注意的地方是由于Windows并非实时系统,所以不能用峰值来衡量整体性能。比如当GC发生的时候,请求执行时间肯定都要超过GC的时间。所以平均值才是有效的标准

    Request Current

    Request Current记录了当前正在处理的和等待处理的请求。最理想的情况是Request Current等于CPU的数量,这说明请求跟硬件资源能并发处理的能力恰好吻合,硬件投资正运行在最优状态。但是一般说来,当负荷比较大的时候,Request Current也随着增高。如果Request Current在一段时间内有超过10的情况,说明性能有问题。注意观察这个时候对应的CPU情况和其他的资源。如果CPU不高,很可能是程序中有blocking发生,比如等待数据库请求,导致请求无法及时完成。

    Request/second

    Request/second计数器记录了每秒钟到达ASP.NET的请求数。这是衡量ASP.NET负载的直接参数。注意观察Request/second是否超过程序的预期吞吐量。如果Request/Second有突发的波动,注意看是否有拒绝服务攻击。通过把Request/second,Request Current, Request Execution time和系统资源一起比较,往往能够看出来ASP.NET整体性能的变化和各个因素之间的影响

    Request in Application Queue

    ASP.NET没有空余的工作线程来处理新进入的请求的时候,新的请求会被放到Application Queue中。当Application Queue堆积的请求也超过设定数值的时候,ASP.NET直接返回503 Server too busy错误,同时丢弃该请求。所以正常情况下,Request in Application Queue应该总为0,否则说明已经有请求堆积,性能问题严重

  • 性能测试使用的一些计数器(1)

    2008-12-16 14:42:25

    性能测试使用的一些计数器 1

    l  Process object下的所有计数器

    l  Processor object下的所有计数器

    l  System object下的所有计数器

    l  Memory object下的所有计数器

    l  如果是.NET程序,观察 .NET 开头的object下的所有计数器

    l  如果是ASP.NET,观察 ASP.NET 开头的object下的所有计数器

    具体性能计数器分析描述

    Process object

    Process object中的计数器可以针对目标进程分析内存,CPU,线程数目和handle数目。首先要确定目标进程,然后分析目标进程的下面一些计数器:

    % Processor Time

    该计数器是该进程占用CPU资源的指标。当进程繁忙的时候,CPU平均占用率应该在80%以内。如果超过该数值,程序可以认为发生了high CPU的问题。另外一种问题是CPU波动幅度大。虽然平均占用率不高,但是上下跳动频繁。在某一个短时间段里面,会有连续高CPU的情况出现。

    Handle Count

    该计数器记录了当前进程使用的kernel object handle数量。Kernel object是重要的系统资源。当程序进入稳定运行状态的时候,Handle Count数量也应该维持在一个稳定的区间。如果发现Handle Count在整个程序周期内总体趋势是连续向上,可以考虑程序是否有Handle Leak

    ID Process

    该计数器记录了目标进程的进程ID。你可能觉得奇怪,ID有什么好观察的。进程ID是用来观察程序是否有重启发生。比如ASP.NET工作进程可能会自动回收。由于进程名都相同,只有通过进程ID来判断是否进程有重新启动现象。如果ID有变化,考虑程序是否发生崩溃或者Recycle

    Private Bytes

    该计数器记录了当前通过VirtualAlloc API CommitMemory数量。无论是直接调用API申请的内存,被Heap Manager申请的内存,或者是CLR managed heap,都算在里面。跟Handle Count一样,如果在整个程序周期内总体趋势是连续向上,说明有Memory Leak

    Virtual Bytes

    该计数器记录了当前进程申请成功的用户态总内存地址,包括DLL/EXE占用的地址和通过VirtualAlloc API ReserveMemory Space数量,所以该计数器应该总大于Private Bytes。一般来说,Virtual BytesPrivate Bytes的变化大致一致。由于内存分片的存在, Virtual BytesPrivate Byes一般保持一个相对稳定的比例关系。当Virtual BytesPrivate Bytes的比例关系大于2的时候,程序往往有比较严重的内存地址分片。

    Processor object

    Processor object记录系统中芯片的负载情况。由于普通程序并不刻意邦定到某个具体CPU上执行,所以在多CPU机器上观察Total Instance也就足够了

    % Processor Time

    该计数器跟Process下的% Processor Time的意义一样,不过这里记录的是所有进程带来的芯片,而不是针对具体某一个进程。通过把这个计数器跟Process下的同名计数器一起比较,就能看出系统的高CPU问题是否是由于单一的某个进程导致的

    System object

    System object记录系统中一个整体的统计信息。所以不区分Instance. 通过比较System object下的counter和其他counter的变化趋势,往往能看出一些线索

    Context Switch/sec

    Context Switch标示了系统中整体线程的调度,切换频率。线程切换是开销比较大的操作。频繁的线程切换导大量CPU周期被浪费。所以看到高CPU的时候,一定要跟Context Switch一起比较。如果两者有相同的变化趋势,高CPU往往是由于contention导致的,而不是死循环。

    Exception Dispatches/sec

    Exception Dispatches表示了系统中异常派发,处理的频繁程序。跟线程切换一样,异常处理也需要大量的CPU开销。分析方法跟Context Switch雷同。

    File Data Operations/sec

    File Data Operations记录了当前系统中磁盘文件读写的频繁程度。通过观察该计数器跟其他性能指标的变化趋势,通常能够判断磁盘文件操作是否是性能瓶颈。类似的计数器还有Network Interface\Bytes total/sec

     

  • Windows性能监视器的使用

    2008-12-16 14:40:43

    Windows性能监视器的使用

    Windows性能监视器

    以下用Winxp中的“Windows性能监视器”为例说明:

    打开控制面板->管理工具->性能->性能日志和警报,如下图所示:

    方法1:动态监视

    点击右键后,选择“添加计数器”如下图所示:

     

    添加计数器窗口中,选择性能对象为“Processor” 其它设置为默认设置;设置完毕,点击添加按钮,关闭窗口,即可实时监视选中的参数。

    方法2:计数器日志跟踪

    打开控制面板->管理工具->性能->性能日志和警报->计数器日志->新建日志设置

    设置新建日志名“Test_guok”;

    设置日志监视的对像和计数器,如设置性能对像“Processor”,列表选择计数器“% Processor Time

    备注:“% Processor Time 指处理器用来执行非闲置线程时间的百分比。计算方法是,测量范例间隔内非闲置线程活动的时间,用范例间隔减去该值。(每台处理器有一个闲置线程,该线程在没有其他线程可以运行时消耗周期)。这个计数器是处理器活动的主要说明器,显示在范例间隔时所观察的繁忙时间平均百分比。这个值是用 100% 减去该服务不活动的时间计算出来的。

    设置日志文件,如“日志文件类型”,选择“文本文件(逗号分隔)”;

    备注:性能日志和警报以逗号分隔或制表符分隔的格式收集数据,以便容易导入电子表格程序,为后面的数据分析做准备,所以启用此方式!

    设置计划,如时间按下面所列出

    设置成功,确认后如下图所示:

     

    数据分析

    C:/ PerfLogs目录下打开日志“Test_guok_000001.csv

    选择Excel中的“插入”->“图表”->“折线图”,如下图所示

     

  • 使用DEBUGDIAG手动抓取DUMP文件

    2008-12-16 14:35:09

    使用DebugDiag手动抓取dump文件

    l  手动抓取IIS dump文件

    l  查看dump文件的默认存储位置

    l  修改dump文件的存储位置

    l  抓取dump文件的时机

    手动抓取IIS dump文件

    1、启动DebugDiag 1.1 (x86)后点击“选择规则类型”窗口中的“取消”按钮后,点击Processes分页。

    2、右键单击w3wp进程,并选择Create Full Userdump

    等待一段时间后出现成功创建dump文件,以及dump的文件名和存储路径的对话框,点击确定即可。

    查看dump文件的默认存储位置

    1、点击DebugDiag 1.1 (x86)工具主窗口工具栏中的“文件夹”图标

           查看弹出的窗口

          

           打开其中的misc文件夹,刚才所抓取的dump文件就存放在其中。

          

    修改dump文件的存储位置

    点击DebugDiag 1.1 (x86)工具菜单栏中的“Tools->Options and Settings”设置Manual Userdump Save Folder中的路径为所要修改的路径即可。

     

    抓取dump文件的时机

    1、应用程序初始化完毕(测试执行前)需要抓取一个dump文件

    2、使用性能计数器观察测试中的内存使用情况,在IIS崩溃前(观察Prvite#time in GC的变化)抓取dump文件以便于开发分析

    3、(可选)在性能计数器中观察gen2large object heapbytes in all heaps堆的使用和释放情况,在堆的使用即将达到一个高峰值(相对值)前抓取dump,并同时抓取堆释放到一个低峰值(波谷)前抓取一个dump,方便开发对比分析。

  • 如何有效开展性能测试(2)

    2008-12-16 14:24:08

    如何有效开展性能测试(2

    3.2 配置测试环境

    配置测试环境是测试实施的一个重要环节,测试环境适合与否会严重影响测试结果的真实性和正确性。测试环境包括硬件环境和软件环境,硬件环境指测试必需的服务器、客户端、网络连接设备,以及打印机/扫描仪等辅助硬件设备所构成的环境;软件环境指被测软件运行时的操作系统、数据库及其他应用软件构成的环境。考虑到其它因素,如网络锁、网速、显示分辩率,数据库权限、容量等对测试结果的影响。如条件允许,我们最好能配置几组不同的测试环境。

    搭建测试环境步骤:

    1)  测试环境规划

    测试环境的规划包括硬件、软件及所有构建测试环境所需的资源的规划,可以利用Checklist或是测试环境部署矩阵的方式完成;

    测试环境部署checklist

    测试环境说明

    对测试环境的简介

    项目名称

    测试项目名称

    项目简介

    对项目的简介

    网络拓扑图

    测试环境的网络拓扑图

    硬件配置

    描述配置环境硬件配置信息

    例如:

    CPU:至强3.0

    内存:4GB

    硬盘:200G

    网卡:千兆

    软件配置

    测试环境中所使用的软件环境配置(要有详细版本)

    例如:

    操作系统:Windows Server 2003 SP2

    系统服务:AD域、消息队列、MSDTC访问

    应用平台:Microsoft .Net Framework2.0 SP1

    应用软件:MCMS 2002 SP1

    数据库:SQL Server 2005 SP1

    中间件:IIS6.0

    浏览器:IE7.0

    杀毒软件:诺顿SEP

    软件防火墙:windows防火墙

    软件要求

    描述软件环境的详细配置:

    例如:

    操作系统需要配置/3G的支持

    需要打开windows防火墙

    IIS应用连接池的详细配置

    IE需要将应用网址添加到信任站点

    网卡型号

    描述测试环境的网卡型号信息详细

    例如:

    Intel PRO/100 NIC

    Intel(R) 82567V-2 Gigabit Network Connection

    网络信息

    描述网络的具体配置项

    例如:

    域名或工作组名

    IP地址

    子网掩码

    默认网关

    DNS服务器

    测试工具

    描述环境中需要安装的测试工具

    测试工具名称

    测试工具版本

    测试工具简介

    用户权限

    描述测试环境中的用户权限

    应用软件列表

    被测试的软件及版本描述

    如:

    门户网站后台管理服务端

    静态抓取服务端

    外来数据导入应用

    应用软件要求

    描述应用软件的详细配置

    Dao.config数据库连接的配置

    Webconfig配置

    外来数据导入配置

    2)        测试环境创建

    按照checklist中的网络拓扑、硬件配置、网卡型号的要求创建测试环境的硬件和网络环境,搭建完毕后,每个设备(PC或服务器)要整理出《硬件配置表》,以便于维护

    3)        测试环境配置

    按照checklist中的软件配置、软件要求、网络信息、用户权限配置测试环境中PC和服务器的软件环境,配置完毕后,每个设备(PC或服务器)要整理出《环境配置文档》,以便于后期的环境维护。

    4)        应用程序部署

    按照checklist中的应用软件列表和应用软件要求,将应用程序部署到测试环境中,部署完毕后,每个应用程序的部署要整理出《应用软件部署文档》,以便于后期的升级维护。

    5)        测试环境的使用

    在使用过程中可能会对测试环境做一定的调整,每次调整后,都要对相应的文档《测试环境部署checklist》、《硬件配置表》、《应用软件部署文档》和《应用软件部署文档》进行修改,以保持环境和文档的一致。

    6)        测试环境回收

    项目结束后,需要对项目中使用的资源进行整理,并将不使用的资源进行释放。

    硬件资源:PC机、服务器、磁盘空间、交换机等

    网络资源:IP地址

     

    3.3 测试数据的获取和处理

    功能测试的数据获取主要有三个方式

    1)  数据:针对正常业务,异常情况,边界情况等构建测试数据,不仅仅包括最基本的基础数据,比如:用户、权限、配置、基础编码、原数据等,还包括系统的业务数据;

    2)  “导”数据:把已经在生产环境中运行的数据或老版本中的数据导出,在此基础上进行数据的整理后加工为测试数据;

    3)      “积累”数据:使用现实的业务流程将现有的非电子化业务数据手工录入系统,在验证业务的同时也完成了测试数据的积累,即边测试边积累数据。但是这种情况积累的数据往往有一定局限性,因为已经发生的业务数据基本是正确的、一致的,而且可能缺少某些特定业务的数据(不常发生的分支业务)。这样就需要根据对测试需求的分析,追加新的测试数据,以便能完整覆盖业务类型。

    性能测试使用的数据和功能测试有一定的区别,准备测试数据的侧重点不同,性能测试使用的数据不用考虑如何去校验功能。性能测试数据要注意以下几点:

    1)        测试数据的唯一问题

    性能测试往往使用自动化测试工具进行测试,会使用相同的脚步反复的运行来进行测试,所以在测试过程中一定要注意脚本中参数的重复问题,设计测试数据时要考虑并发用户数以及每个用户可能迭代的次数,避免因测试数据数量不够而使用重复数据,最终导致测试失败。

    2)        测试数据的清理问题

    性能测试往往会向系统中增加大量的数据,增加的数据量足以达到影响系统性能的程度(例如:数据库表中有100条数据和表中有100W条数据的响应时间一定是不同的),所以必须及时的对增加的测试数据进行清理,以保证测试环境的公平性,进而保证测试结果的真实性。

    3)        测试数据数量和容量(大小)问题

    性能测试往往要使用“大”数据量来进行测试,“大”数据量不仅仅指数量的多少,还要考虑到数据容量的大小。例如:发布文章的测试,不仅要满足发布文章数量的要求,还要考虑到文章内容的大小,也就是说不仅要考虑发布10W1K大小的文章的性能还要考虑发布10W10M大小的文章的性能。

    4)        测试数据随意性问题

    测试数据忌随意性,随意输入指定长度的字符串,虽然满足测试执行的要求,但是对后续工作会产生很多不良影响,例如:无法保证数据的唯一性,随意的输入数据有几率产生重复数据;收集的测试结果开发人员不易分析,性能测试中的开发人员可能需要分析内存的Dump文件,随意输入的、没有规则的字符串不利于开发人员对dump文件的分析。

    4. 如何开展性能测试

      测试前期的准备工作纷繁复杂,做好测试准备工作,已是完成了测试工作的一大半,但要产生一份具有说服力的测试报告,还应正确把握测试的强度,保持测试的一致性,提高测试的精度。

    判断软件的好坏,要看软件解决实际应用的能力,只有在一定的测试强度下,才能测试出各种软件资源的消耗率,软件运行的速度,软件的稳定性。通过对比在不同的测试强度下,不同软件每一个功能模块解决实际问题的能力和软件运行的效率,我们才可能判断出不同软件的每一个模块的强弱,甚至于整个软件的优劣。

    性能测试开始后,所有参数的输入都应遵循统一的标准,无论是哪一个环节,哪怕是一点点偏差,都应立即纠正,绝不能心存侥幸。要特别注意外部环境对测试结果的影响,如果在整个测试过程中,外部环境不一致,如网速、机器内存使用率不一样,就有可能导致测试结果与实际情况有出入。

    实例1XX项目使用终端PCA1运行Loadrunner 进行15小时(1700-第二天早800)的压力测试,第二天查看结果,发现由于PCA1的内存不足,导致Loadrunner在凌晨300 查看(279) 评论(0) 收藏 分享 管理

  • 如何有效开展性能测试(1)

    2008-12-16 13:57:05

    如何有效开展性能测试(1)

    一、            性能测试类型

    性能测试是一种广义上的说法,包括了以下各种不同的性能测试类型,每种测试类型都带着明确的测试目的。

    1.性能测试(Performance Testing

    性能测试的方法是通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产的性能要求。即在特定的运行条件下验证系统的能力状况。

    主要强调在特定的软硬件环境、特定的测试业务场景下,获得系统的各个性能指标。

    2.负载测试(Load Testing

    在给定的测试环境下,通过在被测系统上不断增加压力,直到性能指标超过预定指标或某种资源使用已经达到饱和状态,目的是了解系统性能容量和处理能力极限。负载测试的主要用途是发现系统性能的拐点,寻找系统能够支持的最大用户、业务等处理能力的约束。

    负载测试是在固定测试环境,在其它测试角度(负载方面)不变的情况下,变化一个测试角度并持续增加压力,查看系统的性能曲线和处理极限,以及是否有性能瓶颈存在(拐点)。主要意义是从多个不同的测试角度去探测分析系统的性能变化情况,配合性能调优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载。

    3.压力测试(Stress Testing

    测试系统在一定饱和状态下系统能够处理的会话能力,以及是否出现错误,一般用于稳定性测试。

    可以理解为资源的极限测试。测试关注在资源处于饱和或超负荷的情况下,系统能否正常运行,是一种在极端压力下的稳定性测试。其主要意义是通过测试、调优保证系统即使在用户的极端压力下也不会出错甚至系统崩溃。

    压力测试的目的是调查系统在其资源超负荷的情况下的表现,尤其是对系统的处理时间有什么影响。这类测试在一种需要在反常数量、频率或资源的方式下执行系统。目标是通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性。

    4.配置测试(Configuration Testing

    通过对被测系统的软硬件环境的调整,了解各种不同环境对性能影响的程度,从而找到系统各项资源的最有分配原则。

    主要用于性能调优,在经过测试获得了基准测试数据后,进行环境调整(包括硬件配置、网络、操作系统、应用服务器、数据库等),再将测试结果与基准数据进行对比,判断调整是否达到最佳状态。

    5.并发测试(Concurrency Testing

    模拟并发访问,测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题。

    6.可靠性测试(Reliability Testing

    通过给系统加载一定的业务压力的情况下,让应用持续运行一段时间,测试系统在这种条件下是否能够稳定运行。

    需要和压力测试区分开,两者的测试环境和测试目的不一样。压力测试强调在资源极限情况下系统是否出错,可靠性测试强调在   一定的业务压力下长时间(如24×7)运行系统,关注系统的运行情况(如资源使用率是否逐渐增加、响应时间是否越来越慢),是否有不稳定征兆。

     

    二、如何有效开展性能测试

    1.引言

      作为评价产品性能的重要手段,性能测试在软件测试工作中占的比重一直很大,要最终提供一份准确,权威的测试报告,测试人员的努力工作自然不可或缺,但更重要的是测试人员清晰的工作思路,简洁的测试流程和良好的测试方法。

    2.目前性能测试存在的问题

      总结以往进行的性能测试,虽然测试人员自始至终对测试工作都做到了认真负责,但测试报告出炉后,大家总觉得美中不足,对测试结果都心存疑虑,尤其在那些时间跨度较长、针对不同的测试对象的性能对比测试中,或多或少都存在以下几个方面的问题:

    1.        测试准备不充分,测试目标不明确,测试计划不详细;

    2.        缺乏测试以及针对测试对象的技术储备;

    3.        测试环境的稳定性及前后一致性不足;

    4.        测试数据精确性和代表性不足;

    5.        测试描述不精练;

    下面,我们就剖析以上问题的同时,探讨一下如何解决这些问题。

    3. 性能测试准备

      这是一个经常被忽略的环节,在接到测压任务后,基于种种其它因素的考虑,测试人员往往急于进度,立即投入到具体的测试工作去了,测试、记录、分析,忙的不亦乐乎,工作进行了一半才发现,或是硬件配置不符合要求,或是网络环境不理想,甚至软件版本不对,一时弄得骑虎难下,这都是没有做好测试准备惹的祸。

      那么我们应该如何做好性能测试的准备工作呢?

      做软件项目有需求调查、需要分析,我们做测试也一样。在拿到测试任务后,我们首要的任务就是分析测试任务,在开始测试前,我们至少要弄清以下几个问题:

    1.        要测试什么或测试的对象是谁?

    2.        要测试什么问题或我们想要弄清楚或是论证的是什么问题?

    3.        哪些因素会影响测试结果?

    4.        需要怎样的测试环境(软件、硬件、网络环境)?

    5.        应该怎样测试?

      只有在认真调查测试需求和仔细分析测试任务后,才有可能弄清以上一系列的问题,只有对测试任务非常清楚,测试目标极其明确的前提下,我们才可能制定出切实可行的测试计划。明确测试目标,详尽测试计划在对测试需求充分了解的基础上,制定尽可能详细的测试计划,对测试的实施是大有裨益的。

    3.1 测试技术准备

    在目前的大环境下,要求测试人员在短时间撑握所有的软、硬件知识是不太现实的,但平时测试人员应抓紧对测试工具和测试理论的研究,在测试计划中,应给研究测试对象和测试工具分配充足的学习时间,只有在充分撑握测试工具,完全了解测试对象的前提下,我们才能够实施测试。建立在错误的认识上的测试,既使你再努力,结果也是背道而驰,也很难证明问题,更不用说用这样的测试报告去说服用户。

    技术准备列表:

    1)        扎实的计算机专业基础知识;

    2)        大量的实际性能测试及优化经验;

    3)        性能测试相关工具的使用;

    4)        操作系统的原理:熟悉操作系统的体系架构、操作系统的重要基础概念,以及内存管理、存储/文件系统、驱动/硬件的管理、网络协议的实现及构成、性能的监控方法和原理,熟悉常用的性能计数器;

    5)        数据库原理:能进行一般的数据库管理操作,熟悉SQL脚本的使用,熟悉常用的数据调优工具和常用的性能计数器;

    6)        web应用服务器原理:了解一般的配置,熟悉常用的服务器性能监控方法和原理,熟悉常用的性能计数器;

    7)        计算机网络原理:至少熟悉TCP/IP协议,熟悉HTTP协议,至少见过并了解三层、四层交换或者路由器的使用和配置。了解常用的与网络性能相关的性能计数器;

    行业知识:熟悉专属行业的业务知识和用户场景,例如银行网站后台管理系统所涉及的业务知识和用户场景,证券交易系统所涉及的业务知识和用户场景;

  • 32位 windows2003 IIS服务器配置3GB支持

    2008-12-16 13:12:24

    32 windows2003 IIS服务器配置3GB支持

    32Windows 默认能够寻址4G空间,这是32位版本操作系统的限制。通常情况下2G为操作系统核心(特权模式)保留,另外2G为应用程序(用户模式)保留。

    Windows提供了一个BOOT.INI文件内/3GB的参数,重新分配3GB内存给用户模式应用程序,降低给系统核心的内存到1GB,这样应用程序可以因用户模式的进程可寻址空间增加而提升性能。

    操作步骤:

    1.编辑BOOT.INI文件并做相应改变

    1)        打开控制面板中的系统

    2)        选择高级

    3)        在启动和恢复页,点击设置按钮

    4)        点击编辑,记事本打开并编辑BOOT.INI文件

    5)        编辑[operating systems],后面加上/3GB开关如下:

    multi(0)....."windows server 2003, Enterprise Edition" /fastdetect switch/3GB

    见图一:

    (图一)

    2.启用IIS/3GB支持

    1)        打开管理工具中组件服务

    2)        双击击控制台根目录中的“组件服务”

    3)        双击“计算机”

    4)        双击“我的电脑”

    5)        双击COM+应用程序

    6)        右键单击“IIS Out-Of-Process Pooled Applications”,选择“属性”

    7)        选择高级页

    8)        选中“启用3GB支持”后点击确定按钮。

    见图二:

    (图二)

    3.重启服务器使更改生效

     

  • SQL Sever 2005 事件跟踪器:保存死锁图形(图文)

    2008-12-16 13:02:59

    l  使用 SQL Server 2005 事件跟踪器 保存 Deadlock Graph 事件

    l  Deadlock Graph 事件以 XML 文件形式保存。

    保存 Deadlock Graph 事件

    1、在文件菜单上,单击新建跟踪, 连接到 SQL Server 实例。

    将出现跟踪属性对话框。

    注意:如果选择了建立连接后立即开始跟踪,则不会出现跟踪属性对话框,而是直接开始跟踪。若要关闭此设置,请在工具菜单上,单击选项,再清除建立连接后立即开始跟踪复选框。

    2、在跟踪属性对话框的跟踪名称框中,键入跟踪的名称。

    3、在使用模板列表中,为此跟踪选择一个跟踪模板;如果不想使用模板,请选择空白

    4、单击事件选择选项卡。

    事件数据列中,展开“Locks”事件类别,然后选中“Deadlock Graph”复选框。如果没有显示“Locks”事件类别,请选中显示所有事件以显示该类别。

    事件提取设置选项卡将添加到跟踪属性对话框中。

    注意:如果使用模板将不会出现 事件提取设置选项卡,需要取消并再次选择Deadlock Graph 事件,才会出现事件提取设置选项卡

    Deadlock Graph 事件以 XML 文件形式保存

    5、在事件提取设置选项卡上,单击分别保存死锁 XML 事件

    6、在另存为对话框中,输入要存储 Deadlock Graph 事件的文件的名称。

    7、单击单个文件中的所有死锁 XML 以将所有 Deadlock Graph 事件保存到单个 XML 文件中,或单击不同文件中的每个死锁 XML 以为每个 Deadlock Graph 事件创建新的 XML 文件。

    保存死锁文件后,您可以在 SQL Server Management Studio 中打开查看该文件

    注意:按照以上步骤配置,在测试结束后需要手动的保存Deadlock Graph 事件的跟踪记录(为灵活起见,在第3步中没有配置保存文件的选项)

  • Linux设置环境变量小结

    2008-12-12 15:50:27

    1、总结背景

    linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本案例基于RedHat AS4讲解环境变量定制的问题。

    2、变量简介

    Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

    3、定制环境变量

    环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell。对于Linux来说一般是bash,但也可以重新设定或切换到其它的Shell(使用chsh命令)。

    根据发行版本的情况,bash有两个基本的系统级配置文件:/etc/bashrc/etc/profile。这些配置文件包含两组不同的变量:shell变量和环境变量。前者只是在特定的shell中固定(如bash),后者在不同shell中固定。很明显,shell变量是局部的,而环境变量是全局的。环境变量是通过Shell命令来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于bash这个Shell程序来说,可以通过变量名来访问相应的环境变量,通过export来设置环境变量。

    注:Linux的环境变量名称一般使用大写字母

    4、环境变量设置实例

    1.使用命令echo显示环境变量

    本例使用echo显示常见的变量HOME

    $ echo $HOME  

    /home/kevin

    2.设置一个新的环境变量

    $ export MYNAME=”my name is kevin”

    $ echo $ MYNAME

    my name is Kevin

    3.修改已存在的环境变量

    接上个示例

    $ MYNAME=”change name to jack”

    $ echo $MYNAME

    change name to jack

    4.使用env命令显示所有的环境变量

    $ env

    HOSTNAME=localhost.localdomain

    SHELL=/bin/bash

    TERM=xterm

    HISTSIZE=1000

    SSH_CLIENT=192.168.136.151 1740 22

    QTDIR=/usr/lib/qt-3.1

    SSH_TTY=/dev/pts/0

    ……

    5.使用set命令显示所有本地定义的Shell变量

    $ set

    BASH=/bin/bash

    BASH_ENV=/root/.bashrc

    ……

    6.使用unset命令来清除环境变量

    $ export TEMP_KEVIN=”kevin”     #增加一个环境变量TEMP_KEVIN

    $ env | grep TEMP_KEVIN          #查看环境变量TEMP_KEVIN是否生效(存在即生效)

    TEMP_KEVIN=kevin  #证明环境变量TEMP_KEVIN已经存在

    $ unset TEMP_KEVIN            #删除环境变量TEMP_KEVIN

    $ env | grep TEMP_KEVIN       #查看环境变量TEMP_KEVIN是否被删除,没有输出显示,证明TEMP_KEVIN被清除了。

    7.使用readonly命令设置只读变量

    注:如果使用了readonly命令的话,变量就不可以被修改或清除了。

    $ export TEMP_KEVIN ="kevin"       #增加一个环境变量TEMP_KEVIN

    $ readonly TEMP_KEVIN                  #将环境变量TEMP_KEVIN设为只读

    $ env | grep TEMP_KEVIN          #查看环境变量TEMP_KEVIN是否生效

    TEMP_KEVIN=kevin         #证明环境变量TEMP_KEVIN已经存在

    $ unset TEMP_KEVIN            #会提示此变量只读不能被删除

    -bash: unset: TEMP_KEVIN: cannot unset: readonly variable

    $ TEMP_KEVIN ="tom"          #修改变量值为tom会提示此变量只读不能被修改

    -bash: TEMP_KEVIN: readonly variable

    8.通过修改环境变量定义文件来修改环境变量。

    需要注意的是,一般情况下,仅修改普通用户环境变量配置文件,避免修改根用户的环境定义文件,因为那样可能会造成潜在的危险。

    $ cd ~                                  #到用户根目录下

    $ ls -a                                  #查看所有文件,包含隐藏的文件

    $ vi .bash_profile                 #修改用户环境变量文件

    例如:

    编辑你的PATH声明,其格式为:

    PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

    你可以自己加上指定的路径,中间用冒号隔开。

    环境变量更改后,在用户下次登陆时生效。

    如果想立刻生效,则可执行下面的语句:$source .bash_profile

    需要注意的是,最好不要把当前路径”./”放到PATH里,这样可能会受到意想不到的攻击。

    完成后,可以通过$ echo $PATH查看当前的搜索路径。这样定制后,就可以避免频繁的启动位于shell搜索的路径之外的程序了。

    5、学习总结

    1.Linux的变量种类

    按变量的生存周期来划分,Linux变量可分为两类:

    1.      永久的:需要修改配置文件,变量永久生效。

    2.      临时的:使用export命令行声明即可,变量在关闭shell时失效。

    2.设置变量的三种方法

    1.      /etc/profile文件中添加变量【对所有用户生效(永久的)】

    VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

    例如:编辑/etc/profile文件,添加CLASSPATH变量

    # vi /etc/profile

    export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

    注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。

    2.      用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

    VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。

    例如:编辑guok用户目录(/home/guok)下的.bash_profile

    $ vi /home/guok/.bash.profile

    添加如下内容:

    export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib

    注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。

    3.      直接运行export命令定义变量【只对当前shellBASH)有效(临时的)】

    shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shellBASH)或其子shellBASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

  • Linux软件安装方法小结(附:rpm详解)

    2008-12-12 12:44:28

    在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :-))不过我们常见的软件包有两种:

    1)含有软件的源代码的压缩包,解压后需要手动编译。这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz)。

    ./configure (配置) 

    make (编译)
    make install (安装)
    make clean (卸载)

    注:典型的源代码包可以这样安装,但不都是这样,如webmin
    要执行其目录下./setup.sh进入交互式配置安装
    卸载用uninstall程序
    具体如果不清楚看要安装的包下的README文件

    2)软件的可执行程序,你只要安装它就可以了(习惯windows安装的朋友的最爱!)。这种软件安装包叫做RPM包(RedhatLinuxPacketManager,就是Redhat的包管理器),后缀是.rpm。

    当然,还有有用rpm格式打包的源代码;用gzip压缩过的可执行程序包。
    但是只要理解了以下的安装思路,这两种形式的安装包也不在话下了。

    下面,我们进行不同软件包安装的详细介绍

    第一部分:安装.tar.gz软件包

    1.首先,使用tar -xzvf来解开这个包,如:

    # tar -xzvf apache_1_3_6_tar.gz
    *******************************************
    tar命令参数解释:
    x 从档案文件中释放文件。
    z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
    v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
    f 使用档案文件或设备,这个选项通常是必选的。
    如果需要详细了解tar的使用参见其他文档
    *******************************************

    这样就会在当前目录中创建了一个新目录(目录名与.tat.gz包的文件名类似),用来存放解压了的内容。如本例中就是apache_1.3.6

    2.进入这个目录,再用ls命令查看一下所包含的文件,命令如下:

    # cd apache_1.3.6
    # ls

    你观察一下这个目录中包含了以下哪一个文件:configure、Makefile还是Imake。

    1)如果是configure文件,就执行:

    # ./configure
    # make
    # make install

    2)如果是Makefile文件,就执行:

    # make
    # make install

    3)如果是Imake文件,就执行:
    # xmkmf
    # make
    # make install

    4)如果没有itstall(安装过程)文件例如rzsz软件包,就执行
    # make posix

    # make linux


    3.如果没有出现什么错误提示的话,tar包就安装完毕了。软件安装到什么位置,通常会在安装时出现。如果没有可以查阅一下README。


    tar包安装过程中的常见问题:

    1)没有安装C或C++编译器
    确诊方法:执行命令gcc(C++则为g++),提示找不到这个命令。
    解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
    # rpm -ivh gcc*(C或C++编译器是RPM包,后续会讲到)

    2)没有安装make工具
    确诊方法:执行命令make,提示找不到这个命令。
    解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
    # rpm -ivh make*

    3)没有安装autoconf工具;
    确诊方法:执行命令make,提示找不到这个命令。
    解决方法:将Linux安装光盘mount上来,然后进入RPMS目录,执行命令:
    # rpm -ivh autoconf*

    4)缺少某些链接库;
    确诊方法:在make时,提示需要某些文件。
    解决方法:安装包含这个文件的包。

    第二部分:安装.rpm软件包

    RPM是RedHat公司随RedhatLinux推出了一个软件包管理器,通过它能够更加轻松容易地实现软件的安装(像windows下安装软件一样)。

    1.安装软件:执行rpm -ivh rpm包名,如:

    # rpm -ivh apache-1.3.6.i386.rpm
    *******************************************
    rpm 参数解释:
    i 安装软件包
    v 显示附加信息
    h 安装时输出哈希标记(``#'')
    如果需要详细了解rpm的使用参见附录
    *******************************************

    2.升级软件:
    # rpm -Uvh rpm包名
     
    3.卸载软件包:
    # rpm -e rpm包名

    4.查询软件包的详细信息:
    # rpm -qpi rpm包名

    5.查询某个文件是属于那个rpm包的:
    # rpm -qf rpm包名

    6.查该软件包会向系统里面写入哪些文件:
    # rpm -qpl rpm包名


    *****************************************

    附录:

    《rpm详解》

    一、安装软件包

    命令格式:

    rpm -i ( or --install) options file1.rpm ... fileN.rpm

    参数:

    file1.rpm ... fileN.rpm 把要安装的RPM包的文件名

    详细选项:

    -h (or --hash) 安装时输出hash记号 (``#'')

    --test 只对安装进行测试,并不实际安装。

    --percent 以百分比的形式输出安装的进度。

    --excludedocs 不安装软件包中的文档文件

    --includedocs 安装文档

    --replacepkgs 强制重新安装已经安装的软件包

    --replacefiles 替换属于其它软件包的文件--force 忽略软件包及文件的冲突

    --noscrīpts 不运行预安装和后安装脚本

    --prefix 把软件包安装到由 指定的路径下

    --ignorearch 不校验软件包的结构

    --ignoreos 不检查软件包运行的操作系统

    --nodeps 不检查依赖性关系

    --ftpproxy 用 作为 FTP代理

    --ftpport 指定FTP的端口号为

    通用选项

    -v 显示附加信息

    -vv 显示调试信息

    --root 让RPM把指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下

    --rcfile 设置rpmrc文件为

    --dbpath 设置RPM 资料库存所在的路径为

    例子:

    1.安装软件

    rpm -ivh *.rpm

    若系统提示此软件已安装过或因其他原因无法继续安装,但若我们确实想执行安装命令,可以在 -ivh后加一参数“-replacepkgs”。

    2.在线安装

    rpm -i ftp://ftp.* *.rpm

    ftp://ftp.*是地址 *.rpm软件包

    二、软件包的删除卸载

    命令格式:

    rpm -e ( or --erase) options pkg1 ... pkgN

    参数

    pkg1 ... pkgN :要删除的软件包

    详细选项

    --test 只执行删除的测试

    --noscrīpts 不运行预安装和后安装脚本程序

    --nodeps 不检查依赖性

    通用选项

    -vv 显示调试信息

    --root 让RPM把指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下

    --rcfile 设置rpmrc文件为

    --dbpath 设置RPM 资料库存所在的路径为

    例子:

    1.卸载软件

    rpm-e *.rpm

    三、软件升级

    命令格式

    rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm

    参数

    file1.rpm ... fileN.rpm 软件包的名字

    详细选项

    -h (or --hash) 安装时输出hash记号 (``#'')

    --oldpackage 允许"升级"到一个老版本

    --test 只进行升级测试

    --excludedocs 不安装软件包中的文档文件

    --includedocs 安装文档

    --replacepkgs 强制重新安装已经安装的软件包

    --replacefiles 替换属于其它软件包的文件

    --force 忽略软件包及文件的冲突

    --percent 以百分比的形式输出安装的进度。

    --noscrīpts 不运行预安装和后安装脚本

    --prefix 把软件包安装到由 指定的路径下

    --ignorearch 不校验软件包的结构

    --ignoreos 不检查软件包运行的操作系统

    --nodeps 不检查依赖性关系

    --ftpproxy 用 作为 FTP代理

    --ftpport 指定FTP的端口号为

    通用选项

    -v 显示附加信息

    -vv 显示调试信息

    --root 让RPM把指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下

    --rcfile 设置rpmrc文件为

    --dbpath 设置RPM 资料库存所在的路径为

    例子:

    1.升级软件

    rpm -uvh *.rpm

    注意:此时的文件名必须是要升级软件的升级补丁

    四、查询

    命令格式:

    rpm -q ( or --query) options

    参数:

    pkg1 ... pkgN :查询已安装的软件包

    详细选项

    -p (or ``-'') 查询软件包的文件

    -f 查询属于哪个软件包

    -a 查询所有安装的软件包

    --whatprovides 查询提供了 功能的软件包

    -g 查询属于 组的软件包

    --whatrequires 查询所有需要 功能的软件包

    信息选项

    显示软件包的全部标识

    -i 显示软件包的概要信息

    -l 显示软件包中的文件列表

    -c 显示配置文件列表

    -d 显示文档文件列表

    -s 显示软件包中文件列表并显示每个文件的状态

    --scrīpts 显示安装、卸载、校验脚本

    --queryformat (or --qf) 以用户指定的方式显示查询信息

    --dump 显示每个文件的所有已校验信息

    --provides 显示软件包提供的功能

    --requires (or -R) 显示软件包所需的功能

    通用选项

    -v 显示附加信息

    -vv 显示调试信息

    --root 让RPM把指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下

    --rcfile 设置rpmrc文件为

    --dbpath 设置RPM 资料库存所在的路径为

    1.查询一个包是否被安装

    rpm -q *.rpm

    2. 查看软件包里的内容

    rpm -qpi *.rpm

    3.查看软件包把会在系统里安装哪些部分

    rpm -qpl *.rpm

    4.快速判定某个文件属于哪个软件包

    rpm -qf *.rpm

    5.列出所有被安装的rpm 软件包

    rpm –qa

    五、校验已安装的软件包

    命令格式:

    rpm -V ( or --verify, or -y) options

    参数

    pkg1 ... pkgN 把要校验的软件包名

    软件包选项

    -p Verify against package file

    -f 校验所属的软件包

    -a Verify 校验所有的软件包

    -g 校验所有属于组 的软件包

    详细选项

    --noscrīpts 不运行校验脚本

    --nodeps 不校验依赖性

    --nofiles 不校验文件属性

    通用选项

    -v 显示附加信息

    -vv 显示调试信息

    --root 让RPM把指定的路径做为"根目录",这样预安装程序和后安装程序都会安装到这个目录下

    --rcfile 设置rpmrc文件为

    --dbpath 设置RPM 资料库存所在的路径为

    例子:

    1.列出所有损坏的文件

    rpm -Va *.rpm

    六、校验软件包中的文件

    语法:

    rpm -K ( or --checksig) options file1.rpm ... fileN.rpm

    参数:

    file1.rpm ... fileN.rpm 软件包的文件名

    Checksig--详细选项

    --nopgp 不校验PGP签名

    通用选项

    -v 显示附加信息

    -vv 显示调试信息

    --rcfile 设置rpmrc文件为

    七、其它RPM选项

    --rebuilddb 重建RPM资料库

    --initdb 创建一个新的RPM资料库

    --quiet 尽可能的减少输出

    --help 显示帮助文件

    --version 显示RPM的当前版本

     

    常用命令组合:

    -ivh:安装显示安装进度--install--verbose--hash

    -Uvh:升级软件包--Update;

    -qpl:列出RPM软件包内的文件信息[Query Package list];

    -qpi:列出RPM软件包的描述信息[Query Package install package(s)];

    -qf:查找指定文件属于哪个RPM软件包[Query File];

    -Va:校验所有的RPM软件包,查找丢失的文件[View Lost];

    -e:删除包

    rpm -q samba //查询程序是否安装

    rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm #按路径安装并显示进度

    rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm    #指定安装目录

    rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm                  #用来检查依赖关系;并不是真正的安装;

    rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm              #新版本降级为旧版本

    rpm -qa | grep httpd        #[搜索指定rpm包是否安装]--all搜索*httpd*

    rpm -ql httpd            #[搜索rpm包]--list所有文件安装目录

    rpm -qpi Linux-1.4-6.i368.rpm  #[查看rpm包]--query--package--install package信息

    rpm -qpf Linux-1.4-6.i368.rpm  #[查看rpm包]--file

    rpm -qpR file.rpm          #[查看包]依赖关系

    rpm2cpio file.rpm |cpio -div    #[抽出文件]

    rpm -ivh file.rpm              #[安装新的rpm]--install--verbose--hash

    rpm -ivh http://mirrors.kernel.org/fedora/core/4/i386/os/Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm

    rpm -Uvh file.rpm               #[升级一个rpm]--upgrade

    rpm -e file.rpm                 #[删除一个rpm包]--erase

     

    rpm相关问题集锦

    1.如何不安装但是获取rpm包中的文件?
     使用工具rpm2cpio和cpio
     rpm2cpio xxx.rpm | cpio -vi
     rpm2cpio xxx.rpm | cpio -idmv
     rpm2cpio xxx.rpm | cpio --extract --make-directories
     参数i和extract相同,表示提取文件。v表示指示执行进程
     d和make-directory相同,表示根据包中文件原来的路径建立目录
     m表示保持文件的更新时间。
    2.如何查看与rpm包相关的文件和其他信息?
     下面所有的例子都假设使用软件包mysql-3.23.54a-11
     1.我的系统中安装了那些rpm软件包
     rpm -qa 讲列出所有安装过的包
     如果要查找所有安装过的包含某个字符串sql的软件包
     rpm -qa |grep sql
    3.如何获得某个软件包的文件全名?
     rpm -q mysql 可以获得系统中安装的mysql软件包全名,从中可以获得
     当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11
    4.一个rpm包中的文件安装到那里去了?
     rpm -ql 包名
     注意这里的是不包括.rpm后缀的软件包的名称
     也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。
     如果只是想知道可执行程序放到那里去了,也可以用which,比如
     which mysql
    5.一个rpm包中包含那些文件?
     一个没有安装过的软件包,使用rpm -qlp ****.rpm
     一个已经安装过的软件包,还可以使用rpm -ql ****.rpm
    6.如何获取关于一个软件包的版本,用途等相关信息?
     一个没有安装过的软件包,使用rpm -qip ****.rpm
     一个已经安装过的软件包,还可以使用rpm -qi ****.rpm
    7.某个程序是哪个软件包安装的,或者哪个软件包包含这个程序?
     rpm -qf `which 程序名` 返回软件包的全名
     rpm -qif `which 程序名` 返回软件包的有关信息
     rpm -qlf `which 程序名` 返回软件包的文件列表
     注意,这里不是引号,而是`,就是键盘左上角的那个键。
     也可以使用rpm -qilf,同时输出软件包信息和文件列表
    8.某个文件是哪个软件包安装的,或者哪个软件包包含这个文件?
     注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以
     用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。
     首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:
     # whereis ftptop
     ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
     # rpm -qf /usr/bin/ftptop
     proftpd-1.2.8-1
     # rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
     proftpd-1.2.8-1
     总结:
     获得软件包相关的信息用rpm -q,q表示查询query,后面可以跟其他选项,比如
     i 表示info,获得软件包的信息;
     l 表示list,获得文件列表;
     a 表示all,在所有包中执行查询;
     f 表示file,根据文件进行相关的查询;
     p 表示package,根据软件包进行查询
     需要的查询条件可以使用grep产生,或者从"` `"中的命令行产生
    9.什么是rpm?
     rpm 即RedHat Package Management,是RedHat的发明之一
    10.为什么需要rpm?
     在一个操作系统下,需要安装实现各种功能的软件包。这些软件包一般都有各自的
     程序,但是同时也有错综复杂的依赖关系。同时还需要解决软件包的版本,以及安装,
     配置,卸载的自动化问题。为了解决这些问题,RedHat针对自己的系统提出了一个
     较好的办法来管理成千上百的软件。这就是RPM管理系统。在系统中安装了rpm管理系统
     以后,只要是符合rpm文件标准的打包的程序都可以方便的安装,升级,卸载
    11.是不是所有的linux都使用rpm ?
     任何系统都需要包管理系统,因此很多linux都使用rpm系统。但rpm系统是为RH专门
     但是TL,Mandrake等系统也都使用rpm。由于rpm的源程序可以在别的系统上进行编译,
     所以有可能在别的系统上也使用rpm
     除了rpm,其他一些系统也有自己的软件包管理程序,例如debian的deb包,
     slakware也都有自己的包管理系统
    12.rpm包的文件名为什么那么长?
     rpm包的文件名中包含了这个软件包的版本信息,操作系统信息,硬件要求等等。
     比如mypackage-1.1-2TL.i386.rpm,其中mypackage是在系统中登记的软件包的名字
     1.1是软件的版本号,2是发行号,TL表示用于TL操作系统,还可能是RH等。i386表示
     用于intel x86平台,还可能是sparc等。
    13.软件包文件名中的i386,i686是什么意思?
     rpm软件包的文件名中,不仅包含了软件名称,版本信息,还包括了适用的硬件架构
     的信息。
     i386指这个软件包适用于intel 80386以上的x86架构的计算机(AI32)
     i686指这个软件包适用于intel 80686以上(奔腾pro以上)的x86架构的计算机(IA32)
     noarch指这个软件包于硬件架构无关,可以通用。
     i686软件包的程序通常针对CPU进行了优化,所以,向后兼容比较用以,i386的包在
     x86机器上都可以用。向前一般不兼容。不过现在的计算机,奔腾pro以下的CPU已经很少
     用,通常配置的机器都可以使用i686软件包
    14.不同操作系统发行的rpm包可否混用?
     对于已经编译成二进制的rpm包,由于操作系统环境不同,一般不能混用。
     对于以src.rpm发行的软件包,由于需要安装时进行本地编译,所以通常可以在不同
     系统下安装。
    15.使用rpm时遇到的一些特殊问题
     Q 我用rpm -e **.rpm无法删除rpm包
     A 包名不要包括rpm,
     rpm -e 包名,可以包含版本号等信息,但是不可以有后缀.rpm
     Q 在MS的系统下有没有读RPM文件的工具?
     A wincmd with rpm plugins.....
     Q 是否可以通过ftp安装安装升级rpm包?
     A 可以。rpm -ivh ftp://xxxxxxxx/PATH2SomeRPM
     Q rpm安装时已有的包版本过高怎么办?
     A 有时由于安装的软件包太老,而系统中相关的软件包版本比较新,所以可能需要安装的包依赖的一些文件会找不到。这时有两种解决办法:
     第一是在系统文件中找到和需要的文件功能相同或相似的文件,做一个符号链接到 需要的目录下。
     第二是下载安装新版本的软件包。

     

  • Linux 配置:让Xmanager连接Linux图形界面

    2008-12-11 16:43:30

    想要在远程终端使用用图形界面来操作和控制Linux服务器,就在windows下像使用MSTSC一样。linux通过XDMCP来提供这种支持,我们只要用一个终端仿真软件如:xmanager就可以实现,但是装完Xmanager后是不能直接远程连接Linux服务器的Xwindow界面的,需要对Linux进行相应的配置,详细步骤如下。

    前提:
    安装linux时一定要选上xwindow,这是最基本的前提,不安装它,是绝对没有图形界面的。

    **********************************************************
    基本概念和相关命令说明:
    XDMCP(X Display Manager Control Protocol),X显示监控协议;
    xdm(manages a collection of X displays),显示管理集。

    路径在:/etc/X11/xdm下几个文件:

      Xaccess     访问控制文件;

      Xservices  本地显示或远程显示配置文件;

      xdm-config  xdm的主要配置文件。
    **********************************************************

    配置Linux:

    使用root用户登录系统,做如下配置

    Step1:
    编辑/etc/X11/xdm/Xaccess,将下面的行:
    #* # any host can get a login window 的第一个"#"号去掉
    改为:
    * # any host can get a login window

    Step2:
    修改/etc/X11/gdm/gdm.conf,找到下面的信息:
    [xdmcp]
    Enable=0 或Enable=false
    修改为:
    [xdmcp]
    Enable=1 或Enable=true
    并确保以下信息存在:
    Port=177

    Step3:
    修改/etc/inittab,将
    id:3:initdefault:
    修改为:
    id:5:initdefault:

    Step4:
    # chmod 444 /etc/X11/xdm/Xservers
    # chmod 755 /etc/X11/xdm/Xsetup_0
    确保/etc/X11/xdm/Xservers的属性为444,/etc/X11/xdm/Xsetup_0的属性为755

    Step5:
    #vi /etc/X11/xdm/xdm-config
    在最后一行: DisplayManager.requestPort: 0 前面加!号注释掉此行。

    Step6:
    #vi /etc/X11/xdm/Xservers
    在最后一行::0 local /usr/X11R6/bin/X 前面加#号注释掉这一行。

    Step7:
    # xdm
    运行xdm脚本,这样使用xmanager等工具就可以连接Linux了。

    Step8:
    如果想要每次启动自动启动xdm,那么请在/etc/rc.d/rc.local文件尾部加入./etc/X11R6/bin/xdm
    注:你们的xdm脚本路径可能会和我的不一样,用which xdm查找即可!

  • 解决不能使用mstsc /console连接控制台的问题

    2008-12-08 11:25:36

    解决不能使用mstsc /console连接控制台的问题

    问题:windows xp 升级到sp3后不能使用MSTSC /console连接到控制台
    windows xp升级到sp3后,命令换成mstsc /admin即可实现Xp2中MSTSC /console的功能。

    sp3中mstsc的详细参数如下:

    MSTSC [<connection file>] [/v:<server[:port]>] [/admin] [/f[ullscreen]]

    [/w:<width> /h:<height>] [/public] | [/span] [/edit "connection file"] [/migrate]

    "connection file" -- 指定连接的 .rdp 文件的名称。

    /v:<server[:port]> -- 指定要连接的远程计算机。

    /admin -- 将您连接到会话以管理服务器。

    /f -- 以全屏模式启动远程桌面。

    /w:<width> -- 指定远程桌面窗口的宽度。

    /h:<height> -- 指定远程桌面窗口的高度。

    /public -- 在公用模式下运行远程桌面。

    /span -- 使远程桌面的宽度和高度与本地虚拟桌面相匹配,如有必要,扩展到多个

             显示器。若要扩展到多个显示器,所有显示器都必须具有相同的高度并垂

             直排列。

    /edit -- 打开指定的 .rdp 连接文件进行编辑。

    /migrate -- 将使用客户端连接管理器创建的旧连接文件迁移到新的 .rdp 连接文件。


    附加:winXP_Sp2、win2003_sp2、Dos中MSTSC的用法

    MSTSC      [<Connection File>] [/v:<server[:port]>] [/console] [/f[ullscreen]]
    [/w:<width> /h:<height>] | /Edit"ConnectionFile" | /Migrate | /?

    <Connection File> -- 指定连接的 .rdp 文件的名称。

    /v:<server[:port]> -- 指定要连接到的终端服务器。

    /console -- 连接到服务器的控制台会话。

    /f -- 以全屏模式启动客户端。

    /w:<width> -- 指定远程桌面屏幕的宽度。

    /h:<height> -- 指定远程桌面屏幕的高度。

    /edit -- 打开指定的 .rdp 文件来编辑。

    /migrate -- 将客户端连接管理器创建的旧版
    连接文件迁移到新的 .rdp 连接文件。

    /? -- 显示此用法消息。

    DOS远程桌面连接命令:mstsc /v: 192.168.136.250 /console

     

  • LoadRunner中遇到的问题及解决方法(累积)

    2008-12-03 12:51:05

    问题1:LoadRunner录制脚本时,不能自动打开浏览器。
    解决措施:启动IE->Internet选项->高级,勾掉“启用第三方浏览器扩展(需要重启动)”->重新启动运行VuGen录制脚本。

    问题2:安装LoadRunner中文语言包不成功(停留在99%或安装错误)
    解决措施:

    1、LoadRunner中文语言包的放置路径中不能有中文!
    2、LoadRunner中文语言包放置的目录不能太深,否则会安装不成功。(建议将汉化包拷贝到磁盘的根目录下进行安装!例如 D:\)

  • Linux命令:文件查找相关 Whereis、find和locate+updatedb

    2008-12-01 22:49:36

    文件查找相关Whereis、find和locate+updatedb

    命令简介   

    ●名称:whereis
    功能:定位文件所在的目录
       
        使用whereis命令可以定位常用命令的位置:
        [root@yanghsia root]#whereis ls                  (# 定位ls命令的位置)
        ls:/bin/ls                                      (# ls位于/usr/bln目录下)
       whereis命令不是通过查找磁盘上的所有文件来实现定位的,你可以随便指定一个可执行文件,估计whereis会找不到,这是因为whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如 /bin、/usr/bin等,因此whereis的用途仅限于定位shell命令所在的位置。
         
    ●名称:find
    功能:查找文件
        
        find命令可以用来从指定的目录开始查找文件,它的速度虽比不上whereis命令,但没有任何限制,而且功能要比whereis命令强。
     [root@yanghsia root]#find -name student.txt
     /tmp/student.txt                                (# 查找结果)

    ●名称:locate
    功能:查找文件或目录
       
        除find命令外,locate也是在系统中查找文件的常用方法。
        [root@yanghsia root]#locate student.txt           (# 查找student.txt文件)
        用locate命令查找的文件和find一样没有任何限制,但执行速度却比find要快不少,其主要原因在于,locate不是从磁盘中实时查找文件,而是到由updatedb命令产生的信息库中查找相应的文件和目录,这样一来速度当然快了。
        [root@yanghsia root]#updatedb
    注意:如果locate找不到某个文件,而你又确信该文件肯定存在,那一定是updatedb生成的信息库已经过时了。此时你要做的就是以root身份登录,然后执行updatedb命令,重新建立整个系统所有文件和目录的资料库,虽然这个过程可能会浪费一点时间,但以后再查找文件时就方便多了。

    命令详解
    名称:Fing
    前言:关于find命令
    由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
    在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
    一、find 命令格式
    1、find命令的一般形式为;
    find pathname -options [-print -exec -ok ...]
    2、find命令的参数;
    pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
    -print: find命令将匹配的文件输出到标准输出。
    -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
    -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    3、find命令选项
    -name
    按照文件名查找文件。
    -perm
    按照文件权限来查找文件。
    -prune
    使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
    -user
    按照文件属主来查找文件。
    -group
    按照文件所属的组来查找文件。
    -mtime -n +n
    按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
    -nogroup
    查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
    -nouser
    查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
    -newer file1 ! file2
    查找更改时间比文件file1新但比文件file2旧的文件。
    -type
    查找某一类型的文件,诸如:
    b - 块设备文件。
    d - 目录。
    c - 字符设备文件。
    p - 管道文件。
    l - 符号链接文件。
    f - 普通文件。
    -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
    -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
    -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
    -mount:在查找文件时不跨越文件系统mount点。
    -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
    -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
    另外,下面三个的区别:
       -amin n
      查找系统中最后N分钟访问的文件
      -atime n
      查找系统中最后n*24小时访问的文件
      -cmin n
      查找系统中最后N分钟被改变文件状态的文件
      -ctime n
      查找系统中最后n*24小时被改变文件状态的文件
     -mmin n
      查找系统中最后N分钟被改变文件数据的文件
      -mtime n
      查找系统中最后n*24小时被改变文件数据的文件
    4、使用exec或ok来执行shell命令
    使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的
    在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
    exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
    例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
    # find . -type f -exec ls -l {  } \;
    -rw-r--r--    1 root     root        34928 2003-02-25  ./conf/httpd.conf
    -rw-r--r--    1 root     root        12959 2003-02-25  ./conf/magic
    -rw-r--r--    1 root     root          180 2003-02-25  ./conf.d/README
    上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
    在/logs目录中查找更改时间在5日以前的文件并删除它们:
    $ find logs -type f -mtime +5 -exec rm {  } \;
    记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
    在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
    $ find . -name "*.conf"  -mtime +5 -ok rm {  } \;
    < rm ... ./conf/httpd.conf > ? n
    按y键删除文件,按n键不删除。
    任何形式的命令都可以在-exec选项中使用。
    在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。
    # find /etc -name "passwd*" -exec grep "sam" {  } \;
    sam:x:501:501::/usr/sam:/bin/bash
    二、find命令的例子;
    1、查找当前用户主目录下的所有文件:
    下面两种方法都可以使用
    $ find $HOME -print
    $ find ~ -print
    2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
    $ find . -type f -perm 644 -exec ls -l {  } \;
    3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
    $ find / -type f -size 0 -exec ls -l {  } \;
    4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
    $ find /var/logs -type f -mtime +7 -ok rm {  } \;
    5、为了查找系统中所有属于root组的文件;
    $find . -group root -exec ls -l {  } \;
    -rw-r--r--    1 root     root          595 10月 31 01:09 ./fie1
    6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。
    该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令
    $ find . -name "admin.log[0-9][0-9][0-9]" -atime -7  -ok
    rm {  } \;
    < rm ... ./admin.log001 > ? n
    < rm ... ./admin.log002 > ? n
    < rm ... ./admin.log042 > ? n
    < rm ... ./admin.log942 > ? n
    7、为了查找当前文件系统中的所有目录并排序;
    $ find . -type d | sort
    8、为了查找系统中所有的rmt磁带设备;
    $ find /dev/rmt -print
    三、xargs
    xargs - build and execute command lines from standard input
    在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
    find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
    在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
    而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
    来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
    下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
    #find . -type f -print | xargs file
    ./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
    ./.kde/Autostart/.directory:      ISO-8859 text\
    ......
    在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
    $ find / -name "core" -print | xargs echo "" >/tmp/core.log
    上面这个执行太慢,我改成在当前目录下查找
    #find . -name "file*" -print | xargs echo "" > /temp/core.log
    # cat /temp/core.log
    ./file6
    在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
    # ls -l
    drwxrwxrwx    2 sam      adm          4096 10月 30 20:14 file6
    -rwxrwxrwx    2 sam      adm             0 10月 31 01:01 http3.conf
    -rwxrwxrwx    2 sam      adm             0 10月 31 01:01 httpd.conf
    # find . -perm -7 -print | xargs chmod o-w
    # ls -l
    drwxrwxr-x    2 sam      adm          4096 10月 30 20:14 file6
    -rwxrwxr-x    2 sam      adm             0 10月 31 01:01 http3.conf
    -rwxrwxr-x    2 sam      adm             0 10月 31 01:01 httpd.conf
    用grep命令在所有的普通文件中搜索hostname这个词:
    # find . -type f -print | xargs grep "hostname"
    ./httpd1.conf:#     different IP addresses or hostnames and have them handled by the
    ./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
    on your
    用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:
    # find . -name \* -type f -print | xargs grep "hostnames"
    ./httpd1.conf:#     different IP addresses or hostnames and have them handled by the
    ./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
    on your
    注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。
    find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
    四、find 命令的参数
    下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册
    1、使用name选项
    文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。
    可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
    不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 'pathname'参数,波浪号~代表了你的$HOME目录。
    $ find ~ -name "*.txt" -print
    想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:
    $ find . -name "*.txt" -print
    想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
    $ find . -name "[A-Z]*" -print
    想要在/etc目录中查找文件名以host开头的文件,可以用:
    $ find /etc -name "host*" -print
    想要查找$HOME目录中的文件,可以用:
    $ find ~ -name "*" -print 或find . -print
    要想让系统高负荷运行,就从根目录开始查找所有的文件。
    $ find / -name "*" -print
    如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:
    $find . -name "[a-z][a-z][0--9][0--9].txt" -print
    2、用perm选项
    按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
    如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
    $ find . -perm 755 -print
    还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
    # ls -l
    -rwxrwxr-x    2 sam      adm             0 10月 31 01:01 http3.conf
    -rw-rw-rw-    1 sam      adm         34890 10月 31 00:57 httpd1.conf
    -rwxrwxr-x    2 sam      adm             0 10月 31 01:01 httpd.conf
    drw-rw-rw-    2 gem      group        4096 10月 26 19:48 sam
    -rw-rw-rw-    1 root     root         2792 10月 31 20:19 temp
    # find . -perm 006
    # find . -perm -006
    ./sam
    ./httpd1.conf
    ./temp
    -perm mode:文件许可正好符合mode
    -perm +mode:文件许可部分符合mode
    -perm -mode: 文件许可完全符合mode
    3、忽略某个目录
    如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。
    如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
    $ find /apps -path "/apps/bin" -prune -o -print
    4、使用find查找文件的时候怎么避开某个文件目录
    比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
    find /usr/sam -path "/usr/sam/dir1" -prune -o -print
    find [-path ..] [expression] 在路径列表的后面的是表达式
    -path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o
    -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
    这个表达式组合特例可以用伪码写为
    if -path "/usr/sam"  then
              -prune
    else
              -print
    避开多个文件夹
    find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print
    圆括号表示表达式的结合。
    \ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
    查找某一确定文件,-name等选项加在-o 之后
    #find /usr/sam  \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name "temp" -print
    5、使用user和nouser选项
    按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:
    $ find ~ -user sam -print
    在/etc目录下查找文件属主为uucp的文件:
    $ find /etc -user uucp -print
    为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。
    例如,希望在/home目录下查找所有的这类文件,可以用:
    $ find /home -nouser -print
    6、使用group和nogroup选项
    就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
    $ find /apps -group gem -print
    要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
    $ find / -nogroup-print
    7、按照更改时间或访问时间等查找文件
    如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
    用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
    希望在系统根目录下查找更改时间在5日以内的文件,可以用:
    $ find / -mtime -5 -print
    为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
    $ find /var/adm -mtime +3 -print
    8、查找比某个文件新或旧的文件
    如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
    newest_file_name ! oldest_file_name
    其中,!是逻辑非符号。
    查找更改时间比文件sam新但比文件temp旧的文件:
    例:有两个文件
    -rw-r--r--    1 sam      adm             0 10月 31 01:07 fiel
    -rw-rw-rw-    1 sam      adm         34890 10月 31 00:57 httpd1.conf
    -rwxrwxr-x    2 sam      adm             0 10月 31 01:01 httpd.conf
    drw-rw-rw-    2 gem      group        4096 10月 26 19:48 sam
    -rw-rw-rw-    1 root     root         2792 10月 31 20:19 temp
    # find -newer httpd1.conf  ! -newer temp -ls
    1077669    0 -rwxrwxr-x   2 sam      adm             0 10月 31 01:01 ./httpd.conf
    1077671    4 -rw-rw-rw-   1 root     root         2792 10月 31 20:19 ./temp
    1077673    0 -rw-r--r--   1 sam      adm             0 10月 31 01:07 ./fiel
    查找更改时间在比temp文件新的文件:
    $ find . -newer temp -print
    9、使用type选项
    在/etc目录下查找所有的目录,可以用:
    $ find /etc -type d -print
    在当前目录下查找除目录以外的所有类型的文件,可以用:
    $ find . ! -type d -print
    在/etc目录下查找所有的符号链接文件,可以用
    $ find /etc -type l -print
    10、使用size选项
    可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
    在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
    在当前目录下查找文件长度大于1 M字节的文件:
    $ find . -size +1000000c -print
    在/home/apache目录下查找文件长度恰好为100字节的文件:
    $ find /home/apache -size 100c -print
    在当前目录下查找长度超过10块的文件(一块等于512字节):
    $ find . -size +10 -print
    11、使用depth选项
    在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
    在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
    它将首先匹配所有的文件然后再进入子目录中查找。
    $ find / -name "CON.FILE" -depth -print
    12、使用mount选项
    在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
    从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
    $ find . -name "*.XC" -mount -print

    Find命令详解二

    每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。

    可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情。毕竟在Linux中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到。Linux中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件。对于Linux新手来说,“find”命令也是了解和学习Linux文件特点的方法。因为Linux发行版本繁多,版本升级很快,在Linux书籍上往往写明某个配置文件的所在位置,往往Linux新手按图索骥还是不能找到。比如说REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万的Linux文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命令之前就吃过这样的苦头。好,下面就详细为大家介绍强大的“find”命令的全部使用方法和用途。
      通过文件名查找法:
      这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,那么使用“find”命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这个。如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
      find / -name httpd.conf
      这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
    etc/httpd/conf/httpd.conf
      这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
      如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。
      无错误查找技巧:
      在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入
    find / -name access_log 2>/dev/null
      这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。
     在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf 就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。
      根据部分文件名查找方法:
      这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:
      find /etc -name '*srm*'
      这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
      find/etc -name 'srm*'
      这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
      根据文件的特征查询方法:
      如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功能是基本相同的。在微软的"搜索"中WINDOWS中的"搜索助理"使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet 上搜索更加容易。"搜索助理"还包括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用"搜索助理"时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。
      例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。
      find / -amin -10 # 查找在系统中最后10分钟访问的文件
      find / -atime -2 # 查找在系统中最后48小时访问的文件
      find / -empty # 查找在系统中为空的文件或者文件夹
      find / -group cat # 查找在系统中属于 groupcat的文件
      find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
      find / -mtime -1 #查找在系统中最后24小时里修改过的文件
      find / -nouser #查找在系统中属于作废用户的文件
      find / -user fred #查找在系统中属于FRED这个用户的文件
      下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
      -amin n
      查找系统中最后N分钟访问的文件
      -atime n
      查找系统中最后n*24小时访问的文件
      -cmin n
      查找系统中最后N分钟被改变状态的文件
      -ctime n
      查找系统中最后n*24小时被改变状态的文件
      -empty
      查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
      -false
      查找系统中总是错误的文件
      -fstype type
      查找系统中存在于指定文件系统的文件,例如:ext2 .
      -gid n
      查找系统中文件数字组 ID 为 n的文件
      -group gname
      查找系统中文件属于gnam文件组,并且指定组和ID的文件
     Find命令的控制选项说明:
      Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。
      选项
      用途描述
      -daystart
      .测试系统从今天开始24小时以内的文件,用法类似-amin
      -depth
      使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
      -follow
      遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
      -help
      显示命令摘要
      -maxdepth levels
      在某个层次的目录中按照递减方法查找
      -mount
      不在文件系统目录中查找, 用法类似 -xdev.
      -noleaf
      禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
      -version
      打印版本数字
      使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。
      -maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令
      find . -maxdepth 2 -name fred
      假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。
      使用混合查找方式查找文件
      find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。
      find /tmp -size +10000000c -and -mtime +2
      学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。
      还有这样的例子,
      find / -user fred -or -user george
      我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
      在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的
      find /tmp ! -user panda
      命令就可以解决了。很简单。
      查找并显示文件的方法
      查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。
      find / -name "httpd.conf" -ls
      系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
      12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf
      下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法
      选项
      用途描述
      -exec command;
      查找并执行命令
      -fprint file
      打印文件完整文件名
      -fprint0 file
      打印文件完整文件名包括空的文件
      -fprintf file format
      打印文件格式
      -ok command;
      给用户命令执行操作,根据用户的Y 确认输入执行
      -printf format
      打印文件格式
      -ls
      打印同种文件格式的文件.
    ****************************************************************************************************************************************

    名称:locate 详解
      使用权限:所有使用者
      使用方式: locate [-q] [-d ] [--database=]
      locate [-r ] [--regexp=]
      locate [-qv] [-o ] [--output=]
      locate [-e ] [-f ] <[-l ] [-c]
      <[-U ] [-u]>
      locate [-Vh] [--version] [--help]
      说明:
      locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立(使用updatedb命令)一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
      
      在一般的 distribution 之中,数据库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用
      # locate your_file_name
      的型式就可以了。
    参数说明:
      -u
      -U
      建立数据库,-u 会由根目录开始,-U 则可以指定开始的位置。
      -e
      将目录排除在寻找的范围之外。
      -l
      如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。
      -f
      将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在数据库中。
      -q
      安静模式,不会显示任何错误讯息。
      -n
      至多显示 个输出。
      -r
      使用正规运算式 做寻找的条件。
      -o
      指定数据库存的名称。
      -d
      指定数据库的路径
      -h
      显示辅助讯息
      -v
      显示更多的讯息
      -V
      显示程序的版本讯息
    范例:
      locate chdrv : 寻找所有叫 chdrv 的档案
      locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个
      locate -u : 建立数据库
      locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)
      locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*”或”?”等)来指定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括子目录在内的所有档案。
      locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。
      不过第一次在执行update後再使用locate寻找档案常会失败,此时就要执行slocate ˉu该命令(也可执行updatedb指令,其效果相同)来更新slocate数据库,该命令会在/usr/sbin下产生slocate执行档,再由locate到此数据库寻找所要找的资料。


    注意Updatedb的问题
    某些时候,你会发现你的Linux系统的硬盘在疯狂的转动并且系统运行速度变缓。
    使用[top]命令查看资源占用。
    #top
    你可能会发现一个叫updatedb的进程在疯狂的运行,占用了你非常多的系统资源。那么这个就是由[cron]自动运行的更新系统数据的脚本。
    他的作用是为你系统里面的文件建立索引,以便于locate和whereis等查询命令的能够快速执行。

    优化方法:
    使用root登陆
    #ls /etc/cron*
    你能看到cron.daily和cron.weekly等文件夹,并且在cron.daily里面应该有slocate等脚本。(即每天执行一次)
    设置定时更新的工作频率从每天一次降低到每周执行一次,命令如下:(将slocate脚本剪切到cron.weekly目录即可)
    #mv /etc/cron.daily/slocate /etc/cron.weekly/
    编辑配置文件updatedb.conf,设置不需要建立索引的目录,如:你的光驱或其他移动存储设备
    #vi /etc/updatedb.conf
    找到PRUNEPATHS,在后面添加上你不想让这个updatedb建立索引的目录。比如/mnt/winD等你的其他不必要建立索引的资料盘。


     

  • linux操作系统中增加swap空间(临时+永久)

    2008-11-24 15:46:49

    临时增加swap空间

    方法如下:

    以下的操作都要在root用户下进行,

    首先先建立一个分区,采用dd命令。
    step 1:

    #dd if=/dev/zero ōf=/home/swap bs=1024 count=512000

    这样就会创建/home/swap这么一个分区文件。文件的大小是512000个block,一般情况下1个block为1K,所以这里空间是512M(总共空间=bs*count=512M)。

    接着再把这个分区变成swap分区。
    step 2:

    # mkswap /home/swap

    注释:把刚才空间格式化成swap各式

    再接着使用这个swap分区。使其成为有效状态。
    step 3:

    #swapon /home/swap

    注释:使用刚才创建的swap空间

    如果要关闭刚开辟的swap空间,只需命令:#swapoff

     

    实例如下:
    --------------------------------------------------------------------------------
    1.查看系统Swap空间使用

    [root@guok usr]# free
                 total       used       free     shared    buffers     cached
    Mem:        513980     493640      20340          0     143808     271780
    -/+ buffers/cache:      78052     435928
    Swap:      1052248      21256    1030992

    2.在空间合适处创建swap文件

    [root@guok usr]# mkdir swap
    [root@guok usr]# cd swap
    [root@guok swap]# dd if=/dev/zero ōf=swapfile bs=1024 count=10000
    10000+0 records in
    10000+0 records out
    [root@guok swap]# ls -al
    total 10024
    drwxr-xr-x    2 root     root         4096  7月 28 14:58 .
    drwxr-xr-x   19 root     root         4096  7月 28 14:57 ..
    -rw-r--r--    1 root     root     10240000  7月 28 14:58 swapfile


    [root@guok swap]# mkswap swapfile
    Setting up swapspace version 1, size = 9996 KiB


    3.激活swap文件
    [root@guok swap]# swapon swapfile
    [root@guok swap]# ls -l
    total 10016
    -rw-r--r--    1 root     root     10240000  7月 28 14:58 swapfile
    [root@guok swap]# free
                 total       used       free     shared    buffers     cached
    Mem:        513980     505052       8928          0     143900     282288
    -/+ buffers/cache:      78864     435116
    Swap:      1062240      21256    1040984
    [root@guok swap]#
    --------------------------------------------------------------------------------

    永久增加Swap空间

    现在再用free -m命令查看一下内存和swap分区大小,就发现增加了512M的空间了。不过当计算机重启了以后,发现swap还是原来那么大,新的swap没有自动启动,还要手动启动。那我们需要修改/etc/fstab文件,增加如下一行

    /home/swap swap swap defaults 0 0

    你就会发现你的机器自动启动以后swap空间也增大了。

     

  • Linux 忘记root密码的解决方法(全)

    2008-11-23 19:02:51

      Linux超级用户root拥有系统的最高权限。当由于用户的疏忽,遗忘了root 密码,或者系统受到黑客的入侵,无法用root 账号登录系统时,我们可以通过下列办法来恢复root 的密码。

    一、进入单用户模式

      1.使用Linux 系统启动软盘

      如果你已创建了Linux 系统的启动软盘,而且设置计算机系统从软盘启动,当显示boot 提示符后输入:

      boot: linux single

      系统进入了提示符为“#”的单用户模式,计算机引导的运行级别为1,本地文件系统被挂载,很多系统服务没有运行,跳过所有系统认证,是一个系统管理员使用特定的机器,把 root 文件系统挂为读写,此时你可以使用:

      (1)passwd 程序来设置root的新密码

      # passwd root

      # reboot

      重启系统后,root 密码已被更新。

      (2)通过修改 /etc/shadow 文件,删除root 的密码

      # cd /etc

      # vi shadow

      将以root 开头的一行中“root:”后和下一个“ :”前的内容删除,

      第一行将类似于“root ::⋯⋯”,保存后重启系统,root 密码置为空。

      2.以LILO 多系统引导程序启动

      当系统以LILO 引导程序启动时,在出现LILO 提示符时输入:

      LILO: linux single

      进入单用户后,更改password 的方法同1。

      3.以GRUB 多系统引导程序启动

      用GRUB引导系统进入单用户步骤:

      (1) 启动GRUB,选择Red Hat Linux的选项,然后键入 e 来编辑;

      (2) 选择以kernel开头的一行,再按e 键,在此行的末尾,按空格键后输入single,以回车键来退出编辑模式;

      (3) 回到了 GRUB 屏幕后,键入 b 来引导进入单用户模式。

      进入单用户后,更改password 的方法同1。

    二、使用Linux 系统安装盘

      如果你既没做系统启动软盘,同时多系统的引导LILO 和GRUB 又被删除(如重装了Windows 系统后),那么只能使用Linux 系统安装盘来恢复root 的密码。

      用第一张Linux 系统安装盘启动,出现boot 提示符后输入:

     oot: linux rescue

      此时系统进入救援模式,然后根据提示完成:

      1.选择语言和键盘格式;

      2.选择是否配置网卡,一般系统因网络不需要,所以可以选择否跳过网卡配置;

      3 . 选择是否让系统查找硬盘上的Redhat Linux 系统,选择继续;

      4.系统显示硬盘上的系统已经被找到,并挂载在/mnt/sysimage 下;

      5.进入拯救状态,可重新设置root 的密码:

      # chroot/mnt/sysimage (让系统成为根环境)

      # cd /mnt/sysimage

      # passwd root

  • Linux 忘记root密码的解决方法(图解)

    2008-11-23 18:49:31

    如果Linux操作系统的root密码,那怎么办呢?方法很多:

    方法一

    【1】 进入以下画面后,按下e按钮,进入编辑模式;

    【2】进入以下的画面后,选择如下所示的选项,再次按下e按钮;

    然后在所显示的页面输入空格和1,按下Enter按钮;如下图。

    【3】返回到如下页后,按下b按钮起动linux;

    启动后如下图所示:

    【4】用passwd命令修改root用户密码;

    【5】利用reboot或者shutdown -r now命令重启linux,密码修改完毕,见下图。

    OK,系统正常启动后即可以使用新密码登陆系统!

     

     

    方法二:  

      1、将系统光盘的第一张插入光驱,重新启动系统,从光驱成功引导后在boot: 后输入linux rescue回车。  

      2、跟着引导程序向下走,不必配置网络。但提问是否手索并挂载系统分区时选择“是”,系统进入“#”提示符下。   

      3、执行命令chroot /mnt/sysimage/ (默认的系统会挂在/mnt/sysimage/目录下)  

      4、执行命令/usr/bin/passwd来修改root口令。  

      5、执行命令exit; ,取出光盘,重新启动系统。  

      然后用新的口令登录系统。  

      即可完成root密码修复。

  • LoadRunner 链接QC问题及解决方法

    2008-11-18 13:36:52

    使用Loadrunner->工具->qc连接,输入http://qc服务器IP:端口/qcbin后

    出现错误消息

    (1)“Failed to create list of projects on current Quality Center server.”
    (2)“Failed to Get Domain List.
    (3)“Server has been disconnected while performing GetDomainList action”

    诊断:This error may occur with previous version of QuickTest Professional, WinRunner, or LoadRunner, which do not support the new authentication procedure that TestDirector for Quality Center 9.0 uses. This can also happen when using the QC OTA API to create any utilities to connect to QC projects.


    解决方法:Define BACKWARD_SUPPORT_ALL_DOMAINS_PROJECTS as "Y" in the Site Administrator
    This parameter enables the use of DomainList and ProjectsList properties for the purposes of backward compatiblity. If this parameter is set to "Y," the DomainList and ProjectsList properties are supported.

     

    操作步骤:

    1. Launch the Site Administrator.
    2. Select the Site Configuration tab.
    3. Set the value for BACKWARD_SUPPORT_ALL_DOMAINS_PROJECTS to Y.

    附加说明:

    If the parameter does not exist, you will need to add it.


     

数据统计

  • 访问量: 38550
  • 日志数: 19
  • 建立时间: 2008-11-13
  • 更新时间: 2008-12-16

RSS订阅

Open Toolbar