in

SDT Community Server

SDT Forums, Blogs, Photos server.

Coolboy

  • 2008北京奥运电视转播时间表

    Come on China.

  • Set Oralce processes

    alter system set processes=300 scope=spfile;

     

  • 软件测试

  • Asp.NET生成静态页面并分页

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序。

    主要的原理就是替换模板里的特殊字符。

    1、静态模板页面 template.html,主要是定义了一些特殊字符,用来被替换。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>Title </title>
    </head>
    <body>
    <div style="width: 417px; height: 54px" align="center">
    <br />
    Title </div>
    <div style="width: 417px; height: 8px">
    浏览 <font color="red"> <script src="http://localhost/.Net/NewsFiles/ClickCount.aspx?NewsId=NewsId"> </script> </font>次 Time </div>
    <div style="width: 417px; height: 100px">
    Content </div>
    <div style="width: 416px; height: 9px">
    Pager </div>
    <div style="width: 416px; height: 8px">
    <form id="form1" action="../AddComment.aspx" style="margin:0px">
    <input id="Text1" type="text" /> <Img id="Image1" src="http://www.dwww.cn/UserInfo/CheckCode.aspx"/> <br />
    <textarea id="CommentContent" cols="20" rows="2"> </textarea>
    <br />
    <input id="NewsId" type="hidden" value="NewsId"/>
    <input id="Button1" type="submit" value="button" />
    <a href="http://www.dwww.cn/News/Display.aspx?NewsId=NewsId">查看更多评论 </a> </form>
    </div>
    </body>
    </html>


    2、前态页面 NewsAdd.aspx,就是一个表单,用来填写新闻的标题和内容。

    <%@ Page Language="C#" AutoEventWireup="false" validateRequest="false" CodeFile="NewsAdd.aspx.cs" Inherits="NewsAdd.Admin_AdminPanel_NewsAdd" %>
    <%@ Register TagPrefix="FCKeditorV2" Namespace="FredCK.FCKeditorV2" Assembly="FredCK.FCKeditorV2" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>添加新闻 </title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div>
    <asp:Label ID="Label2" runat="server" Text="标题"> </asp:Label>
    <asp:TextBox ID="Title" runat="server" Width="325px"> </asp:TextBox> <br />
    <asp:Label ID="Label1" runat="server" Text="内容"> </asp:Label>
    <FCKeditorV2:FCKeditor id="Content" basePath="~/FCKeditor/" runat="server" Height="400px" Width="70%"> </FCKeditorV2:FCKeditor>
    <asp:Button ID="Button1" runat="server" onClick="Button1_Click" Text="Button" />
    <asp:Label ID="Message" runat="server" > </asp:Label> </div>
    </form>
    </body>
    </html>


    3、后台页面 NewsAdd.aspx.cs

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Mysqlserver;
    using System.IO;
    using System.Text;
    namespace NewsAdd
    {
    public partial class Admin_AdminPanel_NewsAdd : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
    string strDate = DateTime.Now.ToString("yyMMdd") + "\" + DateTime.Now.ToString("yyyymmddhhmmss");
    string strFileName = strDate + ".shtml";//存储到数据库中
    string strTitle=Request.Form["Title"].ToString().Trim();//接收传过来的标题
    string strContent=Request.Form["Content"].ToString().Trim();//接收传过来的内容
    string[] content = strContent.Split(new Char[] {' ¦'});//对内容进行拆分,并保存到数组
    int upbound = content.Length;//数组的上限
    SqlServerDataBase db = new SqlServerDataBase();
    bool success = db.Insert("insert into inNews(Title,Content,FilePath)values('" + strTitle + "','" + strContent + "','" + strFileName + "')", null);
    //if (success)
    // Message.Text = "添加成功!";
    /**////////////////////////////创建当前日期的文件夹开始
    string dir = Server.MapPath("../../"+"NewsFiles/"+DateTime.Now.ToString("yyMMdd"));//用来生成文件夹
    if (!Directory.Exists(dir))
    {
    Directory.CreateDirectory(dir);
    }
    /**////////////////////////////创建当前日期的文件夹结束
    try
    {
    for (int i = 0; i < content.Length; i++)
    {
    //string[] newContent = new string[4];//定义和html标记数目一致的数组
    StringBuilder strhtml = new StringBuilder();

    //创建StreamReader对象
    using (StreamReader sr = new StreamReader(Server.MapPath("../../" + "NewsFiles/") + "\template.html",Encoding.GetEncoding("gb2312")))
    {
    String oneline;
    //读取指定的HTML文件模板
    while ((oneline = sr.ReadLine()) != null)
    {
    strhtml.Append(oneline);
    }
    sr.Close();
    }

    //为标记数组赋值
    //SqlServerDataBase db = new SqlServerDataBase();
    DataSet ds = db.Select("select top 1 NewsId from inNews order by NewsId desc", null);//获取id
    string strTable = " <table> <tr> <td>upUrl </td> <td>Number </td> <td>downUrl </td> </tr> </table>";//上下页表格,注意此处的upUrl(上一页),Number(页码分页),downUrl(下一页)
    //这三个是用来替换的。

    string FilePath="";
    strhtml = strhtml.Replace("Title", strTitle);
    strhtml = strhtml.Replace("NewsId", ds.Tables[0].Rows[0]["NewsId"].ToString());
    strhtml = strhtml.Replace("Time", DateTime.Now.ToString("yyyy/MM/dd"));
    strhtml = strhtml.Replace("Content", contentIdea);
    string strNumber = "";//数字分页1,2,3……
    for (int m = 1; m <=upbound; m++)
    {
    if (m == 1)//如果是第一页就显示成这个样子:20070524.shtml而不是20070524_1.shtml
    strNumber = strNumber + " ["+" <a href=" + "../" + strDate + ".shtml" + ">" + m + " </a>"+"] ";
    else
    {
    int n = m - 1;//第三页的连接应该是20070524_2.shtml,以此类推
    strNumber = strNumber + " [" +" <a href=" + "../" + strDate + "_" + n + ".shtml" + ">" + m + " </a>"+"] ";
    }
    }
    if (upbound == 0)//如果没有分页,就直接按日期时间保存
    {
    FilePath = Server.MapPath("../../") + "NewsFiles" + "//" + strDate + ".shtml";
    strhtml = strhtml.Replace("Pager", "");
    }
    else//否则按20070524.shtml、20070524_1.shtml 这种效果保存
    {
    if (i == 0)
    FilePath = Server.MapPath("../../") + "NewsFiles" + "//" + strDate + ".shtml";
    else
    FilePath = Server.MapPath("../../") + "NewsFiles" + "//" + strDate + "_" + i + ".shtml";

    if (i == 0)//第一页不显示上一页
    strTable = strTable.Replace("upUrl", "");

    if (i <= 1)//上一页分页
    strTable = strTable.Replace("upUrl", " <a href=" + "../" + strDate + ".shtml" + ">上一页 </a>");
    else
    {
    int p = i - 1;
    strTable = strTable.Replace("upUrl", " <a href=" + "../" + strDate + "_" + p + ".shtml" + ">上一页 </a>");
    }

    if(upbound==1)//如果只有一页,则不显示页码
    //strNumber="";
    strTable = strTable.Replace("Number", "");
    else
    strTable = strTable.Replace("Number", strNumber);//页码替换
    /**/////////////////////////
    if(i==upbound-1)//最后一页不显示下一页
    strTable = strTable.Replace("downUrl", "");

    if (i != upbound - 1)//下一页分页
    {
    int q = i + 1;
    strTable = strTable.Replace("downUrl", " <a href=" + "../" + strDate + "_" + q + ".shtml" + ">下一页 </a>");
    }
    else
    {
    int j = upbound - 1;
    strTable = strTable.Replace("downUrl", " <a href=" + "../" + strDate + "_" + j + ".shtml" + ">下一页 </a>");
    }

    strhtml = strhtml.Replace("Pager", strTable);
    }
    //创建文件信息对象--------------------------------------------
    FileInfo finfo = new FileInfo(FilePath);
    //以打开或者写入的形式创建文件流
    using (FileStream fs = finfo.OpenWrite())
    {
    //根据上面创建的文件流创建写数据流
    StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
    //把新的内容写到创建的HTML页面中
    sw.WriteLine(strhtml);
    sw.Flush();
    sw.Close();
    }
    }
    }
    catch (Exception err)
    {
    //输出异常信息
    Response.Write(err.ToString());
    }
    }
    }
    }


    请不要直接拷贝使用,里面的路径需要更改,但程序绝对没问题,在我本地已经测试通过。

    另外在使用时,比如我要把新闻的内容分成4页,就应该这样写:111 ¦222 ¦333 ¦444。

  • 再遇ORA-12516

    記得以前有過一次,今天用戶再次反應又連不上數據庫了,遇到問題總要先查找原因,後尋找解決辦法,這個過程困難,也給心裡造成壓力。

    避免後續再次出現同樣的問題,能夠最快時間順利輕鬆解決,今天就記錄之,平衡心理壓力呵...

    問題描述:

    [oracle@test dbs]$ oerr ora 12516
    12516, 00000, "TNS:listener could not find available handler with matching protocol stack"
    // *Cause: None of the known and available service handlers for the given
    // SERVICE_NAME support the client's protocol stack: transport, session,
    // and presentation protocols.
    // *Action: Check to make sure that the service handlers (e.g. dispatchers)
    // for the given SERVICE_NAME are registered with the listener, are accepting
    // connections, and that they are properly configured to support the desired
    // protocols.

    診斷過程:

    [oracle@test dbs]$ lsnrctl status

    LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 23-MAY-2008 13:59:30

    Copyright (c) 1991, 2005, Oracle.  All rights reserved.

    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
    STATUS of the LISTENER
    ------------------------
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
    Start Date                23-MAY-2008 13:20:03
    Uptime                    0 days 0 hr. 39 min. 27 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/oracle/product/10.2.0/db_1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/oracle/product/10.2.0/db_1/network/log/listener.log
    Listening Endpoints Summary...
      (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
      (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.182.4.65)(PORT=1521)))
    Services Summary...
    Service "PLSExtProc" has 1 instance(s).
      Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Service "infuse01" has 1 instance(s).
      Instance "infuse01", status UNKNOWN, has 1 handler(s) for this service...
    Service "infuse02" has 1 instance(s).
      Instance "infuse02", status UNKNOWN, has 1 handler(s) for this service...
    Service "sgwmsdb" has 1 instance(s).
      Instance "sgwmsdb", status READY, has 1 handler(s) for this service...
    Service "sgwmsdbXDB" has 1 instance(s).
      Instance "sgwmsdb", status READY, has 1 handler(s) for this service...
    Service "sgwmsdb_XPT" has 1 instance(s).
      Instance "sgwmsdb", status READY, has 1 handler(s) for this service...
    Service "test" has 1 instance(s).
      Instance "test", status READY, has 1 handler(s) for this service...
    Service "testXDB" has 1 instance(s).
      Instance "test", status READY, has 1 handler(s) for this service...
    Service "test_XPT" has 1 instance(s).
      Instance "test", status READY, has 1 handler(s) for this service...
    The command completed successfully

    [oracle@test dbs]$ ps -ef|grep ora_

    oracle    5018     1  0 Mar07 ?        00:00:41 ora_pmon_test
    oracle    5020     1  0 Mar07 ?        00:01:45 ora_psp0_test
    oracle    5022     1  0 Mar07 ?        00:00:01 ora_mman_test
    oracle    5024     1  0 Mar07 ?        00:02:50 ora_dbw0_test
    oracle    5026     1  0 Mar07 ?        00:07:52 ora_lgwr_test
    oracle    5028     1  0 Mar07 ?        00:03:21 ora_ckpt_test
    oracle    5030     1  0 Mar07 ?        00:04:53 ora_smon_test
    oracle    5032     1  0 Mar07 ?        00:00:00 ora_reco_test
    oracle    5034     1  0 Mar07 ?        00:01:46 ora_cjq0_test
    oracle    5036     1  0 Mar07 ?        00:05:06 ora_mmon_test
    oracle    5038     1  0 Mar07 ?        00:02:11 ora_mmnl_test
    oracle    5040     1  0 Mar07 ?        00:00:00 ora_d000_test
    oracle    5042     1  0 Mar07 ?        00:00:00 ora_s000_test
    oracle    5052     1  0 Mar07 ?        00:01:12 ora_arc0_test
    oracle    5054     1  0 Mar07 ?        00:01:11 ora_arc1_test
    oracle    5058     1  0 Mar07 ?        00:00:00 ora_qmnc_test
    oracle    5075     1  0 Mar07 ?        00:00:00 ora_q000_test

    發現缺少job進程ora_j000_test

    [oracle@test dbs]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri May 23 13:23:22 2008

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    Connected.
    SQL> select name from v$database;
    select name from v$database
    *
    ERROR at line 1:
    ORA-01012: not logged on


    SQL> exit

    [oracle@test dbs]$ ps -ef|grep oracle|wc -l
    172

    而spfile文件中processes = 150,從而判斷,這個值太小導致新用戶無法再連入DB.

    數據庫處於not log on 狀態,無法直接修改相應參數,於是就先把相關oracle進程kill掉後,可以正常登錄數據庫.

    [oracle@test dbs]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Fri May 23 14:08:52 2008

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL> alter system set processes=300 scope=spfile;

    SQL> shutdown immediate;

    SQL> startup;

    以上,用戶正常使用.

    Posted Jul 01 2008, 02:16 PM by Coolboy with 1 comment(s)
    Filed under:
  • iis6.0故障

    IIS6.0服务器架站无法访问解决方案总结
    阅读: 时间:2004-10-4 5:07:25 来源:黑客基地 编辑:黑客基地 
     虽然这些都是些简单的东西,但在IIS里很多网友经常问到,所以就总结了一下。

    --------------------------------------------------------------
    **************************************
    附:解决与“HTTP 500 - Internal Server Error”(HTTP 500 – 内部服务器错误)错误信息有关的问题
    http://support.microsoft.com/?kbid=311766&ln=zh-cn

    **************************************
    ---------------------------------------------------------------------
      很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙

      如果你的服务器是2003的,它默认只支持.net,不支持asp所以须进行以下操作:

    打开iis6.0里面的本地计算机->web服务扩展
    把active server pages 允许就行了

    问题1:未启用父路径

    症状举例:

    Server.MapPath() 错误 'ASP 0175 : 80004005'
    不允许的 Path 字符
    /0709/dqyllhsub/news/OpenDatabase.asp,行 4
    在 MapPath 的 Path 参数中不允许字符 '..'。

    原因分析:

      许多Web页面里要用到诸如../格式的语句(即回到上一层的页面,也就是父路径),而IIS6.0出于安全考虑,这一选项默认是关闭的。

    解决方法:

    在IIS中 属性->主目录->配置->选项中。把”启用父路径“前面打上勾。确认刷新。

    问题2:ASP的Web扩展配置不当(同样适用于ASP.NET、CGI)

    症状举例:

    HTTP 错误 404 - 文件或目录未找到。

    原因分析:

      在IIS6.0中新增了web程序扩展这一选项,你可以在其中对ASP、ASP.NET、CGI、IDC等程序进行允许或禁止,默认情况下ASP等程序是禁止的。

    解决方法:

      在IIS中的Web服务扩展中选中Active Server Pages,点击“允许”。

    问题3:身份认证配置不当

    症状举例:

    HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝。

    原因分析:IIS 支持以下几种 Web 身份验证方法:

    匿名身份验证

      IIS 创建 IUSR_计算机名称 帐户(其中 计算机名称 是正在运行 IIS 的服务器的名称),用来在匿名用户请求 Web 内容时对他们进行身份验证。此帐户授予用户本地登录权限。你可以将匿名用户访问重置为使用任何有效的 Windows 帐户。

    基本身份验证

      使用基本身份验证可限制对 NTFS 格式 Web 服务器上的文件的访问。使用基本身份验证,用户必须输入凭据,而且访问是基于用户 ID 的。用户 ID 和密码都以明文形式在网络间进行发送。

    Windows 集成身份验证

      Windows 集成身份验证比基本身份验证安全,而且在用户具有 Windows 域帐户的内部网环境中能很好地发挥作用。在集成的 Windows 身份验证中,浏览器尝试使用当前用户在域登录过程中使用的凭据,如果尝试失败,就会提示该用户输入用户名和密码。如果你使用集成的 Windows 身份验证,则用户的密码将不传送到服务器。如果该用户作为域用户登录到本地计算机,则他在访问此域中的网络计算机时不必再次进行身份验证。

    摘要身份验证

      摘要身份验证克服了基本身份验证的许多缺点。在使用摘要身份验证时,密码不是以明文形式发送的。另外,你可以通过代理服务器使用摘要身份验证。摘要身份验证使用一种挑战/响应机制(集成 Windows 身份验证使用的机制),其中的密码是以加密形式发送的。

    .NET Passport 身份验证

      Microsoft .NET Passport 是一项用户身份验证服务,它允许单一签入安全性,可使用户在访问启用了 .NET Passport 的 Web 站点和服务时更加安全。启用了 .NET Passport 的站点会依靠 .NET Passport 中央服务器来对用户进行身份验证。但是,该中心服务器不会授权或拒绝特定用户访问各个启用了 .NET Passport 的站点。

    解决方法:

      根据需要配置不同的身份认证(一般为匿名身份认证,这是大多数站点使用的认证方法)。认证选项在IIS的属性->安全性->身份验证和访问控制下配置。

    问题4:IP限制配置不当

    症状举例:

    HTTP 错误 403.6 - 禁止访问:客户端的 IP 地址被拒绝。

    原因分析:

      IIS提供了IP限制的机制,你可以通过配置来限制某些IP不能访问站点,或者限制仅仅只有某些IP可以访问站点,而如果客户端在被你阻止的IP范围内,或者不在你允许的范围内,则会出现错误提示。

    解决方法:

      进入IIS的属性->安全性->IP地址和域名限制。如果要限制某些IP地址的访问,需要选择授权访问,点添加选择不允许的IP地址。反之则可以只允许某些IP地址的访问。

    问题5:IUSR账号被禁用

    症状举例:

    HTTP 错误 401.1 - 未经授权:访问由于凭据无效被拒绝。

    原因分析:

      由于用户匿名访问使用的账号是IUSR_机器名,因此如果此账号被禁用,将造成用户无法访问。

    解决办法:

      控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。


    问题6:NTFS权限设置不当

    症状举例:

    HTTP 错误 401.3 - 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。

    原因分析:

      Web客户端的用户隶属于user组,因此,如果该文件的NTFS权限不足(例如没有读权限),则会导致页面无法访问。

    解决办法:

      进入该文件夹的安全选项卡,配置user的权限,至少要给读权限。关于NTFS权限设置这里不再馈述。

    问题7:IWAM账号不同步

    症状举例:

    HTTP 500 - 内部服务器错误

    原因分析:

      IWAM账号是安装IIS时系统自动建立的一个内置账号。IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的IWAM密码的同步工作。系统对IWAM账号的密码同步工作有时会失效,导致IWAM账号所用密码不统一。

    解决办法:

      如果存在AD,选择开始->程序->管理工具->Active Directory用户和计算机。为IWAM账号设置密码。

    运行c:\Inetpub\AdminScripts>adsutil SET w3svc/WAMUserPass +密码 同步IIS metabase数据库密码
    运行cscript c:\inetpub\adminscripts\synciwam.vbs -v 同步IWAM账号在COM+应用程序中的密码

    问题8:MIME设置问题导致某些类型文件无法下载(以ISO为例)

    症状举例:

    HTTP 错误 404 - 文件或目录未找到。

    原因分析:

      IIS6.0取消了对某些MIME类型的支持,例如ISO,致使客户端下载出错。

    解决方法:

      在IIS中 属性->HTTP头->MIME类型->新建。在随后的对话框中,扩展名填入.ISO,MIME类型是application。

      另外,防火墙阻止,ODBC配置错误,Web服务器性能限制,线程限制等因素也是造成IIS服务器无法访问的可能原因,这里就不再一一馈述了。希望此帖能解决大家的大部分问题

  • 很多年不玩IIS了 ,装了6.0运行一些老的ASP 居然404错误

    很多年不玩IIS了 ,装了6.0运行一些老的ASP 居然404错误,搞了老半天 ,发现居然是IIS默认不支持ASP了 得的WEB扩展服务里面启用ASP

    Posted Jun 20 2008, 03:12 PM by Coolboy with no comments
    Filed under: , ,
  • 制造业的几个常用语

    现品票 packing detail
    机种型号 Model Type
    生产日 Date of Manufacture
    数量 Quantitiy
    备考 For reference
    出货日: Date of shipment
    要因变更品 Manufacturing Factor Change

  • Unable to evaluate expression ... call stack

    今天在调试project时有异常跳出:Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

    SYMPTOMS

    If you use the Response.End, Response.Redirect, or Server.Transfer method, a ThreadAbortException exception occurs. You can use a try-catch statement to catch this exception.

    CAUSE

    The Response.End method ends the page execution and shifts the execution to the Application_EndRequest event in the application's event pipeline. The line of code that follows Response.End is not executed.

    This problem occurs in the Response.Redirect and Server.Transfer methods because both methods call Response.End internally.

    RESOLUTION

    To work around this problem, use one of the following methods:
    For Response.End, call the HttpContext.Current.ApplicationInstance.CompleteRequest method instead of Response.End to bypass the code execution to the Application_EndRequest event.
    For Response.Redirect, use an overload, Response.Redirect(String url, bool endResponse) that passes false for the endResponse parameter to suppress the internal call to Response.End. For example:
       Response.Redirect ("nextpage.aspx", false);
          
    If you use this workaround, the code that follows Response.Redirect is executed.
    For Server.Transfer, use the Server.Execute method instead.
  • 隐藏文件方法


    分享一下。。。要是觉得还不错的话。请顶一下。

    首先,建一个文件夹,把你要隐藏的文件放在里面,AV啊什么的。

    假设你建的文件夹叫 avxx

    然后呢,我们给这个文件夹加个扩展名(后缀)
    avxxaa.{20D04FE0-3AEA-1069-A2D8-08002B30309D}


    把它放在桌面


    你会惊奇滴发现,原来的文件夹变成了 “我的电脑”

    嘿嘿。。。。~你怎么点它都只会进“我的电脑”了。。。。


    回收站:
    {645ff040-5081-101b-9f08-00aa002f954e}
    拔号网络:
    {992CFFA0-F557-101A-88EC-00DD010CCC48}
    打印机:
    {2227a280-3aea-1069-a2de-08002b30309d}
    控制面板:
    {21ec2020-3aea-1069-a2dd-08002b30309d}
    网上邻居:
    {208D2C60-3AEA-1069-A2D7-08002B30309D}


    别人怎么点也看不到你里面的文件。

  • Unix/Linux中编辑文件的命令VI详细介绍

    Unix/Linux中编辑文件的命令VI详细介绍

    -=-=-=-=-=>

    VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基.令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。




    一、基.令介绍



    ---- 1.光标命令



    k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个光标键,但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。


    nG——跳转命令。n为行数,该命令立即使光标跳到指定行。

    Ctrl G——光标所在位置的行数和列数报告。

    w、b——使光标向前或向后跳过一个单词。

    ---- 2.编辑命令

    i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。

    cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。

    x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。

    ---- 3.查找命令

    ---- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。

    ---- 4.拷贝复制命令

    ---- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。



    二、常见问题及应用技巧



    ---- 1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。

    ---- vi file

    ---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd

    ---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。

    ---- 您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。


    ---- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。

    ---- #cat squid.conf.default | grep -v '^$' | grep -v '^#'



    ---- 2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。

    ---- vi file

    ---- :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。


    ---- vi file

    ---- :20,59w /tmp/1



    ---- 3.用VI编辑一个文件,但需要删除大段的内容。

    ---- 首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl G显示行号,再到结尾处再按Ctrl G,显示文件结尾的行号。


    ---- :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:'a,'bd”命令删除。




    ---- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。

    ---- vi file

    ---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。

    ---- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。

    ---- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。

    ---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。

    ---- 注意: 其中s为substitute,%表示所有行,g表示global。



    ---- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。

    ---- vi file1 file2

    ---- yy 在文件1的光标处拷贝所在行

    ---- :n 切换到文件2 (n=next)

    ---- p 在文件2的光标所在处粘贴所拷贝的行

    ---- :n 切换回文件1



    ---- 6.替换文件中的路径。

    ---- 使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。
    Posted May 30 2008, 10:11 AM by Coolboy with no comments
    Filed under:
  • linux的rar命令 安装和使用

    关于linuxrar命令的安装和使用, 某些时候还是有这个必要的, 比如某些客户已经用ftp把一个超大的rar文件传了上去, 要求你去解压的时候

    首先下载rarlinux-3.7.1.tar.gz

    点击下载


    2然后解压
    # tar xvfz    rarlinux-3.7.b1.tar.gz
    3安装
    # make install
    mkdir -p /usr/local/bin
    mkdir -p /usr/local/lib
    cp rar unrar /usr/local/bin
    cp rarfiles.lst /etc
    cp default.sfx /usr/local/lib
    4解压文件:

    # rar x test.rar /
    rar: /lib/tls/libc.so.6: version `GLIBC_2.4' not found (required by rar)

    5需要GLIBC_2.4。如果没有GLIBC_2.4可以

    # cp ./rar/rar_static /usr/local/bin/rar

    rar_static 版是 static linking 版本,不会有 glibc 程式库版本不和的问题。

    再次解压:
    [root@xxxx ~]# rar x test.rar /
    RAR 3.71   Copyright (c) 1993-2007 Alexander Roshal   20 Sep 2007
    Shareware version         Type RAR -? for help

    Extracting from test.rar
    Extracting  /test.txt                                                 OK
    All OK

    6打包
    rar a install.rar ./install.log

    这样就可以了

    Posted May 28 2008, 02:31 PM by Coolboy with no comments
    Filed under:
  • Linux菜鸟入门级命令3344

    1. man 对你熟悉或不熟悉的命令提供帮助解释

    eg:man ls 就可以查看ls相关的用法

    注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。

    2. ls 查看目录或者文件的属*,列举出任一目录下面的文件

    eg: ls /usr/man

    ls -l

    a.d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link)

    b.表示文件或者目录许可权限.分别用可读(r),可写(w),可运行(x)。

    3. cp 拷贝文件

    eg: cp filename1 filename2 //把filename1拷贝成filename2

    cp 1.c netseek/2.c //将1.c拷到netseek目录下命名为2.c

    4. rm 删除文件和目录

    eg: rm 1.c //将1.c这个文件删除

    5. mv 移走目录或者改文件名

    eg: mv filename1 filename2 //将filename1 改名为filename2

    mv qib.tgz ../qib.tgz //移到上一级目录

    6. cd 改变当前目录 pwd 查看当前所在目录完整路径

    eg: pwd //查看当前所在目录路径

    cd netseek //进入netseek这个目录

    cd //退出当前目录

    7. cat,more命令

    将某个文件的内容显示出来。两个命令所不同的是:cat把文件内容一直打印出来,而 more则分屏显示

    eg; cat>1.c //就可以把代码粘帖到1.c文件里,按ctrl+d 保存代码。

    cat 1.c 或more 1.c //都可以查看里面的内容。

    gcc -o 1 1.c //将1.c编译成.exe文件,我们可以用此命编译出代码。

    8.chmod 命令 权限修改 用法:chmod 一位8进制数 filename。

    eg: chmod u+x filenmame //只想给自己运行,别人只能读

    //u表示文件主人, g 表示文件文件所在组。 o 表示其他人 ;r 表可读,w 表可写,x 表可以运行

    chmod g+x filename //同组的人来执行

    9. clear,date命令

    clear:清屏,相当与DOS下的cls;date:显示当前时间。

    10. mount 加载一个硬件设备

    用法:mount [参数] 要加载的设备 载入点

    eg: mount /dev/cdrom

    cd /mnt/cdrom //进入光盘目录

    11. su 在不退出登陆的情况下,切换到另外一个人的身份

    用法: su -l 用户名(如果用户名缺省,则切换到root状态)

    eg:su -l netseek (切换到netseek这个用户,将提示输入密码)

    12.whoami,whereis,which,id

    //whoami:确认自己身份

    //whereis:查询命令所在目录以及帮助文档所在目录

    //which:查询该命令所在目录(类似whereis)

    //id:打印出自己的UID以及GID。(UID:用户身份唯一标识。GID:用户组身份唯一标识。每一个用户只能有一个唯一的UID和 GID)

    eg: whoami //显示你自已登陆的用户名

    whereis bin 显示bin所在的目录,将显示为:/usr/local/bin

    which bin

    13. grep,find

    grep:文本内容搜索;find:文件或者目录名以及权限属主等匹配搜索

    eg: grep success *    /*查找当前目录下面所有文件里面含有success字符的文件

    14. kill 可以杀死某个正在进行或者已经是dest状态的进程

    eg; ps ax

    15. passwd 可以设置口令

    16. history 用户用过的命令

    eg: history //可以显示用户过去使用的命令

    17. !! 执行最近一次的命令

    18. mkdir命令

    eg: mkdir netseek //创建netseek这个目录

    19. tar 解压命令

    eg: tar -zxvf nmap-3.45.tgz //将这个解压到nmap-3.45这个目录里

    20. finger 可以让使用者查询一些其他使用者的资料

    eg: finger //查看所用用户的使用资料

    finger root //查看root的资料

    Posted May 28 2008, 01:35 PM by Coolboy with no comments
    Filed under:
  • Linux命令集2

    Linux命令集

    整理:Jims of 肥肥世家

    发布时间:2004年7月20日

    更新时间:2005年03月16日

    Abstract

    在安装、使用和维护Linux系统中,我们都会用到大量的命令,而且命令参数繁多,这也可说是linux系统的一大特色,所以经常会忘记。这里记录我使用Linux当中用到过的命令,用于备查。


    1. 最常用的命令列表

    下面列出十个在使用linux过程中使用频率最高的命令。这里只作简单介绍,具体用法请参考后面内容。

    • cat,显示文件内容。

    • cd,改变目录路径。

    • cp,复制文件。

    • find,查找文件。

    • grep,搜索、过滤信息。

    • ls,列出目录信息。

    • more,分页显示。

    • rm,删除文件或目录。

    • vi,调用vi文本编辑器。

    • who,显示登录用户信息。

    2. chmod----改变一个或多个文件的存取模式(mode)

    chmod [options] mode files

    只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。

    • options:

      -c,--changes

      只输出被改变文件的信息

      -f,--silent,--quiet

      当chmod不能改变文件模式时,不通知文件的用户

      --help

      输出帮助信息。

      -R,--recursive

      可递归遍历子目录,把修改应到目录下所有文件和子目录

      --reference=filename

      参照filename的权限来设置权限

      -v,--verbose

      无论修改是否成功,输出每个文件的信息

      --version

      输出版本信息。

    • who

      u

      用户

      g

      o

      其它

      a

      所有用户(默认)

    • opcode

      +

      增加权限

      -

      删除权限

      =

      重新分配权限

      permission

      r

      w

      x

      执行

      s

      设置用户(或组)的ID号

      t

      设置粘着位(sticky bit),防止文件或目录被非属主删除

      u

      用户的当前权限

      g

      组的当前权限

      o

      其他用户的当前权限

    • 作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。

    • 还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下:

      • 4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。

      • 2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。

      • 1,设置粘着位。

    • 实例:

      $ chmod u+x file                给file的属主增加执行权限
      $ chmod 751 file                给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
      $ chmod u=rwx,g=rx,o=x file    上例的另一种形式
      $ chmod =r file                为所有用户分配读权限
      $ chmod 444 file               同上例
      $ chmod a-wx,a+r               同上例
      $ chmod -R u+r directory       递归地给directory目录下所有文件和子目录的属主分配读的权限
      $ chmod 4755                   设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。
      

    3. chgrp----修改文件或目录的所属组

    chgrp [options] newgroup files/directorys

    组名可以用组的ID号,也可用/etc/group中的组名。只有文件的属主或特权用户(root)才可改变它的组。

    • options:

      -c,--changes

      只输出被改变文件的信息

      -f,--silent,--quiet

      当不能改变文件组属性时,不通知文件的用户

      --help

      输出帮助信息。

      -R,--recursive

      可递归遍历子目录,把修改应到目录下所有文件和子目录

      --reference=filename

      参照filename的组信息来设置当前文件的组

      -v,--verbose

      输出详细信息

      --version

      输出版本信息。

    • 实例:

      $ chgrp root test           把test的所属组更改root组
      $ chgrp -R mysql test       递归地把test目录及该目录下所有文件和子目录的组属性设置成mysql
      $ chgrp root *              把当前目录中所有文件的组属性设置成root
      

    4. chown----设置一个或多个文件或目录的属主身份

    chown [options] newowner files/directorys

    新的属主可以是用户的ID号,也可以是/etc/passwd里的登录名。chown也可接受这样的形式:newowner:newgroup或newowner.newgroup。同时改变所属组的属性。如果句点和冒号后没有组名,则组改变为新属主的组。只有文件或目录的当前属主才有权改变它的属性。

    • options:

      -c,--changes

      只输出被改变文件的信息

      --dereference

      跟踪符号链接

      -h,--no-dereference

      改变每一个符号链的属主身份,而不是被引用文件的属主身份

      -f,--silent,--quiet

      当不能改变文件属主属性时,不通知文件的用户

      --help

      输出帮助信息。

      -R,--recursive

      可递归遍历子目录,把修改应到目录下所有文件和子目录

      --reference=filename

      把属主改变成filename文件的属主

      -v,--verbose

      输出详细信息

      --version

      输出版本信息。

    • 实例:

      $ chown  root test                       把test文件的属主改进root
      $ chown -R root test_directory           递归地把test_directory目录下的所有文件属主改成root
      $ chown --dereference root test_link     把test_link链接的原文件属主改成root,链接文件属主不变
      $ chown --no-dereference root test_link  把test_link的链接文件属主改成root,原文件属主不变
      

    5. date----显示、修改系统时间

    date [options][+format][date]

     

    $ date -s 06/09/2004	修改日期(按月日年格式)
    $ date -s 13:56:00	修改时间(按时分秒格式)
    $ date -r test		显示test文件最后一次的修改时间
    $ date +'%Y-%m-%d'	以yyyy-mm-dd格式显示日期,其它格式请参考帮助
    $ clock -r		查询BIOS时间
    $ clock -w		把修改后的时间写回BIOS
    			  
    		  

     

    6. df-----显示已安装文件系统的磁盘容量状态

    df [options][name]

     

    $ df -h		以友好的格式输出所有已安装文件系统的磁盘容量状态
    $ df -m /home	以M为单位输出home目录的磁盘容量状态
    $ df -k		以K为单位输出所有已安装文件系统的磁盘容量状态
    $ df -i		报告空闲的、用过的或部份用过的(百份比)索引节点
    $ df -t ext3	仅显示文件类型为ext3的文件系统的磁盘状态
    $ df -x ext3	仅显示文件类型不为ext3的文件系统的磁盘状态
    $ df -T		除显示文件系统磁盘容量大小外还显示文件系统类型
    $ df -l		仅显示本地文件系统。
    			  
    		  

     

    7. fdisk----分区表查询工具

    fdisk [options][driver]

    $ fdisk -l          列出所有分区信息
    

    8. hdparm----硬盘管理

    hdparm [options][driver]

     

    $ hdparm -d  /dev/hda           显示硬盘的DMA模式是不打开,1代表on
    $ hdparm -tT /dev/hda           测试硬盘的写性能
    $ hdparm -d1 /dev/hda		开启dma功能
    $ hdparm -d1 -X68 -c3 -m16 /dev/hda  
    选项说明:
    -c3:把硬盘的IO模式从16位转成32位。
    -m16:改变硬盘的多路扇区的读功能,-m16使硬盘在一次I/O中断中读入16个扇区的数据。
    -d1:打开DMA模式。
    -X68:支持ATA66的数据传输模式。下面是其它模式的设置对照
    ATA33.......参数是-X66 
    ATA66.......参数是-X68 
    ATA100......参数是-X69
    $ hdparm -k1 /dev/hda            保存设置
    			  
    		  

     

    9. ln-----为文件建立别名

    ln [options] sourcename [destname]

    ln [options] sourcenames destdirectory

     

    $ ln -s file1 file2       建立一个到file1的符号链接file2,删除file2不会影响file1
    $ ln -s -f file1 file2    建立一个到file1的符号链接file2,并不提示是否重写
    

     

    10. shutdown-----终止所有进程序,关闭计算机。

    shutdown [options] when [message]

    用when可以是指定的关机时间(以hh:mm格式)、关机前要等待的时间(以+m格式)、或者now。message指定一条广播消息通知所有用户退出系统。showdown给所有进程发送SIGTERM信号,并调用init 1执行实际的关机动作。

    $ shutdown -c          取消正在进行的关闭操作
    $ shutdown -f          快速重新启动,在重新启动时禁止对fsck的常规调用
    $ shutdown -h          当关闭完成时停止系统
    $ shutdown -k          输出警告信息,但禁止实际的关闭
    $ shutdown -n          不调用init就执行关闭
    $ shutdown -r          当关闭完成时重新启动系统
    $ shutdown -t 5        在杀死进程和改变运行级别之间确保延时5秒
    

    11. sleep-----执行另一个命令之前等待的时间

    sleep amount [units]

    units默认为秒(s),m表示分钟,h表示小时,d表示天。

    12. swapon/swapoff-----启动和关闭交换分区

    swapon/swapoff [options] device

    $ swapon -s            显示交换分区信息
    $ swapon -a            激活所有在/etc/fstab中有sw标记的分区
    $ swapon -p 1          设置交换分区优先级为1
    

    13. tune2fs-----调整Linux第二扩展文件系统的参数

    tune2fs [options] device

    $ tune2fs -l /dev/hda1       显示hda1分区的超级块内容
    $ tune2fs -c 100 /dev/hda1   设置hda1分区每mount100次就进行磁盘检查
    

    14. uniq----过滤、统计、删除重复行

    uniq [options][file1 [files]]

     

    $ uniq -c file		file中的重复行输出一次,并在每行前显示重复次数
    $ uniq -d file		file中的重复行输出一次,但不输出唯一的行
    $ uniq -u file          只输出file中的唯一行
    $ uniq file1 file2	把file1中的重复的相邻行删除,并把每行的一个拷贝送到file2
    			  
    		  

     

    15. wc-----输出每个文件中的字符数、单词数及行数。

    wc [options][files]

     

    $ wc -l file		输出file中的行数
    $ wc -w file		输出file中的单词数
    $ wc -c file		输出file中的字符数
    			  
    		  

     

  • 扫盲行动之一:Linux常用命令简介

    su

    su命令是最基本的命令之一,常用于不同用户间切换。例如,如果登录为 user1,要切换为user2,只要用如下命令:

    $su user2

    然后系统提示输入user2口令,输入正确的口令之后就可以切换到user2。完成之后就可以用exit命令返回到user1。

    su命令的常见用法是变成根用户或超级用户。如果发出不带用户名的su命令 ,则系统提示输入根口令,输入之后则可切换为根用户。

    如果登录为根用户,则可以用su命令成为系统上任何用户而不需要口令。

    pwd

    pwd命令也是最常用最基本的命令之一,用于显示用户当前所在的目录。

    cd

    cd命令不仅显示当前状态,还改变当前状态,它的用发跟dos下的cd命令基本一致。

    cd ..可进入上一层目录

    cd -可进入上一个进入的目录

    cd ~可进入用户的home目录

    ls

    ls命令跟dos下的dir命令一样,用于显示当前目录的内容。

    如果想取得详细的信息,可用ls -l命令, 这样就可以显示目录内容的详细信息。

    如果目录下的文件太多,用一屏显示不了,可以用ls -l |more分屏显示 。

    find

    find命令用于查找文件。这个命令可以按文件名、建立或修改日期、所有者(通常是建立文件的用户)、文件长度或文件类型进行搜索。

    find命令的基本结构如下:

    $find

    其中指定从哪个目录开始搜索。指定搜索条件。表示找到文件怎么处理。一般来说,要用-print动作,显示 整个文件路径和名称。如果没有这个动作,则find命令进行所要搜索而不显示结果,等于白费劲。

    例如,要搜索系统上所有名称为ye的文件,可用如下命令:

    $find / -name ye -print

    这样就可以显示出系统上所有名称为ye的文件。

    tar

    tar最初用于建立磁带备份系统,目前广泛用于建立文件发布档案。可用如下方法建立tar档案:

    $tar cvf

    例如,如果要将当前目录中所有文件存档到ye.tar中,可用如下命令:

    $tar cvf ye.tar *.*

    要浏览档案内容,将c选项变成t。如果要浏览ye.tar档案中的内容,可用如下命令:

    $tar tvf ye.tar

    要取出档案内的内容,将c选项变成x。如果要将ye.tar档案中的内容取到当前目录中,可用如下命令:

    $tar xvf ye.tar

    gzip

    gzip命令用于压缩文件。 例如,如果要将ye.txt文件压缩,可用如下命令:

    $gzip ye.txt

    这样就可以压缩文件并在文件名后面加上gz扩展名,变成文件ye.txt.gz。

    解压缩文件可用gzip -d命令实现:

    $gzip -d ye.txt.gz

    这样就可以解压缩文件并删除gz扩展名。除此之外还可以用gunzip命令来解 压缩文件,效果跟用gzip -d命令一样。

    旧版的tar命令不压缩档案,可用gzip压缩。例如:

    $tar cvf ye.tar *.txt

    $gzip ye.tar

    则可建立压缩档案ye.tar.gz。

    新版的tar可以直接访问和建立gzip压缩的tar档案,只要在tar命令中加上z 选项就可以了。例如:

    $tar czvf ye.tar *.txt

    生成压缩档案ye.tar.gz,

    $tar tzvf ye.tar *.txt

    显示压缩档案ye.tar.gz的内容,而

    $tar xzvf ye.tar *.txt

    取出压缩档案ye.tar.gz的内容。

    mkdir

    这个命令很简单,跟dos的md命令用法几乎一样,用于建立目录。

    cp

    cp命令用于复制文件或目录。

    cp命令可以一次复制多个文件,例如:

    $cp *.txt *.doc *.bak /home

    将当前目录中扩展名为txt、doc和bak的文件全部复制到/home目录中。

    如果要复制整个目录及其所有子目录,可以用cp -R命令。

    rm

    rm命令用于删除文件或目录。

    rm命令会强制删除文件,如果想要在删除时提示确认,可用rm -i命令。

    如果要删除目录,可用rm -r命令。rm -r命令在删除目录时,每删除一个文件或目录都会显示提示,如果目录太大,响应每个提示是不现实的。这时可以用 rm -rf命令来强制删除目录,这样即使用了-i标志也当无效处理。

    mv

    mv命令用于移动文件和更名文件。例如:

    $mv ye.txt /home

    将当前目录下的ye.txt文件移动到/home目录下,

    $mv ye.txt ye1.txt

    将ye.txt文件改名为ye1.txt。

    类似于跟cp命令,mv命令也可以一次移动多个文件,在此不再赘叙。

    reboot

    重启命令,不必多说。

    halt

    关机命令,不必多说。

  • oracle中查询时指定索引的方法,优化是一种学问

    oracle中查询时指定索引的方法
    2008-01-11 16:00

    五、索引Index的优化设计

    1、管理组织索引

             索引可以大大加快数据库的查询速度,索引把表中的逻辑值映射到安全的RowID,因此索引能进行快速定位数据的物理地址。但是有些DBA发现,对一个大 型表建立的索引,并不能改善数据查询速度,反而会影响整个数据库的性能。这主要是和SGA的数据管理方式有关。ORACLE在进行数据块高速缓存管理时, 索引数据比普通数据具有更高的驻留权限,在进行空间竞争时,ORACLE会先移出普通数据。对一个建有索引的大型表的查询时,索引数据可能会用完所有的数 据块缓存空间,ORACLE不得不频繁地进行磁盘读写来获取数据,因此在对一个大型表进行分区之后,可以根据相应的分区建立分区索引。如果对这样大型表的 数据查询比较频繁,或者干脆不建索引。另外,DBA创建索引时,应尽量保证该索引最可能地被用于where子句中,如果对查询只简单地制定一个索引,并不 一定会加快速度,因为索引必须指定一个适合所需的访问路径。2、聚簇的使用

    Oracle提供了另一种方法来提高查询速度,就是聚簇(Cluster)。所谓聚簇,简单地说就是把几个表放在一起,按一定公共属性混合存放。聚簇根 据共同码值将多个表的数据存储在同一个Oracle块中,这时检索一组Oracle块就同时得到两个表的数据,这样就可以减少需要存储的Oracle块, 从而提高应用程序的性能。

    3、优化设置的索引,就必须充分利用才能加快数据库访问速度。ORACLE要使用一个索引, 有一些最基本的条件:1)、where子名中的这个字段,必须是复合索引的第一个字段;2)、where子名中的这个字段,不应该参与任何形式的计算。 Sal*(2*90/100)

    六、多CPU和并行查询PQO(Parallel Query Option)方式的利用

    1、尽量利用多个CPU处理器来执行事务处理和查询

    CPU的快速发展使得ORACLE越来越重视对多CPU的并行技术的应用,一个数据库的访问工作可以用多个CPU相互配合来完成,加上分布式计算已经相 当普遍,只要可能,应该将数据库服务器和应用程序的CPU请求分开,或将CPU请求从一个服务器移到另一个服务器。对于多CPU系统尽量采用 Parallel Query Option(PQO,并行查询选项)方式进行数据库操作。

    2、使用Parallel Query Option(PQO,并行查询选择)方式进行数据查询

       使用PQO方式不仅可以在多个CPU间分配SQL语句的请求处理,当所查询的数据处于不同的磁盘时,一个个独立的进程可以同时进行数据读取。

    3、使用SQL*Loader Direct Path选项进行大量数据装载

    使用该方法进行数据装载时,程序创建格式化数据块直接写入数据文件中,不要求数据库内核的其他I/O。

    七、实施系统资源管理分配计划

    ORACLE提供了Database Resource Manager(DRM,数据库资源管理器)来控制用户的资源分配,DBA可以用它分配用户类和作业类的系统资源百分比。在一个OLDP系统中,可给联机 用户分配75%的CPU资源,剩下的25%留给批用户。另外,还可以进行CPU的多级分配。除了进行CPU资源分配外,DRM还可以对资源用户组执行并行 操作的限制。

    八、使用最和SQL优化方优的数据库连接案

    1、使用直接的OLE DB数据库连接方式。

    通过ADO可以使用两种方式连接数据库,一种是传统的ODBC方式,一种是OLE DB方式。ADO是建立在OLE DB技术上的,为了支持ODBC,必须建立相应的OLE DB到ODBC的调用转换,而使用直接的OLE DB方式则不需转换,从而提高处理速度。

    2、使用Connection Pool机制

    在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。解决的办法就是复用现有的Connection,也就是使用Connection Pool对象机制。

    Connection Pool的原理是:IIS+ASP体系中维持了一个连接缓冲池,这样,当下一个用户访问时,直接在连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此可以大大地提高系统的响应速度。

    3、高效地进行SQL语句设计

    通常情况下,可以采用下面的方法优化SQL对数据操作的表现:

    (1)减少对数据库的查询次数,即减少对系统资源的请求,使用快照和显形图等分布式数据库对象可以减少对数据库的查询次数。

    (2)尽量使用相同的或非常类似的SQL语句进行查询,这样不仅充分利用SQL共享池中的已经分析的语法树,要查询的数据在SGA中命中的可能性也会大大增加。

    (3)限制动态SQL的使用,虽然动态SQL很好用,但是即使在SQL共享池中有一个完全相同的查询值,动态SQL也会重新进行语法分析。

    (4)避免不带任何条件的SQL语句的执行。没有任何条件的SQL语句在执行时,通常要进行FTS,数据库先定位一个数据块,然后按顺序依次查找其它数据,对于大型表这将是一个漫长的过程。

    (5)如果对有些表中的数据有约束,最好在建表的SQL语句用描述完整性来实现,而不是用SQL程序中实现。

    (6)可以通过取消自动提交模式,将SQL语句汇集一组执行后集中提交,程序还可以通过显式地用COMMIT和ROLLBACL进行提交和回滚该事务。

    (7)检索大量数据时费时很长,设置行预取数则能改善系统的工作表现,设置一个最大值,当SQL语句返回行超过该值,数值库暂时停止执行,除非用户发出新的指令,开始组织并显示数据,而不是让用户继续等待。

    九、充分利用数据的后台处理方案减少网络流量

    1、合理创建临时表或视图

    所谓创建临时表或视图,就是根据需要在数据库基础上创建新表或视图,对于多表关联后再查询信息的可建新表,对于单表查询的可创建视图,这样可充分利用数 据库的容量大、可扩充性强等特点,所有条件的判断、数值计算统计均可在数据库服务器后台统一处理后追加到临时表中,形成数据结果的过程可用数据库的过程或 函数来实现。

    2、数据库打包技术的充分利用

    利用数据库描述语言编写数据库的过程或函数,然后把过程或函数打成包在数据库后台统一运行包即可。

    3、数据复制、快照、视图,远程过程调用技术的运用

    数据复制,即将数据一次复制到本地,这样以后的查询就使用本地数据,但是只适合那些变化不大的数据。使用快照也可以在分布式数据库之间动态复制数据,定义 快照的自动刷新时间或手工刷新,以保证数据的引用参照完整性。调用远程过程也会大大减少因频繁的SQL语句调用而带来的网络拥挤。

        总之,对所有的性能问题,没有一个统一的解决方法,但ORACLE提供了丰富的选择环境,可以从ORACLE数据库的体系结构、软件结构、模式对象 以及具体的业务和技术实现出发,进行统筹考虑。提高系统性能需要一种系统的整体的方法,在对数据库进行优化时,应对应用程序、I/O子系统和操作系统 (OS)进行相应的优化。优化是有目的地更改系统的一个或多个组件,使其满足一个或多个目标的过程。对Oracle来说,优化是进行有目的的调整组件级以 改善性能,即增加吞吐量,减少响应时间。如果DBA能从上述九个方面综合考虑优化方案,相信多数ORACLE应用可以做到按最优的方式来存取数据。

     

     

    我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享!

    (1)      选择最有效率的表名顺序(只在基于规则的优化器中有效):

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。

    如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.把数据少的表放在FROM后面的最后

    (2)      WHERE子句中的连接顺序.:

    ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

    (3)      SELECT子句中避免使用 ‘ * ‘:

    ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间

    (4)      减少访问数据库的次数:

    ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等;

    (5)      在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200

    (6)      使用DECODE函数来减少处理时间:******************************

    使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.

     

    decode (expression, search_1, result_1)

    decode (expression, search_1, result_1, search_2, result_2)

    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)

     

    decode (expression, search_1, result_1, default)

    decode (expression, search_1, result_1, search_2, result_2, default)

    decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

    decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。

    以下是一个简单测试,用于说明Decode函数的用法:

     

    SQL> create table t as select username,default_tablespace,lock_date from dba_users;

     

    Table created.

     

    SQL> select * from t;

    USERNAME                       DEFAULT_TABLESPACE             LOCK_DATE

    ------------------------------ ------------------------------ ---------

    SYS                            SYSTEM

    SYSTEM                         SYSTEM

    OUTLN                          SYSTEM

    CSMIG                          SYSTEM

    SCOTT                           SYSTEM

    EYGLE                          USERS

    DBSNMP                         SYSTEM

    WMSYS                          SYSTEM                         20-OCT-04

     

    8 rows selected.

     

     

    SQL> select username,decode(lock_date,null,'unlocked','locked') status from t;

     

    USERNAME                       STATUS

    ------------------------------ --------

    SYS                            unlocked

    SYSTEM                         unlocked

    OUTLN                          unlocked

    CSMIG                          unlocked

    SCOTT                          unlocked

    EYGLE                          unlocked

    DBSNMP                         unlocked

    WMSYS                          locked

     

    8 rows selected.

     

    SQL> select username,decode(lock_date,null,'unlocked') status from t;

     

    USERNAME                       STATUS

    ------------------------------ --------

    SYS                            unlocked

    SYSTEM                         unlocked

    OUTLN                          unlocked

    CSMIG                          unlocked

    SCOTT                           unlocked

    EYGLE                          unlocked

    DBSNMP