2009年4月28日星期二

47岁的传奇



观看视频:
http://v.youku.com/v_show/id_XODU4OTY2MzI=.html
47岁的苏珊·波伊儿日前在伦敦参加业余歌手选秀节目一夜成名,她对英国电视观众来说是个奇迹。...

苏珊·博伊尔现在很忙。她参加拉里·金的脱口秀,接受奥普拉·温弗瑞的访谈,录制新专辑,甚至接到诸多大牌导演的邀请,拍摄一部以她本人为原型的电影。

仅仅十二天前,苏珊还是苏格兰小村庄里默默度日的“老处女”,生活中唯一的伴侣是一只名叫“佩博斯”的猫。自从4月11日在英国热门电视选秀节目《英国达人》中一唱惊人,她的名字立即传遍全世界。

  “傻苏西”的确不聪明

据说,英国每个小村庄里都可能有一个像苏珊·博伊尔这样的女性:身材肥胖,头发蓬乱,不爱出门,年纪一把尚未出嫁。孩子们看到她会哄笑着喊“傻苏西(Susie Simple)”。

苏珊1961年6月出生在苏格兰西洛锡安一个小村庄。母亲在47岁高龄时产下她,由于出生时缺氧,苏珊的大脑受到伤害,导致学习能力出现问题,在学校里常常成为众人欺凌的对象。

但性格温良的苏珊从来都不怪罪欺负她的孩子们。她只是淡淡地说:“他们喜欢捉弄那些安静的孩子,不过总体上对我还是友好的。”

中学毕业后,18岁的苏珊几乎没几门功课及格。她曾经在社区服务,但此后大部分的成年岁月,苏珊放弃工作,全职照顾高龄的母亲,直至两年前母亲去世。

  唱片公司曾拒绝她

歌唱似乎是上帝作为补偿赐给她的礼物。

12岁时,苏珊开始在学校和唱诗班表演。一开始,她没有想过当歌星,她就是爱唱,并且坚持练习。直到有一次,她在爱丁堡看到职业歌手在舞台上表演,“那歌声夺走了我的魂”。

1999年,苏珊参加了别的选秀,但发挥得并不出色,后来,她又倾尽积蓄自费灌了一张唱片,并赠送给几个好朋友,但没有公司愿意发行。

在母亲布里吉特鼓励下,苏珊曾去酒吧唱歌、参加俱乐部的比赛,还得过不少奖项。母女俩常在一起看《英国达人》,“母亲总是说,我应该站在这个舞台上,并且夺得冠军。”

2009年4月11日,当她无视扑面而来的鄙夷、嘲笑和怀疑,引吭高歌《我曾有梦》,赢得了全世界的掌声和眼泪,也终于实现了母亲的心愿。

  “出名让我不再寂寞”

苏珊现在到底人气有多旺?她在《英国达人》舞台上表演的视频在Youtube上点击率超过3500万次,风靡程度胜过美国总统奥巴马的就职演说。

粉丝们为苏珊建立了的网站,你可以定制“苏珊·博伊尔款”T恤衫。因为苏珊曾在节目中自曝“从来没有被异性亲吻过”。两名青年千里迢迢骑车来到苏珊的家,亲吻她的脸颊。

当脱口秀明星拉里·金问出名对她的生活有什么影响时,苏珊回答,“我当然再不会寂寞了。”

“那么你是否会改变自己的形象?”———“为什么我要改?”

《英国达人》的裁判之一摩根赞同道,“苏珊最大魅力就是她保持自己的方式,她的模样,她的举动,都是本色。”

■ 观察

  “这是对以貌取人的嘲讽”

苏珊的故事就像是现代版“灰姑娘”。但苏珊从12岁起就练习唱歌,一夜成名的背后是35年不间断地放声歌唱。

有评论说,这是对大众以貌取人恶习的嘲讽。“我们的社会惯常以一举一动来判断一个人的社会地位,当苏珊出现在大众面前,她的服饰、发型和言语无不表现出,她就是个失败者。”当短暂的震惊过后,人们感到内疚、羞愧、和期望。

现代人更能从苏珊身上反省自身。美国评论家彼得·布里格曼写道,“在我们大多数人的一生之中,有谁不曾暗藏着一些追求,甚至绝望地认定命运应该赐予我们更多?有多少平庸的外表下跃动着一颗超凡的心灵?只要有合适的机会、合适的舞台、合适的观众,我们也能实现真正的自我,像明星一样闪耀。”


I dreamed a dream in days gone by
When hope was high and life worth living
I dreamed that love would never die
I dreamed that God would be forgiving.

Then I was young and unafraid
And dreams were made and used and wasted.
There was no ransom to be paid,
No song unsung, no wine untasted.

But the tigers come at night
With their voices soft as thunder
As they tear your hope apart
As they turn your dream to shame.

He slept a summer by my side,
He filled my days with endless wonder.
He took my childhood in his stride
But he was gone when autumn came.

And still I dreamed he'd come to me,
That we would live the years together
But there are dreams that can not be
And there are storms we can not weather.

I had a dream my life would be
So different from this hell I'm living,
So different now from what it seemed
Now life has killed the dream I dreamed.

2009年4月24日星期五

服务导向架构(Service-Oriented Architecture,SOA) 簡介

服務導向架構(Service-Oriented Architecture,SOA) 簡介
作者: 曾保彰 / 臺灣大學計算機及資訊網路中心資訊網路組
--------------------------------------------------------------------------------

「以客為尊」的核心概念,提供網路服務單位建構一個具彈性、可重複使用的整合性介面,加速達到網路服務提升的目標。

前言
SOA是一種架構模型,由網站服務技術等標準化元件組成,目的是為企業、學校或提供網路服務單位建構一個具彈性、可重複使用的整合性介面,促進內外部如內部應用程式、用戶、與部門(系所)等相關單位完美的溝通,盡速達到網路服務提升的目標。

何謂SOA?
我們常聴到 Information Technology (IT)產業的架構演進,由1980年代的主機(mainframe)架構,到1990年代的主從式(client server)架構,到1999年時是network centric架構,而到2004年時已複雜到所謂的 Service-Oriented Architecture架構(SOA,服務導向架構) 。此外也常聴到:如果企業不導入這個架構,企業在未來就會沒有競爭力。因此,本文將針對SOA作淺顯的簡介,也希望透過本文的介紹,對於本校網站服務技術(web services) 未來的架構有所幫助。
首先讓我們釐清一些SOA的迷思。正確來說 [1]:

SOA不是新玩意:多年前即有資訊部門或公司成功地用SOA方式來建構、運行應用程式,且當時XML、web service都尚未提出。

SOA不是種技術:它是種建構、組織的方法,用來建立應用程式的運行環境,以及讓學校的業務程式能以「功能化」方式發展、累積。

就算購買最新的XML、web services產品(如開發工具、執行平台、軟體元件等),也不表示就可以建構出SOA式的應用程式。

簡單來說,SOA是一種遵循典範,是針對學校或企業內應用程式的設計、開發、佈建、管理所提出的遵循典範。從資訊技術層面而言,一個執行學校或企業業務的應用程式稱為一個獨立的「邏輯單位」,而對學校或企業營運層面而言則可稱為一項「服務」,在企業的整體運算環境中就存在著多個「獨立邏輯/業務服務」,且需要對其進行妥善設計、開發、佈建、管理等,也因此需要採行服務導向架構(SOA)。

要實現SOA,需要學校或企業的程式設計師改採「持續累積服務」的觀念與角度來開發應用程式,即便這麼做在短時間內看不到顯著好處,程式師還是必須跳脫、超越過往對應用程式的想法,改以「既有服務可否再運用?」或者是「能否沿用其他同仁開發過的服務再建構?」的觀點來面對程式開發。

