2009年6月27日星期六

iPhone 3GS 被破解⋯⋯

上市刚刚一周时间苹果iPhone 3GS即被告成功破解,其罪魁祸首是一个5个月前就被发现的漏洞(不知道苹果是不是故意留的),iPhone破解者们可以轻易利用此漏洞破解,这一切除了让iPhone用户感到惊喜外,也确实让人对苹果这次迟缓的应对颇感意外,连Geohot自己都表示为苹果感到悲哀,这次的破解毫无挑战性。

从发现新的ECID验证,到实现往iboot里写入自定义命令,到找到ramdisk key,再到今天发现bootrom存在24kpwn漏洞,可以说Geohot(是一破解达人 想了解点我查看需翻墙)每天都在为我们带来让人兴奋的消息,而今天的这个发现更是宣告了iPhone 3GS将可以被完全破解!Geohot称利用24kpwn漏洞,通过修改现有的redsn0w就可以实现iPhone 3GS的越狱。再利用Ultrasn0w即可软解现在的iPhone 3GS

24kpwn漏洞早在今年初就被iPhone Dev Team利用来开发redsn0w,并最终实现iPod Touch2G的完美越狱。这就意味着iPhone 3GS的越狱将可以追寻着iPod Touch 2Gen的破解轨迹,而水到渠成。从黄雪,到红雪,到超级雪,再到也许即将就要落下的紫雨,今年对于iPhone来说也许注定将是命运多舛,雪雨交加的一年。

2009年6月25日星期四

几天不见,IT生活有了很大改变⋯⋯

公历2009年6月18日晚上,中国中央电视台连续在“新闻联播”、“焦点访谈”、“新闻1+1”三大强档新闻节目中曝光谷歌中国能搜索到色情信息,并且对这类搜索有辅助引导行为。在央视新闻节目中有如此长时间的报道一个互联网企业,这在央视也是第一回吧。经过这么一折腾,谁占了便宜,谁又吃了亏呢?
第一受益者自然非互联网违法和不良信息举报中心莫属。前两天刚刚举行了成立5周年的庆祝活动,这次又在黄金时间露脸足够长时间,其知名度自然飙升。因此笔者建议该中心赶紧增加硬件设施和人员投入,否则会因在接下来的时间里接到的举报越来越多而应接不暇。
第二个受益者自然是谷歌的竞争对手百度。看到节目播出,蓦然回首,百度却在丛中笑。百度在偷笑的同时估计也不闲着,正积极准备宣传稿呢,也许还会接受个采访什么的,说说百度是如何遵守政府规定,如何采用No.1的技术去过滤不良信息,如何维护网络环境的健康,如何承担社会责任,等等。
第三个受益者是网民。谷歌在曝光之后紧急屏蔽了敏感词汇,并发表声明,要努力做良民,提高提供信息的质量。这对所有网民自然是有利的,这也是我们不良信息举报中心谴责谷歌的目的,也可减少教师、学生、家长等对网上不良信息的担忧。当然网民还有一个受益就是央视手把手的教会了如何搜索。
第四个受益者应该是谷歌,当然它也是吃亏者。因为马克思教导过我们要辩证的去看问题。这次央视的长时间播出,谷歌的知名度一定会提高许多,不论是在网民中还是非网民中。笔者认为,这次曝光谷歌,不但不会给谷歌减少搜索量,反而会增加,不信可以让谷歌公布一下这两天的搜索量与前些天的比较。这是因为谷歌在中国已经建立起来的用户群不会因为这次曝光而放弃使用谷歌,而之前没有使用谷歌的人却会有很多人开始试用谷歌,也许会因此成为谷歌的新用户。这要看谷歌如何把这次劫难转变为一次机遇。
第五个受益者很不明显,那就是新浪。因为在节目播出国家出台的若干关于互联网信息管理法规时,使用的网页是新浪科技的,能看到新浪的LOGO。所以新浪也较隐晦的做了一次免费宣传。
还有第六个,我不说了,请各位读者补充吧!

九城的未来

