??xml version="1.0" encoding="utf-8" standalone="yes"?> Linux基础知识
Linux基础知识 李甬 整理?006.5 Linux与其他操作系l的区别 Linux下的目录?br />
/ package com;
class splitstring {
private String str;
private int bytenum;
public splitstring() {
}
public splitstring(String str, int bytenum) {
this.str = str;
this.bytenum = bytenum;
}
public void splitit() {
byte bt[] = str.getBytes();
if (bytenum > 1) {
if(bt[bytenum]<0){
String str=new String(bt,0,--bytenum);
System.out.print(str);
}else{
String str=new String(bt,0,bytenum);
System.out.print(str);
}
} else {
if(bytenum==1){
if(bt[bytenum]<0){
String str=new String(bt,0,++bytenum);
System.out.print(str);
}else{
String str=new String(bt,0,bytenum);
System.out.print(str);
}
}else{
System.out.print("错误");
}
}
}
}
public class Test {
public static void main(String arg[]) {
String str = "我abcd汉def";
int num = 7;
splitstring sptstr = new splitstring(str, num);
sptstr.splitit();
}
}
输出为:(x)我abcd
]]>
1. if elseif else用法:
<s:if test="%{false}%">
</s:if>
<s:elseif test="%{false}%">
</s:elseif>
<s:else>
</s:else>
]]>
Linux最早是p兰赫?dng)辛基大学一位叫Linus Torvalds的学生设计的.它是一套免费用和自由传播?br />
cNUIXpȝ,源代码开?能在各类gq_(包括Intel x86pd和RISC处理?上运?
Linux受广大计机爱好者喜q原因:
1.Linux在pc计算Z实现了全部的UNIXҎ(gu)?h多Q?多用L(fng)能力,而且在很多方面相当稳定高?
2.Linux属于自由软g,用户不需要支付Q何费用就可以获得它及(qing)其它的原代码,q可以对它进行须?无偿使用?无约束传?
Linuxh以下主要Ҏ(gu):(x)
开放?br />
开放性是指系l遵循世界标准规范,特别是遵循开攄l互q(OSIQ国际标准。凡遵@国际标准所开发的g和YӞ都能彼此兼容Q可方便地实Cq?
多用?br />
多用h指系l资源可以被不同用户各自拥有使用Q即每个用户对自q资源Q例如:(x)文g、设备)有特定的权限Q互不媄响。Linux和Unix都具有多用户的特性?
多Q?br />
多Q务是C计算机的最主要的一个特炏V它是指计算机同时执行多个程序,而且各个E序的运行互相独立。Linuxpȝ调度每一个进E^{地讉K微处理器。由于CPU的处理速度非常快,其结果是Q启动的应用E序看v来好像在q行q行。事实上Q从处理器执行一个应用程序中的一l指令到Linux调度微处理器再次q行q个E序之间只有很短的时间gq,用户是感觉不出来的?
良好的用L(fng)?br />
Linux向用h供了两种界面Q?用户界面和系l调用?br />
Linux的传l用L(fng)面是Z文本的命令行界面Q即shellQ它既可以联Z用,又可存在文g上脱Z用。shell有很强的E序设计能力Q用户可方便地用它编制程序,从而ؓ(f)用户扩充pȝ功能提供了更高的手Dc(din)可~程Shell是指多条命令组合在一P形成一个ShellE序Q这个程序可以单独运行,也可以与其他E序同时q行?
pȝ调用l用h供编E时使用的界面。用户可以在~程时直接用系l提供的pȝ调用命o(h)。系l通过q个界面为用L(fng)序提供低U、高效率的服务?
Linuxqؓ(f)用户提供了图形用L(fng)面。它利用鼠标、菜单、窗口、滚动条{设施,l用户呈C个直观、易操作、交互性强的友好的囑Ş化界面?
讑֤独立?br />
讑֤独立性是指操作系l把所有外部设备统一当作成文件来看待Q只要安装它们的驱动E序QQ何用户都可以象用文件一P操纵、用这些设备,而不必知道它们的具体存在形式?
h讑֤独立性的操作pȝQ通过把每一个外围设备看作一个独立文件来化增加新讑֤的工作。当需要增加新讑֤时、系l管理员在内核中增加必要的q接。这U连接(也称作设备驱动程序)保证每次调用讑֤提供服务Ӟ内核以相同的方式来处理它们。当新的?qing)更好的外设被开发ƈ交付l用hQ操作允许在q些讑֤q接到内核后Q就能不受限制地立即讉K它们。设备独立性的关键在于内核的适应能力。其他操作系l只允许一定数量或一定种cȝ外部讑֤q接。而设备独立性的操作pȝ能够容纳LU类?qing)Q意数量的讑֤Q因为每一个设备都是通过其与内核的专用连接独立进行访问?
Linux是具有设备独立性的操作pȝQ它的内核具有高度适应能力Q随着更多的程序员加入Linux~程Q会(x)有更多硬件设备加入到各种Linux内核和发行版本中。另外,׃用户可以免费得到Linux的内核源代码Q因此,用户可以修改内核源代码,以便适应新增加的外部讑֤?
供了丰富的网l功?br />
完善的内|网l是Linux的一大特炏VLinux在通信和网l功能方面优于其他操作系l。其他操作系l不包含如此紧密地和内核l合在一L(fng)q接|络的能力,也没有内|这些联|特性的灉|性。而Linux为用h供了完善的、强大的|络功能?
支持Internet是其|络功能之一。Linux免费提供了大量支持Internet的YӞInternet是在Unix领域中徏立ƈJ荣h的,在这斚w使用Linux是相当方便的Q用戯用Linux与世界上的其他h通过Internet|络q行通信?
文g传输是其|络功能之二。用戯通过一些Linux命o(h)完成内部信息或文件的传输?
q程讉K是其|络功能之三。Linux不仅允许q行文g和程序的传输Q它qؓ(f)pȝ理员和技术h员提供了讉K其他pȝ的窗口。通过q种q程讉K的功能,一位技术h员能够有效地为多个系l服务,即那些pȝ位于相距很远的地斏V?
可靠的系l安?br />
Linux采取了许多安全技术措施,包括 对读、写q行权限控制 带保护的子系l?审计跟踪 核心授权{,qؓ(f)|络多用L(fng)境中的用h供了必要的安全保障?
良好的可UL?br />
可移植性是指将操作pȝ从一个^台{Ud另一个^C它仍然能按其自n的方式运行的能力.
Linux是一U可UL的操作系l,能够在从微型计算机到大型计算机的M环境中和Mq_上运行?br />
可移植性ؓ(f)q行Linux的不同计机q_与其他Q何机器进行准而有效的通信提供了手D,不需要另外增加特D的和昂늚通信接口?
在说Linux特点?也顺别提一下它的缺?Linux没有核心团队,来自世界各地的爱好者都可以发布自己的补?patch),~点是源代码可能杂ؕ无章q且可能怺冲突.其实从另个方面说也是优点,爱好者都可以发布自己的补?patch),qLinux充满着zd,不断更新q步.
Linux可以与MS-DOS、Windows{其他操作系l共存于同一台机器上。它们均为操作系l,h一些共性,但是互相之间各有特色Q有所区别。至于MS-DOS、WindowsҎ(gu)们一般计机爱好来说是非常熟(zhn)的操作pȝ?在此只列出Linux与UNIX的区?
某些PC机的Unix和Linux在实现方面相cM。几乎所有的商业Unix版本都基本支持同L(fng)软g、程序设计环境和|络Ҏ(gu)。然而,Linux和Unix的商业版本依然存在许多差别。Linux支持的硬件范围和商业Unix不一栗一般来_(d)商业Unix支持的硬件多一些,可是Linux支持的硬件也在不断扩大。突出的是,Linux臛_和商用Unix一L(fng)定。对许多用户来说Q最重要的因素是h。Linux是免费YӞ用户可以从Internet|上下蝲。如果上|不方便Q可以很便宜地通过邮购得到Linux的磁盘或CD-ROM。当然也可以直接从朋友那里得到。商业Unix的h(hun)g应被贬低。除了Y件本w的h外,用户q需支付文档、售后支持和质保贏V对于较大的机构Q这些都很重要,但是PC机用户也总中得不到什么好处。许多商业公司和大学{单位已l发玎ͼ在实验室用廉L(fng)PC行Linux比用工作站运行商业Unixq好。Linux可以在PCZ提供工作站的功能Q而PC机的h是工作站的几分之一。也有一些针对PC机的便宜的UnixQ其中最有名的是386BSD。在许多斚wQ?86BSD软g包和Linux兼容Q但Linux更适合用户的需求。最显著的是QLinux的开发是开攄QQ何志愿者都可以对开发过E做A(ch)献。相比之下,386BSD是由闭的团队开发的。正是这Pq两U品存在着严重的概念上和设计上的差别:(x)Linux的目标是从头开始开发一个完整的UnixpȝQ?86BSD的目标则是对现有的BSD做些修改Q以适合80386pȝ。当然现在也有许多免费的在PCZq行的UNIX,如NetBSD,FreeBSD,OpenBSD{?NetBSD,FreeBSD,OpenBSD在硬件支持方面不如Linux,在系l性能斚w,具专家分?FreeBSD在网l性能,软gUL和系l规范化上比Linux略强?
q就是根目录。在WindowsQDOS或者其他类似的操作pȝ里面Q每个分区都?x)有一个相应的根目录。但是Linux和其他Unixpȝ把所有的文g都放在一个目录树(wi)里面Q? 是唯一的根目录。一般来Ԍ根目录下面很保存什么文Ӟ或者只有一个内核映像在q里?
/boot
很多Linuxpȝ把内核映像和其他一些和启动有关的文件放在这里?
/tmp
一般只有启动的时候生的临时文g才会(x)攑֜q个地方。我们自q那些临时文g都放?/var/tmp?
/mnt
q个目录下面攄一些用来mount其他讑֤的子目录Q比如说/mnt/cdrom或?mnt/floppy?
/lib
启动的时候所需要用到的库文仉攑֜q个目录下。那些非启动用的库文仉?x)放?usr/lib下。内核模块是被放?lib/modules/Q内核版本)下的?
/proc
q个目录在磁盘上其实是不存在的。里面的文g都是关于当前的系l状态的Q包括正在运行的q程Q硬件状态,内存使用的多?#8230;…
/dev
q个目录下保存着所有的讑֤文g。里面有一些Linux内核创徏的用来控制硬件设备的Ҏ(gu)文g。注意,|卡讑֤文gQeth0Qppp0{)不在q儿?
/var
q里有一些被pȝ改变q的数据。比如说/var/tmpQ就是用来储存(f)时文件的。还有很多其他的q程和模块把它们的记录文件也攑֜q个地方。下面将?x)列举一些重要的子目录:(x)
/var/log
q里攄l大部分的记录文件。随着旉的增长,q个目录可能?x)变得很臃肿。所以需要定期来清理一下?
/var/run
包括了各U运行时的小信息?
/var/lib
包括了一些系l运行的时候需要的文g。如果你用笔记本上网Q?var/lib/pcmcia/stab可能?x)对你有用?
/var/spool
邮gQ新闻,打印序列的所在地?
/root
Root用户的主目录?
/home
一般用L(fng)ȝ录都?x)放在这个目录下。你可以通过$ cd ~ 来进入你自己的主目录?
/etc
如果你是Root用户的话Q这个目录应该是你最常来的地斏V这里保存着l大部分的系l配|文件。相Ҏ(gu)Ԍ单个用户的系l配|文件将?x)保存在q个用户自己的主目录里面。这里的文g?x)根据你所安装的Y件而增减。下面将?x)列举一下重要的子目录:(x)
/etc/X11
q里攄Xpȝ所需要的配置文g。XF86Config是把配|储存到q个地方的?etc/X11/fonts里面攄一些服务器需要的字体。还有一些窗口管理器存放的配|文件也是放在这个地方的?
/etc/init.d
q个目录保存着启动描述文gQ包括各U模块和服务的加载描q。所以如果不清楚的话Q最好不要随便删q里的东ѝ这里的文g都是pȝq行配置的,不是用户自己用来配置的?
/etc/rcS.d
q里攄一些连接到/etc/init.d的连接文ӞҎ(gu)runlevel的不同而执行相应的描述。这里的文g名都是由S来开头的Q然后是一个两位的数字——表C各U服务启动的序。比如,S24foo是在S42bar前面执行的。接着是相应的连接到/etc/init.d下面的文件的名字了?
/etc/rc0.d - /etc/rc6.d
q里面也是一些连接文Ӟ?etc/rcS.d差不多。不同的是,q些只会(x)在指定的runlevel下运行相应的描述?表示xQ?表示重启。所有以 K开头的文g表示关闭Q所有以S开头的文g表示重启。目前来Ԍ文g的命名方式和/etc/rcS.d是一L(fng)。注意,在Debian下,2表示启动?
/bin, /sbin
q里分别攄启动的时候所需要的普通程序和pȝE序。很多程序在启动以后也很有用Q它们放在这个目录下是ؓ(f)它们?x)经常被其他E序所调用?
/usr
q是一个很庞大的目录,几乎所有的文g都放在这下面Q除了上面所说的那些。下面将?x)列举一些重要的子目录:(x)
/usr/X11R6, /usr/X11, /usr/Xfree86
q里面保存着Xpȝ所需要的文gQ它的目录结构和/usr是一L(fng)?
/usr/bin
v二进制可执行文g存放的目录,q里攄l大部分的应用程序?
/usr/sbin
q里攄l大部分的系l程序?
/usr/games
游戏E序和相应的数据?x)放在这里?
/usr/include
q个目录保存着C和C++的头文g。除非你是程序员Q否则你可能不会(x)感兴?
/usr/lib
启动时用不到的库文g都会(x)被放在这里?
/usr/info
q里保存着GNU InfoE序所需要的数据?
/usr/man
q里保存着manE序所需要的数据?
/usr/src
q里保存着源代码文件。Linux内核的源代码都放?usr/src/linux下了?
/usr/doc
q里保存着各种文档文g。这些文件可以帮助你了解LinuxQ解决问题和提供一些技巧。或者你可以通过讉K http://www.linuxdoc.org 来活得更多的知识?
/usr/local
q里面保存着本地计算机所需要的文g。在用户q行q程讉K的时候特别有意义。这个目录在有些Linuxpȝ下就是一个单独的分区Q存放一些这台机子所属的那个用户的文件。里面的l构?usr是一L(fng)?
/usr/shared, /usr/share
q里保存着各种׃n文gQ比如说某个应用E序所需要的声音文g?
]]>
1Q?/span>ls –al :列出所有文Ӟ包含隐藏文g?/span>
2Q改变群l权限:(x)chgrp(change group) 组名称 文g或目录名U?/span>
3Q改变拥有者:(x)chown(change owner) [-R] 帐号?/span> 文g或目录名U?/span>
chown(change owner) [-R] 帐号?/span>:组名称 文g或目录名U?/span>
4Q改变权限:(x)chmod [-R] xyz 文g或目录名U?/span>
rwx=4+2+1=x/y/z
增加和减组权限Q?/span>chomd l?/span>/用户?/span>+r/w/x文g或目录名U?/span>
chomd l?/span>/用户?/span>-r/w/x文g或目录名U?/span>
try {
fos.flush();
wb.write(fos);
} catch (IOException e) {
e.printStackTrace();
}
----右trim----
String s = " abc ";
s = s.replaceAll(" +$", "");
2、删除子?,例如 :this is a cup 如何从第2个字W开?删除 4个字W?br />
StringBuffer buff=new StringBuffer("this is a cup ");
buff.delete(2,4);
3、比较二个日期的大小
var dateStr= '2007-9-26';//格式是写ȝ是yyyy-MM-dd
var dateArr = dateStr.split('-');
var date = new Date(dateArr[0],dateArr[1],dateArr[2]);
var date1 = new Date();
alert(date>=date1?'?:'?);
假设我们的电(sh)脑的目录中含有很多文本文档,我们需要查扑֓些文档含有某个关键词。ؓ(f)了实现这U功能,我们首先利用 Lucene 对这个目录中的文档徏立烦引,然后在徏立好的烦引中搜烦我们所要查扄文档。通过q个例子读者会(x)对如何利?Lucene 构徏自己的搜索应用程序有个比较清楚的认识?/p>
![]() ![]() |
ZҎ(gu)档进行烦引,Lucene 提供了五个基的类Q他们分别是 Document, Field, IndexWriter, Analyzer, Directory。下面我们分别介l一下这五个cȝ用途:(x)
Document
Document 是用来描q文档的Q这里的文档可以指一?HTML 面Q一电(sh)子邮Ӟ或者是一个文本文件。一?Document 对象由多?Field 对象l成的。可以把一?Document 对象惌成数据库中的一个记录,而每?Field 对象是记录的一个字Dc(din)?/p>
Field
Field 对象是用来描qC个文档的某个属性的Q比如一电(sh)子邮件的标题和内容可以用两个 Field 对象分别描述?/p>
Analyzer
在一个文档被索引之前Q首先需要对文档内容q行分词处理Q这部分工作是?Analyzer 来做的。Analyzer cL一个抽象类Q它有多个实现。针对不同的语言和应用需要选择适合?Analyzer。Analyzer 把分词后的内容交l?IndexWriter 来徏立烦引?/p>
IndexWriter
IndexWriter ?Lucene 用来创徏索引的一个核心的c,他的作用是把一个个?Document 对象加到索引中来?/p>
Directory
q个cM表了 Lucene 的烦引的存储的位|,q是一个抽象类Q它目前有两个实玎ͼW一个是 FSDirectoryQ它表示一个存储在文gpȝ中的索引的位|。第二个?RAMDirectoryQ它表示一个存储在内存当中的烦引的位置?/p>
熟?zhn)了徏立烦引所需要的q些cdQ我们就开始对某个目录下面的文本文件徏立烦引了Q清?l出了对某个目录下的文本文g建立索引的源代码?/p>
package TestLucene; import java.io.File; import java.io.FileReader; import java.io.Reader; import java.util.Date; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; /** * This class demonstrate the process of creating index with Lucene * for text files */ public class TxtFileIndexer { public static void main(String[] args) throws Exception{ //indexDir is the directory that hosts Lucene's index files File indexDir = new File("D:\\luceneIndex"); //dataDir is the directory that hosts the text files that to be indexed File dataDir = new File("D:\\luceneData"); Analyzer luceneAnalyzer = new StandardAnalyzer(); File[] dataFiles = dataDir.listFiles(); IndexWriter indexWriter = new IndexWriter(indexDir,luceneAnalyzer,true); long startTime = new Date().getTime(); for(int i = 0; i < dataFiles.length; i++){ if(dataFiles[i].isFile() && dataFiles[i].getName().endsWith(".txt")){ System.out.println("Indexing file " + dataFiles[i].getCanonicalPath()); Document document = new Document(); Reader txtReader = new FileReader(dataFiles[i]); document.add(Field.Text("path",dataFiles[i].getCanonicalPath())); document.add(Field.Text("contents",txtReader)); indexWriter.addDocument(document); } } indexWriter.optimize(); indexWriter.close(); long endTime = new Date().getTime(); System.out.println("It takes " + (endTime - startTime) + " milliseconds to create index for the files in directory " + dataDir.getPath()); } } |
在清?中,我们注意到类 IndexWriter 的构造函数需要三个参敎ͼW一个参数指定了所创徏的烦引要存放的位|,他可以是一?File 对象Q也可以是一?FSDirectory 对象或?RAMDirectory 对象。第二个参数指定?Analyzer cȝ一个实玎ͼ也就是指定这个烦引是用哪个分词器Ҏ(gu)挡内容进行分词。第三个参数是一个布?yu)(dng)型的变量,如果?true 的话׃表创Z个新的烦引,?false 的话׃表在原来索引的基上进行操作。接着E序遍历了目录下面的所有文本文档,qؓ(f)每一个文本文档创Z一?Document 对象。然后把文本文档的两个属性:(x)路径和内容加入到了两?Field 对象中,接着在把q两?Field 对象加入?Document 对象中,最后把q个文档?IndexWriter cȝ add Ҏ(gu)加入到烦引中厅R这h们便完成了烦引的创徏。接下来我们q入在徏立好的烦引上q行搜烦的部分?/p>
![]() ![]() |
![]()
|
利用Luceneq行搜烦像建立索引一样也是非常方便的。在上面一部分中,我们已经Z个目录下的文本文档徏立好了烦引,现在我们p在这个烦引上q行搜烦以找到包含某个关键词或短语的文档。Lucene提供了几个基的类来完成这个过E,它们分别是呢IndexSearcher, Term, Query, TermQuery, Hits. 下面我们分别介绍q几个类的功能?/p>
Query
q是一个抽象类Q他有多个实玎ͼ比如TermQuery, BooleanQuery, PrefixQuery. q个cȝ目的是把用户输入的查询字W串装成Lucene能够识别的Query?/p>
Term
Term是搜索的基本单位Q一个Term对象有两个Stringcd的域l成。生成一个Term对象可以有如下一条语句来完成QTerm term = new Term(“fieldName”,”queryWord”); 其中W一个参C表了要在文档的哪一个Field上进行查找,W二个参C表了要查询的关键词?/p>
TermQuery
TermQuery是抽象类Query的一个子c,它同时也是Lucene支持的最为基本的一个查询类。生成一个TermQuery对象由如下语句完成:(x) TermQuery termQuery = new TermQuery(new Term(“fieldName”,”queryWord”)); 它的构造函数只接受一个参敎ͼ那就是一个Term对象?/p>
IndexSearcher
IndexSearcher是用来在建立好的索引上进行搜索的。它只能以只ȝ方式打开一个烦引,所以可以有多个IndexSearcher的实例在一个烦引上q行操作?/p>
Hits
Hits是用来保存搜索的l果的?/p>
介绍完这些搜索所必须的类之后Q我们就开始在之前所建立的烦引上q行搜烦了,清单2l出了完成搜索功能所需要的代码?/p>
package TestLucene; import java.io.File; import org.apache.lucene.document.Document; import org.apache.lucene.index.Term; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.FSDirectory; /** * This class is used to demonstrate the * process of searching on an existing * Lucene index * */ public class TxtFileSearcher { public static void main(String[] args) throws Exception{ String queryStr = "lucene"; //This is the directory that hosts the Lucene index File indexDir = new File("D:\\luceneIndex"); FSDirectory directory = FSDirectory.getDirectory(indexDir,false); IndexSearcher searcher = new IndexSearcher(directory); if(!indexDir.exists()){ System.out.println("The Lucene index is not exist"); return; } Term term = new Term("contents",queryStr.toLowerCase()); TermQuery luceneQuery = new TermQuery(term); Hits hits = searcher.search(luceneQuery); for(int i = 0; i < hits.length(); i++){ Document document = hits.doc(i); System.out.println("File: " + document.get("path")); } } } |
在清?中,cIndexSearcher的构造函数接受一个类型ؓ(f)Directory的对象,Directory是一个抽象类Q它目前有两个子c:(x)FSDirctory和RAMDirectory. 我们的程序中传入了一个FSDirctory对象作ؓ(f)其参敎ͼ代表了一个存储在盘上的索引的位|。构造函数执行完成后Q代表了q个IndexSearcher以只ȝ方式打开了一个烦引。然后我们程序构造了一个Term对象Q通过q个Term对象Q我们指定了要在文档的内容中搜烦包含关键?#8221;lucene”的文档。接着利用q个Term对象构造出TermQuery对象q把q个TermQuery对象传入到IndexSearcher的searchҎ(gu)中进行查询,q回的结果保存在Hits对象中。最后我们用了一个@环语句把搜烦到的文档的\径都打印了出来。好了,我们的搜索应用程序已l开发完毕,怎么P利用Lucene开发搜索应用程序是不是很简单?br /> 转蝲Qhttp://www.ibm.com/developerworks/cn/java/j-lo-lucene1/#N10093
(2)另外Q配|文件中原先没有加上一?#8220;textPageBreaks”控制。ؓ(f)了避免这个分늬P我们需要在xpdfrc文g“text output control”下面加上q么一D话Q?/span>
# If set to "yes", text extraction will insert page
# breaks (form feed characters) between pages. This
# defaults to "yes".
textPageBreaks no
讄textPageBreaks?/span>no的意思是Q在PDF文档的两之间不加入分页W号?/span>
之所以这P是因个符h时候会(x)引vSAX解析XML上的困难?br />
读PDF文g