SOA主張「程式開發技術」與「程式建構方法」的交替並用,以類似傳訊溝通的作法,將數個所需的「業務服務」進行連結,以此來實現一個新的應用程式,而非「從頭開發」。透過適當的程式組構及傳訊式的程式連結,可讓學校或企業快速因應學生或用戶的需求與改變,新的應用程式只要透過「傳訊微調」即可實現,而非「重新撰寫」。

SOA不單只是程式開發的方法論,也提供行政管理層面的依循。例如它並非是以應用程式個體為角度來進行管理,而是直接將過往程式師開發出的程式視為「服務」來管理。而對「服務」間的「互動傳訊」進行分析,SOA便可讓程式設計部門的主管瞭解何時該執行哪個業務邏輯,以及為何要執行,如此資訊管理者與分析師便可對服務程序進行最佳化調適。

SOA如何運作?
SOA服務導向架構是一種新興的系統架構模型,主要概念是針對學校或企業需求組合而成的一組軟體元件。組合的元素通常包括:軟體元件、服務及流程三個部份。當學校或企業面對外部要求時,流程負責定義外部要求的處理步驟;服務包括特定步驟的所有程式元件,而軟體元件則負責執行工作的程式。SOA 已成為現今軟體發展的重要技術,透過 SOA 讓異質系統整合變得容易,程式再使用度也提高。不必自行開發或擁有所有程式元件,發展者可以視其需要組合網路上最好的服務。不受限於特定廠商的產品功能或是平台,達到真正的開放性(Openness)。從分散式元件架構到 SOA概念上,SOA 如同物件導向、軟體元件等軟體技術一般,運用小的零組件組合成應用系統。但 SOA 強調的是如何將彼此關係鬆散的應用系統功能元件在網路上發行、組合及使用。SOA 具有下列技術特性[2]:

分散式架構 (distributed)-SOA 的組成元件是由許多分散在網路上的系統組合而來,可能是區域網路,也可能是來自廣域網路。例如網站服務技術 (web services) 就是運作 HTTP來相互連結的 SOA。如此的作法,也使得網站服務技術很快的就成為所有支援網際網路的系統平台均能使用的技術。

關係鬆散的界面 (loosely coupled)-傳統的系統主要是將應用系統功能需求切割成相互關聯的小零組件:模組、物件或元件,發展者要花費極大的心力了解零組件是如何設計及使用,以確保不會違反零組件連接關係限制。如此一來,若要以不同零組件替換原始設計,就成為一件困難的事。SOA 的作法是以界面標準來組合系統,只要符合界面要求,零組件可以任意替換,大幅提高系統變更的彈性度。

依據開放的標準 (Open standard)-使用開放標準是 SOA 的核心特色,過去的軟體元件平台如 CORBA、DCOM、RMI、J2EE 採用專屬協定作為元件連結的規範,使得不同平台的元件無法相通。SOA 則著重於標準與互動性,將可避免不同平台 (.NET web services 與 Java web services) 開發程式間相互整合的困擾。

以流程角度出發 (process centric)-在建構系統時,首先了解特定工作的流程要求,並將其切割成服務界面(包括輸入與輸出資料格式),如此其他的發展者就可以依據服務界面開發 (或選擇) 合適的元件來完成工作。

最後舉一個學校常用的例子來說明SOA在實際應用上帶來的可能性。假設我們要建立一個線上投稿的網站,網站提供的服務包括了線上投稿作業、論文分派作業、論文審查作業、線上註冊及報名作業等。傳統的方式我們會儘快找一個類似的網站,再儘快將其他類似網站的原始碼(source code)拿來修改,但其他類似網站的原始碼所執行的平台有可能不是架站者所熟悉的作業系統。若要讓架站者作一個客製化,並符合自己投稿主題的線上投稿的網站,可能要熟悉這個平台並修改網頁及測試,再加上別人的網站可能有一些bug,如果要做到毫無問題,除錯時間可能要花上三個月的時間。但是,如果我們導入SOA的架構的話,可能將來只要花費心力將作業服務模組化、物件化或元件化,然後將它們整合到網站中即可,不需要再花費時間和資源自己去維護一個線上投稿的網站,也不需要再自行建立和資料庫連結、報名付款機制等。這個網站就像是建立在SOA上,整合了這些web services元件的一個應用程式系統。更重要的是,透過如http、XML、SOAP 等產業標準開放式協定,不必擔心這些服務使用甚麼平台、甚麼技術來建立,而將來如果有更好的服務或服務提供者時,也可以輕易的將服務更換或更新。對系統開發者來講,可以快速輕鬆的將系統建構完成,將心思專注在規劃更好、更完善的系統上;對服務提供者而言,只要能設計出一個好的服務,它的潛在使用者市場將不再受到使用者平台的限制而有無限的可能。單就這類應用所呈現的美好遠景,應該可以解釋為什麼會到處聽到有人在談論SOA了。

因此 SOA 的實作,就是將所有程式邏輯及服務內容全部包裹在服務內部,並實作一個標準的介面與外部作溝通,這種做法跟傳統的元件導向做法非常類似,唯一的差別是介面定義的方式、資料格式、與溝通管道必須是產業標準 (http、XML、SOAP 等)。 也就是說只要能實作出這樣的介面,不論介面後面是什麼,都可使成為 SOA。
 

結論
綜合以上的介紹,SOA能帶來的幫助,有以下好處:
1.增加企業盈收,或提升學校的服務品質。
2.提供可變動的網路服務型態。
3.降低學校或企業的成本。
4.降低開發服務的時間。
5.整合學校或企業的網路服務技術資源。
6.降低整體風險及意外。
 

參考文獻
[1] http://dev2dev.bea.com.tw/techdoc/07soa/07soa_040812_01.htm
[2] http://www.microsoft.com/taiwan/msdn/columns/soa/SOA_overview_2004112901.htm

2009年4月22日星期三

Word 2007 修正目录页码的方法

问题现象:
目录的页码包含了目录本身,正文从第4页开始,目录上显示的正文第一章节就是第4页,打算变为显示第1页。

解决办法:
Word2003的时候,有插入分节符,重新编码等操作可以解决,到了Word2007,菜单都变成图形化了,原来的方法换了地方,还真有点麻烦。

首先,将光标移动到正文的开始,选择“页面布局”选项卡,选择“分隔符”下拉按钮,选择“分节符”下一页;


然后,选择“插入”选项卡,选择“页码”、“设置页码格式”,页码编号选择起始页码为“1”



最后,选择“页面布局”选项卡点击“页面布局”右下脚的小按钮,在打开的页面上单击“版式”选项卡,在“页眉和页脚”下,选中“首页不同”复选框,然后单击“确定”。



此时,完成了所有设置,在目录页面上更新域即可看到效果。

hosts/host.conf/resolv.conf三个配置文件的区别

这三个文件都位于 /etc/目录下,在这里区分一下

1.hosts文件.

和Windows系统下的host的文件相类似,就是一个文本文件,里面存放一些IP和域名的对应关系。

2.host.conf. #解析器查询顺序配置文件

例:vi /etc/host.conf

order hosts bind 表示先查询本地hosts文件,如果没有结果,再尝试查找BIND dns服务器。

3. resolv.conf

配置Linux系统DNS服务器的配置文件:

vi /etc/resolv.conf

nameserver 192.168.0.1


nameserver 202.99.96.68

ORA-12162: TNS:net service name is incorrectly specified

ORA-12162: TNS:net service name is incorrectly specified

问题现象:

连接数据库时候出现问题了:

[oracle@as3]$ sqlplus “/ as sysdba”

ERROR:

ORA-12162: TNS:net service name is incorrectly specified

Enter user-name: orcl

Enter password:

ERROR:

ORA-12162: TNS:net service name is incorrectly specified



可能问题:

1:~.bash_profile文件中估计没有正确设置ORACLE_SID环境变量
2:检查sqlnet.ora中sqlnet.authentication_services设置
3:用 orapwd 重建密码文件

解决问题:

上面的问题经过检查是由于ORACLE_SID设置引起的,主要是因为在oracle环境变量中,虽然设置了ORACLE_SID,但是没有export引起的。最后在~/.bash_profile中设置export ORACLE_SID,问题解决!

下面是metalink.的解释:

The information in this document.nbspapplies to:

Oracle Server - Enterprise Edition - Version: 10.1.0.3 to 10.1.0.3

This problem can occur on any platform.

Affects most UNIX platforms (not seen on Microsoft Windows due to difference in BEQ communication specifics)

Errors

ORA-12162 "TNS:service name is incorrectly specified"

Symptoms

When trying to connect locally (BEQ) to the database, getting "ORA-12162 error tns:net service nameis incorrectly spelled"

This is unusual because a TNS:Net service name is not being specified, nor is the environement variable TWO_TASK set.

Cause

The user environment variable $ORACLE_SID is not set.

When this is not set, then SQL*Plus use, without a connect string, may result in an ORA-12162 error.

Solution

Add the ORACLE_SID to the .profile for the Oracle user.

This will give the BEQ adapter a route to connect to the instance.

References

2009年4月21日星期二

Verizon:2008年数据泄露多于四年总和

  2008年泄露的电子记录总量比去年四年的总和还要多,而且其中大部分(90%)的泄露都是可以通过持续实施基本的防护性控制避免的。

  Verizon在发布的《2009年Verizon业务数据泄露调查报告》中指出,2008年发生的已经确定的90起数据泄露事件涉及2.85亿份记录,而在2004年到2007年之间发生的数据泄露事件总共涉及2.3亿份记录。

  Verizon调查的数据泄露事件中有大约1/3已经公开,预计今年年底还会有更多事件被公开。

  调查发现:被涉及的记录中有91%的记录与犯罪组织团伙有关;有目的的病毒攻击翻了一番;受到攻击最多的板块是默认证书和SQL注入。

  Verizon业务安全解决方案部门研究副总裁Peter Tuppett表示,这份报告向人们敲响了警钟:企业业务需要更完善的安全和防护措施,尤其是当前的经济危机很可能引发更频繁的犯罪活动。

  不过也有一个好消息,针对个人数据的市场已经瓦解。

  报告指出:“最近几年磁带数据的大量泄露已经泛滥了整个信息黑市,这种市场饱和已经导致磁带信息变得一文不值。甚至出售被盗戏弄卡数据的价格已经从2007年年中的每份记录10~16美元锐减到现在每份记录0.5美元。”

  坏消息是,网络犯罪开始转向盗取和银行账户信息有关的个人身份数字,罪犯可以利用这些数字盗走受害人账户上的现金。

  这就解释了为什么2008年受牵连的2.85亿份记录中有95%都是来自于金融机构。报告中还指出,这主要是因为2008年金融机构发生数据泄露规模之大。

  正如Verizon之前的数据泄露报告一样,大多数受调查的数据泄露事件都是有第三方发现的。这表明企业机构需要对他们自己的数据有更好的监管和控制。

  令人感到以外的是,99%的泄露记录都是通过服务器和应用访问的,而不是笔记本电脑、上网本、手机或者可移动存储介质。

  从报告中中我们可以接受到很多教训。但最主要的一个是持续应用安全策略其实是可以防止大多数数据泄漏事件发生的。

  而且Verizon还给企业机构提供了更具体的建议,比如更改默认证书、避免分享证书、复查用户账户、应用测试和代码复查、智能补丁管理、员工期满终止流程、应用日志和监控、对可以或者匿名网络行为的监控。

Oracle收购Sun七大明智之处

北京时间4月20日,甲骨文和Sun微系统公司联合发表声明,甲骨文以74亿美元收购Sun。国外媒体发表分析文章称,甲骨文收购Sun有7大明智之处:

1,如果云计算对企业来说变得越来越重要,那么数据将是云计算的核心。 而讲到数据,也就意味着数据库。就如塔克商学院数字策略中心主任M. Eric Johnson所说的那样,Sun已经清楚展现了一个真实的云计算环境。就那些将云计算停留在理论阶段的对手来说,收购Sun对甲骨文来说将获得竞争优势。

2,Johnson主任还指出,Sun在很多需求旺盛的方面“保持领先地位”。Sun的技术可以帮助数据库提高性能,尤其是对大型数据库。甲骨文和Sun的结合之后,对任何一个信息官来说都具有吸引力。

3,甲骨文软件和Java的紧密结合,使得甲骨文的软件能跨平台使用。就如IDC研究副总裁Jean Bozman指出那样,真正云计算的第一步是“将服务器和存储单元垂直化”,可以适用于不同的硬件平台。凭借Java,甲骨文可以拓展跨平台的控制力,而这正是企业IT部门想要的。实际上,甲骨文的Oracle Fusion Middleware正是基于Java。

4,有意思的是,Oracle Fusion Middleware扩大了对服务器的需求,其中原因正是由于它是基于Java。而现在,甲骨文通过购得Sun服务器资源,可以进一步降低价格,从而进一步提高Oracle Fusion Middleware的竞争力。

5,由于甲骨文大部分收入来自数据库软件许可,因此有必要的话,可以用便宜的服务器硬件作为促销的手段,这样对那些硬件服务器竞争对手来说是不小的打击。

6,Sun已经售出160万到200万台服务器,还有更多的运行Sun Solaris操作系统的其它公司的服务器。这对甲骨文捆绑销售自家产品也很有帮助。

7,甲骨文收购Sun,当然也包括开源数据库MySQL。对于那些预算不多但又需要甲骨文产品的用户,甲骨文可以用MySQL来满足这些用户的需求。这可以使甲骨文进入中小企业业务,更有机会在这方面超过SAP。此外,还提供了和微软SQLServer的竞争产品,而不需要降低甲骨文自有的产品的定位。

甲骨文和Sun的合作可能会影响甲骨文和一些合作伙伴的关系,比如甲骨文和惠普的关系可能就会出现问题。不过,不像IBM,事实上,每个硬件公司都绕不开甲骨文,因为它是数据库的主力军。他们离不开甲骨文,因此,他们也只能选择忍气吞声。

而且,与Sun和IBM联合不同,甲骨文和Sun不存在硬件的冲突,那些Sun的服务器用户不必担心合并会导致放弃自己在使用的服务器产品线。

总而言之,甲骨文以相对较低的价格收购Sun是明智之举,将会使得合并后的甲骨文成为各大公司数据中心的枢纽。

在Redhat linux AS 4.4下安装oracle 10gR2 过程记录

在Redhat linux AS 4.4下安装oracle 10gR2 过程记录
参考来源:在 Linux x86 上安装 Oracle 数据库 10g
1.硬件要求
1.1 内存至少512M,使用下面的命令检查
grep MemTotal /proc/meminfo
1.2 交换分区 至少1G
grep SwapTotal /proc/meminfo
1.3 /tmp 目录空闲区 至少400M
df -k /tmp 400M
1.4 硬盘空闲区 至少4G
df -k
2. 软件要求
2.1 操作系统,redhat ES/AS 2.1(x86),redhat ES/AS 3(x86)
我的是redhat AS 4.4. 可以使用以下命令检查
cat /etc/issue