九城由于各种原因痛失《魔兽世界》的代理权应该属于商业竞争中司空见惯的现象,那么原来在九城负责运营《魔兽世界》的员工显然会找不到自己的位置,裁员自然也应是在情理之中的事情,况且作为一个企业在具有法律效力的合同面前也有自己的权利,此事本无可厚非,但为何近日传言的九城的裁员会引起业内的关注,尤其是引发了九城员工的不满呢?笔者联想到了在之前九城和网易就《魔兽世界》代理权争夺正酣时,曝出的九城总裁陈晓薇的两封致内部员工的信。坦白地讲,这两封信给笔者印象最深的是其中对于自己员工的高度评价和承诺。

例如在第一封信的开头有如下文字:对于外界的传言,我们最可敬的全体九城员工,没有一个人听信、散布传言,更没有一个人驻足观望、停滞不前。我们每一个人都在自己的岗位上,默默努力、加倍耕耘,用辛勤的汗水满足对玩家的承诺,用沉默的努力来捍卫自己的尊严。作为第九城市的总裁,请允许我在此向大家致以最崇高的敬意;作为这个大集体的一员,我为置身于大家中间而自豪。


在第一封信的结尾有如下文字:而每一个九城员工都是这个企业真正的财富。我们绝不会因为一款游戏的续约与否而裁员,这个大家庭里的弟兄姐妹一个都不能少,我们创造了九城的过去,我们仍会创造九城的未来。


在第二封信的开头有如下文字:在过去的20多个工作日中,我们的员工依然不为外界的各种诱惑、传闻所动,继续忘我的为魔兽世界中国玩家提供着最为优质的服务!今天,我再次向各位致以我最崇高的敬意;我为拥有如此团队和员工而倍感自豪!


在第二封信的结尾有如下文字:最后这句话送与每一位第九城市的员工,予以自勉:我们是优秀的,我们曾经自豪并且快乐的工作着,我们是不平凡的一群,彼此紧密相连,像兄弟姐妹般无间,在最需要的时刻彼此互相扶持,我们共同面对挑战,共同接受磨砺。第九城市,将继续巍然屹立!


当时有人称陈晓薇的这两封信气势如虹,荡气回肠。但笔者认为这之中流露出的平凡的感动更令人震撼和鼓舞。而这两封信不约而同地在开头和结尾都提及到了自己的员工,按照小学生作文的评价这叫首尾呼应,突出主题。可见这些员工应该如陈晓薇所言对于九城是宝贵的财富,彼此是兄弟姐妹。九城的未来和巍然屹立应该和他们息息相关。不幸的是,最终的事实证明这一切有个很重要的前提,那就是九城仍然能够拿到《魔兽世界》的代理权。但事实无情地击碎了这个前提,更无情的是九城亲自打碎了曾经称之为兄弟姐妹般的员工的承诺。也许真的如当初外界所言,《魔兽世界》事关九城的生存,当九城失守《魔兽世界》后,原为《魔兽世界》提供运营的企业员工也许没有了用武之地,也给九城造成了成本上的压力,裁员也是迫不得已而为之,那为何在九城最关键的时刻,没有在慷慨激昂的陈词中将这一最坏的结果告知自己的兄弟姐妹呢?相反的是,员工看到的是无论签约与否,九城这个大家庭里的兄弟姐妹一个都不能少的令人感动和迷失的承诺。更让笔者不解的是,既然不能履行自己的承诺,为何还要以一纸所谓的禁止协议,了却了员工可能存在的新的工作机会。也许当时九城太需要这些员工(不管是自愿还是强迫)和自己一起来向外界证明九城的凝聚力了,但同时九城又对自己的员工抱有极大的不信任。

也许从法律的角度讲,九城的做法无可厚非,根据业务的变化来裁员也是公司的需要,但问题的关键就是此前陈晓薇的那两封信让上述的理由显得甚是苍白。

在当前经济环境不景气和市场竞争异常激烈的情况下,企业裁员已经是企业缓解压力屡试不爽的方法,被裁员工有所不满也属正常,但像九城这样类似“卸磨杀驴”做法的企业却不多见。想来当时陈晓薇的这两封信表达的意思不仅仅代表她个人,更代表着九城。遗憾的是,今天的九城已经看不到如陈晓薇信中所描述的那样,让九城倍感自豪的员工即将离开,他们确实与九城共同面对了挑战和磨砺,但九城抛弃了他们,也抛弃自己作为一个企业的诚信。既然九城不能(或者没有能力)“体面”地履行自己的承诺,那至少应该让这些兄弟姐妹们体面地离开,也许这样九城还会像陈晓薇信中所说的,还有未来,或者巍然屹立……

