搬砖头

Knocking on Heaven's Door
posts - 34, comments - 6, trackbacks - 0, articles - 0

2007年7月25日

RedHat Linux操作系统修改时区的方法
Most modern Linux distributions have user-friendly programs to set the timezone, often accesible through the program menus or right-clicking the clock in a desktop environment such as KDE or GNOME. Failing that it’s possible to manually change the system timezone in Linux in a few short steps.
It’s possible to change the system timezone in Linux in a few short steps.
Steps
1. Logged in as root, check which timezone your machine is currently using by executing `date`. You’ll see something like “Mon 17 Jan 2005 12:15:08 PM PST -0.461203 seconds”, PST in this case is the current timezone.
2. Change to the directory to /usr/share/zoneinfo, here you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the “Americas” directory.
3. If you wish, backup the previous timezone configuration by copying it to a different location. Such as `mv /etc/localtime /etc/localtime-old`.
4. Create a symbolic link from the appropiate timezone to /etc/localtime. Example: `ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime`.
5. If you have the utility rdate, update the current system time by executing `/usr/bin/rdate -s time.nist.gov`. (This step can be skip!)
6. Set the ZONE entry in the file /etc/sysconfig/clock file (e.g. “America/Los_Angeles”)
7. Set the hardware clock by executing: ` /sbin/hwclock –systohc`
Tips
· On some versions of RedHat Linux, Slackware, Gentoo, SuSE, Debian, Ubuntu, and anything else that is “normal”, the command to display and change the time is ‘date’, not ‘clock’
· On RedHat Linux there is a utility called “Setup” that allows one to select the timezone from a list, but you must have installed the ‘redhat-config-date’ package.
Warnings
· Some applications (such as PHP) have separate timezone settings from the system timezone.
· On some systems, /etc/localtime is actually a symlink to the appropriate file under the /usr/share/zoneinfo directory (rather than a copy of that file).
· On some systems, there is a system utility provided that will prompt for the correct timezone and make the proper changes to the system configuration. For example,Debianprovides the “tzsetup” utility.
Here is an example of changing the timezone: (Logged in as root)
In order to manually change the timezone, you can edit the /etc/sysconfig/clockfile and then make a new soft link to /etc/localtime. Here is an example of changing the timezone manually to “America/Denver”:
1. Select the appropriate time zone from the /usr/share/zoneinfo directory. Time zone names are relative to that directory. In this case, we will select “America/Denver”
2. Edit the /etc/sysconfig/clocktext file so that it looks like this:
ZONE=”America/Denver”
UTC=true
ARC=false
Of course, this assumes that your hardware clock is running UTC time…
3. Delete the following file: /etc/localtime (backup it when you need it !)
4. Create a new soft link for /etc/localtime. Here is an example of step 3 and step 4:
# cd /etc
# ls -al localtime
lrwxrwxrwx 1 root root 39 Mar 28 07:00 localtime -> /usr/share/zoneinfo/America/Los_Angeles
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
# ls -al localtime
lrwxrwxrwx 1 root root 34 Mar 28 08:59 localtime -> /usr/share/zoneinfo/America/Denver
# date
Fri Mar 28 09:00:04 MST 2003


针对中国时区,修改操作如下
1.   修改文件 /etc/sysconfig/clock内容:
ZONE=Asia/Shanghai
UTC=false
ARC=false
2.     rm /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
还有其他方法修改时区,不过是基于图形化界面的命令: tzselect 、 timeconfig
本文为镜像,原贴在此:http://www.btk4ever.com/?p=10443

posted @ 2009-04-28 09:35 生活在别处 阅读(2146) | 评论 (0)编辑 收藏

朋友搬到个新地方,没有宽带了,但是能收到些加密的无线网络,挺想蹭网的,本人由于是所谓“挨踢”人士,自当义不容辞出手相助。

我也只是想了解下WEP破解这事,目的也只是提醒大家一下要加强无线网络安全,千万不要干啥非法的事情,当然有本事的话,就把屁股擦干净。

其实前两年我就知道WEP加密是极不安全的,而且也出于好奇做过密钥破解的尝试,但是由于破解软件特别挑网卡,结果自然就是半途而废了。这次到网上 再度查了点相关资料,发现这事情已然变得相当的简单了,基本上只需要 BackTrack3 就可以搞定了。Backtrack 是一个黑客操作系统,其实也算是一个linux的黑客版,主要是安装了很多实用的软件和黑客工具,偏向于安全侵入方面的。

我是下载了一个BackTrack3 的usb版本,并且下了最新的扫描工具spoonwep2,系统自带的是spoonwep也能用,但是据说新版更好使,更方面。整个过程挺简单的,机器设 置成usb可引导启动,然后启动进入usb上的BackTrack系统,都是图形界面的,打开spoonwep2工具,扫描周围的无线信号,选择信号强 的,有客户端连接,并且DATA包比较多的信号来破解吧,这样应该可以快点,据说XX分钟就能破解了。没有客户端连接的无线信号,据说有些AP也是同样可 以破解的,无非是攻击方式的变化以及花费的时间更长而已。

我的经历是,晚上10点多开始破一个无线信号,等了一个多小时,进度开始变缓慢,因为本来连着的两个客户端下线了,估计困搞去了…,很无奈,我也不 能傻等,只得也睡觉去了。第二天早上起来,1o点多的时候,才抓满了要求的数据包,整个密钥破解过程倒是瞬间完成,然后我看到的密码是”1111111″ ,囧 rz,看来设无线密码的人都很懒。这个过程还是挺漫长的,可能是没选择对正确的攻击方式,导致数据包获取的过程很长。假如有客户端在BT下载,估计快很 多,要是只是qq聊天,那就要耗很久了。不过整个过程,已经相当的傻瓜化了。

这事也不能说的太细,想了解详细的人,网上查去吧,顺便提供一个教程

至于如何加强无线安全,有这么几点(网上找的)

如果你需要你的AP很难被破解,建议:
1)用WPA 加密方式,并且使用不可能被字典猜到的密码,目前还是基本可靠的
2)如果只支持 WEP加密,那么,尽量考虑用隐藏 SSID的方式,这样可以增加破解难度
3)如果只支持 WEP加密,那么,可以考虑使用中文名字作为SSID,这样基本问题不大。
4)一般破解时候,大家都会选择常用的频道,例如 6频道, 第三步显示频道的时候,你的AP也会被列出来,那么第一个目标失败的时候,黑客往往会选择第二个容易下手的目标, 但是如果你选择了8、 4、这些奇怪的频道,那么狠客往往懒得重新进入该频道的监控模式,你就可以逃过一劫。不过, 某些廉价AP,往往对6 频道做了优化,这个频道信号最强….这就没办法了。
5)有空换换你的密码:)

还有其他几点也可以做,如减低信号、关闭DHCP、MAC地址绑定,当然这些措施也只是增加难度而已。

最后提一下,蹭网是有风险的,无线信号不加密的,人家未必就是大善人或者菜鸟,而且还有人专门钓鱼的,加大信号,设置简单密码,专门等蹭网的人来,数据包一抓,等着被玩吧。

本文为镜像,原贴在此:http://www.btk4ever.com/?p=10423

posted @ 2009-04-28 09:33 生活在别处 阅读(1182) | 评论 (0)编辑 收藏