2.2 需要安装了以下软件包
Gnu gcc package 至少是
gcc-3.2.3-2
make-3.79
binutils-2.11
openmotif-2.2.2-16
setarch-1.3-1
compat-db-4.0.14.5
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
可以使用以下命令检查:
rpm -q package_name
注意这里的package_name不带任何版本号,例如检查make-3.79
rpm -q make
经查,有个别文件没有安装,安装过程如下:
安装gcc最是麻烦,需要多个前置条件,感觉就想在捋绳头,最后才把gcc拉出来

# glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
# glibc-headers-2.3.4-2.25.i386.rpm
# glibc-devel-2.3.4-2.25.i386.rpm
# gcc-3.4.6-3.i386.rpm

# rpm -ivh compat-db-4.1.25-9.i386.rpm
# rpm -ivh compat-gcc-32-3.2.3-47.3.i386.rpm
# rpm -ivh compat-gcc-32-c++-3.2.3-47.3.i386.rpm
# rpm -ivh compat-libstdc++-33-3.2.3-47.3.i386.rpm

2.3 防火墙软件
如果你不知道具体怎么配置,请禁用. 如何禁用:
关闭防火墙
/etc/rc.d/init.d/iptables stop

3. 创建安装oracle 所需的组和用户
需要的用户是oracle,组是dba,oinstall
可以用界面的方式添加,也可以用命令行的方式
groupadd osinstall
groupadd dba
useradd –g osinstall –G dba oracle
passwd oracle

4. 创建安装安装所需的目录
4.1 Oracle Base 目录/u01/app/oracle
mkdir –p /u01/app/oracle/10g
chown –R oracle:oinstall /u01/app/oracle/10g
chmod –R 755 /u01/app/oracle/10g


4.2 Oracle数据库文件存放目录. 这个可以没有的. 一般设置为/u02/oradata
mkdir –p /u02/oradata
chown –R oracle:oinstall /u02/oradata
chmod –R 755 /u02/oradata
5. 配置内核参数
5.1 用文本编辑器,创建或者编辑/etc/sysctl.conf文件,添加或修改如下的行
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
5.2 改变当前内核参数的值
sysctl -p
6. 检查您的/etc/host.conf 是否含有下面的条目
127.0.0.1 localhost
如果没有的话, oracle 的监听器无法启动

7.为了提高在linux系统上运行软件的性能,必须对oracle用户设置下列shell 限定。
7.1 打开文件数和进程数的限制
加入下面的行到文件/etc/security/limits.conf
   * soft nproc 2047
   * hard nproc 16384
   * soft nofile 1024
   * hard nofile 65536
* 是指对所有的用户和组的限制, Oracle官方文档是这样要求的

7.2 加入下面的行到文件/etc/pam.d/login ,假如它不存在的话
session required /lib/security/pam_limits.so
Oracle 官方网站如此说,但是已经有人发现这个也会造成影响.
我的操作系统版本是Redhat AS 4.4,这步忽略
7.3 根据oracle 用户的默认shell,对默认 shell start-up文件作如下改变.
如果是Bourne, Bash, or Korn shell,修改环境变量/etc/profile文件如下:
if [ \$USER = "oracle" ]; then
   if [ \$SHELL = "/bin/ksh" ]; then
   ulimit -p 16384
   ulimit -n 65536
   else
ulimit -u 16384 -n 65536
fi
fi

如果是c shell,则环境变量文件 /etc/csh.login的修改值如下:
if ( $USER == "oracle" ) then
   limit maxproc 16384
   limit descriptors 65536
endif
RedHat AS4.4 使用的是bash。

8. 为oracle用户设置环境变量,注意以下命令为,必需以oracle用户身分登录
  ●Bash shell,更改.bash_profile,添加以下行
# su oracle -
# vi ~/.bash_profile
   ORACLE_BASE=/u01/app/oracle
ORACLE_SID=ora10g110
   export ORACLE_BASE ORACLE_SID

unset ORACLE_HOME
unset TNS_ADMIN

  ●c shell,更改.login文件,添加以下行
   setenv ORACLE_BASE /u01/app/oracle
   setenv ORACLE_SID **********

9. 确认ORACLE_HOME and TNS_ADMIN 的环境变量不被用户设置 (未设置)
千万不要因为安装过程中的其他错误,而设置这些值
●Bash shell
   unset ORACLE_HOME
   unset TNS_ADMIN
  ●c shell
unsetenv ORACLE_HOME
  unsetenv TNS_ADMIN

10. 准备好安装介质
#10.1 一般我想是网上下载的. 先要解压,保证解压后的目录,拥有者是oracle:osinstall,并且有执行权限
10.2 如果光盘的,要mount上, 一般操作系统是自动mount的.
#mkdir /mnt/vcdrom
#mount -o loop -t iso9660 /home/oracle/RHEL4-U4-i386-AS-with-Oracle10gR2-DVD.iso /mnt/vcdrom

11. /etc/profile 文件最后增加
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/10g

12 安装
12.1 编辑安装需要的应答文件
静默模式(Silent)安装必须指定一个应答文件来完成安装过程所须的各类参数。
在Oracle安装目录的response子目录里有enterprise.rsp有enterprise.rsp、standard.rsp和custom.rsp三个应答文件,分别对应企业版、标准版和定制的安装。
以enterprise.rsp为例,用任意的文本编辑器打它,修改以下这些项目的值。
ORACLE_HOME= Oracle服务器的主目录位置,必须是绝对路径。
ORACLE_HOME_NAME Oracle服务器的名称,必须以字母开头。
COMPONENT_LANGUAGES Oracle服务器支持的语言,默认只有英语,可以添加多个语言。
s_nameForDBAGrp 用于Oracle系统管理的linux用户组名,该组的用户拥有管理Oracle服务器的权限,在本例中设置为 dba。
s_nameForOPERGrp 用于Oracle数据库常规操作的linux用户组名,该组的用户拥有常规操作Oracle数据库的权限,在本例中设置为 oper。
n_configurationOption 安装类型(1为在安装后创建数据库,2为安装后创建一个自动存储管理实例,3为只安装服务器软件),在本例中选择3。
其它项目用默认值即可,也可以根据自己的须要进行修改。

ORACLE_HOME=/u01/app/oracle/10g
ORACLE_HOME_NAME=ora10g110
COMPONENT_LANGUAGES={"en","zh_CN"}
s_nameForDBAGrp="osinstall"
s_nameForOPERGrp="oracle"
n_configurationOption=3


注:如果Oracle从光盘安装,必须先将应答文件复制到硬盘上,才能修改。本例就是将enterprise.rsp拷贝到$HOME/oracle目录

12.2 开始安装
现在万事具备,可以安装了。
用oracle用户登录,然后在Oracle安装目录里执行
# /mnt/vcdrom/Oracle10gR2/runInstaller -silent -responseFile <应答文件的绝对路径>
因为是挂载的镜像,所以必须使用这种方式,否则,如果从光盘上的安装目录,提示错误。

接下来就是等待安装结束了。
各安装参数的含义如下
ignoreSysPrereqs 让Oracle忽略系统检查,因为Oracle官方声明只支持Linux服务器产品,所以要在非服务器产品的Linux上安装就必须指定此参数。
silent 让安装程序以静默模式运行。
responseFile 指定一个应答文件。

安装过程顺利完成,至此,刚刚将数据库软件安装到系统里。
下面的内容摘录自安装过程的控制台显示:
=======================================================================
PrereqChecks complete

.......................................... 100% Done.