2009年6月17日星期三

MAC开机启动组合拳

[Mac]Intel-based Mac 的启动键组合
  启动时按住 C 键 ―― 从可启动 CD 或 DVD 光盘启动,如随机附带的 Mac OS X 安装光盘。
  启动时按住 D 键 ―― 如果插入随机附带的 Mac OS X 安装光盘 1 ,则启动为
  AppleHardware Test (AHT) 。
  按住 Option-Command-P-R 键直至听到两声嘀嘀声 ―― 重置 NVRAM 。
  启动时按住 Option 键 ―― 启动进入 Startup Manager ,您可以从列出的有效启动宗卷中选择一个来启动。注意:按住 N 键可显示出第一个可 启动网络宗卷。
  按住 Eject 、 F12 键,或者按住鼠标键/触控板 ―― 推出所有移动介质,如光盘。
  启动时按住 N 键 ―― 试图从兼容的网络服务器(NetBoot)启动。
  启动时按住 T 键 ―― 启动为 FireWire 目标磁盘模式,相当于把本机变成一个火线接口的移动硬盘。
  启动时按住 Shift 键 ―― 启动为安全模式并且暂时关闭登录项。
  启动时按住 Command-V 键 ―― 启动为 Verbose 模式。
  启动时按住 Command-S 键 ―― 启动为单用户模式。
  启动时按住 Option-N 键 ―― 使用默认启动镜像从 NetBoot 服务器启动。
  一、如何取出卡死在吸取式光驱中的光盘:
  1.首先关机,拔掉所有连接苹果电脑的线(电源线、键盘鼠标线等),过1分钟后按住主机源开关5秒。
  2.然后过1分钟后接上电源、键盘鼠标线仅这三根线,开机后迅速同时按住四个键:苹果键+option键+P键+R键,电脑不间断响4声后,松开手进入苹果系统。
  3.最后在桌面上出现光盘图标,把光盘图标拖入到垃圾桶就自动弹出卡死在光驱中的光盘了。

2009年6月9日星期二

Samba服务器的连接小问题

今天把手头的宝妈的笔记本升了一下级,重启动后发现不能登陆linux的samba服务器了。
怎么输入,都是提示要求密码。不得已,我甚至更改了服务器密码,可是还是不行。

后来查资料,发现linux的samba服务器有自己的samba密码,用户名使用linux的系统用户名,但是要使用[smbpasswd -a 用户名]来生成samba密码。

# smbpasswd -a kandianying
New SMB password:
ReType new SMB passwd:

2009年6月8日星期一

[Attrack]Sendmail

不知道那家伙怎么做到的,我的sendmail是8.14.3和8.14.2的混合体。
那家伙通过sasl要求认证,同时送信。

好在偶用了SASL的送信认证。

不过为了安全起见,偶还是在hosts.allow里把sendmail的ALL删掉了。毕竟最近不出门,不用远程收信。

WARNING!!!! Possible Attack:
Attempt from [58.63.23.213] with:
command=AUTH, count=6: 1 Time(s)
Total: 1 Time(s)

2009年6月7日星期日

很牛B的文章,有一定启发

