2009年12月23日星期三

IP地址子网掩码位数换算方法及解释子网掩码的作用

IP地址子网掩码:
子网位    /主机位         子网掩码           子网最大数       /主机最大数 
2         /22         /10 | 255.192.0.0           2           /4194302 
3         /21         /11 | 255.224.0.0           6           /2097150 
4         /20         /12 | 255.240.0.0           14          /1048574 
5         /19         /13 | 255.248.0.0           30          /524286 
6         /18         /14 | 255.252.0.0           62          /262142 
7         /17         /15 | 255.254.0.0           126         /131070 
8         /16         /16 | 255.255.0.0           254         /65536 
9         /15         /17 | 255.255.128.0         510         /32766 
10        /14         /18 | 255.255.192.0         1022        /16382 
11        /13         /19 | 255.255.224.0         2046        /8190 
12        /12         /20 | 255.255.240.0         4094        /4094 
13        /11         /21 | 255.255.248.0         8190        /2046 
14        /10         /22 | 255.255.252.0         16382       /1022 
15        /9          /23 | 255.255.254.0         32766       /510 
16        /8          /24 | 255.255.255.0         65536       /254 
17        /7          /25 | 255.255.255.128       131070      /126 
18        /6          /26 | 255.255.255.192       262142      /62 
19        /5          /27 | 255.255.255.224       524286      /30 
20        /4          /28 | 255.255.255.240       1048574     /14 
21        /3          /29 | 255.255.255.248       2097150     /6 
22        /2          /30 | 255.255.255.252       4194302     /2 


子网掩码的快速算法      

大家都应该知道2的0次方到10次方是多少把?也给大家说一下,分别是:
  1 2 4 8 16 32 64 128 256 512 1024。
  如果你希望每个子网中只有5个ip地址可以给机器用,那么你就最少需要准备给每个子网7个ip地址,因为需要加上两头的不可用的网络和广播ip,所以你需要选比7多的最近的那位,也就是8,就是说选每个子网8个ip。好,到这一步,你就可以算掩码了,这个方法就是:最后一位掩码就是256减去你每个子网所需要的ip地址的数量,那么这个例子就是256-8=248,那么算出这个,你就可以知道那些ip是不能用的了,看:0-7,8-15,16-23,24-31依此类推,写在上面的0、7、8、15、16、23、24、31(依此类推)都是不能用的,你应该用某两个数字之间的IP,那个就是一个子网可用的IP,怎么了?是不是不相信?太简单了。
  我再试验一下,就拿200台机器分成4个子网来做例子吧。
  200台机器,4个子网,那么就是每个子网50台机器,设定为192.168.10.0,C类的IP,大子网掩码应为255.255.255.0,对巴,但是我们要分子网,所以按照上面的,我们用32个IP一个子网内不够,应该每个子网用64个IP(其中 62位可用,足够了吧),然后用我的办法:子网掩码应该是256-64=192,那么总的子网掩码应该为:255.255.255.192。不相信?算算:0-63,64-127,128-191,192-255,这样你就可以把四个区域分别设定到四个子网的机器上了,是不是很简单?不需要软件算了吧。


/24就是255.255.255.0~子网掩码哦。

一个10进制的255~就是2进制的8个1