-----------------------------------------------------------------------------
Summary
Global Settings
Source: /mnt/vcdrom/Oracle10gR2/stage/products.xml
Oracle Home: /u01/app/oracle/10g (ora10g110)
Installation Type: Enterprise Edition
Product Languages
English
Simplified Chinese
Space Requirements
/ Required 1.38GB (includes 108MB temporary) : Available 23.07GB
New Installations (107 products)
Oracle Database 10g 10.2.0.1.0
Enterprise Edition Options 10.2.0.1.0
Oracle Partitioning 10.2.0.1.0
Oracle Spatial 10.2.0.1.0
Oracle OLAP 10.2.0.1.0
Oracle Enterprise Manager Console DB 10.2.0.1.0
Oracle Net Services 10.2.0.1.0
Oracle Database 10g 10.2.0.1.0
Oracle Net Listener 10.2.0.1.0
HAS Files for DB 10.2.0.1.0
Oracle Internet Directory Client 10.2.0.1.0
Oracle Call Interface (OCI) 10.2.0.1.0
Oracle Programmer 10.2.0.1.0
Oracle interMedia 10.2.0.1.0
Enterprise Manager Agent Core 10.2.0.1.0
Oracle JVM 10.2.0.1.0
Database Configuration and Upgrade Assistants 10.2.0.1.0
Oracle interMedia Locator 10.2.0.1.0
Oracle XML Development Kit 10.2.0.1.0
Oracle Text 10.2.0.1.0
Oracle Database Utilities 10.2.0.1.0
Generic Connectivity Common Files 10.2.0.1.0
Oracle Advanced Security 10.2.0.1.0
Enterprise Manager Repository Core 10.2.0.1.0
PL/SQL 10.2.0.1.0
Oracle Net 10.2.0.1.0
Assistant Common Files 10.2.0.1.0
Enterprise Manager plugin Common Files 10.2.0.1.0 Beta
Buildtools Common Files 10.2.0.1.0
Installation Common Files 10.2.0.1.0
Oracle LDAP administration 10.2.0.1.0
Oracle Java Client 10.2.0.1.0
Precompiler Common Files 10.2.0.1.0
Oracle Recovery Manager 10.2.0.1.0
SQL*Plus 10.2.0.1.0
iSQL*Plus 10.2.0.1.0
Enterprise Manager plugin Common Files 10.2.0.1.0
HAS Common Files 10.2.0.1.0
Oracle Clusterware RDBMS Files 10.2.0.1.0
Oracle Wallet Manager 10.2.0.1.0
Enterprise Manager Minimal Integration 10.2.0.1.0
Oracle Database User Interface 2.2.13.0.0
Secure Socket Layer 10.2.0.1.0
Oracle ODBC Driver 10.2.0.1.0
Required Support Files 10.2.0.1.0
Database SQL Scripts 10.2.0.1.0
OLAP SQL Scripts 10.2.0.1.0
PL/SQL Embedded Gateway 10.2.0.1.0
Oracle Globalization Support 10.2.0.1.0
Character Set Migration Utility 10.2.0.1.0
LDAP Required Support Files 10.2.0.1.0
Oracle Help for the Web 1.1.10.0.0
Oracle JDBC Thin Driver for JDK 1.4 10.2.0.1.0
Oracle JDBC Thin Driver for JDK 1.2 10.2.0.1.0
Oracle interMedia Client Option 10.2.0.1.0
Oracle Notification Service 10.1.0.3.0
Oracle Code Editor 1.2.1.0.0I
Perl Interpreter 5.8.3.0.2
JDBC Common Files 10.2.0.1.0
Oracle Locale Builder 10.2.0.1.0
Oracle Containers for Java 10.2.0.1.0
Database Workspace Manager 10.2.0.1.0
Oracle Core Required Support Files 10.2.0.1.0
Platform Required Support Files 10.2.0.1.0
Oracle interMedia Locator RDBMS Files 10.2.0.1.0
Oracle JDBC/OCI Instant Client 10.2.0.1.0
Oracle interMedia Annotator 10.2.0.1.0
SQLJ Runtime 10.2.0.1.0
Oracle interMedia Java Advanced Imaging 10.2.0.1.0
Oracle Database 10g interMedia Files 10.2.0.1.0
Oracle Data Mining RDBMS Files 10.2.0.1.0
Enterprise Manager Baseline 10.2.0.1.0
Oracle Help For Java 4.2.6.1.0
Oracle UIX 2.1.22.0.0
XML Parser for Java 10.2.0.1.0
Precompiler Required Support Files 10.2.0.1.0
XML Parser for Oracle JVM 10.2.0.1.0
Oracle Message Gateway Common Files 10.2.0.1.0
Oracle Starter Database 10.2.0.1.0
Sample Schema Data 10.2.0.1.0
Parser Generator Required Support Files 10.2.0.1.0
Agent Required Support Files 10.2.0.1.0
Oracle RAC Required Support Files-HAS 10.2.0.1.0
RDBMS Required Support Files 10.2.0.1.0
RDBMS Required Support Files for Instant Client 10.2.0.1.0
XDK Required Support Files 10.2.0.1.0
Oracle OLAP API 10.2.0.1.0
Oracle OLAP RDBMS Files 10.2.0.1.0
DBJAVA Required Support Files 10.2.0.1.0
SQL*Plus Required Support Files 10.2.0.1.0
Oracle JFC Extended Windowing Toolkit 4.2.33.0.0
Oracle Ice Browser 5.2.3.6.0
Oracle Display Fonts 9.0.2.0.0
Oracle Extended Windowing Toolkit 3.4.38.0.0
Enterprise Manager Common Files 10.2.0.1.0
Enterprise Manager Agent DB 10.2.0.1.0
Oracle Net Required Support Files 10.2.0.1.0
Enterprise Manager Repository DB 10.2.0.1.0
SSL Required Support Files for InstantClient 10.2.0.1.0
regexp 2.1.9.0.0
Bali Share 1.1.18.0.0
Oracle Universal Installer 10.2.0.1.0
Oracle One-Off Patch Installer 10.2.0.1.0
Installer SDK Component 10.2.0.1.0
Java Runtime Environment 1.4.2.8.0
Sun JDK 1.4.2.0.8
Sun JDK extensions 10.1.2.0.0
-----------------------------------------------------------------------------


Installation in progress (Tue Apr 21 20:40:02 CST 2009)
............................................................... 18% Done.
............................................................... 36% Done.
............................................................... 54% Done.
............................................................... 72% Done.
................ 76% Done.
Install successful

Linking in progress (Tue Apr 21 20:47:05 CST 2009)
Link successful

Setup in progress (Tue Apr 21 20:48:56 CST 2009)
.............. 100% Done.
Setup successful

End of install phases.(Tue Apr 21 20:49:04 CST 2009)
WARNING:A new inventory has been created in this session. However, it has not yet been registered as the central inventory of this system.
To register the new inventory please run the script '/home/oracle/oraInventory/orainstRoot.sh' with root privileges.
If you do not register the inventory, you may not be able to update or patch the products you installed.

The following configuration scripts
/u01/app/oracle/10g/root.sh
need to be executed as root for configuring the system. If you skip the execution of the configuration tools, the configuration will not be complete and the product wont function properly. In order to get the product to function properly, you will be required to execute the scripts and the configuration tools after exiting the OUI.

The installation of Oracle Database 10g was successful.
Please check '/home/oracle/oraInventory/logs/silentInstall2009-04-21_08-38-46PM.log' for more details.

Linux下挂载ISO镜像为虚拟磁盘