说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据的函数(即算法),最后,再给类中的数据成员和函数划分访问权限,从而实现封装。

  数据库的最初雏形据说源自美国一个奶牛场的记账薄(纸质的,由此可见,数据库并不一定是存储在电脑里的数据^_^),里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)——程序开发中的一个重要分支。

  下面进入正题,首先按我个人所接触过的程序给数据库设计人员的功底分一下类:
  1、没有系统学习过数据结构的程序员。这类程序员的作品往往只是他们的即兴玩具,他们往往习惯只设计有限的几个表,实现某类功能的数据全部塞在一个表中,各表之间几乎毫无关联。网上不少的免费管理软件都是这样的东西,当程序功能有限,数据量不多的时候,其程序运行起来没有什么问题,但是如果用其管理比较重要的数据,风险性非常大。
  2、系统学习过数据结构,但是还没有开发过对程序效率要求比较高的管理软件的程序员。这类人多半刚从学校毕业不久,他们在设计数据库表结构时,严格按照教科书上的规定,死扣E-R图和3NF(别灰心,所有的数据库设计高手都是从这一步开始的)。他们的作品,对于一般的access型轻量级的管理软件,已经够用。但是一旦该系统需要添加新功能,原有的数据库表差不多得进行大换血。
  3、第二类程序员,在经历过数次程序效率的提升,以及功能升级的折腾后,终于升级成为数据库设计的老鸟,第一类程序员眼中的高人。这类程序员可以胜任二十个表以上的中型商业数据管理系统的开发工作。他们知道该在什么样的情况下保留一定的冗余数据来提高程序效率,而且其设计的数据库可拓展性较好,当用户需要添加新功能时,原有数据库表只需做少量修改即可。
  4、在经历过上十个类似数据库管理软件的重复设计后,第三类程序员中坚持下来没有转行,而是希望从中找出“偷懒”窍门的有心人会慢慢觉悟,从而完成量变到质变的转换。他们所设计的数据库表结构有一定的远见,能够预测到未来功能升级所需要的数据,从而预先留下伏笔。这类程序员目前大多晋级成数据挖掘方面的高级软件开发人员。
  5、第三类程序员或第四类程序员,在对现有的各家数据库管理系统的原理和开发都有一定的钻研后,要么在其基础上进行二次开发,要么自行开发一套有自主版权的通用数据库管理系统。

  我个人正处于第三类的末期,所以下面所列出的一些设计技巧只适合第二类和部分第三类数据库设计人员。同时,由于我很少碰到有兴趣在这方面深钻下去的同行,所以文中难免出现错误和遗漏,在此先行声明,欢迎大家指正,不要藏私哦8)

  一、树型关系的数据表
  不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况。当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据。按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构:

类别表_1(Type_table_1)
名称     类型    约束条件   说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值

  这样的设计短小精悍,完全满足3NF,而且可以满足用户的所有要求。是不是这样就行呢?答案是NO!Why?

  我们来估计一下用户希望如何罗列出这个表的数据的。对用户而言,他当然期望按他所设定的层次关系一次罗列出所有的类别,例如这样:
总类别
  类别1
    类别1.1
      类别1.1.1
    类别1.2
  类别2
    类别2.1
  类别3
    类别3.1
    类别3.2
  ……

  看看为了实现这样的列表显示(树的先序遍历),要对上面的表进行多少次检索?注意,尽管类别1.1.1可能是在类别3.2之后添加的记录,答案仍然是N次。这样的效率对于少量的数据没什么影响,但是日后类型扩充到数十条甚至上百条记录后,单单列一次类型就要检索数十次该表,整个程序的运行效率就不敢恭维了。或许第二类程序员会说,那我再建一个临时数组或临时表,专门保存类型表的先序遍历结果,这样只在第一次运行时检索数十次,再次罗列所有的类型关系时就直接读那个临时数组或临时表就行了。其实,用不着再去分配一块新的内存来保存这些数据,只要对数据表进行一定的扩充,再对添加类型的数量进行一下约束就行了,要完成上面的列表只需一次检索就行了。下面是扩充后的数据表结构:

类别表_2(Type_table_2)
名称     类型    约束条件    说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layer char(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数

  按照这样的表结构,我们来看看上面例子记录在表中的数据是怎样的:

type_id type_name type_father type_layer
1 总类别 0 000000
2 类别1 1 010000
3 类别1.1 2 010100
4 类别1.2 2 010200
5 类别2 1 020000
6 类别2.1 5 020100
7 类别3 1 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
10 类别1.1.1 3 010101
……

  现在按type_layer的大小来检索一下:SELECT * FROM Type_table_2 ORDER BY type_layer

列出记录集如下:

type_id type_name type_father type_layer
1 总类别 0 000000
2 类别1 1 010000
3 类别1.1 2 010100
10 类别1.1.1 3 010101
4 类别1.2 2 010200
5 类别2 1 020000
6 类别2.1 5 020100
7 类别3 1 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
……

  现在列出的记录顺序正好是先序遍历的结果。在控制显示类别的层次时,只要对type_layer字段中的数值进行判断,每2位一组,如大于0则向右移2个空格。当然,我这个例子中设定的限制条件是最多3层,每层最多可设99个子类别,只要按用户的需求情况修改一下type_layer的长度和位数,即可更改限制层数和子类别数。其实,上面的设计不单单只在类别表中用到,网上某些可按树型列表显示的论坛程序大多采用类似的设计。

  或许有人认为,Type_table_2中的type_father字段是冗余数据,可以除去。如果这样,在插入、删除某个类别的时候,就得对type_layer 的内容进行比较繁琐的判定,所以我并没有消去type_father字段,这也正符合数据库设计中适当保留冗余数据的来降低程序复杂度的原则,后面我会举一个故意增加数据冗余的案例。

  
  二、商品信息表的设计
  假设你是一家百货公司电脑部的开发人员,某天老板要求你为公司开发一套网上电子商务平台,该百货公司有数千种商品出售,不过目前仅打算先在网上销售数十种方便运输的商品,当然,以后可能会陆续在该电子商务平台上增加新的商品出售。现在开始进行该平台数据库的商品信息表的设计。每种出售的商品都会有相同的属性,如商品编号,商品名称,商品所属类别,相关信息,供货厂商,内含件数,库存,进货价,销售价,优惠价。你很快就设计出4个表:商品类型表(Wares_type),供货厂商表(Wares_provider),商品信息表(Wares_info):

商品类型表(Wares_type)
名称     类型    约束条件    说明
type_id   int   无重复   类别标识,主键
type_name   char(50) 不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layer char(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数

供货厂商表(Wares_provider)
名称     类型    约束条件    说明
provider_id int   无重复   供货商标识,主键
provider_name char(100) 不允许为空 供货商名称

商品信息表(Wares_info)
名称     类型    约束条件    说明
wares_id int   无重复   商品标识,主键
wares_name char(100) 不允许为空 商品名称
wares_type   int 不允许为空           商品类型标识,和Wares_type.type_id关联
wares_info char(200) 允许为空 相关信息
provider int 不允许为空 供货厂商标识,和Wares_provider.provider_id关联
setnum int 初始值为1 内含件数,默认为1
stock int 初始值为0 库存,默认为0
buy_price money 不允许为空 进货价
sell_price money 不允许为空 销售价
discount money 不允许为空 优惠价

  你拿着这3个表给老板检查,老板希望能够再添加一个商品图片的字段,不过只有一部分商品有图片。OK,你在商品信息表(Wares_info)中增加了一个haspic的BOOL型字段,然后再建了一个新表——商品图片表(Wares_pic):

商品图片表(Wares_pic)
名称     类型    约束条件    说明
pic_id int   无重复   商品图片标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
pic_address  char(200) 不允许为空           图片存放路径

  程序开发完成后,完全满足老板目前的要求,于是正式启用。一段时间后,老板打算在这套平台上推出新的商品销售,其中,某类商品全部都需添加“长度”的属性。第一轮折腾来了……当然,你按照添加商品图片表的老方法,在商品信息表(Wares_info)中增加了一个haslength的BOOL型字段,又建了一个新表——商品长度表(Wares_length):

商品长度表(Wares_length)
名称     类型    约束条件    说明
length_id int   无重复   商品图片标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
length  char(20) 不允许为空           商品长度说明

  刚刚改完没多久,老板又打算上一批新的商品,这次某类商品全部需要添加“宽度”的属性。你咬了咬牙,又照方抓药,添加了商品宽度表(Wares_width)。又过了一段时间,老板新上的商品中有一些需要添加“高度”的属性,你是不是开始觉得你所设计的数据库按照这种方式增长下去,很快就能变成一个迷宫呢?那么,有没有什么办法遏制这种不可预见性,但却类似重复的数据库膨胀呢?我在阅读《敏捷软件开发:原则、模式与实践》中发现作者举过类似的例子:7.3 “Copy”程序。其中,我非常赞同敏捷软件开发这个观点:在最初几乎不进行预先设计,但是一旦需求发生变化,此时作为一名追求卓越的程序员,应该从头审查整个架构设计,在此次修改中设计出能够满足日后类似修改的系统架构。下面是我在需要添加“长度”的属性时所提供的修改方案:

  去掉商品信息表(Wares_info)中的haspic字段,添加商品额外属性表(Wares_ex_property)和商品额外信息表(Wares_ex_info)2个表来完成添加新属性的功能。

商品额外属性表(Wares_ex_property)
名称     类型    约束条件    说明
ex_pid int   无重复   商品额外属性标识,主键
p_name char(20) 不允许为空 额外属性名称

商品额外信息表(Wares_ex_info)
名称     类型    约束条件    说明
ex_iid int   无重复   商品额外信息标识,主键
wares_id int 不允许为空 所属商品标识,和Wares_info.wares_id关联
property_id  int 不允许为空           商品额外属性标识,和Wares_ex_property.ex_pid关联
property_value char(200) 不允许为空 商品额外属性值

  在商品额外属性表(Wares_ex_property)中添加2条记录:
ex_pid p_name
1 商品图片
2 商品长度

  再在整个电子商务平台的后台管理功能中追加一项商品额外属性管理的功能,以后添加新的商品时出现新的属性,只需利用该功能往商品额外属性表(Wares_ex_property)中添加一条记录即可。不要害怕变化,被第一颗子弹击中并不是坏事,坏的是被相同轨道飞来的第二颗、第三颗子弹击中。第一颗子弹来得越早,所受的伤越重,之后的抵抗力也越强8

Linux启动Oracle流程

这次一定要记录下来。不然和上次装ORACLE似的,都忘掉了。。
linux 启动 oracle

1.设置环境变量
$ export ORACLE_BASE=/home/oracle/oracle
$ export ORACLE_SID=orcl
$ export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1 $ export PATH=$PATH:$ORACLE_HOME/bin

2.启动监听器 lsnrctl start

.启动Oracle Enterprise Manager 数据库控制 emctl start dbconsole 4.访问http://IP:5500/em。可操作启动数据库 或者:
3.$ sqlplus

4.Enter user-name:/ as sysdba

5.SQL> startup

2009年6月6日星期六

启动oracle数据库的服务

上次安装完oracle 10g后,开始尝试在远程使用和管理oracle,但是道路崎岖不平,下面主要是关于启动、和使用EM、SQLPLUS、ISQLPLUS的记录:

首先,通过telnet远程登录linux服务器,然后启动sqlplus,以便能完成大部分的DML操作。

1.启动sqlplus

登录成功后,在终端提示符下输入sqlplus,如下:

[oracle@graduate ~]$ sqlplus

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 10月 5 20:25:03 2006

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

请输入用户名: scott
输入口令:

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

SQL>

2. 启动em(enterprise managment)

在在终端提示符下输入命令如下:

关于emctl的用法,可以在提示符下,直接输入emctl,不加任何其他选项,将会出现usage。

[oracle@graduate ~]$emctl start dbconsole

TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.
http://你的IP:1158/em/console/aboutApplication

3. 启动isqlplus(isqlplus就是在浏览器可以使用的sqlplus,具体的用法,会在后面讲)

[oracle@graduate ~]$ isqlplusctl start
iSQL*Plus 10.2.0.1.0
Copyright (c) 2003, 2005, Oracle. All rights reserved.
warning, got duplicate tcp line.
Starting iSQL*Plus ...
iSQL*Plus started.

about Tomcat show "INFO: Additional JARs have been added"

Jun 6, 2009 1:54:19 PM org.apache.catalina.loader.WebappClassLoader modified
INFO: Additional JARs have been added
Jun 6, 2009 1:54:19 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
Jun 6, 2009 1:54:29 PM org.apache.catalina.loader.WebappClassLoader modified
INFO: Additional JARs have been added
Jun 6, 2009 1:54:29 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
Jun 6, 2009 1:54:39 PM org.apache.catalina.loader.WebappClassLoader modified
INFO: Additional JARs have been added
Jun 6, 2009 1:54:39 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started

I had made a project, but when I started up tomcat, these message were shown in console.
they are borning.
Then I found the reason.For connect to Oracle DB, I had added a ojdbc.jar to $PROJECT/WEB-INF/lib/ folder.The attributte of it is "-rw-r-----". because I am using a normal user to startup tomcat, I have no access privilege to it . I changed the attribute to 644, it works correctly.

I am using java1.6, tomcat6.0, eclipse3.4(all in one).

Tomcat在linux下的服务启动

一、创建启动/停止脚本文件
 
通过一下脚本,可以使Tomcat以Service方式运行。

#!/bin/bash
# chkconfig: 2345 10 90
# description: Starts and Stops the Tomcat daemon.
TOMCAT_HOME=/usr/local/apache-tomcat-5.5.12
TOMCAT_START=$TOMCAT_HOME/bin/startup.sh
TOMCAT_STOP=$TOMCAT_HOME/bin/shutdown.sh
# necessary environment variables export
CATALINA_HOME=$TOMCAT_HOME
export JAVA_HOME=/usr/java/jdk1.5.0_05
# source function library.
. /etc/rc.d/init.d/functions
# source networking configuration.
. /etc/sysconfig/network
# check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0
# check for tomcat script
if [ ! -f $TOMCAT_HOME/bin/catalina.sh ]
then echo "Tomcat not valilable..."
exit
fi
start(){
echo -n "Starting Tomcat: "
daemon $TOMCAT_START
echo
touch /var/lock/subsys/tomcat
}
stop(){
echo -n $"Shutting down Tomcat: "
daemon $TOMCAT_STOP
rm -f /var/lock/subsys/tomcat.pid echo
}
restart(){
stop
start
}
status(){
#以下の一行は一行に納めること、下列行在一行内写下,否则“service start”的时候报错#
ps ax --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}' | wc | awk '{print $2}' > tmp/tomcat_process_count.txt
read line < /tmp/tomcat_process_count.txt
if [ $line -gt 0 ]; then
echo -n "tomcat ( pid "
ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | awk '{printf $1 " "}'
echo -n ") is running..."
echo
else
echo "Tomcat is stopped"
fi
}
case "$1" in
start)
start ;;
stop)
stop ;;
restart)
stop
sleep 3
start ;;
status)
status ;;
*)
echo "Usage: tomcatd {start|stop|restart|status}"
exit 1
esac
exit 0