考虑把Live Space的日志转移到Wordpress 架的blog去,郁闷的是Live Space并不支持通用的导出格式,要是一条条日志复制过去的话,这工作量也实在是够吓人的。只好到网上找解决办法了,真搞不定的话,只能放弃Live Space的日志了。结果很不幸,被我找个一个Live Space Mover的工具,很华丽的搞定了动迁的工作。在此向作者Wei Wei致敬了,随便介绍推广一下。

Live Space Mover 工具的说明在这里:http://b2.broom9.com/?page_id=519

这个工具是通过Python脚本抓取live space的日志和留言,保存为wordpress支持的通用xml文件。最后将文件通过wordpress后台管理提供的导入功能,将日志迁移过去。

具体操作步骤就参照作者blog里的user guide,非常详细的。

大致过程是这样:

1.安装Python的环境,并下载Beautiful Soup的类库

2.Google Code下载最近的Live Space Mover 工具(几个python脚本)

3.按照作者的要求,对space进行设置,主要是开放访问权限和设置日期格式

4.命令行方式执行脚本,开始日志抓取(脚本参数参照user guide)

–如执行过程出现超时或者假死情况(我都碰到了…),关闭重新执行脚本即可,工具有cache文件,会从断点开始继续的

5.将生成的xml文件导入wordprss

工具目前还有一点瑕疵,下面这段话来自作者的blog,关于目前工具无法解决问题的说明,看来又是live space的怨念。

After the live space updates in Dec 2008 (live space mover version 1.7), there are some limitations for comments, including:

1. can’t get the accurate time of comments, sometimes even incorrect;

2. can’t get the email and url of comment authors.

These are both due to the ridiculous design of Live Space. If you have any idea about how to solve these 2 problems, please let me know.

本文为镜像,原贴在此:http://www.btk4ever.com/?p=10025

posted @ 2009-02-17 17:00 生活在别处 阅读(884) | 评论 (0)编辑 收藏

已部署的一个JAVA程序最近需要改成定期执行,于是就放到crontab调度,结果遇到了中文乱码问题。脚本在shell环境下直接运行没有问 题。到网上收了一下,碰到这个问题的还真不少,结论是crontab执行时不会携带用户的环境变量,缺失一些系统变量。需要在脚本里额外添加缺失的环境变 量,针对中文问题,需要声明 LANG参数

在脚本开头增加:
LANG=”zh_CN.GB18030″
export LANG

由于是中文问题,设置的编码要和系统设置的一致,具体可以到/etc/sysconfig/i18n 查看对应的环境变量

本文为镜像:原帖在此:http://www.btk4ever.com/?p=10040

posted @ 2009-02-17 16:55 生活在别处 阅读(1408) | 评论 (0)编辑 收藏

据说在oracle 10g的版本,在数据库实例正常启动open的情况下,直接通过命令类似" drop database 'dbname' "这种方式就可以删除一个数据库实例。
这里说的是oracle 9i的情况下,不依赖其他工具的情况下,手工删除一个数据库实例。
操作步骤为网上查来的,并经过我验证通过,操作之前请确保该实例已经被停止,具体步骤见下:
========================
To delete a database,
First:
Select "rm -f "||name from v$controlfile
union
select "rm -f "||name from v$datafile
union
select "rm -f "||member from v$logfile;
Second:
Clean up above output & make it executable
Third:
If installation follows OFA standard:
remove directory $ORACLE_BASE/admin/$ORACLE_SID
Fourth:
Delete archive log directory (if archive mode)
============================
 

posted @ 2008-11-11 11:49 生活在别处 阅读(1639) | 评论 (0)编辑 收藏

找一篇靠谱的教程来跟着做,是相当重要,不然就会吃药,网上文章都是抄来抄去的,不然怎么死的都不知道个。
我比较衰,找了一篇不是很靠谱的来做,结果越到了不少小问题。
关于手工建库,参照下面两篇,应该是比较靠谱的。
另外一篇比较靠谱的文章,地址如下:http://www.ixdba.net/hbcms/article/14/336.html
===============================================

Red Hat Enterprise 3 + Oracle 10g Release 2

$su – oracle

1--- 设置系统环境变量:

ORACLE_HOME=/opt/oracle/product/10.2

ORACLE_BASE=/opt/oracle

ORACLE_SID=dbtest

......

2--- 系统规划:

实例名称ORACLE_SID=dbtest

数据库名称DB_NAME=dbtest

3--- 手工创建如下目录:

/opt/oracle/admin/dbtest/cdump

/opt/oracle/admin/dbtest/bdump

/opt/oracle/admin/dbtest/udump

/opt/oracle/admin/dbtest/pfile

/opt/oracle/oradata/dbtest/

/opt/oracle/oradata/dbtest/archive

4--- 建立密码文件:

orapwd file=/opt/oracle/product/10.2/dbs/orapwd_dbtest password=superman

5---修改参数文件:

格式:/opt/oracle/product/10.2/dbs/init.ora

实例:/opt/oracle/product/10.2/dbs/initdbtest.ora

内容如下:

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

dbtest.__db_cache_size=331350016

dbtest.__java_pool_size=4194304

dbtest.__large_pool_size=8388608

dbtest.__shared_pool_size=138412032

dbtest.__streams_pool_size=0

*._kgl_large_heap_warning_threshold=8388608

*.audit_file_dest='/opt/oracle/admin/dbtest/adump'

*.background_dump_dest='/opt/oracle/admin/dbtest/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/opt/oracle/oradata/dbtest/control01.ctl','/opt/oracle/oradata/dbtest/control02.ctl','/opt/oracle/oradata/dbtest/control03.ctl'

*.core_dump_dest='/opt/oracle/admin/dbtest/cdump'

*.db_2k_cache_size=33554432

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=128

*.db_files=4000

*.db_name='dbtest'

*.db_recovery_file_dest_size=4294967296

*.db_recovery_file_dest=''

*.log_archive_dest='/opt/oracle/oradata/dbtest/archive'

*.log_checkpoints_to_alert=FALSE

*.open_cursors=300

*.parallel_execution_message_size=65535

*.parallel_max_servers=128

*.pga_aggregate_target=209715200

*.processes=150

*.recyclebin='OFF'

*.remote_login_passwordfile='EXCLUSIVE'

*.replication_dependency_tracking=FALSE

*.session_cached_cursors=100

*.sga_target=500m

*.shared_pool_size=100m

*.undo_management='AUTO'

*.undo_retention=0

*.undo_tablespace='UNDOTS'

*.user_dump_dest='/opt/oracle/admin/dbtest/udump'

*.workarea_size_policy='AUTO'

_allow_resetlogs_corruption=true

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

可将此文件复制到:/opt/oracle/admin/dbtest/pfile/init.ora

6--- 登陆oracle

> sqlplus “/ as sysdba”

7--- 启动实例:

SQL> startup nomount pfile=/opt/oracle/admin/dbtest/pfile/init.ora

8--- 创建数据库的脚本:

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

CREATE DATABASE dbtest

LOGFILE

GROUP 1 ('/opt/oracle/oradata/dbtest/redo01.log','/opt/oracle/oradata/dbtest/redo01_1.log') size 100m reuse,

GROUP 2 ('/opt/oracle/oradata/dbtest/redo02.log','/opt/oracle/oradata/dbtest/redo02_1.log') size 100m reuse,