挂接命令(mount)
  首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。

  命令格式:

  mount [-t vfstype] [-o options] device dir

  其中:

  1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:

  光盘或光盘镜像:iso9660

  DOS fat16文件系统:msdos

  Windows 9x fat32文件系统:vfat

  Windows NT ntfs文件系统:ntfs

  Mount Windows文件网络共享:smbfs

  UNIX(LINUX) 文件网络共享:nfs

  2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有:

  loop:用来把一个文件当成硬盘分区挂接上系统

  ro:采用只读方式挂接设备

  rw:采用读写方式挂接设备

  iocharset:指定访问文件系统所用字符集

  3.device 要挂接(mount)的设备。

  4.dir设备在系统上的挂接点(mount point)。

  挂接光盘镜像文件

  由于近年来磁盘技术的巨大进步,新的电脑系统都配备了大容量的磁盘系统,在Windows下许多人都习惯把软件和资料做成光盘镜像文件通过虚拟光驱来使用。这样做有许多好处:一、减轻了光驱的磨损;二、现在硬盘容量巨大存放几十个光盘镜像文件不成问题,随用随调十分方便;三、硬盘的读取速度要远远高于光盘的读取速度,CPU占用率大大降低。其实linux系统下制作和使用光盘镜像比Windows系统更方便,不必借用任何第三方软件包。


光盘镜像文件的挂接(mount)

   #mkdir /mnt/vcdrom

   注:建立一个目录用来作挂接点(mount point)

   #mount -o loop -t iso9660 /** /mydisk.iso /mnt/vcdrom 如:#mount -o loop -t iso9660 /usr/local/tooldisk/mydisk3.iso /mnt/vcdrom

   注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。在这之前要先挂载你的*.ISO文件

比如在有E盘,文件为NTFS格式,当然挂载点mkdir /mnt/vcdrom要存在,要不先建立挂载点:mkdir /mnt/vcdrom 然后挂载文件:mount -t ntfs /dev/hda6 /mnt/vcdrom

用df -lh命令查看/mnt/e是否挂载了。如果有多张ISO像镜文件要连继挂载安装。。就要先卸载文件先挂载的ISO像镜:umount /usr/local/tooldisk

再挂载mount -o loop -t iso9660 /usr/local/tooldisk/mydisk4.iso /mnt/vcdrom 依此类推...
如你现在安装在第三张光盘像镜完毕后提示放入第4张。这个时候你要先先卸载文件先挂载的ISO像镜mydisk3.iso 再挂载mount -o loop -t iso9660 /usr/local/tooldisk/mydisk4.iso /mnt/vcdrom 再确定提示对话框。

SQL Server 2005数据库置疑状态的修复

重起服务器的时候遭遇了数据库置疑状态,在网上查找帖子,发现都是针对SQL2000的,不过借助这个原理,转换了一下SQL语句,成功解决,使用的脚本如下:

这个脚本适应于日志损坏的情况,在SQL Log里有如下信息:
反映的是日志状态不对。

Recovery of database 'SuspectDB' (5) is 96% complete (approximately 0 seconds remain). Phase 3 of 3. This is an informational message only. No user action is required.
SQL Server detected a DTC/KTM in-doubt transaction with UOW {D5141B98-7BB7-4D42-BF0D-F294CB378AB7}.Please resolve it following the guideline for Troubleshooting DTC Transactions.
错误: 3437,严重性: 21,状态: 3。
An error occurred while recovering database 'SuspectDB'. Unable to connect to Microsoft Distributed Transaction Coordinator (MS DTC) to check the completion status of transaction (0:32748311). Fix MS DTC, and run recovery again.
错误: 3414,严重性: 21,状态: 2。
An error occurred during recovery, preventing the database 'SuspectDB' (database ID 5) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.



alter database SuspectDB set emergency
go
alter database SuspectDB set single_user with rollback immediate
go
use master
go
alter database SuspectDB Rebuild Log on
(name=SuspectDB_log,filename='D:\Log\SuspectDB_log.LDF')
go
alter database SuspectDB set multi_user
go

DBCC CHECKDB('SuspectDB')
go

2009年4月16日星期四

如何重命名 SQL Server 故障转移群集实例

如果 SQL Server 实例包括在故障转移群集中,则重命名虚拟服务器的过程不同于重命名独立实例的过程。有关详细信息,请参阅如何重命名承载 SQL Server 独立实例的计算机。

虚拟服务器的名称始终与 SQL 网络名称(SQL 虚拟服务器的网络名称)相同。尽管您可以更改虚拟服务器的名称,但不能更改实例名。例如,您可以将名为 VS1\instance1 的虚拟服务器更改为其他名称(例如 SQL35\instance1),但是名称的实例部分 (instance1) 将保持不变。

开始重命名进程之前,请阅读下列各项。

除了在复制时使用日志传送的情况之外,SQL Server 不支持对复制所涉及的服务器进行重命名。如果主服务器永久丢失连接,则可以重命名日志传送中的辅助服务器。有关详细信息,请参阅复制和日志传送。

当您重命名被配置为使用数据库镜像的虚拟服务器时,必须在进行重命名操作之前先关闭数据库镜像,然后用新的虚拟服务器名称重新建立数据库镜像。数据库镜像的元数据将不会自动更新来反映新的虚拟服务器名称。

重命名虚拟服务器
使用群集管理器将 SQL 网络名称更改为新名称。

使网络名称资源脱机。这将使 SQL Server 资源和其他相关资源也脱机。

使 SQL Server 资源重新联机。

验证重命名操作
虚拟服务器被重命名之后,任何使用旧名称的连接现在都必须使用新名称来连接。

若要验证重命名操作是否已完成,请从 @@servername 或 sys.servers 中选择信息。@@servername 函数将返回新的虚拟服务器名称,sys.servers 表将显示新的虚拟服务器名称。若要验证故障转移过程是否能够使用新名称正常工作,用户还应尝试将 SQL Server 资源故障转移到其他节点。

对于从群集中任何节点进行的连接,都可以立即使用新名称。但是,对于从客户端计算机使用新名称进行的连接,则必须在新名称对该客户端计算机可见之后,才能使用新名称连接到服务器。根据网络配置,通过网络传播新名称所需的时间长度可能为几秒钟,也可能长至 3 到 5 分钟;旧的虚拟服务器名称在网络上不再可见也可能会需要一些时间。

若要最小化虚拟服务器重命名操作的网络传播延迟,请使用下列步骤:

最小化网络传播延迟
在服务器节点上从命令提示符发出下列命令:

ipconfig /flushdns
ipconfig /registerdns
nbtstat –RR

2009年4月15日星期三

推荐Windows平台上的日志分析挖掘工具LogParser

Log Parser是日志分析利器,目前最新版本是2.2。
它支持多种日志格式,分析效率极高,可以输出多种格式的图表;
支持标准SQL 查询,可以混合使用文件对象、日志源,功能非凡。

该工具完全免费,从微软网站上就可以获取,另有可爱的网友将原命令行工具包装了可视化界面--Log Parser Lizard

还有一个Visual Log Parser

功能差不多,凭各位喜好了。

LogParser里面使用的SQL语言基本是标准的,但是跟其他数据库里的函数稍有差异。
比如,SQL Server里获取当前日期的函数是getdate(),而这里使用的是SYSTEM_TIMESTAMP,这些在安装的帮助里有非常详细的介绍,稍微对比一下,很快就会掌握的。

2009年4月13日星期一

镜像数据库故障切换后的发布订阅延续问题

问题:
主体服务器A,镜像服务器B,2台服务器上的数据库DB_Mirror已经配置成镜像。
主题服务器A上已经新建了发布DB_Mirror_Repl,节点服务器C已经成功订阅了这个发布。
请问如何在发生故障转移的时候,节点服务器C继续能从镜像服务器B上同步过来数据。