二、保存并设置脚本文件
将以上的脚本文件保存在/etc/init.d中,命名为tomcat;
设置tomcat的文件属性
#chmod a+x tomcat
三、设置服务运行级别
最后用chkconfig设置服务运行
#chkconfig --add tomcat
注意:
在tomcat文件的头两行的注释语句中,需要包含chkconfig和description两部分内容(确认不要拼写错误,),否则在执行“chkconfig --add tomcat”时,会出现“tomcat服务不支持chkconfig”的错误提示。
chkconfig这行表示缺省启动的运行级别以及启动和停止的优先级,如该服务缺省不再任何运行级启动,则以 - 代替运行级别。在tomcat中表示脚本在运行级2、3、4、5启动,启动优先权为10,停止优先权为90。
description行对服务进行描述,可以用 “\” 跨行注释。

2009年6月3日星期三

vsFtpd配置参数

#启用监听
listen=YES
#定义FTP端口
listen_port=21
#不监听IPV6
listen_ipv6=NO
#允许匿名用户登录
anonymous_enable=YES
#匿名用户视为来宾用户,默认用户名ftp
#guest_enable=NO
#guest_username=ftp
#允许匿名用户免密码进入
#no_anon_password=YES
#允许本地用户登录
local_enable=YES
#允许本地上传
lock_upload_files=YES
#允许本地用户写入
write_enable=YES
anon_umask=022
local_umask=022
#远程客户端最大FTP命令间隔超过600秒,或空闲的数据连接超过120秒,都将被断开
idle_session_timeout=600
data_connection_timeout=120
#不允许匿名用户上传
anon_upload_enable=NO
#不允许匿名用户创建文件夹
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
#匿名用户只允许下载
anon_world_readable_only=YES
#是否允许下载
download_enable=YES
#是否删除上传失败的文件
delete_failed_uploads=NO
#匿名客户端允许的最大数据传输速率50kb/s
#anon_max_rate=50000
#本地下载速度不限制
local_max_rate=0
#最多连接用户
max_clients=200
#最多登录失败次数
max_login_fails=3
#每个IP最多次数
max_per_ip=4
#登录失败延时1秒
#delay_failed_login=1
#登录成功延时0秒
#delay_successful_login=0
#主动模式
#port_enable=YES
#被动模式下,服务器端口范围限制在50000-60000
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=60000
#允许SSL
ssl_enable=YES
#允许欢迎话语
dirmessage_enable=YES
#显示文件列表
dirlist_enable=YES
#强迫ftp-data 的数据传送使用20端口
connect_from_port_20=NO
#锁定上传文件
lock_upload_files=YES
#匿名上传者是否拥有所有权
#chown_uploads=NO
#chown_username=whoever
#不允许系统日志
syslog_enable=NO
#允许日志
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#检验用户密码
userlist_enable=NO
userlist_deny=YES
#nopriv_user=ftpsecure
#特殊用户asycn abor是否允许
async_abor_enable=NO
#管控是否可用ASCII模式上传下载
ascii_upload_enable=NO
ascii_download_enable=YES
#欢迎语
#ftpd_banner=Welcome to my FTP server.
#禁止E-mail
#banned_email_file=/etc/vsftpd.banned_emails
#限制用户只能访问他们的家目录
chroot_local_user=YES
#受限用户列表,只能访问它们的家目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#是否允许LS-R命令
ls_recurse_enable=NO
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