GROUP 3 ('/opt/oracle/oradata/dbtest/redo03.log','/opt/oracle/oradata/dbtest/redo03_1.log') size 100m reuse

MAXLOGFILES 50

MAXLOGMEMBERS 5

MAXLOGHISTORY 200

MAXDATAFILES 500

MAXINSTANCES 5

ARCHIVELOG

CHARACTER SET UTF8

NATIONAL CHARACTER SET UTF8

DATAFILE '/opt/oracle/oradata/dbtest/system01.dbf' SIZE 1000M EXTENT MANAGEMENT LOCAL

SYSAUX DATAFILE '/opt/oracle/oradata/dbtest/sysaux01.dbf' SIZE 1000M

UNDO TABLESPACE UNDOTS DATAFILE '/opt/oracle/oradata/dbtest/undo.dbf' SIZE 500M

DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/opt/oracle/oradata/dbtest/temp.dbf' SIZE 500M

;

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

9--- 运行如下文件(安装下面的先后顺序)

/opt/oracle/product/10.2/rdbms/admin/catalog.sql

/opt/oracle/product/10.2/rdbms/admin/catproc.sql

10--- 创建相关表空间与用户:

CREATE TABLESPACE USERS DATAFILE '/opt/oracle/oradata/dbtest/users01.dbf' SIZE 1000M;---数据表空间

CREATE TABLESPACE INDX DATAFILE '/opt/oracle/oradata/dbtest/indx01.dbf' SIZE 1000M;---在建立索引的时候把此表空间作为存储空间,即单独用一个表空间来存储索引,这是个好习惯,虽然我们没有办法建立一个默认的索引表空间!

CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE users ;---测试用户

GRANT CONNECT,RESOURCE TO test;

11--- 一点注意的地方:

1>.相关文件的目录要设置正确,有数据文件,控制文件,参数文件等,还有就是它们的位置要与控制文件中指定的要一致。

2>.init.ora中的undo_tablespace的名字必须要与create database的相同,包括大小写等注意。否则很麻烦,报的错误你都不知道是不是在忽悠你!总之,一句话,控制文件中的内容要和init文件中的内容以及要和实际文件的实际情况要相同。

3>.分析数据库出错可以到/opt/oracle/admin/dbtest/bdump/alert_dbtest.log中查找。

===============================================

 补充:

   我碰到的一个问题,在普通用户sqlplus登录时,碰到下面的告警提示  

    Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM

 请按照提示,以SYSTEM用户登入SQL*Plus,然后执行PUPBLD.SQL,这个文件通常在$ORACLE_HOME/sqlplus/admin目录中。
SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql

posted @ 2008-11-11 11:47 生活在别处 阅读(673) | 评论 (0)编辑 收藏

切割合并文件在linux下用split和cat就可以完成。下面举些实例进行说明。
1.文件切割
文件切割模式分为两种:
     文本文件
     二进制模式。
1.1文本模式
文本模式只适用于文本文件,用这种模式切割后的每个文件都是可读的。文本模式又分为两种:
     按最大文件大小切割;
     按文本行数切割。
1.1.1最大文件大小切割
split -C 5k duanxin split
将文本文件duanxin按每块最大5k的大小进行切割,不打碎行。输出文件名类似splitaa, splitab……
1.1.2 按文本行数切割
split -l 100 duanxin split
每个分块100行,不考虑大小。日志分析时应该有用。
1.2 二进制模式
split -b 5k duanxin split
每个分块(当然,最后一个不保证)大小都是5k,基本不可读。任何类型文件都可以用这种切割模式。
2.文件合并
cat split* >newduanxin
不管用什么方式切割,合并方法不变。
3.其它
split可以用-a选项指定输出文件名的长度。如
split -l 100 -a 3 duanxin split
则输出文件出类似于splitaaa,splitaab。不指定时默认为2。
用-b或-C指定分块大小时,可用的单位有,b for 512bytes, k for 1Kbytes, m for 1 Megbytes.

参考资料
man split
-----------------------------------------------------------
找东西的时候发现网上都是讲这个的,就随手贴一下,据说分割还可以用DD命令
我的需求用split好像是搞不定的,希望从文本的指定行数进行分割,最终找到一个方法,见下:
sed -n '1001,2000p' ur-file >newfile
随后就发现,sed超级有用,有兴趣的自己了解吧,附送一个介绍sed用法的文章:

posted @ 2008-11-11 11:25 生活在别处 阅读(3907) | 评论 (0)编辑 收藏

 

今天晚上上网,打开网页都很困难,查了查发现开着BT,关掉以后就正常。
这种鸟事情,以前也碰到过,应该是TCP/IP并发连接数的问题,一查果然又被重置到了10。
昨天是10号,是微软每月发布安全补丁的日子,记得是有装补丁个,估计就是那个补丁搞得鬼了。
各位打了补丁的同志,去修改下系统连接数吧!

posted @ 2008-07-11 21:46 生活在别处 阅读(292) | 评论 (0)编辑 收藏


    今天试图在gtalk上传个文件,捣腾半天也耍不起来,最后惊奇的发现,原来中文版的gtalk是被阉割过的,少掉了不少功能。话说,google.cn也就是谷歌,也是被阉割过的,在这个和谐的国度里,就算你输入google.com,你也去不了想去的地方,咱这里有伟大的GFW和DNS挟持。百度么,天生就阉掉的,谷歌至少还有行字“据当地法律法规和政策,部分搜索结果未予显示。”让你知道这玩意是太监,百度么看上去是个女人。
    我并不是google饭,但是google有些服务我倒一直在用。gmail、gtalk、reader、bookmark、picasa,还有那个工具条,有些东西用起来还挺爽的。但是你一旦知道,你常用的东西,有些是被阉割过的,总会有点疙瘩个。当然,有些阉割不能怪罪我们伟大的和谐国,比如把gmail语言换成英文,就会多出选项个。
    最后顺带提一下电影的阉割版,内地的剪刀手功力是相当的深厚,不仅可以把那玩意割掉,还不经意留下几个彩蛋,提升一下片子的深度,赞一记个。
    最后的最后,问候一记GFW,上个月几个网站又上不去了,连sourceforge也走掉了,罪过罪过!

posted @ 2008-07-09 16:33 生活在别处 阅读(351) | 评论 (0)编辑 收藏

原帖地址在此:http://www.geektalks.cn/article.php?story=20080602125246318


telnet发电子邮件的目的很多,我们暂且假设一番:如果你不幸落入恐怖份子之手,他们只有一台瘦得不行的电脑,总之除了telnet程序啥都没有,在恐怖份子去吃羊肉泡馍而疏于照看你的大好时机,你如何发电子邮件通知外界呢?



当然,首先你要有一个支持中继转发的SMTP的帐号,幸运的是,现在即使免费的邮箱也会提供这个。