参考答案:
有两个方案可以参考:
1. 暂时摒弃SQL的发布订阅机制,使用TableDiff等追差异工具定时运行,以保障数据同步。
本方案的主要应用场景是,服务器A和服务器B的硬件配置不对等,当发生切换的时候,DBA需要争取时间修复服务器A,等修好后再切换回服务器A。

2. 配置服务器A到C的复制过程中,将各个环节的脚本妥善保管,并针对服务器B进行相应修改,当切换发生后,在服务器B上应用脚本,实现快速配置发布订阅关系,中间可以借助TableDiff弥合数据差异,并跳过发布订阅初始化的漫长过程,达到快速恢复的目的。
本方案的应用场景是,服务器AB硬件配置相当,切换回去以A为主不是必须的情况。

微软官方文档说可以支持镜像服务器配置复制,有空研究一下
http://technet.microsoft.com/zh-cn/library/ms151799(SQL.90).aspx

镜像数据库本身是基于数据库的,不是基于服务器的,所以,超出镜像数据库本身的对象都要在第二服务器上创建,比如login,链接服务器、jobs等等,这些细节的关注是在故障发生时快速修复的
前提条件。

塑料瓶底的数字含义

  看数字区别使用塑料瓶  

许多饮料瓶、矿泉水瓶的底部都有一个带有箭头的三角形标志,里面标有数字,不同的数字代表不同的材料。  
“01”———PET(聚对苯二甲酸乙二醇酯)  

矿泉水瓶、碳酸饮料瓶都是用这种材质做成的。董金狮指出,饮料瓶不能循环使用装热水,这种材料耐热至70℃,只适合装暖饮或冻饮,装高温液体或加热则易变形,有对人体有害的物质溶出。科学家发现,这种塑料制品用了10个月后,可能释放出致癌物,对人体具有毒性。因此,饮料瓶等用完了就丢掉,不要再用来作为水杯,或者用来做储物容器盛装其他物品。  

“02”———HDPE(高密度聚乙烯)  

承装清洁用品、沐浴产品的塑料容器,目前超市和商场中使用的塑料袋多是此种材质制成,可耐110℃高温,标明食品用的塑料袋可用来盛装食品。承装清洁用品、沐浴产品的塑料容器可在小心清洁后重复使用,但这些容器通常不好清洗,残留原有的清洁用品,变成细菌的温床,清洁不彻底,最好不要循环使用。  

“03”———PVC(聚氯乙烯)  

据介绍,这种材质的塑料制品易产生的有毒有害物质来自于两个方面,一是生产过程中没有被完全聚合的单分子氯乙烯,二是增塑剂中的有害物。这两种物质在遇到高温和油脂时容易析出,有毒物随食物进入人体后,容易致癌。目前,这种材料的容器已经比较少用于包装食品。如果在使用,千万不要让它受热。  

“04”———LDPE(低密度聚乙烯)  

保鲜膜、塑料膜等都是这种材质。耐热性不强,通常,合格的PE保鲜膜在温度超过110℃时会出现热熔现象,会留下一些人体无法分解的塑料制剂。并且,用保鲜膜包裹食物加热,食物中的油脂很容易将保鲜膜中的有害物质溶解出来。因此,食物入微波炉,先要取下包裹着的保鲜膜。  

05”———PP(聚丙烯)  

微波炉餐盒采用这种材质制成,耐130℃高温,透明度差,这是唯一可以放进微波炉的塑料盒,在小心清洁后可重复使用。需要特别注意的是,一些微波炉餐盒,盒体以05号PP制造,但盒盖却以06号PS(聚苯乙烯))制造,PS透明度好,但不耐高温,所以不能与盒体一并放进微波炉。为保险起见,容器放入微波炉前,先把盖子取下。  

“06”———PS(聚苯乙烯)  

这是用于制造碗装泡面盒、发泡快餐盒的材质。又耐热又抗寒,但不能放进微波炉中,以免因温度过高而释出化学物。并且不能用于盛装强酸(如柳橙汁)、强碱性物质,因为会分解出对人体不好的聚苯乙烯。因此,您要尽量避免用快餐盒打包滚烫的食物。  

“07”———PC及其他类  

PC是被大量使用的一种材料,尤其多用于制造奶瓶、太空杯等。近年来,奶瓶因为含有双酚A而备受争议。专家指出,理论上,只要在制作PC的过程中,双酚A百分百转化成塑料结构,便表示制品完全没有双酚A,更谈不上释出。只是,若有小量双酚A没有转化成PC的塑料结构,则可能会释出而进入食物或饮品中。PC中残留的双酚A,温度愈高,释放愈多,速度也愈快。因此,不应以PC水瓶盛热水。如果容器有任何摔伤或破损,建议停止使用,因为塑料制品表面如果有细微的坑纹,容易藏细菌。避免反复使用已经老化的塑料器具。

如何准备MCITP考试

如何准备MCITP考试
微软的数据库认证数据库考试分为三个方向:数据库开发、数据库管理、商务智能。
http://www.microsoft.com/learning/mcp/mcitp/sql/2008/default.mspx

虽然SQL 2005出来都有四年了,但是针对认证的书籍到现在都没有出中文版,也没有正式引进英文版,能够见到的就是英文原版进口,按美元计算的,折合人民币500元以上。网上书店打折完了有160元左右。

纸制书籍携带不方便,上班时间也不能光明正大摊在桌子上看,所以我直接看电子版了。

目前市面上和网络上都没有2005升级到2008的考试教材70-453,看来升级到2008的考试只好等等再考了。

言归正传,准备考试一定要能坚持。

见缝插针
工作以后最大的问题就是时间的不连续性,每天可以连续支配的时间很短,这就要求我们能随时插空看书,随时记录学习进度,这样步步为营的做法,可以增加备考的信心。我就在电脑上写了个文本文件,每次作笔记的时候,都会打上时间戳,而且会经常翻看以前的记录,在巩固的旧知识的同时,可以总结学习时间的密度,如果中断的时间较长,就回顾一下原因,提高下面的学习密度。

学而时习之。
技术方面的学习都要理论结合实践,对于微软教材中的课中实践,一定要搭建环境,实际验证,这样印象会非常深刻。在准备70-443的考试过程中,我们正在把全站数据库从SQL2000升级到2008,从书中学到的冗余方案提示的升级步骤,在实际升级中起了指导作用。
我在实践了镜像数据库(Mirror DB)之后,把升级换下的机器进行了规划,指导其他同事将原来使用日志传送(Log Shipping)实现的技术支持部门使用的只读数据库成功升级成了使用镜像数据库结合快照(SnapShot)的只读系统,在满足需要的同时,提高了网站数据库的容灾等级。

每课后面的Review问题一定要作,这样可以检验对当课的掌握情况。要把自己作的答案记录到笔记里,以便日后复习。教材后面答案非常详细,为什么错,为什么对,都有详细描述,作题之后要对答案,这样可以加深印象。
对于每章的场景练习也要认真思考,里面的案例在实际工作中也会遇到,可以把这些当做演习。

不放过任何细节
微软的认证教材里有些例子很好,有些就是考试题目,比如这次就遇到了一个问题,为用户设计Truncate Table权限问题,教材里提示说用EXECUTE AS实现,当时觉得很新颖,印象也比较深,而考试也出了这个题目。

温故而知新
每章节后面都有Summary,用来总结该章节的内容。在复习的时候,即使时间再紧,也要把这段精华好好看看,可以起到提纲挈领的作用。

种花得柳
在准备考试的这段时间里,我的电脑一般会有三个进程同时开着,一个是Foxit reader,一个是金山词霸,还有一个是gvim。