2009年6月1日星期一

苹果机关机技巧总结

苹果机开关机技巧总结

或许您每天要开关机好几次,有时可能要用到光盘开机,有时需要注销更换使用者,平常操作时,都是经由屏幕上的各种选单来选择,虽然用选单的方式来操作很直觉,不过如果再加上一些快捷键,可让您的动作方便且快速许多,底下就是汇整开关机、注销、关机时,可以用到的快捷键,希望对各位有所帮助。

C
很多人都知道这个键的作用,在刚按下电源开关开机时,如按着C 键不放,Mac主机会直接找光驱内的开机光盘片来开机,这招通常用于重灌或更新系统时。

T
如果的Mac主机您有外接的FireWire硬盘,且里头已经安装好有可开机的系统时,在按下电源按钮开机后,如按着T 键不放,Mac主机会直接找外接的FireWire硬盘内的系统来开机。

X
在按下电源按钮开机后,如按着X键不放,就算原来的预设开机系统为OS 9,Mac主机会跳过OS 9 系统,直接找硬盘里的OS X 系统开机。

苹果键(Command)-S
在按下电源按钮开机后,如同时按着苹果键与S键不放,会进入单一使用者模式。

苹果键-V
在按下电源按钮开机后,如同时按着苹果键与V键不放,可以进入执行程序显示模式,屏幕上会逐行显示目前所执行的程序,如您是Linux的使用者,对这种模式应该不会陌生。