假设你有一个geekx@126.com的邮箱,密码是xgeek,则会话如下:(红色的话是你要说的

 $ telnet smtp.126.com 25 # 25 为标准SMTP端口

Trying 220.181.15.111...
Connected to smtp.126.com (220.181.15.111).
Escape character is '^]'.
220 126.com Anti-spam GT for Coremail System (126com[071018])

helo 126.com # 打个招呼先

250 OK
auth login # SMTP需要认证
334 dXNlcm5hbWU6 # 这是个base64编码的明文,翻译过来是“username:"
Z2Vla3g= # base64编码的明文,翻译过来是“geekx"
334 UGFzc3dvcmQ6 # 这是个base64编码的明文,翻译过来是“password:"
eGdlZWs= # base64编码的明文,翻译过来是“xgeek"
235 Authentication successful
mail from:<geekx@126.com>
250 Mail OK
rcpt to:<superman@savetheworld.com> # 发给XXX
250 Mail OK
data #开始写信
354 End data with <CR><LF>.<CR><LF>

subject:Help!!
                                  #这里空一行再写正文
The world is under attack,

Terrorists are eating yang—rou—pao—mo...
                                  #写完信后空一行
.                  #写一个句点表示信的结束

250 Mail OK queued as smtp1,C8mowLC7fAy8GydISdAtCw==.834S2 1210522683
quit
221 Bye #SMTP小姐跟你说再见
Connection closed by foreign host.

那么,如何知道你的用户名和密码的base64编码呢?当然是预先要记在脑子里,如果实在记不下的话,用uuencode翻译一下吧:

 $ echo -n 'geekx' | uuencode -m xxx # -m 指定 base64编码

begin-base64 664 xxx
Z2Vla3g=
====

好了,在恐怖份子吃完午饭回来之前,你已经成功地把信发给超人啦。

posted @ 2008-06-12 10:28 生活在别处 阅读(510) | 评论 (0)编辑 收藏

history|grep halt
cat .bash_history|grep halt

不同的系统history文件是不一样的,
一般是$HOME目录下

查找find / -name "*history"
主要是root及oracle下的

Redhat的root
/root/.bash_history

/var/log下呀
查看wtmp文件
who wtmp.n

posted @ 2008-04-24 14:26 生活在别处 阅读(142) | 评论 (0)编辑 收藏

一、一些重要的概念(关于Linux系统的一些重要特性)
    由于我们用Windows太多,我就感觉我自己除了会点鼠标之外对于Windows系统没有太多的了解,甚至没有Linux多.
    1、文件系统结构
    2、文件类型
       一切都是文件,包括普通文件、设备文件、目录等等
    3、运行级别
       Linux有6个运行级别
    4、管道
    5、重定向
    6、交换分区
    7、根目录下各个目录的意义
二、文本编辑
    1、vi的用法
三、常用的命令
    1、基本
    包括:cd   clear  alias  unalias  date  ls  pwd  man exit  echo
    2、文件管理
    包括:cat  more  rm  head  tail  grep  cp  mv  wc find
    3、目录管理
    包括:mkdir  rmdir  rm  find  file  du  df
    4、权限命令
       如何设定我们用户和文件以及系统的权限。
       包括:chmod  chown  chgrp umask
    5、系统命令
       包括:mount  umount  uname  free  env
             uptime  setup  xinetd  top  kill  关机命令
    5、常用的网络命令
       关于网络管理以及使用的一些命令
四、安装与卸载(限于Redhat以及相似系统)
     1、RPM命令
     2、Oracle9i安装卸载以及基本管理
五、相关工具的命令
    1、FTP
    2、Telnet
六、常见的系统设置
    1、运行级别
    2、共享(NFS)
    3、修改Swap
    4、设定系统环境变量(JDK安装)
    5、系统备份(打包、压缩以及解压缩)
    6、常见的标志(权限:r w x s t 标志:l b c d)
七、Shell编程
    1、Shell变量和参数
    2、环境变量
    3、位置参数
    4、运算符
    5、常用语句
    6、函数
    7、控制
    8、运行方式
八、Linux安装
九、Crontab简单应用

以前的存档,源未知

posted @ 2008-02-21 14:24 生活在别处 阅读(298) | 评论 (0)编辑 收藏


1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off

2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。

在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT

posted @ 2008-02-21 14:22 生活在别处 阅读(851) | 评论 (0)编辑 收藏

碰到了问题,找到了解决,存档一下
关键字: jdk 字符集 linux
原因:首先,JFreeChart和中文验证码的乱码问题和jsp的编码无关,是由于Java虚拟机找不到字体文件造成的,所以同类的Swing或者AWT的中文乱码问题也适用

环境:
JDK1.5(JDK版本很重要,如果是1.4.2版本的话,JRE目录下的字体配置文件不大一样)
RedHat4.0
Tomcat5.0

解决方法:
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf
2.在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3.确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4.确认/usr/share/fonts/zh_CN/TrueType目录下存在zysong.ttf
5.在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6.重新启动tomcat,大功告成!

需要下载zysong.ttf

posted @ 2008-02-21 14:19 生活在别处 阅读(697) | 评论 (0)编辑 收藏

  • Ctrl + Shift + T:打开类型:显示"打开类型"对话框来在编辑器中打开类型。"打开类型"选择对话框显示工作空间中存在的所有类型如类、接口等
  • Ctrl + Shift + R:打开资源:打开"打开资源"对话框以打开工作空间中的任何资源。在Package Explorer中不必浏览文件便可快速打开任意一个文件。使用这个快捷键可以打开一个对话框,在里面输入你想查找的文件或者通配符既可。
  • Ctrl + O: 快速大纲:打开当前所选类型的轻量级大纲图。在一个文件中直接打开一个成员变量(如字段、方法),尤其是有许多类似的方法名的时候这个快捷键将变得非常有用。
  • Ctrl + L, 输入行数: 转至行:打开一个对话框,允许您输入编辑器应该跳至的行号。仅适用于编辑器。输入行号,可以快速跳转到源文件中的第N行,
  • Ctrl + Q:上一个编辑位置:显示上一个编辑操作的发生位置,返回到最近的修改位置。即使你查看不同的文件时,你也可以使用该快捷键来找到你最近对文件的修改位置。尤其是在文件比较大时,显得更为有用。
  • Ctrl + T: 快速类型层次结构:打开当前选择的类型的轻量级层次结构查看器,可以实现快速转到一个supertype或者subtype.
  • Ctrl + E:快速跳转到另外一个编辑器。注意Ctrl + F6也可以实现这个功能,在使用的时候可以注意一下他们的异同。
  • Ctrl + ./Ctrl +,:在一个文件中快速定位到一个问题(如错误、警告等)
  • Alt + and Alt + :来回跳转至你所查阅的文件
  • F3: 快速转到一个类型声明。同时也可以按住ctrl健并点击该超链接变量或者类或者你想查看的任何声明都可以。

  • 更多
    ctrl+space
    alt+上下箭头
    ctrl+alt+上下箭头
    ctrl|+/
    ctrl+d

    posted @ 2007-11-02 17:01 生活在别处 阅读(306) | 评论 (0)编辑 收藏

    以前碰到过,要tomcat开机启动的问题,后来用root用户启,但是风险很大
    这次碰巧看到了解决办法,赶紧收了下来
    原帖名字:ubuntu7.04 安装tomcat6
    来源:http://tristonxu.spaces.live.com/blog/cns!6C727D52D9679258!382.entry

    终于搞定了,如果仅仅安装tomcat,那是很容易的,问题是如何让他随ubuntu启动运行,这才是问题的关键!现在终于搞定了,唉...俺还是比较笨,居然用了两天的时间才解决,而且问题解决之后,才发现之前原来一直是在成功的门前徘徊。想想,人生何尝不是这样,有多少人用一辈子的时光在成功的门前晃荡...
    呵呵~还是赶紧把它记录下来吧,年纪大了阿...

    一、安装之前
    1、下载tomcat
    最新的tomcat是apache-tomcat-6.0.13.tar.gz,下载地址是:http://tomcat.apache.org/download-60.cgi

    安装之前要先安张jdk,最好选择JDK5.0以上版本吧。

    二、安装ing
    1、解压apache-tomcat-6.0.13.tar.gz到安装目录下。
    根据俺的实际情况,我把tmcat安装在/opt目录下
    shell>sudo tar zxvf apache-tomcat-6.0.13.tar.gz /opt
    解压之后,会在/opt下生成一个apache-tomcat-6.0.13文件夹

    2、在/usr/local下建立一个软链接
    shell>cd /usr/local
    shell>sudo ln -s /opt/apache-tomcat-6.0.13 tomcat6

    3、测试安装
    运行启动脚本,测试tomcat是否安装成功
    shell>sudo /usr/local/tomcat6/bin/startup.sh
    然后打开FF,用http://localhost:8080 访问tomcat。一般来讲,会成功的。呵呵~

    三、让tomcat开机启动
    根据apache网站的Document说明(这个说明也写得很差,呜呜!),要是tomcat作为一个守护程序运行,需要用到jsvc工具。(这个工具是啥玩意,俺也不懂,懒得研究,居然tomcat自带,那就最好了)
    1、准备工作
    Tomcat安装后,如果让Tomcat用root身份启动,Tomcat将会拥用root权限,这将可能给系统带来安全隐患,黑客可能利用这个来攻击我们的系统,所以我们得添加一个独立运行此服务的用户,用下面的命令:

    shell>sudo useradd -d /usr/local/tomcat6 -s /usr/sbin/nologin tomcat
    以上命令为系统增加一个tomcat用户,并且设置为nologin

    设置用户tomcat5对tomcat的权限
    shell>sudo chown -R tomcat:tomcat /usr/local/tomcat6
    shell> sudo chown -R tomcat:tomcat /opt/apache-tomcat-6.0.13

    2、安装jsvc
    shell>cd /usr/local/tomcat6/bin
    shell>sudo tar xvfz jsvc.tar.gz
    shell>cd jsvc-src
    shell>sudo sh support/buildconf.sh
    如果成功,命令终端打印出下面report:
    support/buildconf.sh: configure script generated successfully

    [注:在此之前,我的系统安装了autoconf,可以使用shell>sudo apt-get install autoconf 进行安装]
    为configure添加执行权限
    shell>sudo chmod 755 configure
    shell>sudo ./configure --with-java=/usr/lib/j2sdk1.6-sun (这是俺系统的JDK安装的位置)
    shell>sudo make

    okay!如果没有出现错误的话,jsvc就安装成功了!

    3、设置启动脚本
    接下来,就是把jsvc中带有的一个tomcat5.sh的一个模板复制到/etc/init.d目录下,然后根据自己的情况,进行修改。
    shell>sudo cp /usr/local/tomcat6/bin/jsvc-src/native/Tomcat5.sh /etc/init.d/tomcat
    上面的命令是移动文件tomcat5.sh到/etc/init.d/里面并改名为tomcat

    修改/etc/init.d/tomcat文件:
    shell>cd /etc/init.d
    shell>sudo gedit tomcat

    俺的tomcat文件修改完如下:

    #!/bin/sh
    ##############################################################################
    #
    # Copyright 2004 The Apache Software Foundation.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    # http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ##############################################################################
    #
    # Small shell script to show how to start/stop Tomcat using jsvc
    # If you want to have Tomcat running on port 80 please modify the server.xml
    # file:
    #
    # <!-- Define a non-SSL HTTP/1.1 Connector on port 80 -->
    # <Connector className="org.apache.catalina.connector.http.HttpConnector"
    # port="80" minProcessors="5" maxProcessors="75"
    # enableLookups="true" redirectPort="8443"
    # acceptCount="10" debug="0" connectionTimeout="60000"/>
    #
    # That is for Tomcat-5.0.x (Apache Tomcat/5.0)
    #
    # Adapt the following lines to your configuration
    JAVA_HOME=/usr/lib/j2sdk1.6-sun
    CATALINA_HOME=/usr/local/tomcat6
    DAEMON_HOME=/usr/local/tomcat6/bin
    TOMCAT_USER=tomcat

    # for multi instances adapt those lines.
    TMP_DIR=/var/tmp
    PID_FILE=/var/run/jsvc.pid
    CATALINA_BASE=/usr/local/tomcat6

    CATALINA_OPTS=
    CLASSPATH=\
    $JAVA_HOME/lib/tools.jar:\
    $CATALINA_HOME/bin/commons-daemon.jar:\
    $CATALINA_HOME/bin/bootstrap.jar

    case "$1" in
    start)
    #
    # Start Tomcat
    #
    $DAEMON_HOME/jsvc-src/jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

    stop)
    #
    # Stop Tomcat
    #
    $DAEMON_HOME/src/native/unix/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

    *)
    echo "Usage tomcat.sh start/stop"
    exit 1;;
    esac

    [注:需要修改的地方,我都用红色标出来]
    如果在其他linux系统,这样就okay了,但是在ubuntu中,还需要进行一步,就是把在rc2.d中设置一个软链接

    在/etc/rc2.d目录下建立S16apache软联接到/etc/init.d/tomcat
    shell>cd /etc/rc2.d
    shell>ln -s /etc/init.d/apache2 S16apache
    [注:rc2.d目录下的文件要以S后就数字开头,表示启动的顺序。而rc2.d中的2,表示这个目录下文件在开机时的运行级别(runlevel)为2]

    四、结束
    重新启动系统
    shell>sudo reboot -n
    启动后,就可以在FF中直接输入http://localhost:8080。如果成功,就可以看见一直可爱的kitten拉~~~



    posted @ 2007-11-02 16:40 生活在别处 阅读(1638) | 评论 (0)编辑 收藏

            项目开发中,碰到的问题,原先设计的字段,定为VARCHAR2类型,最大长度为4000 bytes,实际的应用中,内容往往超过两千汉字,没办法正常插入,因此改为clob大字段类型。
            采用Hibernate,实现Clob和Blob对象的存取, 网上有很多解决方案,但是比较老,实际运用中,可能会碰到各种问题。下面是我采用的方案,比较简单,希望对碰到这个问题的人,有帮助。
            目前oracle的driver已经支持JDBC 直接操作 CLOB了,但是使用旧的driver的时候,会遇到各种问题,如2k字符的问题。
             最新的oracle10g的driver,已经解决了这些问题。我项目用ojdbc14-10.2.0.3.0.jar 连接oracle9i数据库,可以正常读写CLOB。
             Hibernate存取Clob和Blob对象,将 clob用string方式处理。
             Hibernate Annotations方式,只要映射成Lob类型就可以,对该字段的读写,就是一般的操作方式。

            @Lob
        public String getTxt() {
            
    return txt;
        }

            好了,就是这么简单!

    posted @ 2007-11-02 16:17 生活在别处 阅读(3570) | 评论 (3)编辑 收藏

    WIN下的tomcat5的日志是按日期来记录的.移到linux下发现tomcat/logs下只有一个catalina.out件.
    时间一长.发现日志文件暴增.对于管理真是不方便.
    要是能像win下的tomcat那样分日期记录就好了.思来想去就想到用cron来分割日志文件.
    试试吧.
    先google一下.cronolog-1.6.2.tar.gz
    1.下载cronolog-1.6.2.tar.gz
    2.安装
    # tar zxvf cronolog-1.6.2.tar.gz
    # ./configure
    # make
    # make install
    搞定!
    默认是安装在/usr/local/sbin/下.
    3.配置
    重点来了.注意喽!!!
    在tomcat/bin/catalian.sh中找到
    org.apache.catalina.startup.Bootstrap "$@" start \     >> "$CATALINA_BASE"/logs/catalina.out 2&1 &
     
    把上面的内容改成:
    org.apache.catalina.startup.Bootstrap "$@" start \
    |/usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null 2>&1 &
    修改好了.重启
    #./catalina.sh start
    现去看看劳动成果吧.
    # ls /tomcat/logs/
    就会发现logs下面多了几个如同catalina.2006.06.01.log的文件了.

    posted @ 2007-10-30 10:07 生活在别处 阅读(2561) | 评论 (0)编辑 收藏

        最近发现服务器被人穷举扫描,网上找了办法搞定了

    原贴:http://blog.chinaunix.net/u/17030/showart_315674.html

    我的服务器每天都会有无数的SSH失败尝试记录,有些无聊的人一直不停的扫描,这些人真够无聊的,没事吃饱了撑着,老找些软件在那里穷举扫描,所以大家第一要记的设置一个好的够复杂的密码。

    怎么样防,如果要一条一条将这些IP阻止显然治标不治本,还好有DenyHosts软件来代替我们手搞定他。

    DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件,当发现重复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP的功能。

    DenyHosts官方网站为:http://denyhosts.sourceforge.net

    以下是安装记录(以CentOS 4.3, DenyHosts 2.5 为例)

    安装

    # cd /usr/local/src
    # wget http://mesh.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.5.tar.gz
    # tar -zxvf DenyHosts-2.5.tar.gz
    # cd DenyHosts-2.5
    # python setup.py install

    默认是安装到/usr/share/denyhosts目录的。

    配置

    # cd /usr/share/denyhosts/
    # cp denyhosts.cfg-dist denyhosts.cfg
    # vi denyhosts.cfg

    根据自己需要进行相应的配置(解释见下文件的配置文件)

    设置启动脚本

    # cp daemon-control-dist daemon-control
    # chown root daemon-control
    # chmod 700 daemon-control

    完了之后执行daemon-contron start就可以了。

    # ./daemon-control start

    如果要使DenyHosts每次重起后自动启动还需做如下设置:

    # cd /etc/init.d
    # ln -s /usr/share/denyhosts/daemon-control denyhosts
    # chkconfig –add denyhosts
    # chkconfig –level 2345 denyhosts on

    或者修改/etc/rc.local文件:

    # vi /etc/rc.local

    加入下面这条命令

    /usr/share/denyhosts/daemon-control start

    DenyHosts配置文件:

    vi /etc/denyhosts.cfg

    SECURE_LOG = /var/log/secure
    #ssh 日志文件,它是根据这个文件来判断的。

    HOSTS_DENY = /etc/hosts.deny
    #控制用户登陆的文件

    PURGE_DENY = 5m
    #过多久后清除已经禁止的

    BLOCK_SERVICE = sshd
    #禁止的服务名

    DENY_THRESHOLD_INVALID = 1
    #允许无效用户失败的次数

    DENY_THRESHOLD_VALID = 10
    #允许普通用户登陆失败的次数

    DENY_THRESHOLD_ROOT = 5
    #允许root登陆失败的次数

    HOSTNAME_LOOKUP=NO
    #是否做域名反解

    ADMIN_EMAIL = iakuf@163.com
    #管理员邮件地址,它会给管理员发邮件

    DAEMON_LOG = /var/log/denyhosts
    #自己的日志文件

    然后就可以启动了:

    service denyhost start

    可以看看/etc/hosts.deny内是否有禁止的IP,有的话说明已经成功了。


    =========================================================
    原文地址 http://www.taoran.net/tech/denyhosts.html

    DenyHosts是用Python2.3写的一个程序,它会分析/var/log/secure(redhat,Fedora Core)等日志文件,当发现同一IP在进行多次SSH密

    码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。

    DenyHosts官方网站为:http://denyhosts.sourceforge.net


    一、检查安装条件

    1、首先判断系统安装的sshd是否支持tcp_wrappers(默认都支持)
    # ldd /usr/sbin/sshd
    libwrap.so.0 => /usr/lib/libwrap.so.0 (0x0046e000)

    2、判断默认安装的Python版本
    # python -V
    Python 2.3.4

    二、已安装Python2.3以上版本的情况(以RedHat AS4为例)

    1、安装DenyHosts

    # cd /usr/local/src
    # wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
    # tar zxf DenyHosts-2.6.tar.gz
    # cd DenyHosts-2.6
    # python setup.py install
      
       程序脚本自动安装到/usr/share/denyhosts
       库文件自动安装到/usr/lib/python2.3/site-packages/DenyHosts
       denyhosts.py自动安装到/usr/bin

    2、设置启动脚本
    # cd /usr/share/denyhosts/
    # cp daemon-control-dist daemon-control
    # chown root daemon-control
    # chmod 700 daemon-control
    # grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
    # vi denyhosts.cfg
      根据自己需要进行相应的修改
    ----------------denyhosts.cfg------------------------
    SECURE_LOG = /var/log/secure
    #RedHat/Fedora Core分析该日志文件
    #其它版本linux根据denyhosts.cfg-dist内提示选择。

    PURGE_DENY = 30m
    #过多久后清除

    DENY_THRESHOLD_INVALID = 1
    #允许无效用户(/etc/passwd未列出)登录失败的次数

    DENY_THRESHOLD_VALID = 5
    #允许有效(普通)用户登录失败的次数

    DENY_THRESHOLD_ROOT = 3
    #允许root登录失败的次数

    HOSTNAME_LOOKUP=NO
    #是否做域名反解
    ----------------denyhosts.cfg------------------------

    如果需要DenyHosts随系统重启而自动启动,还需做如下设置:
    # vi /etc/rc.local
        加入下面这条命令
    /usr/share/denyhosts/daemon-control start

    3、启动

    # /usr/share/denyhosts/daemon-control start



    三、未安装Python2.3以上版本的情况(以RedHat AS3、Python2.2为例)

    1、安装Python最新版本的源码包,不必卸载原有低版本Python
    # cd /usr/local/src
    # wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2
    # tar jxf Python-2.5.1.tar.bz2
    # cd Python-2.5.1
    # ./configure --prefix=/usr/local/python
    # make
    # make install

    2、安装DenyHosts
    # cd /usr/local/src
    # wget http://umn.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz
    # tar zxf DenyHosts-2.6.tar.gz
    # cd DenyHosts-2.6
    # vi setup.py
      将"/usr/bin/env python"替换为"/usr/local/python/bin/python",在第一行
    # vi daemon-control-dist
      将"/usr/bin/env python"替换为"/usr/local/python/bin/python",注意有两处
    # /usr/local/python/bin/python setup.py install

       程序脚本自动安装到/usr/share/denyhosts
       库文件自动安装到/usr/local/python/lib/python2.5/site-packages/DenyHosts
       denyhosts.py自动安装到/usr/local/python/bin

    # ln -s /usr/local/python/bin/denyhosts.py /usr/bin

    posted @ 2007-10-30 10:01 生活在别处 阅读(650) | 评论 (1)编辑 收藏

    原帖地址: http://www.blogjava.net/Unmi/archive/2007/07/25/132391.html


    做了一个 Java 程序放在 Solaris 下运行,用到许多的第三方包,有 *.zip 的和 *.jar的,放在 lib 目录下,然后写了一个 shell 脚本来运行那个 java 程序,那就要在 classpath 中包含所有在 lib 中的第三方包。

    原来的做法是在 classpath中把lib目录中一个个的包文件名用冒号连缀起来,比如
    classpath=.:lib/a.jar:lib/b.jar:lib/c.jar:lib/d.zip
    java -classpath $classpath com.unmi.Main

    碰到程序升级,在lib中增加或减少了包文件,又要再重新修改那个启动 java 程序的 shell 脚本,甚是麻烦。由此想写个 shell,功能是能列举lib目录下所有第三方包,用冒号连缀成一个 classpath 变量,这样的话,无论在 lib 目录中增减包,都不需要再次修改那个启动 java 程序的 shell 脚本,就像 tomcat,无论是 common/lib 还是 app/WEB-INF/lib 中的第三方包,即放即用。

    记得在以前一个公司,有见过这样的脚本,不过记不清了,大致是用 while 循环来生成那样一个classpath 变量的。

    还好在网上有高人出手相救,在 CSDN 发了一个贴:

    http://community.csdn.net/Expert/topic/5671/5671131.xml?temp=.7013971

    过一天就有人回复,完成这一功能的代码是:

    #!/bin/sh

    _jar=`ls | grep "..*\.zip$"`
    _zip=`ls | grep "..*\.jar$"`
    _classpath="${_jar} ${_zip}"
    classpath=`echo ${_classpath} | sed -e 's/ /:/g'`
    echo ${classpath}

    这里根据我们前面的需求,是要列出 lib 目录下的 *.zip 或 *.jar 包,所以 shell 改写为:

    #!/bin/sh

    _jar=`ls lib | grep "..*\.zip$"`  #列举lib目录下的 *.zip 文件
    _zip=`ls lib | grep "..*\.jar$"`  #列举lib目录下的 *.zip 文件
    _classpath="${_jar} ${_zip}"
    classpath=`echo ${_classpath} | sed -e 's/ /:lib\//g'`   #包名前都要带个 lib/
    echo ${classpath}

    这样,你就可以使用这个 classpath 变量了

    java -classpath .:${classpath} com.unmi.Main #把当前目录 . 也加到 classpath 中

    在此非常感谢 mymtom(mymtom) 的回复。

    最后回头来想想这也就是在原来的 JRE 版本需要手工处理这些事情,如果能用上新版 6.0 Mustang JRE,就可以用它的新特性之一,classpath 通配符,java -classpath .;lib\*.jar:lib\*.zip 了,可是相信大多数同我一样,还享受不起最新版,只能暂且麻烦一些了。
    posted on 2007-07-25 21:14 Unmi 阅读(685) 评论(4)  编辑  收藏

    Feedback

    # re: [导入]Linux/Unix下读取lib目录下所有包生成classpath的Shell 2007-07-27 09:41 blackstone
    提供另一种办法

    #!/bin/sh
    #获取当前目录
    PWD=`pwd`
    for i in lib/*;
    do CLASSPATH=$PWD/$i:"$CLASSPATH";
    done

    export CLASSPATH=.:$CLASSPATH

    java Your Main Class  回复  更多评论
      

    # re: [导入]Linux/Unix下读取lib目录下所有包生成classpath的Shell 2007-07-27 13:07 Unmi
    太好,更简练了,对我来说写成下来那样子就行了

    #!/bin/sh
    CP=.
    for file in lib/*;
    do CP=${CP}:$file;
    done
    echo $CP
    #我只要用这个CP就行
      回复  更多评论
      

    # re: [导入]Linux/Unix下读取lib目录下所有包生成classpath的Shell 2007-09-30 10:38 飞猫
    这个更方便:
    CLASSPATH=`find lib -name *.jar|xargs|sed "s/ /:/g"`
    CLASSPATH=".:$CLASSPATH"
    echo $CLASSPATH

      回复  更多评论 
      
     
    DOS批处理脚本枚举 lib 目录下的 jar 和 zip 文件,拼成 classpath 的脚本

    @echo off
    setlocal EnableDelayedExpansion
    set cp=.
    for /F %%a in ('dir lib\*.jar lib\*.zip /b') do set cp=!cp!;%%a
    @echo %cp%

    posted @ 2007-10-10 16:50 生活在别处 阅读(4854) | 评论 (0)编辑 收藏

     

    Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。

         视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。

         视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。

    视图的优点:

           1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。

           2.用户通过简单的查询可以从复杂查询中得到结果。

           3.维护数据的独立性,试图可从多个表检索数据。

           4.对于相同的数据可产生不同的视图。

    视图分为简单视图和复杂视图:

           简单视图只从单表里获取数据
           复杂视图从多表

           简单视图不包含函数和数据组
           复杂视图包含

          简单视图可以实现DML操作
          复杂视图不可以.

    视图的创建:

        CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

      [(alias[, alias]...)]

       AS subquery
       [WITH CHECK OPTION [CONSTRAINT constraint]]
       [WITH READ ONLY]
    FORCE               :不管基表是否存在ORACLE都会自动创建该视图;
    NOFORCE          :只有基表都存在ORACLE才会创建该视图:
    alias                    :为视图产生的列定义的别名;
    subquery            :一条完整的SELECT语句,可以在该语句中定义别名;
    WITH CHECK   OPTION :
                                 插入或修改的数据行必须满足视图定义的约束;
    WITH READ ONLY :
                                该视图上不能进行任何DML操作。
    例如:
            CREATE   OR   REPLACE   VIEW   dept_sum_vw
                    (name,minsal,maxsal,avgsal)
            AS   SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
            FROM     emp e,dept d
            WHERE   e.deptno=d.deptno
            GROUP   BY   d.dname;
    视图的定义原则:
            1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询;
            2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用
               ORDER BY 子句;
            3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn;
            4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象
               权限。
    视图的查询:
               视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。
               还可以查询视图的全部信息和指定的数据行和列。
        如:
              检索数据:
               SQL>SELECT * FROM   dept_sum_vw;
              查询视图定义:
              SELECT view_name,text   from user_views;
                 其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS
                 得到相关信息。
    修改视图:
             通过OR REPLACE 重新创建同名视图即可。
    视图上的DML 操作:
             DML操作应遵循的原则:
             1.简单视图可以执行DML操作;
             2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能
                删除数据行;
             3.在视图不出现下列情况时可通过视图修改基表数据或插入数据:
                 a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;
                 b.使用表达式定义的列;
                 c.ROWNUM伪列。
                 d.基表中未在视图中选择的其他列定义为非空且无默认值。
    视图可用于保持数据库的完整性,但作用有限。
    通过视图执行引用完整性约束可在数据库级执行约束。
    WITH CHECK OPTION 子句限定:
              通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,
              因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。
       例如:
                CREATE OR REPLACE VIEW   vw_emp20
                AS   SELECT *   FROM   emp
                WHERE   deptno=20
                WITH CHECK OPTION constraint   vw_emp20_ck;
               视图 已建立。
                 查询结果:
                SELECT empno,ename,job FROM vw_emp20;
               
               EMPNO                 ENAME                 JOB
    ---------------------            --------------           -------------
                   7369                  SMITH                 CLERK
                   7566                  JONES                MANAGER
                   7902                  FORD                 ANALYST
               修改:
                     UPDATE vw_emp20
                     SET         deptno=20
                     WHERE    empno=7902;
                将产生错误:
                    UPDATE vw_emp20
                                   *
                    ERROR 位于第一行:
                    ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句
    视图的删除:
                 DROP VIEW   VIEW_NAME语句删除视图。
                 删除视图的定义不影响基表中的数据。
                 只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
                 视图被删除后,基于被删除视图的其他视图或应用将无效。
    OR REPLACE     :若所创建的试图已经存在,ORACLE自动重建该视图;

    posted @ 2007-10-09 10:05 生活在别处 阅读(707) | 评论 (0)编辑 收藏

     

    Ruby中常会用到正则表达式。正则表达式是用来表达字符串的模式(pattern)的。也可以这么理解:我们使用正则表达式来表示某种搜索规则,然后使用该正则表达式来完成字符串的搜索工作。举个例子,假定有这样的搜索规则:“字符串以’FOO’开始,以’R’结束”,那么就可以使用以下正则表达式来表示该规则。

    /^FOO.*R$/

    Ruby用//将正则表达式括起来。^表示开头,$表示结尾,.*表示0个以上的任意字符。

    现在就讲讲正则表达式的规则的写法。正则表达式中有很多上述的具有特别意义的字符。首先是下列字符。
    [ ]
    范围描述符。[a-z]表示从a到z之间的任意一个。
    \w
    英文字母和数字。即[0-9 A-Z a-z]。
    \W
    非英文字母和数字
    \s
    空字符,即[\t\n\r\f]。
    \S
    非空字符。
    \d
    数字,即[0-9]。
    \D
    非数字。
    \b
    词边界字符(在范围描述符外部时)
    \B
    非词边界字符
    \b
    退格符(0x08)(在范围描述符内部时)
    *
    前面元素出现0次以上
    +
    前面元素出现1次以上
    {m,n}
    前面元素最少出现m次,最多出现n次
    ?
    前面元素出现0次或1次
    |
    选择
    ( )
    群组
    其他字符
    该字符本身

    例如,“^f[a-z]+”表示“第一个字符是f,后面是若干个从a到z之间的字符”,可以是“fobar”或“fool”等等。这种表达法就是正则表达式(regular expression)。在搜索字符串时正则表达式非常有用,因此在UNIX的世界里,正则表达式得到了广泛的应用。grep程序就是个代表。许多人是不是经常会用到它呢?

    为了学会使用正则表达式,先来试试下面这个程序。请用文件名regx.rb将程序保存下来以后再运行它。

    st = "\033[7m"
    en = "\033[m"
     
    while TRUE
       print "str> "
       STDOUT.flush
       str = gets
       break if not str
       str.chop!
       print "pat> "
       STDOUT.flush
       re = gets
       break if not re
       re.chop!
       str.gsub! /#{re}/, "#{st}\\&#{en}"
       print str, "\n"
    end
    print "\n"

    该程序会在第一次输入的字符串中按照第二次输入的正则表达式的要求寻找合适的字符串,并将其以反色显示出来。下面是运行结果。

    str> foobar
    pat> ^fo+
    foobar
    ^^^

    # 实际上foo的部分被反色显示了。

    再试一试。

    str> abc012dbcd555
    pat> \\d
    abc012dbcd555
       ~~~    ~~~

    从上例可以看出,该程序可以检测出多处符合条件的字符串。

    str> foozboozer
    pat> f.*z
    foozboozer
    ~~~~~~~~

    在这个例子中,正则表达式“f.*z”并非只是对应到fooz,而是一直对应到foozbooz这里。这是因为,正则表达式总是在符合条件的结果中选择较长的一个。

    正则表达式甚至可以写出让人一眼看不透的模式,这可能会像谜语一样有趣。但若过分凝炼的话,以后就很难搞懂当初的想法了。

    str> Wed Feb  7 08:58:04 JST 1996
    pat> [0-9]+:[0-9]+(:[0-9]+)?
    Wed Feb  7 08:58:04 JST 1996
               ~~~~~~~~

    Ruby用’/’将正则表达式括起来。另外还有一些方法会自动将字符串变为正则表达式。

    % ruby -le 'print "abcdef" =~ /d/'
    3
    % ruby -le 'print "aaaaaa" =~ /d/'
    nil

    ‘=~’是使用正则表达式进行匹配的操作符,它返回匹配成功时的位置。

    到底哪些方法可以处理正则表达式呢?关于这个问题,请查阅参考手册。 

    posted @ 2007-09-18 16:10 生活在别处 阅读(1119) | 评论 (0)编辑 收藏

    定义:escape关键字经常用于使某些特殊字符,如通配符:'%','_'转义为它们原

    来的字符的意义,被定义的转义字符通常使用'\',但是也可以使用其他的符号。

    实例:

    SQL> select * from t11 where name like '%_%';

    NAME
    ----------
    aa_a
    aaa
    SQL> select * from t11 where name like '%\_%' escape '\';

    NAME
    ----------
    aa_a

    注意:如果是 '/' 作为检索字符, 必须 用 '/' 作为转义符, 正斜扛也一样.
    select * from wan_test where psid like '%//%' escape '/'


    posted @ 2007-07-25 00:13 生活在别处 阅读(3668) | 评论 (0)编辑 收藏

    通常情况下,我们使用SPOOL方法,将数据库中的表导出为文本文件的时候会采用两种方法,如下述:
    方法一:采用以下格式脚本 
    set colsep '' ------设置列分隔符
      set trimspool on
      set linesize 120
      set pagesize 2000
      set newpage 1
      set heading off
         set term off
      spool 路径+文件名
      select * from tablename;
      spool off
    方法二:采用以下脚本
    set trimspool on
      set linesize 120
      set pagesize 2000
      set newpage 1
      set heading off
      set term off
      spool 路径+文件名
      select col1||','||col2||','||col3||','||col4||'..' from tablename;
      spool off
    比较以上方法,即方法一采用设定分隔符然后由sqlplus自己使用设定的分隔符对字段进行分割,方法二将分隔符拼接在SELECT语句中,即手工控制输出格式。
    在实践中,我发现通过方法一导出来的数据具有很大的不确定性,这种方法导出来的数据再由sql ldr导入的时候出错的可能性在95%以上,尤其对大批量的数据表,如100万条记录的表更是如此,而且导出的数据文件狂大。
    而方法二导出的数据文件格式很规整,数据文件的大小可能是方法一的1/4左右。经这种方法导出来的数据文件再由sqlldr导入时,出错的可能性很小,基本都可以导入成功。
    因此,实践中我建议大家使用方法二手工去控制spool文件的格式,这样可以减小出错的可能性,避免走很多弯路。
    本文原创,如有引用,请加链接,谢谢!

    原帖地址 

    posted @ 2007-07-25 00:01 生活在别处 阅读(1613) | 评论 (0)编辑 收藏