三个255.255.255`就是24个1~所以写24


比如我ip是:218.77.26.114/255.255.255.192应该怎么换算成缩略子网掩码方式  


255.255.255.192 换算成二进制:
11111111.11111111.11111111.11000000

前三组都是8bit, 第四组 192 -> 11000000 表示2bit (左起11) 用做subnet(子网)
那末这个子网掩码中共有8+8+8+2 = 26 bit 是用作网络标识。

结果:
218.77.26.144/255.255.255.192 => 218.77.26.144/26


--
Alex Tu
-----------------------------------------------------------
ShangHai,China

fssnap & ufsdump

昨天下班前在捣鼓关于如何使用更好的zone更快捷和方面,从目前已知的角度而言在
zoneadm -z test_zone export > test_zone.conf后会到出已经设置好的zone文件,那我们现在将这个文件导出之后,进行修改。

root@cnnjx026 # more cnnjx026z011.conf 
create -b
set zonepath=/local/zones/cnnjx026z011
set autoboot=true
set ip-type=shared
add fs
set dir=/app
set special=/app
set type=lofs
add options rw
add options nodevices
end
add fs
set dir=/env
set special=/env
set type=lofs
add options rw
add options nodevices
end
add fs
set dir=/var/home
set special=/var/home
set type=lofs
add options rw
add options nodevices
end
add net
set address=147.128.38.11/24
set physical=nxge0
set defrouter=147.128.38.1
end
add rctl
set name=zone.max-swap
add value (priv=privileged,limit=2147483648,action=deny)
end
add attr
set name=machine
set type=string
set value=sun4v
end
add dedicated-cpu
set ncpus=1
end
add capped-memory
set physical=2G
end

按照这个设置,只需要稍微改下里面的系统文件在run一下zonecfg -z 123 -f cnnjx026z011.conf 就能产生一个新的zone,然后就能换能up and running了。免去了大量配置的麻烦。

捣鼓完批量安装后,是捣鼓备份。 最近有位同事被开了,主要还是备份的原因,做IT还是得好好备份天天向上啊。
用fssnap创建snapshot的时候出现错误

# fssnap -F ufs -o bs=/snaps/usr.back.file /usr  snapshot error: Invalid backing file path
根据sun网站上的说法是因为使用了大分区,而不是对各个文件实现单独的文件系统分区,所以单独的创建snapshot备份是不行了。 那就只能用ufsdump来备份了


ufsdump相对来说比较便利,但是需要我去手动停掉需要备份的空间,会有些不利。之后用ufsresore.

bash-3.00# ufsdump 0f /var/zone.ufsdump /opt/zone/zone
  DUMP: Date of this level 0 dump: Wed Dec 23 11:27:20 2009
  DUMP: Date of last level 0 dump: the epoch
  DUMP: Dumping /dev/rdsk/c1t0d0s0 (ecnshpcnserv:/) to /var/zone.ufsdump.
  DUMP: Mapping (Pass I) [regular files]
  DUMP: Mapping (Pass II) [directories]
  DUMP: Writing 32 Kilobyte records
  DUMP: Estimated 6469068 blocks (3158.72MB).
  DUMP: Dumping (Pass III) [directories]
  DUMP: Dumping (Pass IV) [regular files]
  DUMP: 6422974 blocks (3136.22MB) on 1 volume at 9635 KB/sec
  DUMP: DUMP IS DONE

但是在ufsrestore的情况下就出现了点问题,主要是交互式的比较麻烦
bash-3.00# ufsrestore -xf /var/zone.ufsdump /opt/zone/zone
Warning: ./opt: File exists
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1

set owner/mode for '.'? [yn] set owner/mode for '.'? [yn] y
Directories already exist, set modes anyway? [yn] y

首先是不能恢复到原目录,只能恢复到另外的目录,还需要在研究下

--
Alex Tu
-----------------------------------------------------------
ShangHai,China

2009年12月17日星期四

Solaris Zone

闲来无事,开始折腾Solaris的机器,虚拟化一直是作为之后几年的首要卖点,当然啊了,从整体的应用角度而言,确实是这样。 越来越多的end-user开始自己安装或者通过老外的requirement开始进行zone的deploy,目前手上就遇到大概2个case. 而且在过一段时间,等ip address assignment结束,还有一个case也将开始使用zone.
早先在CSS team里其实接触过zone,但是更多的表现是已webzone的方式使用的,完全不知道是何物。今天初装,有半天领悟。
 
#zonecfg -z yourzonename
#zonecfg:yourzonename> create -b
set zonepath=/local/zones/yourzonename
set autoboot=true
add fs
set dir=/app  --->做这个之前确保是localdisk而不是nfs。
set special=/app
set type=lofs
add options rw
add options nodevices
end
add fs
set dir=/env
set special=/env
set type=lofs
add options rw
add options nodevices
end
add fs
set dir=/etc/home
set special=/etc/home
set type=lofs
add options rw
add options nodevices
end
add net
set address=137.58.166.216/24 --->确保你有IP,而非DHCP。netmask是跟着主机的netmask走的. 之后在里面设置会导致报错。
set physical=bge0
set defrouter=137.58.166.1 -->取保你的router是走的通的,跟主机保持一致。
end
add attr
set name=machine
set type=string
set value=sun4u
end
set
add capped-cpu --->cpu
set ncpus=1
add capped-memory -->memory
set physical=2048m
set swap=2048m
end
commit
exit
如果实在记不住,可以考虑使用help查看,而且每次set后也可以查看。
 
#/usr/sbin/zoneadm list -civ
ID NAME             STATUS     PATH                           BRAND   
IP   
  0 global           running    /                              native  
shared
  - yourzonename          configured /local/zones/yourzonename            native  
shared
#zoneadm -z yourzonename  install
#zoneadm -z yourzonename boot
#zlogin -C -z yourzonename -->这点很好重要,之前我有很多服务没起来,是因为忽视掉了这一步。用console登录后还有些配置,已经机器的完成启动。

--
Alex Tu
-----------------------------------------------------------
ShangHai,China

2009年9月9日星期三

Blogger is back

哈哈,换到了global的proxy发觉blogspot回来了,果然没有了那么多限制。
而且今天又刚刚在测试以ubuntu为平台安装suse,原先已经设置过在windows平台下安装solaris但是由于分区表始终有问题不得不放弃。但是今天一看suse已经能在安装上跑过去了,不知道等等认不认得到分区表。
进入grub的时候 uuid可以找到ext3的分区,就是咱们的ubuntu安装的地方,然后upload suse的image然后将image里面的i386/loader考出来,考到ubuntu的主分区。在grub下
grub>uuid 可以找到ext3的(hdx,y)
grub>root (hdx,y)
grub>kernel /loader/linux
grub>initrd /loader/initrd
grub>boot
然后就一路点击就能开始装啦~~~
然后突然发觉从邮件发的更新已经能看了,但是好像延迟比较大。
--------------------

安装好犯贱,修改grub希望能做到可以控制启动项,然后把ubuntu的ext3盘挂在到suse的盘上,当然比较简单,知道ubuntu所在的位置就可以在/etc/fstab直接修改,然后挂载。 问题又来了,怎么样在grub上修改控制启动呢。
直接帖ubuntu下的/boot/grub/menu.list发觉在suse下并不能很好的支持。会出现错误,还是要自己修改。而同时这样也不能和suse的一样。试来试去终于成功了。
ubuntu在grub下认知的是uuid,而suse认的是(hdx,y),所以在boot上没办法。
修改ubuntu为

title Ubuntu 8.10, kernel 2.6.27-7-generic
root (hd1,6)
kernel /boot/vmlinuz-2.6.27-7-generic root=/dev/sdb7 splash=silent showopts
initrd /boot/initrd.img-2.6.27-7-generic

就可以正常启动了
windows为
title Microsoft Windows XP Professional
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1
---------------------

继续无聊mount iso文件
貌似之前发过mount -t iso9660 xx.iso /mnt -o -loop

2009年8月6日星期四

mail blog write test


Testing.
--
Alex Tu
-----------------------------------------------------------
ShangHai,China

2009年8月5日星期三

硬盘装solaris

硬盘安装solaris10
1。分区简介:(以我的硬盘为例,只做参考)
第一主分区 10G C盘 NTFS格式 安装WINDOWS XP
第二主分区 15G 空闲未分配 准备留给Solaris10
扩展分区分为三个逻辑盘:
D盘 24G NTFS格式
E盘 26G FAT32格式
F盘 3G FAT32格式
2。准备过程:
在E盘建一个Solaris的文件夹,然后用winrar或者虚拟光驱打开sol-10-u2-ga-x86-dvd.iso,将里面boot目录下的multiboot和x86.miniroot这两个文件提取出来,放在Solaris文件夹中,然后把sol-10-u2-ga-x86-dvd.iso镜像文件也放在Solaris文件夹中。(其实这三个文件放在任何地方都可以,但必须是在FAT32分区中。而且最好不要放在最后一个分区中,我在安装过程中mount最后一个分区老是出错)
3。用grub引导:
用grub或grub for dos引导,在命令提示符下键入以下命令:
find /solaris/multiboot
会显示 hd(0,5),这里的hd(0,5)和我的分区有关,如果分区不同,可能显示不同。
然后再键入以下命令进行引导:
kernel hd(0,5)/solaris/multiboot kernel/unix -B install_media=dsk
module hd(0,5)/solaris/x86.miniroot
boot
如果一切顺利的话,应该就可以进入引导画面。
4。利用安装过程中出现的shell进行虚拟光驱
正确引导以后,首先会出现6个安装模式选项,选择1或者等待超时(默认是1)。这时屏幕上会出现类似的如下提示:
NOTICE: rtls0 -- link down
ERROR: Unbale to configure network inteface
Exiting to shell
# NOTICE: rtls0 -- link up 100Mbps Full_puplex
这时候安装程序会中断,光标会停止不动。这时敲一下回车,会出现shell提示符 #
这个shell是可以用的,敲几个简单的命令试试。
有了这个shell就好办了,我们可以用它进行虚拟光驱。
首先要知道E盘在Solaris中是怎么表示的:
进入dsk里面看一下 cd /dev/dsk
然后 ls 看一下,里面有类似c0d0p0,c0d0p1,c0d0p2,c0d0p3,c0d0p4的设备。这里c0d0p0代表第一主分区即C盘,c0d0p1代表第二主分区,c0d0p2代表扩展分区。因为Solaris不能识别逻辑盘,所以c0d0p2代表的是整个扩展分区(即D盘、E盘和F盘),分别用c0d0p2:1、 c0d0p2:2、 c0d0p2:3 来区分D盘、E盘和F盘,因为Solaris不能识别NTFS,所以c0d0p2:1就是我的E盘,c0d0p2:2就是我的F盘,知道了这些就好办了。赶紧把E盘mount上去吧:
mount -F pcfs /dev/dsk/c0d0p2:1 /mnt
然后进入mnt目录下去看看吧,应该可以看到E盘的文件了。这时候就可以用Solaris的DVD镜像做虚拟光驱了。
lofiadm -a /mnt/solaris/sol-10-u2-ga-x86-dvd.iso
mount -F hsfs /dev/lofi/1 /cdrom (必须挂载在/cdrom目录中)
再进入cdrom里面去看看吧,应该成功了。这时系统会认为光驱里面有光盘了。
等这一切做完之后,然后键入 exit ,就会退出shell,安装程序会自动继续进行下去。
5。进入图形化安装界面后,我就不再多说了吧........ ^_^


-------------参考后实际作业-------------------------

在E盘建一个Solaris的文件夹,然后用winrar或者虚拟光驱打开sol-10-u2-ga-x86-dvd.iso,将里面boot目录下的multiboot和x86.miniroot这两个文件提取出来,放在Solaris文件夹中,然后把sol-10-u2-ga-x86-dvd.iso镜像文件也放在Solaris文件夹中。(其实这三个文件放在任何地方都可以,但必须是在FAT32分区中。而且最好不要放在最后一个分区中,我在安装过程中mount最后一个分区老是出错)
download grub for dos, then unzip the package.copy menu.lst grub.exe glrt to c:/, edit boot.ini c:\glrt = "start grub"
reboot machine
enter into grub.
choose commandline,
run find /solaris/multiboot find the harddisk name, it display (hd0,5)
then run
kernel (hd0,5)/solaris/multiboot kernel/unix -B install_media=dsk
module (hd0,5)/solaris/x86.miniroot
boot
run format to see the harddisk name in unix
cd /dev/dsk

mount -F pcfs /dev/dsk/c0d0p0:1 /mnt

ls -l /mnt/Solaris
lofiadm -a /mnt/solaris/sol-10-u2-ga-x86-dvd.iso
mount -F hsfs /dev/lofi/1 /cdrom
exit

2009年5月13日星期三

mysql数据显示不全

在做数据的update,在其中发掘当我数据传上去以后,做select数据的id字符段显示不全,多位4位或3位,但是在做select * from ddd where id = "xxxxxx"的时候又能完整显示,自己在做insert into 的时候数据又是好的,很不明白。
经过高人提点。其实是因为数据在windows下排版,有些数据的Tab在unix很难被识别,所以需要用dos2unix转换下数据tab,然后再做LOAD DATA LOCAL INFILE "/tmp/rdctable3.txt" INTO TABLE rdcpin.rdctable1; 就是好的了。

2009年5月11日星期一

awk释疑

今天要run
#xdpyinfo awk -F: '$1 == "depth of root window" {print $2}'
一直没有结果。当然
xdpyinfo awk -F: '(print $1)'结果是depth of root window。
很不明白,后来经指点,发觉是depth之前还有很多个空格,加上相应空格后结果自然出现。
果然还是要自己自己啊

2009年4月22日星期三

suse root login

是的话修改kdmrc,具体位置是/usr/share/kde4/config/kdm/kdmrc(需要root权限

2009年4月2日星期四

Solaris 启自带 apache2

你是如何启动solaris10 自带的apache2?
正确的启动方法:Solaris10 缺省安装了2个apache, apache1.x和以前8/9的启动一样,但apache2需要新方法启动
# svcprop -v -p start apache2
start/exec astring /lib/svc/method/http-apache2 startstart/timeout_seconds count 60start/type astring methodstart/user astring webservdstart/group astring webservdstart/privileges astring basic,!proc_session,!proc_info,!file_link_any,net_privaddrstart/limit_privileges astring :defaultstart/use_profile boolean falsestart/supp_groups astring :defaultstart/working_directory astring :defaultstart/project astring :defaultstart/resource_pool astring :default
#cp /etc/apache2/httpd.conf.sample /etc/apache2/httpd.conf
#svcadm enable apache2
#svcs –l apache2

2009年3月26日星期四

Install Sybase ase on Suse 9

As the user request, Need to install Sybase on Suse 9.
For process, first download it package and use the guide.
First of all,
check the package which installed on OS.
Then,
#vi /etc/sysctl.conf
kernel.shmmax=134217728
(128*1024*1024)
# sysctl -p

Finally run ./setup

发觉不能切换用户后跑程序,可以使用xhost +local:xleituu。

2009年3月17日星期二

Oracle XE installed on SUSE 10 sp1 with none oracle account

根据oracle的规则,oracle的安装需要用oracle用户,但是因为环境的原因,所以不能用oracle用户安装oracle xe.
根据服务器上的经验,所以选择替代用户在本地建立本地账户。
在安装前,需要重新启动机器。保持kenerl的完整。 在offical的提示里面需要更改kernel的参数和oracle安装一样。这次装就没有 tips: 使用sysctl -p 可以在suse下/etc/sysctl.conf文件立即生效,同理与mount -a
1. #groupadd dba
#useradd -g dba -d /home/oracle -s /bin/bash oracle
$vi .profile
#!/bin/bashumask 022sh /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.shLC_CTYPE=C;export LC_CTYPEORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server; export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATH; export PATHORACLE_SID=XE;export ORACLE_SIDLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:; export LD_LIBRARY_PATHTMP=/tmp; export TMPLANG=zh_CN.GBK; export LANGLC_ALL=zh_CN.GBK; export LC_ALLLANGUAGE=zh_CN.GBK; export LANGUAGENLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; export NLS_LANG

2. #rpm -ivh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
3. # chown -R oradmin1:dba /usr/lib/oracle/

4. 由于不是用默认的oracle用户修改,只能将启动和configure文件里的部分参数修改成已知参数,主要是将已写oracle改成oradmin1

Oracle Database 10g Express Edition Configuration-------------------------------------------------This will configure on-boot properties of Oracle Database 10g Express Edition. The following questions will determine whether the database should be starting upon system boot, the ports it will use, and the passwords that will be used for database accounts. Press to accept the defaults. Ctrl-C will abort.
Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:9093
Specify a password to be used for database accounts. Note that the samepassword will be used for SYS and SYSTEM. Oracle recommends the use of different passwords for each database account. This can be done after initial configuration:Confirm the password:
Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:y
Starting Oracle Net Listener...DoneConfiguring Database...DoneStarting Oracle Database 10g Express Edition Instance...DoneInstallation Completed Successfully.To access the Database Home Page go to "http://127.0.0.1:8080/apex"

网上说最好把监听端口改成8080,否则启动不起来。。。

5.# ps -ef grep oradmin1

oradmin1 5687 1 0 16:45 ? 00:00:00 xe_pmon_XE
oradmin1 5689 1 0 16:45 ? 00:00:00 xe_psp0_XE
oradmin1 5691 1 0 16:45 ? 00:00:00 xe_mman_XE

实例已经装载,但是监听没起来。

6.# netstat -an grep 9093
# netstat -an grep 8080
无结果,

7. /etc/init.d/oracle-xe status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-MAR-2009 16:49:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refusedConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=cnshc0030)(PORT=9093)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener Linux Error: 111: Connection refused

因为第一个没起来。。其实发觉第一段没用,用的是IPC,
所以到$ORACLE_HOME/network/admin/listener.ora把那一段给mark掉。
然后再启动lsrnctl start

8. # /etc/init.d/oracle-xe status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-MAR-2009 16:51:58
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=cnshc0030)(PORT=9093)))STATUS of the LISTENER------------------------Alias LISTENERVersion TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date 17-MAR-2009 16:51:28Uptime 0 days 0 hr. 0 min. 29 secTrace Level offSecurity ON: Local OS AuthenticationSNMP OFFDefault Service XEListener Parameter File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.oraListener Log File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/log/listener.logListening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cnshc0030.cnsh)(PORT=9093))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=8080))(Presentation=HTTP)(Session=RAW))Services Summary...Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...Service "XE" has 1 instance(s). Instance "XE", status READY, has 1 handler(s) for this service...Service "XEXDB" has 1 instance(s). Instance "XE", status READY, has 1 handler(s) for this service...Service "XE_XPT" has 1 instance(s). Instance "XE", status READY, has 1 handler(s) for this service...The command completed successfully

这个时候就启动了,同时listener启动的时候8080端口也同时启动了。
可以用url访问web管理页面


附注:修改部分节选more /tmp/oracle-xe
export SAVE_LLP=$LD_LIBRARY_PATH
export RETVAL=0
exportORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
#ORACLE_OWNER=oracle
export ORACLE_OWNER=oradmin1
export ORACLE_SID=XE
export LSNR=$ORACLE_HOME/bin/lsnrctl
export SQLPLUS=$ORACLE_HOME/bin/sqlplus
export SU=/bin/su
export PATH=$ORACLE_HOME/bin:$PATH
export LOG="$ORACLE_HOME_LISTNER/listener.log"
export LC_ALL=C
export CONFIG_NAME=oracle-xe
export CONFIGURATION="/etc/sysconfig/$CONFIG_NAME"
/bin/chown oradmin1:dba $ORACLE_HOME/network/admin/listener.ora

2009年3月4日星期三

RH DOMAINNAME

RH修改domainname
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=sppttcn4
NISDOMAIN=cnsh

1. 检测SuSE的Telnet服务是否已安装(默认安装时是不安装Telent-Server的。)

# chkconfig –list

在列表中,有如下显示,表示telnet服务已安装。

xinetd based services:

telnet: on

如果未安装telnet-server,则请在YaST中安装软件包(telnet-server在CD2中)。

2. 启动telnet服务:

#chkconfig telnet on

3. 确认服务已启动:

# chkconfig –list

xinetd based services:

telnet: on

服务启动时,显示为on。

4. 修改配置文件ftpusers,使root可以登入

# cd /etc

# mv securetty securetty.bak

/etc # vi ftpusers

在root前加上注释,以便让root可以登入。

#root

保存后退出。

5. 修改可同时连接的telnet终端数量

# cd /etc

# vi xinetd.conf

修改instances的数量:

instances = 150

保存后退出。

6. 重新启动服务:

# /etc/init.d/xinetd restart

Shutting down xinetd: done

Starting INET services. (xinetd)

2009年3月3日星期二

mount all

IBM AIX:

mount:
$su - root
#/usr/sbin/mount -rv cdrfs /dev/dc0 /cdrom

/dev/cd0是光驱的位置,/cdrom是mount点

umount:
#/usr/sbin/umount /cdrom

HP-UX:

mount:
首先确定操作系统的版本
$su - root
#uname -a
如果是HP-UX B.11.11以下的版本
#nohup /usr/sbin/pfs_mountd &
#nohup /usr/sbin/pfsd &
#/usr/sbin/pfs_mount -t rrip -x unix \
/dev/dsk/c0t1d1 /SD_CDROM

/dev/dsk/c0t1t1是光驱的位置,/SD_CDROM是mount点

如果是HP-UX B.11.22以上的版本
#/usr/sbin/mount -F cdfs -o rr \
/dev/dsk/c0t1d1 /SD_CDROM

umount:
HP-UX B.11.11以下的版本
#/usr/sbin/pfs_umount /SD_CDROM
HP-UX B.11.22以上的版本
#/usr/sbin/umount /SD_CDROM

Linux
mount:
一般大多数的linux系统会自动mount插入的光盘
可以通过下面的命令确认
Red Hat:
#ls /mnt/cdrom
SuSE or UnitedLinux:
#ls /cdrom
如果没有显示出文件列表,则手动挂载
Red Hat
$su - root
#mount -t iso9660 /dev/cdrom /mnt/cdrom
SuSE
#mount -t iso9660 /dev/cdrom /cdrom

/dev/cdrom 是光驱的位置,/cdrom是mount点

umount:
Red Hat:
#eject /mnt/cdrom
SuSE or UnitedLinux:
#eject /cdrom

Linux/390
此系统上不能直接mount,要通过NFS或者FTP的方式从其他服务器上抓取

hp OpenVMS
mount:
1.插入光盘
2.以系统用户登入(SYSTEM)
3.$MOUNT /OVERRIDE=IDENTIFICATION ddcn
ddcn是光驱位置

umount:
$DISMOUNT ddcn


SUN Solaris
mount:
一般系统会自动mount光盘
手动mount如下
1. $su - root
2. #/usr/sbin/mount -r -F hsfs /dev/dsk/c0t2d0s2 \
/cdrom
/dev/dsk/c0t2d0s2是光驱的位置,/cdrom是mount点

umount:
#eject

HP Tru64 Unix
mount:
#/usr/sbin/mount -t cdfs -o nodefperm,noversion \
/dev/disk/cdrom0c /cdrom

/dev/disk/cdrom0c 是光驱位置,/cdrom是mount点

umount:
#/usr/sbin/umount /cdrom

2009年2月24日星期二

compare all of mysql engine

MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

2009年2月20日星期五

gcc install

./configure --prefix=/opt/gcctest --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --enable-threads --enable-languages=c,c++,java,objc --disable-nls --enable-java-awt=xlib --with-x

2009年2月9日星期一

Solaris 小型机

Solaris自带键盘
系统启动时 stop+a
系统已经启动了 可以 init 0
普通键盘
ctrl+break


BootPROM相当于PC的CMOS,可以在BootRPOM下检测硬件和设置启动选项。
Sun系统包含下列两样基本硬件:
? BootPROM芯片
? 非易失性存储器(NVRAM):保存主机的ID号和启动选项设置
BootPROM基本命令
? banner

ok banner
Sun UltraSPARC 60 UPA/PCI (2 X UltraSPARC-II 296MHz), Keyboard Present
OpenBoot 3.11, 256 MB memory installed, Serial #3159808.
Ethernet address 8:0:22:1a:e7:3f, Host ID: 72303700.
ok

banner命令显示系统的基本配置信息,包括机器型号、CPU数量和主频、内存大小、以太网地址、主机序列号等。

? boot 命令及参数
ok boot [device_name] - [options]

选项包括:
a 交互式启动操作系统
r 重新配置操作系统硬件信息
s 操作系统进入调试状态(单用户模式)
v 显示启动信息的详细情况
ok boot disk2 -r

? printenv命令
printenv命令显示NVRAM变量的设置和缺省值。

ok printenv
Parameter Name Value Default Value
tpe-link-test? true true
output-device ttya screen
input-device ttya keyboard
sbus-probe-list f0123 f0123
keyboard-click? false false
diag-file
diag-device net net
boot-file
boot-device disk2 disk
auto-boot? true true
More [,,q] ? q
ok



? setenv命令
setenv设置PROM的参数值,常用的参数有:
参数 值 意义
auto-boot? true 下次自动启动操作系统
false 下次启动停在OK状态
boot-device cdrom 从光驱启动操作系统
disk2 从第二个硬盘启动操作系统
注:由于Ultra 5没有内置SCSI口,只能加块带SCSI口的网卡。此时设置启动盘应该是:
ok setenv boot-device /pci@1f,0/pci@1/pci@1/SUNW,isptwo@4/sd@2,0:a

Ultra 60外置硬盘的启动应为:

ok setenv boot-device /pci@1f,4000/SCSI@3,1/disk@2,0:a

? set-defaults
将NVRAM的所有参数复原为默认值
机器启动时的键盘输入
? stop
如果在系统加电自检时按下Stop键,就取消POST(加电自检)诊断,然后停留在OK状态。
? Stop+d
在系统自检时同时按下stop和d键,系统将自动转到诊断模式,诊断模式下系统将更完全地进行自检。
? Stop+n
如果由于NVRAM的设置不正确而导致系统无法正确启动时,可以在系统加电自检时同时按下stop和n键。它的作用是将NVRAM的参数值设为默认值。
? Stop+a
同时按下stop和a键将中断操作系统的运行,退到OK状态。
警告:尽量不要在操作系统运行时按stop+a,这将导致操作系统停止并且导致数据的丢失。在万不得以的时候,在按下stop+a后,键入sync命令用以将内存的数据同步到硬盘中。
查找系统设备
? probe-scsi-all

ok probe-scsi-all
Target 3
Unit 0 Disk SEAGATE ST1480 SUN0424626600190016
Copyright (c)
All Rights Reserved
Target 6
Unit 0 Removable Read Only device SONY CD-ROM

这个命令查找系统的所有SCSI设备。
注:如果从操作系统中退出后再运行此命令可能会造成系统的死机。请先设置auto-boot?为false后再运行reset-all,系统将重新自检,停留在OK状态下,然后可以运行这个命令。
? probe-ide
查找系统的所有IDE设备。

ok probe-ide
Device 0 ( Primary Master )
ATA Model : ST 34342A
Device 1 ( Primary Slave )
Not Present
Device 2 ( Secondary Master )
removable ATAPI Model : CDR-8240B
Device 3 ( Secondary Slave )
Removable ATAPI Model yyyyyyyyyyyyyyy


注:如果从操作系统中退出后再运行此命令可能会造成系统的死机。请现设置auto-boot?为false后再运行reset-all,系统将重新自检,停留在OK状态下,然后可以运行这个命令。
设备检测
? eject
将软盘放入软驱,然后在输入eject,软盘将自动弹出。
? watch-net-all
测试所有网卡和网络状态。每个网卡测试分两部分:loop-back测试和网络线路测试。如果loop-back(网卡自环)通过,说明网卡状态良好。如果网络线路测试没通过,说明网线没接收到信号,可能是网线没接好或是网线不好

2009年2月4日星期三

CC install relate pakage

今天在装Clearcase的时候遇到MVFS编译的时候过不去的问题,左思右想不得解,后来TL一说明就明白了。clearcase在安装的时候会调用到kernel的部分东西,而在刚装的机器上kernel是没有source包的,所以在调用的时候会出现问题。
In LMWP for HP:

cnsheshawen:/var/lib/rpm # rpm -qa | grep -i kernel
kernel-syms-2.6.16.53-0.16
kernel-source-2.6.16.53-0.16
kernel-bigsmp-2.6.16.53-0.16
kernel-um-2.6.16.46-0.12

BETE
sppttcn3:/usr/src # rpm -qa | grep -i kernel
kernel-bigsmp-2.6.16.21-0.8
kernel-xenpae-2.6.16.21-0.8
装上kernel source以后就方便的过了
xleituu@sppttcn3:~> rpm -qa | grep kernel
kernel-bigsmp-2.6.16.21-0.8
kernel-source-2.6.16.21-0.8
kernel-syms-2.6.16.21-0.8
kernel-xenpae-2.6.16.21-0.8

2009年1月19日星期一

Apache Rewrite

在 httpd 中将一个域名转发到另一个域名
虚拟主机世界近期更换了域名,新域名为 www.wbhw.com, 更加简短好记。这时需要将原来的域名 webhosting-world.com, 以及论坛所在地址 webhosting-world.com/forums/ 定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的 http://www. webhosting-world.com/forums/-f60.html, 让它在新的域名下继续有效,点击后转发到 http://bbs.wbhw.com/-f60.html, 这就需要用 apache 的 Mod_rewrite 功能来实现。

在<> 中添加下面的重定向规则:

RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]

# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]

添加了上面的规则以后, 里的全部内容如下:
<>
ServerAlias webhosting-world.com
ServerAdmin admin@webhosting-world.com
DocumentRoot /path/to/webhosting-world/root
ServerName www.webhosting-world.com

RewriteEngine On
# Redirect webhosting-world.com/forums to bbs.wbhw.com
RewriteCond %{REQUEST_URI} ^/forums/
RewriteRule /forums/(.*) http://bbs.wbhw.com/$1 [R=permanent,L]

# Redirect webhosting-world.com to wbhw.com
RewriteCond %{REQUEST_URI} !^/forums/
RewriteRule /(.*) http://www.wbhw.com/$1 [R=permanent,L]
< /virtualhost>



URL重定向例子一:
1.http://www.zzz.com/xxx.php-> http://www.zzz.com/xxx/
2.http://yyy.zzz.com-> http://www.zzz.com/user.php?username=yyy 的功能

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.zzz.com
RewriteCond %{REQUEST_URI} !^user\.php$
RewriteCond %{REQUEST_URI} \.php$
RewriteRule (.*)\.php$ http://www.zzz.com/$1/ [R]

RewriteCond %{HTTP_HOST} !^www.zzz.com
RewriteRule ^(.+) %{HTTP_HOST} [C]
RewriteRule ^([^\.]+)\.zzz\.com http://www.zzz.com/user.php?username=$1

例子二:
/type.php?typeid=* --> /type*.html
/type.php?typeid=*&page=* --> /type*page*.html

RewriteRule ^/type([0-9]+).html$ /type.php?typeid=$1 [PT]
RewriteRule ^/type([0-9]+)page([0-9]+).html$ /type.php?typeid=$1&page=$2 [PT]

注:
rewritecond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则,rewritecond有各种变量,请查阅相关文档
-----------------------------------

正则表达式只是用于字符串匹配的特征串, 我们从如何表示一个字符开始.
[ ] : 表示选择一个字符.
(.) : 表示任何了个除换行符(\n)之外的字符.
\r : 表示回车
\n : 表示换行
\t : 表示TAB键
\w : 表示字母,数字或下划线, 等同于[A-Za-z0-9_]
\W : 表示非字母,数字或下划线, 等同于[^A-Za-z0-9_]
\s : 表示空白字符, 等同于[ \f\n\r\t]
\S : 表示非空白字符, 等同于[^ \f\n\r\t]
\d : 表示数字字符, 等同于[0-9]
\D : 表示非数字字符, 等同于[^0-9]
当我们需要表示有特定意义的字符时, 可以用"\"来进行转义, 如要表示一对中括号, 就用"\[\]",其他的类似. 当"*", "+", ".", "(", ")", "$", "?", "", "{"出现在中括号内时, 就只表示字符本身而没有其他含义.
: 或者
* : 表示出现0个或多个
+ : 表示出现1个或多个
? : 表示出现0个或1个
{n} : 表示重复出现n次
{m,n} : 表示重复出现最少m次, 最多n次
到这一部份就比较难理解了, 还是举例子来解释吧.
(abcdef) "ab", "cd", "ef"中的任一个
[a-zA-Z]+ 只包括字母的单词
[A-Z][a-z]* 第一个字母是大写的单词
\d+\.?\d* 表示一个数字
[a-z]{4} 四个小写字母
[+-]?\d*\.\d{1,6} 小数点后有1到6位的数
.\n 任何字符
.* 一行
^\s*$ 空行
-------------总结--------------
其实对于rewrite来说,整体的写法其实很简单
Rewrite 期望地址 源地址写法

而通常而言,改写最多的是对于jsp和asp grenrate出来的那些有数字符的地址转换成静态地址。同时又符合正则表达式。
同时需要注意的是关于[]中的文字表达,
 Flags是可选参数,当有多个标志同时出现时,彼此间以逗号分隔。
'redirect|R [=code]' (强制重定向)
  给当前的URI增加前缀http://thishost[:thisport]/, 从而生成一个新的URL,强制生成一个外部重定向(external redirection,指生的URL发送到客户端,由客户端再次以新的URL发出请求,虽然新URL仍指向当前的服务器). 如果没有指定的code值,则HTTP应答以状态值302 (MOVED TEMPORARILY),如果想使用300-400(不含400)间的其它值可以通过在code的位置以相应的数字指定,也可以用标志名指定: temp (默认值), permanent, seeother.
  注意,当使用这个标志时,要确实substitution是个合法的URL,这个标志只是在URL前增加http://thishost[:thisport]/前缀而已,重写操作会继续进行。如果要立即将新URL重定向,用L标志来中重写流程。
'forbidden|F' (强制禁止访问URL所指的资源)
  立即返回状态值403 (FORBIDDEN)的应答包。将这个标志与合适的RewriteConds 联合使用,可以阻断访问某些URL。
'gone|G' (强制返回URL所指资源为不存在(gone))
  立即返回状态值410 (GONE)的应答包。用这个标志来标记URL所指的资源永久消失了.
# 'proxy|P' (强制将当前URL送往代理模块(proxy module))
  这个标志,强制将substitution当作一个发向代理模块的请求,并立即将共送往代理模块。因此,必须确保substitution串是一个合法的URI (如, 典型的情况是以http://hostname开头),否则会从代理模块得到一个错误. 这个标志,是ProxyPass指令的一个更强劲的实现,将远程请求(remote stuff)映射到本地服务器的名字空间(namespace)中来。
  注意,使用这个功能必须确保代理模块已经编译到Apache 服务器程序中了. 可以用“httpd -l ”命令,来检查输出中是否含有mod_proxy.c来确认一下。如果没有,而又需要使用这个功能,则需要重新编译``httpd''程序并使用mod_proxy有效。
'last|L' (最后一条规则)
  中止重写流程,不再对当前URL施加更多的重写规则。这相当于perl的last命令或C的break命令。
'next|N' (下一轮)
  重新从第一条重写规则开始执行重写过程,新开的过程中的URL不应当与最初的URL相同。 这相当于Perl的next命令或C的continue命令. 千万小心不要产生死循环。
# 'chain|C' (将当前的规则与其后续规则綑绑(chained))
  当规则匹配时,处理过程与没有綑绑一样;如果规则不匹配,则綑绑在一起的后续规则也不在检查和执行。
'type|T=MIME-type' (强制MIME类型)
  强制将目标文件的MIME-type为某MIME类型。例如,这可用来模仿mod_alias模块对某目录的ScriptAlias指定,通过强制将该目录下的所有文件的类型改为 “application/x-httpd-cgi”.
'nosubreq|NS' (used only if no internal sub-request )
  这个标志强制重写引擎跳过为内部sub-request的重写规则.例如,当mod_include试图找到某一目录下的默认文件时 (index.xxx),sub-requests 会在Apache内部发生. Sub-requests并非总是有用的,在某些情况下如果整个规则集施加到它上面,会产生错误。利用这个标志可排除执行一些规则。
'nocase|NC' (模板不区分大小写)
  这个标志会使得模板匹配当前URL时忽略大小写的差别。
'qsappend|QSA' (追加请求串(query string))
  这个标志,强制重写引擎为Substitution的请求串追加一部分串,则不是替换掉原来的。借助这个标志,可以使用一个重写规则给请求串增加更多的数据。
'noescape|NE' (不对输出结果中的特殊字符进行转义处理)
  通常情况下,mod_write的输出结果中,特殊字符(如'%', '$', ';', 等)会转义为它们的16进制形式(如分别为'%25', '%24', and '%3B')。这个标志会禁止mod_rewrite对输出结果进行此类操作。 这个标志只能在 Apache 1.3.20及以后的版本中使用。
'passthrough|PT' (通过下一个处理器)
  这个标志强制重写引擎用filename字段的值来替换内部request_rec数据结构中uri字段的值。. 使用这个标志,可以使后续的其它URI-to-filename转换器的Alias、ScriptAlias、Redirect等指令,也能正常处理RewriteRule指令的输出结果。用一个小例子来说明它的语义:如果要用mod_rewrite的重写引擎将/abc转换为/def,然后用mod_alas将/def重写为ghi,则要:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
如果PT标志被忽略,则mod_rewrite也能很好完成工作,如果., 将 uri=/abc/... 转换为filename=/def/... ,完全符合一个URI-to-filename转换器的动作。接下来 mod_alias 试图做 URI-to-filename 转换时就会出问题。
注意:如果要混合都含有URL-to-filename转换器的不同的模块的指令,必须用这个标志。最典型的例子是mod_alias和mod_rewrite的使用。
'skip|S=num' (跳过后面的num个规则)
  当前规则匹配时,强制重写引擎跳过后续的num个规则。用这个可以来模仿if-then-else结构:then子句的最后一条rule的标志是skip=N,而N是else子句的规则条数。
'env|E=VAR:VAL' (设置环境变量)
  设置名为VAR的环境变量的值为VAL,其中VAL中可以含有正则式的后向引用($N或%N)。这个标志可以使用多次,以设置多个环境变量。这儿设置的变量,可以在多种情况下被引用,如在XSSI或CGI中。另外,也可以在RewriteCond模板中以%{ENV:VAR}的形式被引用。

RewriteRule news/(\d+)\.html news\.php\?id=$1 [N,L]
这样就实现了将http://localhost/news/1000.html 解析为 http://localhost/news.php?id=1000的功能
http://211.100.227.106:8080/wp-cp-m7/index.jsp?mod=free&act=watch&cid=714
index/[a-zA-Z]/[a-zA-Z]/(\d+)_(\d+)\.html index\.jsp\?mod=$1&act=$2&cid=
RewriteRule ^(power([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
$ 匹配输入字符串的结束位置。如
将URL http://host/test.jps?id=1 重定向为 http://host/1.html
将URL http://host/conent.jsp?id=1&id2=3 重定向为 http://host/1_3.html
RewriteEngine on
RewriteRule /([0-9]+).html /test.jsp?id=$1 [PT]
RewriteRule /([0-9]+)_([0-9]+).html /content.jsp?id=$1&id2=$2 [PT]
index.jsp?lid=2&mod=free&act=watch&cid=714&mid=112312&type=adlska
index/lang/mod/act/type/cid_mid.html
RewriteRule index/(\d+\.?\d*)/(a-z)/(a-z)/(a-z)/([0-9]+)_([0-9]+).html /index.jsp?lid=$1&mod=&2&act=$3&type=$4&cid=$5&mid=$6 [PT]
RewriteRule index/(a-z)/(a-z)/(a-z)/([0-9]+)_([0-9]+).html /index.jsp?mod=&1&act=$2&type=$3&cid=$4&mid=$5 [PT]
RewriteRule /(a-z)/(a-z)/([0-9]+)_([0-9]+).html /?mod=&1&act=$2&cid=$3&mid=$4 [PT]
index.jsp?mod=free&act=watch&cid=714
index.jsp?mod=free&act=watch
index.jsp?mod=free

RewriteRule ^([^/]+)/([^/]+)/(\d+)_(\d+).html$ /index.jsp?mod=$1&act=$2&cid=$3&mid=$4
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/(\d+)_(\d+).html$ /index.jsp?lid=$1&mod=$2&act=$3&cid=$4&mid=$5

RewriteRule ^([^/]+)/([^/]+)/(\d+).html$ /index.jsp?mod=$1&act=$2&cid=$3
RewriteRule ^([^/]+)/([^/]+)/(\d+)/(\d+).html$ /index.jsp?lid=$1&mod=$2&act=$3&cid=$4

RewriteRule ^(\d+)/(\d+).html$ /index.jsp?mod=$1&act=$2
RewriteRule ^(\d+)/([^/]+)/([^/]+).html$ /index.jsp?lid=$1&mod=$2&act=$3

RewriteRule ^([^/]+).html$ /index.jsp?mod=$1
RewriteRule ^(\d+)/([^/]).html$ /index.jsp?lid=$1&mod=$2

2009年1月16日星期五

grep

grep正则表达式元字符集(基本集)
^ 锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$ 锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) 标记匹配字符,如'\(love\)',love被标记为1。
\< 锚定单词的开始,如:'\ \> 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b 单词锁定符,如: '\bgrep\b'只匹配grep
Grep命令选项
-? 同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。
-b,--byte-offset 打印匹配行前面打印该行所在的块号码。
-c,--count 只打印匹配的行数,不显示匹配的内容。
-f File,--file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename 当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case 忽略大小写差别。
-q,--quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches 打印匹配模板的文件清单。
-L,--files-without-match 打印不匹配模板的文件清单。
-n,--line-number 在匹配的行前面打印行号。
-s,--silent 不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match 反检索,只显示不匹配的行。
-w,--word-regexp 如果被\<和\>引用,就把表达式做为一个单词搜索。
-V,--version 显示软件版本信息

实例
要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。
$ ls -l grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
$ grep 'test' d* 显示所有以d开头的文件中包含test的行。
$ grep 'test' aa bb cc 显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]\{5\}' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep 'w\(es\)t.*\1' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。

Vi

三、附件:vi详细指令表
移动到第一行:1
进入vi的命令
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename: 打开文件,并将光标置于第n行首
vi + filename: 打开文件,并将光标置于最后一行首
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename: 打开多个文件,依次进行编辑

移动光标类命令
h: 光标左移一个字符
l: 光标右移一个字符
space: 光标右移一个字符
Backspace: 光标左移一个字符
k或Ctrl+p: 光标上移一行
j或Ctrl+n: 光标下移一行
Enter: 光标下移一行
w或W : 光标右移一个字至字首
b或B : 光标左移一个字至字首
e或E : 光标右移一个字至字尾 ): 光标移至句尾 (: 光标移至句首 }: 光标移至段落开头 {: 光标移至段落结尾
nG: 光标移至第n行首
n+: 光标下移n行
n-: 光标上移n行
n$: 光标移至第n行尾
H: 光标移至屏幕顶行
M: 光标移至屏幕中间行
L: 光标移至屏幕最后行
0: 光标移至当前行首
$: 光标移至当前行尾

屏幕翻滚类命令
Ctrl+u: 向文件首翻半屏
Ctrl+d: 向文件尾翻半屏
Ctrl+f: 向文件尾翻一屏
Ctrl+b: 向文件首翻一屏
nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i: 在光标前
I: 在当前行首
a: 光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之上新开一行
r: 替换当前字符
R: 替换当前字符及其后的字符,直至按ESC键
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
S: 删除指定数目的行,并以所输入文本代替之
ncw或nCW: 修改指定数目的字
nCC: 修改指定数目的行

删除命令
ndw或ndW: 删除光标处开始及其后的n-1个字
do: 删至行首
d$: 删至行尾
ndd: 删除当前行及其后n-1行
x或X: 删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u: 删除输入方式下所输入的文本

搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索
patternn: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次

搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换

选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(ctrl+i)和行尾标志
($)number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示no write信息
nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息

最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

寄存器操作
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。


#: 是指常用的命令
一般模式:光标移动h 或 -> 光标向左移动一个字符------------------------------------------------------------l 或 <- 光标向右移动一个字符------------------------------------------------------------k 或 向上方向键 光标向上移动一个字符------------------------------------------------------------j 或 向下方向键 光标向下移动一个字符------------------------------------------------------------Ctrl+f # 屏幕向前翻动一页--------------------------------------------------------Ctrl+b # 屏幕向后翻动一页--------------------------------------------------------Ctrl+d 屏幕向前翻动半页--------------------------------------------------------Ctrl+u 屏幕向后翻动半页--------------------------------------------------------+ 光标移动到非空格符的下一列------------------------------------------------------------------- 光标移动到非空格符的上一列-------------------------------------------------------------------n 按下数字键后再按空格键,光标会向右移动这一行的n个字符。 (例如20,则光标会向右移动20个字符)----------------------------------------------------------------------------------------------0 # (这是数字0)移动到这一行的第一个字符处-----------------------------------------------------------------------------$ # 移动到这一行的最后一个字符处--------------------------------------------------------------------H 光标移动到这个屏幕最上方的那一行------------------------------------------------------------------------M 光标移动到这个屏幕中央的那一行----------------------------------------------------------------------L 光标移动到这个屏幕最下方的那一行------------------------------------------------------------------------G # 移动到这个文件的最后一行----------------------------------------------------------------nG 移动到这个文件的第n行。 例如20G,则会移动到这个文件的第20行(可配合:set nu)----------------------------------------------------------------------------------------------n # 光标向下移动n行-------------------------------------------------------
一般模式:查找与替换
/word # 在光标之后查找一个名为word的字符串--------------------------------------------------------------------------?word 在光标之前查找一个名为word的字符串--------------------------------------------------------------------------:n1,n2s/word1/word2/g # 在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2----------------------------------------------------------------------------------------------------:1,$s/word1/word2/g # 从第一行到最后一行查找word1字符串,并将该字符串替换为word2--------------------------------------------------------------------------------------------------:1,$s/word1/word2/gc # 从第一行到最后一行查找word1字符串,并将该字符串替换为word2, 且在替换前显示提示符让用户确认(confirm)---------------------------------------------------------------------------------------------------
一般模式:删除、复制与粘贴
x,X # x为向后删除一个字符,X为向前删除一个字符--------------------------------------------------------------------------------nx 向后删除n个字符-------------------------------------------------------dd # 删除光标所在的那一整行 --------------------------------------------------------------ndd # 删除光标所在列的向下n列,例如,20dd则是删除20列---------------------------------------------------------------------------------------d1G 删除光标所在行到第一行的所有数据------------------------------------------------------------------------dG 删除光标所在行到最后一行的所有数据--------------------------------------------------------------------------yy # 复制光标所在行------------------------------------------------------nyy # 复制光标所在列的向下n列,例如,20yy则是复制20列---------------------------------------------------------------------------------------y1G 复制光标所在列到第一列的所有数据------------------------------------------------------------------------yG 复制光标所在列到最后一列的所有数据--------------------------------------------------------------------------p,P # p为复制的数据粘贴在光标下一行,P为粘贴在光标上一行------------------------------------------------------------------------------------------J 将光标所在列与下一列的数据结合成一行-----------------------------------------------------------------------------u # 恢复前一个动作------------------------------------------------------
编辑模式:
i,I # 插入:在当前光标所在处插入输入的文字,已存在的字符会向后退--------------------------------------------------------------------------------------------------a,A # 添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退-------------------------------------------------------------------------------------------------------o,O # 插入新的一行:从光标所在处的下一行行首开始输入字符------------------------------------------------------------------------------------------r,R # 替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止---------------------------------------------------------------------------------------------------------------------Esc # 退出编辑模式,回到一般模式------------------------------------------------------------------
命令行模式:
:w # 将编辑的数据写入硬盘文件中------------------------------------------------------------------:w! 若文件属性为只读,强制写入该文件------------------------------------------------------------------------:q # 退出vi----------------------------------------------q! 若曾修改过文件,又不想保存,使用!为强制退出不保存文件---------------------------------------------------------------------------------------------:wq # 保存后退出,若为:wq!,则为强制保存后退出---------------------------------------------------------------------------------:w[filename] 将编辑数据保存为另一个文件(类似另存为新文档):x也是保存------------------------------------------------------------------------------------:r[filename] 在编辑的数据中,读入另一个文件的数据,亦即将filename这个文件内容加到光标所在行的后面----------------------------------------------------------------------------------------------------------------------------:set nu 显示行号,设定之后,会在每一行的前面显示该行的行号------------------------------------------------------------------------------------------:set nonu 与set nu相反,为取消行号----------------------------------------------------------------n1,n2w[filename] 将n1到n2的内容保存为filename这个文件----------------------------------------------------------------------------

2009年1月4日星期日

xshell lincese

090104-156637-999966