Shift
在按下电源按钮开机后,如按着Shift键不放,会进入安全启动模式,其会将不必要的核心延伸功能关闭(与在Mac OS 9 开机时按下Shift 键的功能类似),并且不理会任何之前曾经设定过的登入项目。

Option
在按下电源按钮开机后,如按着Option键不放,会进入启动管理者模式,让您在屏幕上选择想要启动的系统。

鼠标按键
在按下电源按钮开机后,如按着鼠标按键不放,会将光驱内的光盘片强制退出。

苹果键-Option-Shift-Q
苹果键-Option- 注销
您可以用这两种组合的其中一种,当您同时按下苹果键、Option 、Shift 、Q键,或同时按着苹果键、Option 并加上苹果选单下的「注销」时,计算机将不会出现询问您是否要注销的画面,而直接注销目前的使用者。

Option- 主机上的电源开关
苹果键-Option- 关机
您可以用这两种组合的其中一种,当您同时按下Option、电源开关,或同时按着苹果键、Option 并加上苹果选单下的「关机」时,计算机将不会出现询问您是否要关机的画面,而会直接关机。此组合键不适用在较旧的Mac主机上。

苹果键-Option- 重新开机:
同时按着苹果键、Option 并加上苹果选单下的「重新开机」时,计算机将不会出现询问您是否要重新开机的画面,而会直接重开机。此组合键不适用在较旧的Mac主机上。

Control- 苹果键- 主机上的电源开关
同时按着苹果键、Control并加上电源开关,将会强制计算机重新开机,但请您注意,非绝对必要不要用这个方式重开机,如用此方是重开机后,因为系统会自动检修不正常关机所造成问题,所以会停留在灰色的开机画面非常久。此组合键不适用在较旧的Mac 主机上。

定时关机
大家是否想半夜关机,但是又懒得起床?
在terminal里输入:sudo shutdown -h [时间]
例如:sudo shutdown -h 23:00 Sep 23th 2005. 电脑会在2005年9月23日晚上11点关机。(把 -h 变成 -r 就是重新启动)