因为看的是英文版的pdf文件,所以开Foxit作为浏览器,词霸用来查单词,同时将生词加入生词本,开gvim是用来作笔记的,这个工具是Windows平台上对应unix平台的vi的编辑器,功能非常强大。
通过了这个考试,不光多了两个证书,增加了词汇量,还掌握了一样新编辑软件的基本使用方法(基本用法见博客里的其他帖子)。可谓是有心种花花满园,顺带载柳柳成荫……

2009年4月12日星期日

终于考过了微软数据库认证MCITP:DBA SQL2005


今天(2009.4.10)是个值得庆祝的日子,历时7个月,终于把MCITP:DBA SQL2005的认证考试通过了。

虽然只有三门,但是工作的原因,考试时间一拖再拖,不管怎样,终于过了!

说说考认证的意义吧,主要有两点:

第一,考认证可以相对全面的掌握SQL Server

虽然现在所处的公司有200多台SQL Server DB服务器,业务模块有几十个,SQL的各种特性也有很多应用,但是,对SQL Server的功能的覆盖也仅有70%左右。而通过考数据库认证的方式,可以比较全面的了解SQL Server特性,也可以获得很多微软推荐的标准做法,这样对于掌握SQL Server体系结构和提高工作效率,相对于日常应用中撞到哪里,研究哪里,以及用摸石头过河解决问题要有效的多!

第二,考认证可以作为敲门砖

对于没有相应工作经验的求职者来说,虽然过了认证还会有很多公司不录用,这个跟公司的实际情况有关,但是,只要是认真准备考试,凭真才实学通过认证的人,在任何一次应聘都会胸有成竹!
对于已经有丰富经验的DBA来说,通过考试同样可以作为身份的认定,可以成为比较有说服力的依据!

2009年4月7日星期二

关于菜百的以旧换新--款式限制

去年结婚的时候在菜百买了一对结婚对戒,是铂金协会推荐的光圈款式,当时了解到菜百有以旧换新的业务,就放心的购买了。

现在国际金价下跌了很多,国内首饰价格也随之下跌,从菜百网站上查得铂金只有338元/克(2009.4.6),于是跟老婆商量去换对新一点的对戒。

在菜百柜台上得知,不能更换对戒,要换只能换单戒,自己去配对,要换对戒必须换非当年的旧款,因为他们的对戒只有铂金协会推荐的品种。
当时只是被告知换的时候分量只能重不能轻,要按克收一定比例的加工费(20元)。如今才知道还有这样的规则。

买的不如卖的精啊,我们看好的一对扁形的光圈,那是他们的主推款式,象其他所有光圈一样,每年都是关注焦点,而我们只能望戒兴叹了,因为这款永远不会成为旧款,我们也永远不能以旧换新的购买它!

郁闷~

2009年4月6日星期一

Linux文件查找命令find,xargs详述

Linux文件查找命令find,xargs详述

来自:LinuxSir.Org
整理:北南南北
摘要: 本文是find 命令的详细说明,可贵的是针对参数举了很多的实例,大量的例证,让初学者更为容易理解;本文是zhyfly兄贴在论坛中;我对本文进行了再次整理,为方便大家阅读;

目录

版权声明
前言:关于find命令

一、find 命令格式
1、find命令的一般形式为;
2、find命令的参数;
3、find命令选项;
4、使用exec或ok来执行shell命令;

二、find命令的例子;

1、查找当前用户主目录下的所有文件;
2、为了在当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;
5、为了查找系统中所有属于root组的文件;
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件
7、为了查找当前文件系统中的所有目录并排序;
8、为了查找系统中所有的rmt磁带设备;
三、xargs
四、find 命令的参数;

1、使用name选项
2、用perm选项
3、忽略某个目录
4、使用find查找文件的时候怎么避开某个文件目录
5、使用user和nouser选项
6、使用group和nogroup选项
7、按照更改时间或访问时间等查找文件
8、查找比某个文件新或旧的文件
9、使用type选项
10、使用size选项
11、使用depth选项
12、使用mount选项
五、关于本文
六、相关文档


+++++++++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++++++++



版权声明


本文是zhyfly兄贴在LinuxSir.Org 的一个帖子而整理出来的,如果您对版权有疑问,请在本帖后面跟帖。谢谢;本文的HTML版本由北南南北整理;修改了整篇文档的全角及说明文字中的单词中每个字母空格的问题;为标题加了编号,方便大家阅读;

前言:关于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 命令的详细说明,可贵的是针对参数举了很多的实例,大量的例证,让初学者更为容易理解;本文是zhy2111314兄贴在论坛中;我对本文进行了再次整理,为方便大家阅读; ── 北南南北

六、相关文档

2009年4月4日星期六

重新注册系统所有DLL文件

重新注册系统所有DLL文件

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1

vim中缩进与空格的设置

vim中缩进与空格的设置

shiftwidth:这个是用于程序中自动缩进所使用的空白长度指示的。一般来说为了保持程序的美观,和下面的参数最好一致。同时它也是>>或者《符号移位长度的制定者。

2 tabstop:定义tab所等同的空格长度,一般来说最好设置成8,因为如果是其它值的话,可能引起文件在打印之类的场合中看起来很别扭。除非你设置了 expandtab模式,也就是把tabs转换成空格,这样的话就不会一起混淆,不过毕竟制表符为8是最常用最普遍的设置,所以一般还是不要改。

3 softtabstop 如果我们希望改变程序中的缩进怎么办?shiftwidth和tabstop不一样的话,你会发现程序比较难看的。这时候,softtabstop就起作 用了。可以从vim的说明中看到,一旦设置了softtabstop的值时,你按下tab键,插入的是空格和tab制表符的混合,具体如何混合取决于你设 定的softtabstop,举个例子,如果设定softtabstop=8,那么按下tab键,插入的就是正常的一个制表符;如果设定 softtabstop=16,那么插入的就是两个制表符;如果softtabstop=12,那么插入的就是一个制表符加上4个空格;如果 softtabstop=4呢?那么一开始,插入的就是4个空格,此时一旦你再按下一次tab,这次的四个空格就会和上次的四个空格组合起来变成一个制表 符。换句话说,softtabstop是“逢8空格进1制表符”,前提是你tabstop=8。

灵活操作 Vim 中的 Tabs

灵活操作 Vim 中的 Tabs

iuVim 支持 Tabs,也就是标签页编辑,很爽~
操作标签页的基本命令如下:
:tabnew : 打开一个新的标签页。
:tabprevious : 回到上一个标签页。
:tabnext : 到下一个标签页。
但是每次新建或者切换标签,都要打上这么一长串的命令,实在是麻烦,我们可以在配置文件中设置一下快捷键,如下:
:map :tabprevious
:map :tabnext
:map ^T :tabnew
:imap :tabpreviousi
:imap :tabnexti
:imap ^T :tabnewi
这样 F5 是向前,F6 是向后,Ctrl+t 是打开新的标签页,在插入模式下,也管用~ 当然你可以把上面的设置换成你习惯的键位~
不过,打开新标签页,每次都打开一个空白的标签页,然后再去选择文件,似乎有点折腾,如果新打开的标签页中显示当前目录下的文件,可以从中选择,那就好了~
实现很简单,在 :tabnew 后面给出目录名就可以了,当前目录的话,是 .:
:map :tabprevious
:map :tabnext
:map ^T :tabnew .
:imap :tabpreviousi
:imap :tabnexti
:imap ^T :tabnew .i
你也可以把 '.' 替换成你常用的目录~
这样做个小的改动,标签页比原来方便了不少~

2009年4月3日星期五

创建以当前日期命名的目录

md "D:\%date:~0,-4%"

比如今天创建的目录就是 D:\2009-04-03