[转]linux基本命令实践
----------------查找文件方法----------------------
find . -name "project_supply_sign.xsl"
----------------ftp方法---------------------------
[root@ecapp1 shx3]# cd common
[root@ecapp1 common]# cd js
[root@ecapp1 js]# ftp 172.0.2.21
Connected to 172.0.2.21.
220 (vsFTPd 2.0.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (172.0.2.21:root): app1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd songyc
250 Directory successfully changed.
ftp> get util.js
local: util.js remote: util.js
227 Entering Passive Mode (172,0,2,21,226,163)
150 Opening BINARY mode data connection for util.js (30380 bytes).
226 File send OK.
30380 bytes received in 0.0051 seconds (5.9e+03 Kbytes/s)
ftp> quit
##################### 用jar命令打war包 ##############################################
拷贝:
[root@emed4test song_temp]# cp ../shx3.war ./
解压:
[root@emed4test song_temp]# jar -xvf ./shx3.war?????? 解压到当前目录
删除war:
[root@emed4test song_temp]# rm -f ./shx3.war
压缩:
[root@emed4test song_temp]# jar -cvf ../shx3.war .
如果在被压缩目录下,则执行上面的命令,
如果在上一级目录:
jar -cvf shx3.war ./被压缩目录
[root@emed4test root]# clear????????????? 清屏? ctrl+l
*************************************************************************
[root@emed4test root]# finger root??????? 显示用户信息
Login: root???????????????????????????? Name: root
Directory: /root??????????????????????? Shell: /bin/bash
On since Thu Feb? 9 10:29 (CST) on pts/3 from 172.25.60.118
On since Thu Feb? 9 09:57 (CST) on pts/0 from 172.25.50.96
?? 1 hour 2 minutes idle
Mail last read Thu Dec 29 06:03 2005 (CST)
No Plan.
***************************************************************************
[root@emed4test root]# whoami?? 显示当前用户
root
[root@emed4test root]# who am i?? 显示当前用户带日期
root???? pts/3??????? Feb? 9 10:29 (172.25.60.118)
***************************************************************************
[root@emed4test root]# date?? 显示系统时间
Thu Feb? 9 11:04:41 CST 2006
***************************************************************************
[root@emed4test root]# last?? 显示此前用户登录信息
root???? pts/3??????? 172.25.60.118??? Thu Feb? 9 10:29?? still logged in??
root???? pts/0??????? 172.25.50.96???? Thu Feb? 9 09:57?? still logged in??
root???? pts/0??????? 172.25.83.246??? Thu Feb? 9 09:05 - 09:21? (00:16)???
duanxw?? pts/1??????? 172.25.60.118??? Tue Feb? 7 09:04 - 09:14? (00:10)
***************************************************************************
[root@emed4test root]# history|more?? 显示此前执行所有命令,每屏一停
?? 27? kill -9 28251
?? 28? ps -ef|grep java
?? 29? mkdir logs
?? 30? nohup ./startWebLogic.sh &
?? 31? tail -f nohup.out
?? 32? ps -ef|grep java
?? 33? kill -9 28388
?? 34? rm -rf nohup.out
?? 35? nohup ./startWebLogic.sh &
?? 36? cd /opt/httpd2fordata/bin/
?? 37? ./apachectl start
?? 38? ./apachectl stop
***************************************************************************
[root@emed4test root]# uptime?? 显示从上次重起到现在的时间
?11:09:24? up 19 days, 21:16,? 2 users,? load average: 0.02, 0.05, 0.01
***************************************************************************
[root@emed4test root]# ps?? 显示当前用户正在执行的进程
? PID TTY????????? TIME CMD
30419 pts/3??? 00:00:00 bash
30457 pts/3??? 00:00:00 man
***************************************************************************
[root@emed4test root]# ps axu | more?? 显示可控及不可控所有进程,每屏一停
USER?????? PID %CPU %MEM?? VSZ? RSS TTY????? STAT START?? TIME COMMAND
root???????? 1? 0.0? 0.0? 1364?? 72 ???????? S??? Jan20?? 0:18 init
nobody?? 22702? 0.0? 0.0? 4888? 376 ???????? S??? Feb07?? 0:00 [httpd]
root???? 29101? 0.0? 0.0? 4164??? 4 ???????? S??? Feb08?? 0:00 /bin/sh ./startWebLogic.sh
root???? 29120? 0.2? 8.0 810720 82504 ?????? S??? Feb08?? 3:13 /opt/j2sdk1.4.2_08/bin/java -client -Xms32m -
Xmx200m -XX:MaxPermSize=128m -Xverify:none -Dweblogic.Name=myserver -Dweblogic.ProductionModeEnabled= -Djava
.security.policy=/opt/bea/weblogic81/server/lib/weblogic.policy weblogic.Server
root???? 29280? 0.0? 0.0? 4164? 172 ???????? S??? Feb08?? 0:00 /bin/sh /opt/bea/projects/shx3/startWebLogic.
sh
***************************************************************************
[root@emed4test root]# top??? ------持续显示各进程系统资源使用情况-----
?11:16:21? up 19 days, 21:22,? 2 users,? load average: 0.23, 0.22, 0.09
85 processes: 66 sleeping, 1 running, 0 zombie, 18 stopped
CPU0 states:?? 4.0% user?? 0.1% system??? 0.0% nice?? 0.0% iowait? 95.3% idle
CPU1 states:?? 0.0% user?? 0.0% system??? 0.0% nice?? 0.0% iowait 100.0% idle
Mem:? 1030284k av, 1008176k used,?? 22108k free,?????? 0k shrd,? 119136k buff
??????????????????? 767660k actv,?????? 0k in_d,?? 20896k in_c
Swap: 2040244k av,? 187196k used, 1853048k free????????????????? 325008k cached
? PID USER???? PRI? NI? SIZE? RSS SHARE STAT %CPU %MEM?? TIME CPU COMMAND
29300 root????? 25?? 0? 409M 403M 31032 S???? 3.9 40.0? 14:04?? 0 java
30543 root????? 15?? 0? 1184 1184?? 856 R???? 0.3? 0.1?? 0:00?? 0 top
??? 1 root????? 15?? 0??? 96?? 72??? 52 S???? 0.0? 0.0?? 0:18?? 1 init
***************************************************************************?
[root@emed4test root]# free??? ----------显示内存使用情况--------------
???????????? total?????? used?????? free???? shared??? buffers???? cached
Mem:?????? 1030284??? 1008448????? 21836????????? 0???? 119152???? 325104
-/+ buffers/cache:???? 564192???? 466092
Swap:????? 2040244???? 187232??? 1853012
或可使用 cat/proc/meminfo 查看内存使用的详细情况
***************************************************************************
[root@emed4test root]# df -h??? 显示所有文件系统硬盘使用情况
Filesystem??????????? Size? Used Avail Use% Mounted on
/dev/sda2????????????? 15G?? 12G? 2.2G? 85% /
/dev/sda1????????????? 99M?? 15M?? 79M? 16% /boot
none????????????????? 504M???? 0? 504M?? 0% /dev/shm
***************************************************************************
[root@emed4test root]# du / -bh|more?????? 显示每个进程中文件的硬盘使用状况
8.0K??? /lost+found/#508086/_appsdir_shx3_war/shx3.war/META-INF
8.0K??? /lost+found/#508086/_appsdir_shx3_war/shx3.war/WEB-INF/classes/net/emedchina/address/db/map
48K???? /lost+found/#508086/_appsdir_shx3_war/shx3.war/WEB-INF/classes/net/emedchina/address/db
***************************************************************************
[root@emed4test root]# cat /proc/cpuinfo -------显示服务器各处理器的详细参数----------
processor?????? : 0
vendor_id?????? : GenuineIntel
cpu family????? : 6
model?????????? : 8
model name????? : Pentium III (Coppermine)
stepping??????? : 10
cpu MHz???????? : 999.552
cache size????? : 256 KB
physical id???? : 0
siblings??????? : 1
fdiv_bug??????? : no
hlt_bug???????? : no
f00f_bug??????? : no
coma_bug??????? : no
fpu???????????? : yes
fpu_exception?? : yes
cpuid level???? : 2
wp????????????? : yes
flags?????????? : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips??????? : 1992.29
processor?????? : 1
vendor_id?????? : GenuineIntel
cpu family????? : 6
model?????????? : 8
model name????? : Pentium III (Coppermine)
stepping??????? : 10
cpu MHz???????? : 999.552
cache size????? : 256 KB
physical id???? : 0
siblings??????? : 1
fdiv_bug??????? : no
hlt_bug???????? : no
f00f_bug??????? : no
coma_bug??????? : no
fpu???????????? : yes
fpu_exception?? : yes
cpuid level???? : 2
wp????????????? : yes
flags?????????? : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse
bogomips??????? : 1998.84
***************************************************************************
[root@emed4test root]# cat /proc/interrupts 显示当前服务器的所有中断
?????????? CPU0?????? CPU1??????
? 0:?? 90130655?? 82403120??? IO-APIC-edge? timer
? 1:????????? 5????????? 7??? IO-APIC-edge? keyboard
? 2:????????? 0????????? 0????????? XT-PIC? cascade
? 8:????????? 1????????? 0??? IO-APIC-edge? rtc
?10:????????? 0????????? 0?? IO-APIC-level? usb-ohci
?12:????????? 6???????? 27??? IO-APIC-edge? PS/2 Mouse
?15:????????? 0????????? 2??? IO-APIC-edge? ide1
?28:???? 860651???? 857984?? IO-APIC-level? aic7xxx
?31:??? 3443745??? 3450446?? IO-APIC-level? eth0
NMI:????????? 0????????? 0
LOC:? 172534795? 172534794
ERR:????????? 0
MIS:????????? 0
***************************************************************************
[root@emed4test root]# cat /proc/version 显示服务器的操作系统版本信息
Linux version 2.4.20-8smp (bhcompile@porky.devel.redhat.com) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 SMP Thu Mar 13 17:45:54 EST 2003
[root@emed4test root]# cat /proc/filesystems 显示当前使用的文件系统类型
nodev?? rootfs
nodev?? bdev
nodev?? proc
nodev?? sockfs
nodev?? tmpfs
nodev?? shm
nodev?? pipefs
??????? ext2
nodev?? ramfs
??????? iso9660
nodev?? devpts
nodev?? pcihpfs
??????? ext3
nodev?? usbdevfs
nodev?? usbfs
nodev?? autofs
***************************************************************************
[root@emed4test root]# lsmod?? 显示当前加载的核心模块
Module????????????????? Size? Used by??? Not tainted
parport_pc???????????? 19204?? 1? (autoclean)
lp????????????????????? 9188?? 0? (autoclean)
parport??????????????? 39072?? 1? (autoclean) [parport_pc lp]
autofs???????????????? 13684?? 0? (autoclean) (unused)
e100?????????????????? 62340?? 1
keybdev???????????????? 2976?? 0? (unused)
mousedev??????????????? 5656?? 0? (unused)
hid??????????????????? 22308?? 0? (unused)
input?????????????????? 6208?? 0? [keybdev mousedev hid]
usb-ohci?????????????? 22216?? 0? (unused)
usbcore??????????????? 82592?? 1? [hid usb-ohci]
ext3?????????????????? 73376?? 2
jbd??????????????????? 56336?? 2? [ext3]
aic7xxx?????????????? 142548?? 3
sd_mod???????????????? 13452?? 6
scsi_mod????????????? 110488?? 2? [aic7xxx sd_mod]
***************************************************************************
[root@emed4test root]# set|more --------使用set命令显示所有本地定义的Shell变量----
ANT_HOME=/opt/apache-ant-1.6.5 使用env命令显示所有的环境变量
BASH=/bin/bash
BASH_ENV=/root/.bashrc
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=108
CVSROOT=:pserver:dev1@172.25.3.200:/opt/cvshome
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
***************************************************************************
[root@emed4test root]# echo $PATH ------- 显示系统path的内容------
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/opt/j2sdk1.4.2_08/bin:/opt/apache-ant-1.6.5/bin:/root/bin
***************************************************************************
[root@emed4test root]# man -help|more ------- 显示某一命令的帮助-------
man, version 1.5k space翻页,ctrl+d退出
usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list]
??????? [-m system] [-p string] name ...
? a : find all matching entries
? c : do not use cat file
? d : print gobs of debugging information
? D : as for -d, but also display the pages
? f : same as whatis(1)
? h : print this help message
? k : same as apropos(1)
? K : search for a string in all pages
? t : use troff to format pages for printing
? w : print location of man page(s) that would be displayed
????? (if no name given: print directories that would be searched)
? W : as for -w, but display filenames only
? C file?? : use `file' as configuration file
? M path?? : set search path for manual pages to `path'
? P pager? : use program `pager' to display pages
? S list?? : colon separated section list
? m system : search for alternate system's man pages
? p string : string tells which preprocessors to run
?????????????? e - [n]eqn(1)?? p - pic(1)??? t - tbl(1)
?????????????? g - grap(1)???? r - refer(1)? v - vgrind(1)
**************************************************************************
[root@emed4test root]# man ls 显示某一命令的帮助
NAME
?????? ls - list directory contents
SYNOPSIS
?????? ls [OPTION]... [FILE]...
DESCRIPTION
?????? List? information? about? the FILEs (the current directory by default).
?????? Sort entries alphabetically if none of -cftuSUX nor --sort.
?????? Mandatory arguments to long options are? mandatory? for? short? options
?????? too.
?????? -a, --all
**************************************************************************
[root@emed4test root]# ls 显示目录中文件列表
anaconda-ks.cfg? bea? fixbuild? install.log? install.log.syslog? mbox
ls -F 显示当前目录下内容(区别显示目录和文件)
ls -F a_directory 显示a_directory目录下的内容(区别显示目录和文件)
ls *.bea 显示当前目录下所有后缀bea的文件
**************************************************************************
[root@emed4test root]# apropos kill 显示所有指定功能相关的命令
XKillClient [XSetCloseDownMode] (3x)? - control clients
baudrate [killchar]? (3x)? - curses environment query routines
baudrate [killwchar] (3x)? - curses environment query routines
erasechar [killchar] (3x)? - curses environment query routines
erasechar [killwchar] (3x)? - curses environment query routines
erasewchar [killchar] (3x)? - curses environment query routines
**************************************************************************
[root@emed4test root]# help kill 显示命令的帮助
kill: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
??? Send the processes named by PID (or JOB) the signal SIGSPEC.? If
??? SIGSPEC is not present, then SIGTERM is assumed.? An argument of `-l'
??? lists the signal names; if arguments follow `-l' they are assumed to
??? be signal numbers for which names should be listed.? Kill is a shell
??? builtin for two reasons: it allows job IDs to be used instead of
??? process IDs, and, if you have reached the limit on processes that
??? you can create, you don't have to start a process to kill another one.
**************************************************************************
[root@emed4test root]# ls -al |more 详细显示当前目录下所有文件
total 248
drwxr-x---?? 18 root???? root???????? 4096 Feb? 8 16:21 .
drwxr-xr-x?? 22 root???? root???????? 4096 Jan 21 06:23 ..
-rw-r--r--??? 1 root???? root???????? 1485 May 18? 2005 anaconda-ks.cfg
-rw-------??? 1 root???? root??????? 12508 Feb? 9 12:19 .bash_history
-rw-r--r--??? 1 root???? root?????????? 24 Jun 11? 2000 .bash_logout
-rw-r--r--??? 1 root???? root????????? 234 Jul? 6? 2001 .bash_profile
-rw-r--r--??? 1 root???? root????????? 509 Aug? 5? 2005 .bashrc
-rw-r--r--??? 1 root???? root????????? 365 Jun 17? 2005 .bashrc.bak
drwxr-xr-x??? 2 root???? root???????? 4096 Aug? 5? 2005 bea
-rw-r--r--??? 1 root???? root????????? 210 Jun 11? 2000 .cshrc
-rw-------??? 1 root???? root?????????? 58 Aug? 5? 2005 .cvspass
-rw-------??? 1 root???? root?????????? 16 May 18? 2005 .esd_auth
drwxr-xr-x??? 6 root???? root???????? 4096 Aug 18 09:50 fixbuild
-rw-r--r--??? 1 root???? root??????? 46996 Jun? 6? 2005 .fonts.cache-1
drwx------??? 5 root???? root???????? 4096 Dec 29 03:15 .gconf
drwx------??? 3 root???? root???????? 4096 Dec 29 03:12 .gconfd
drwx------??? 5 root???? root???????? 4096 May 18? 2005 .gnome
drwxr-xr-x??? 6 root???? root???????? 4096 Jun? 8? 2005 .gnome2
**************************************************************************
[root@emed4test root]# ls
anaconda-ks.cfg? bea? fixbuild? install.log? install.log.syslog? mbox
[root@emed4test root]# cd ..
[root@emed4test /]# ls
bin?? dev? home??? lib???????? misc? opt?? root? temp????? tmp? var
boot? etc? initrd? lost+found? mnt?? proc? sbin? tftpboot? usr? webdata
[root@emed4test /]# cp /root/install.log . -------拷贝源文件到目标-----
[root@emed4test /]# ls
bin?? dev? home??? install.log? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? initrd? lib????????? misc??????? opt? root? temp? tmp?????? var
可同时拷贝多个文件,如:
cp a b c_directory???? 将文件a,b拷贝到c_directory
可结合通配符的使用,如:
cp data* c_directory?? 将所有data开头的文件复制到c_directory
**************************************************************************
[root@emed4test /]# ls
bin?? dev? home??? inst.log? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? initrd? lib?????? misc??????? opt? root? temp? tmp?????? var
如果第二个参数是个文件mv的作用是改名
[root@emed4test /]# mv inst.log install.log ------- 将源文件改名----------------
[root@emed4test /]# ls
bin?? dev? home??? install.log? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? initrd? lib????????? misc??????? opt? root? temp? tmp?????? var
如果第二个参数是个目录mv的作用是移动
**************************************************************************
[root@emed4test /]# ls
bin?? dev? home??? install.log? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? initrd? lib????????? misc??????? opt? root? temp? tmp?????? var
[root@emed4test /]# mv install.log ./root 移动文件到指定目标
mv: overwrite `./root/install.log'? y
[root@emed4test /]# ls
bin?? dev? home??? lib???????? misc? opt?? root? temp????? tmp? var
boot? etc? initrd? lost+found? mnt?? proc? sbin? tftpboot? usr? webdata
**************************************************************************
[root@emed4test /]# ls
bin?? dev? home??? install.log? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? initrd? lib????????? misc??????? opt? root? temp? tmp?????? var
[root@emed4test /]# rm install.log??? 删除文件(须拥有该文件)
rm: remove regular file `install.log'? y
[root@emed4test /]# ls
bin?? dev? home??? lib???????? misc? opt?? root? temp????? tmp? var
boot? etc? initrd? lost+found? mnt?? proc? sbin? tftpboot? usr? webdata
rm命令在执行前没有提示,而且错误的命令也可被执行,因此非常危险,需要在执行前做好检查。
例如:rm /opt/nohut.out?? 将被执行
????? rm opt nohut.out??? 提示opt是个目录不能删除,而nohut.out被删除。
**************************************************************************
[root@emed4test /]# mkdir songyc ----------创建目录------
[root@emed4test /]# ls
bin?? dev? home???? initrd? lost+found? mnt? proc? sbin? tftpboot? usr? webdata
boot? etc? songyc? lib???? misc??????? opt? root? temp? tmp?????? var
[root@emed4test /]# rmdir songyc -------删除目录----- rmdir拒绝删除非空目录
[root@emed4test /]# ls
bin?? dev? home??? lib???????? misc? opt?? root? temp????? tmp? var
boot? etc? initrd? lost+found? mnt?? proc? sbin? tftpboot? usr? webdata
**************************************************************************
rm -r 作为root用户删除文件,可删除所有文件
**************************************************************************
[root@emed4test root]# cat install.log|more 显示文件内容
Installing 690 packages
Installing glibc-common-2.3.2-11.9.
Installing hwdata-0.75-1.
Installing redhat-logos-1.1.12-1.
Installing setup-2.5.25-1.
Installing filesystem-2.2.1-3.
Installing basesystem-8.0-2.
Installing glibc-2.3.2-11.9.
Installing bzip2-libs-1.0.2-8.
Installing chkconfig-1.3.8-1.
Installing cracklib-2.7-21.
Installing db4-4.0.14-20.
Installing e2fsprogs-1.32-6.
Installing elfutils-libelf-0.76-3.
Installing expat-1.95.5-2.
**************************************************************************
[root@emed4test /]# find / -name install.log 按名称查询文件
/root/install.log
[14]+? Stopped???????????????? find / -name install.log
**************************************************************************
[root@emed4test /]# locate install.html.??? --------显示包含该字符串的文件路径--------
/var/www/manual/install.html.en 如果加/表示在目录及以下子目录查找,不加/在当前目录查找
/var/www/manual/install.html.ja.jis
/var/www/manual/install.html.ko.euc-kr
/usr/apache2.bak/manual/install.html.de
/usr/apache2.bak/manual/install.html.en
/usr/apache2.bak/manual/install.html.es
/usr/apache2.bak/manual/install.html.ja.euc-jp
/usr/apache2.bak/manual/install.html.ko.euc-kr
/usr/apache2.bak/manual/install.html.ru.koi8-r
/home/duanxw/httpd2.0/manual/install.html.de
/home/duanxw/httpd2.0/manual/install.html.en
**************************************************************************
[root@emed4test root]# touch songyc.test -----------创建空文件----------------
[root@emed4test root]# ls
anaconda-ks.cfg? bea? fixbuild? songyc.test? install.log? install.log.syslog? mbox
**************************************************************************
startx 启动窗口界面的linux
**************************************************************************
shutdown -h now 关机
**************************************************************************
[root@emed4test applications]# passwd duanxw --------修改用户口令,root可改所有-----
Changing password for user duanxw.
New password:
BAD PASSWORD: it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
***************************************************************************
[root@emed4test /]# ping 172.25.88.89 显示ping的信息
PING 172.25.88.89 (172.25.88.89) 56(84) bytes of data.
64 bytes from 172.25.88.89: icmp_seq=1 ttl=64 time=0.163 ms
64 bytes from 172.25.88.89: icmp_seq=2 ttl=64 time=0.125 ms
***************************************************************************
[root@emed4test /]# route -n 显示路由表
Kernel IP routing table
Destination???? Gateway???????? Genmask???????? Flags Metric Ref??? Use Iface
172.25.0.0????? 0.0.0.0???????? 255.255.0.0???? U???? 0????? 0??????? 0 eth0
169.254.0.0???? 0.0.0.0???????? 255.255.0.0???? U???? 0????? 0??????? 0 eth0
127.0.0.0?????? 0.0.0.0???????? 255.0.0.0?????? U???? 0????? 0??????? 0 lo
0.0.0.0???????? 172.25.2.1????? 0.0.0.0???????? UG??? 0????? 0??????? 0 eth0
****************************************************************************
[root@emed4test /]# nslookup 172.25.88.89? 测试dns是否工作,并可显示指定ip主机名
Note:? nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.? Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.
Server:???????? 210.51.183.181
Address:??????? 210.51.183.181#53
** server can't find 89.88.25.172.in-addr.arpa: NXDOMAIN
********************************************************************************
top -p processId? 显示某一进程实时耗用的资源
************************************用vi命令修改文件的方法************************
-------------------------------
1、vi 文件名
2、键入i??????????? 进入修改模式? ,也有的文档说是vi
3、按esc???????????? 进入命令模式
4、输入:wq?????????? 保存修改并退出
---------------------------------
******************显示环境变量HOME
echo $HOME?
/home/terry
*******************设置一个新的环境变量WELCOME
------------------------------------------------
export WELCOME="Hello!"
echo $WELCOME
Hello!
------------------------------------------------
*******************使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
export TEST="Test..." #增加一个环境变量TEST
env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
unset $TEST #删除环境变量TEST
env|grep TEST #此命令没有输出,证明环境变量TEST已经不存在了
*****************使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
export TEST="Test..." #增加一个环境变量TEST
readonly TEST #将环境变量TEST设为只读
unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable
**********************************linux快捷键***************************
-----------------------
1、将光标移到行首?? Ctrl + a
2、将光标移到行尾?? Ctrl + e
3、擦除光标前的整行 Ctrl + u
4、擦除光标后的整行 Ctrl + k
5、删除光标前的一个词 Ctrl + w? (以空格分隔)
6、清屏???????????? Ctrl + l
7、杀掉当前进程???? ctrl + c
8、重起???????????? Ctrl + Alt + Del
-----------------------
**********************************************************************************************
[root@testzone shx3]# cat config.xml
<?xml version="1.0" encoding="UTF-8"?>
<Domain ConfigurationVersion="8.1.4.0" Name="shx3">
??? <Server ListenAddress="" ListenPort="7001" Name="myserver"
??????? NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy" ServerVersion="8.1.4.0">
??????? <SSL Enabled="false" HostnameVerificationIgnored="false"
??????????? IdentityAndTrustLocations="KeyStores" Name="myserver"/>
??? </Server>
??? <JMSFileStore Directory="rmfilestore" Name="FileStore"/>
??? <WSReliableDeliveryPolicy DefaultRetryCount="10"
??????? DefaultTimeToLive="60000" Name="RMDefaultPolicy" Store="FileStore"/>
??? <Security Name="shx3" PasswordPolicy="wl_default_password_policy"
??????? Realm="wl_default_realm" RealmSetup="true"/>
??? <EmbeddedLDAP
??????? CredentialEncrypted="{3DES}ty0HtOLFqyXHrSFXH3RhzodnQpjMa9NsVth5+CTI2h4=" Name="shx3"/>
??? <SecurityConfiguration
??????? CredentialEncrypted="{3DES}+pVwSQ2Vdgzbxw30no0fOmBXMpZORhpmJyqoAn7vW+upHIN8HPxJ1BJkuxyMKt5k8Ydt604u+smmBRScMaynSSP6rO1rkI1Y"
??????? Name="shx3" RealmBootStrapVersion="1"/>
??? <Realm FileRealm="wl_default_file_realm" Name="wl_default_realm"/>
??? <FileRealm Name="wl_default_file_realm"/>
??? <PasswordPolicy Name="wl_default_password_policy"/>
??? <JMSServer Name="WSStoreForwardInternalJMSServermyserver"
??????? Store="FileStore" Targets="myserver">
??????? <JMSQueue CreationTime="1127704900867"
??????????? JNDIName="jms.internal.queue.WSStoreForwardQueue"
??????????? JNDINameReplicated="false" Name="WSInternaljms.internal.queue.WSStoreForwardQueuemyserver"/>
??????? <JMSQueue CreationTime="1127704901248"
??????????? JNDIName="jms.internal.queue.WSDupsEliminationHistoryQueue"
??????????? JNDINameReplicated="false" Name="WSInternaljms.internal.queue.WSDupsEliminationHistoryQueuemyserver"/>
??? </JMSServer>
??? <JDBCConnectionPool DriverName="oracle.jdbc.OracleDriver"
??????? Name="trade" PasswordEncrypted="{3DES}/8zgH7AfRYY="
??????? Properties="user=trade" StatementCacheSize="200"
??????? Targets="myserver" TestConnectionsOnReserve="true"
??????? TestTableName="SQL SELECT 1 FROM DUAL" URL="jdbc:oracle:thin:@172.25.88.89:1521:test2"/>
??? <JDBCTxDataSource JNDIName="shx3_ds" Name="shx3_ds" PoolName="trade" Targets="myserver"/>
??? <Application Name="shx3"
??????? Path="/opt/bea/projects/shx3/myserver/upload"
??????? StagingMode="nostage" TwoPhase="true">
??????? <WebAppComponent Name="shx3" Targets="myserver" URI="shx3.war"/>
??? </Application>
</Domain>
//以下为修改启动缺省路径
[root@testzone shx3]#
[root@testzone shx3]# cd /opt/httpd2.0.54/
[root@testzone httpd2.0.54]# cd conf/
[root@testzone conf]# vi Weblogic.conf????????????????????????? *******************
WebLogicHost 172.25.88.92
WebLogicPort 7001
MatchExpression *.jsp
MatchExpression *.js
MatchExpression *.ocx
MatchExpression *.cab
MatchExpression */images/*
MatchExpression */common/*
<Location ~ "\/shx3">??????????????????????????????????????????? //改变文件映射路径
SetHandler weblogic-handler
ErrorPage http://172.25.88.92/errorPage.htm
</Location>
~
"Weblogic.conf" [converted] 12L, 291C written????????????????????????????????????????????????????????????????????
[root@testzone conf]#
[root@testzone bin]# ./apachectl stop
httpd (no pid file) not running
[root@testzone bin]# ./apachectl start
//以下为修改文件根目录
[root@testzone bin]# cat ../conf/httpd.conf |grep DocumentRoot
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/webdata/htdocs"
# This should be changed to whatever you set DocumentRoot to.
# the manual, even if you choose to move your DocumentRoot.? You may comment
#??? DocumentRoot /www/docs/dummy-host.example.com
[root@testzone bin]# cd /webdata/htdocs/
[root@testzone htdocs]# ls
index.html? iturs? shx3? upload
[root@testzone htdocs]# vi index.html
<html>
<head><title>Emed 3.0 fix Testing</title></head>
<body>
<script language="JavaScript">
window.location="/shx3/index.jsp";
</script>
</body>
</html>
"index.html" [converted] 8L, 155C written?
**************************************************************************************
退出程序一般用
ctrl+d
*******************************************
查看命令帮助用man
man cat
翻页用space
退出用q
*************************************************************************************
cd 绝对路径,以/开头? ,如? cd /opt???????????? 绝对路径不参照当前目录
cd 相对路径,?????????? 如? cd bin????????????? 相对路径必须在当前路径之下
??????????????????????????????????????????????? 相对路径.代表当前目录,..代表父目录
**************************************************************************************
-------------保存屏幕输出到文件---------------
[root@testzone /]# touch song.te
[root@testzone /]# ls -F > song.te????????????? 将命令执行结果保存到song.te 注意>符号
[root@testzone /]# cat song.te
bin/
boot/
data/
data1/
dev/
etc/
home/
initrd/
lib/
lost+found/
misc/
mnt/
opt/
proc/
root/
sbin/
song.te
tmp/
usr/
var/
webdata/
zshua/
************************************************************************************
------杀掉当前进程用
ctrl +c
------休眠当前进程
ctrl +z
------唤醒进程
命令行键入 fg
------指定命令后台运行
在命令结尾加 &?? ,例如 ./startWebLogic.sh &
******************************************************************************
显示文件所占空间及磁盘剩余空间
du
显示文件已用空间,及所占比例
df
uptime 显示从上次启动到现在的时间
显示当前系统用户,即他们在做什么
w
[root@testzone /]# w
?16:04:46? up 1 day,? 5:04,? 2 users,? load average: 1.06, 1.05, 1.01
USER???? TTY????? FROM????????????? LOGIN@?? IDLE?? JCPU?? PCPU? WHAT
root???? pts/0??? 172.25.60.118???? 1:25pm? 1.00s? 2:37m? 0.01s? w
root???? :0?????? -??????????????? Mon11am?? ????? 0.00s? 0.21s? /usr/bin/gnome-session
head -30 song.test? 显示song.test的前30行
tail -30 song.test? 显示song.test的后30行
[root@testzone root]# file install.log???? 描绘文件特性
install.log: ASCII text
[root@testzone root]# wc install.log
?? 行数??? 词数?? 字符数
??? 719??? 1437?? 22170 install.log
分别对应l??? w????? m
*****************************************用vi修改文件**************************************
先启动shell:? bash
vi filename
切换模式?????????????????? i/esc??? (修改模式显示insert,命令模式无显示)
输入命令冒号加行号数字???? :1?? 即跳到第一行
跳到文件尾ctrl g
找某个关键字用???????????? /关键字??? 按n向下找
输入:wq?????????? 保存修改并退出
apache的配置文件在conf/httpd.conf 通常修改影响压力测试的最大和最小进程数
*****************************************安装rstatd方法********************************
1、查看linux版本号
[root@localhost root]# more /etc/issue
Red Hat Linux release 9 (Shrike)
Kernel \r on an \m
2、在http://rpm.pbone.net/ 上找rstatd
找类似i386.rpm的,不要下src.rpm
下载rusers-server-0.17-25.i386.rpm
3、用SSH Secure File Transfer Client 将安装文件上传至服务器
4、安装rstatd
[root@localhost /]# rpm -ivh *.rpm
warning: rusers-server-0.17-25.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing...??????????????? ########################################### [100%]
?? 1:rusers-server????????? ########################################### [100%]
5、查看进程情况
[root@localhost /]# ps -ef|grep rpc
rpc?????? 3231???? 1? 0 Oct12 ???????? 00:00:00 [portmap]
rpcuser?? 3250???? 1? 0 Oct12 ???????? 00:00:00 [rpc.statd]
root???? 18702 18638? 0 13:40 pts/0??? 00:00:00 grep rpc
6、启动rstatd进程
[root@localhost /]# rpc.rstatd
[root@linux32 /]# ps -ef|grep rpc
rpc??????? 609???? 1? 0 Oct08 ???????? 00:00:00 [portmap]
rpcuser??? 628???? 1? 0 Oct08 ???????? 00:00:00 [rpc.statd]
root???? 20784???? 1? 0 13:54 ???????? 00:00:00 rpc.rstatd????????? 运行rstatd服务
root???? 20786 20708? 0 13:56 pts/0??? 00:00:00 grep rpc
########################################################################
#######################|? 通过ftp上传下载文件? |##########################
########################################################################
cmd>
先登录ftp,登录后(如果新装的linux系统需要打开ftp并将用户加入可通过ftp访问的列表中)
-----上传:
ftp> put d:\deploy\shx3.war???????????????? 这是上传某本地文件到linux上的当前路径
d:\deploy\shx3.war: File not found
ftp> put d:\deploy\trade\shx3.war
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK.
ftp: 80300209 bytes sent in 10.92Seconds 7352.15Kbytes/sec.
ftp>
-----下载:
ftp> get nohup.out????????????????????????? 下载到当前用户目录下,如administrator/
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for nohup.out (169882 bytes).
226 File send OK.
ftp: 169882 bytes received in 0.02Seconds 10617.63Kbytes/sec.
ftp>
退出:
quit
======查看网络情况
netstat
(不反查域名和服务名),例如:netstat -anp。
查看服务器侦听情况,使用:netstat -an | grep LISTEN
查看服务器已建立的连接,使用:netstat -an | grep ESTABLISHED
ifconfig
ifconfig:查看(或设置)网络设备信息
ifconfig -a:查看所有网络设置信息
======查看登陆及重起情况
last:显示登录到服务器的情况以及服务器重启情况
======查看硬盘使用情况
df:显示硬盘空间及使用情况,Linux下可以带参数h,显示结果更人性化。例如:
df -h 硬盘空间按人性化显示
df -k 硬盘空间按KB显示
df -m 硬盘空间按MB显示
w:显示登录到服务器上的用户列表
以下几个命令仅针对Linux
======显示当前打开的文件
lsof:显示当前打开的文件列表,包括建立的socket连接等。本命令可以用于程序员检查编写的程序打开的文件数。
======显示(或设置)系统内核参数
sysctl:显示(或设置)系统内核参数
sysctl -a 显示所有内核参数
sysctl -w 参数名=参数值
例如:sysctl -w fs.file-max=10240 设置系统允许同时打开的最大文件数为10240。
内核参数fs.file-nr包括三个参数值,第一个参数表示系统中曾经同时打开过的文件数峰值,
第二个参数表示空闲(分配后已释放)的文件数,
第三个参数表示可以打开的最大文件数,其值等于fs.file-max。
当前打开的文件数 = 第一个参数值 - 第二个参数值
例如:
fs.file-nr = 977 223 10240
当前打开的文件数 = 977 - 233 = 744
设置内核参数时务必小心,如果设置不当会导致系统异常,甚至当机。
=======显示用户可以使用的资源限制
ulimit:显示(或设置)用户可以使用的资源限制
ulimit -a 显示用户可以使用的资源限制
ulimit unlimited 不限制用户可以使用的资源,但本设置对可打开的最大文件数(max open files)
和可同时运行的最大进程数(max user processes)无效
ulimit -n <可以同时打开的文件数> 设置用户可以同时打开的最大文件数(max open files)
例如:ulimit -n 8192
如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
ulimit -u <可以运行的最大并发进程数> 设置用户可以同时运行的最大进程数(max user processes)
例如:ulimit -u 1024
################################## 修改系统日期和时间 ##################################
修改日期
[root@emed4test exchange]# date -s 20070221
Wed Feb 21 00:00:00 CST 2007
修改时间
[root@emed4test exchange]# date -s 15:21:21
Wed Feb 21 15:21:21 CST 2007
######################################? linux文本方式与图形方式切换的方法? ###################################
由xwindow切换text的方法
? ctrl+alt+F1??
? ctrl+alt+F2??
? ctrl+alt+F3??
? ctrl+alt+F4??
? ctrl+alt+F5??
? ctrl+alt+F6??
由text切换xwindow的方法
CTRL+ALT+F7回XWINDOWS
linux 网络设置:在命令方式执行setup
更改域服务器:/etc/host.conf
sync:将内存中数据保存到硬盘
###############################? reboot:重启, 通常在重起之前执行sync多次 ################################
int4:以命令行方式启动,int3与int4差别在于是否启动一个服务
int5:以xwindow方式启动
修改默认启动方式:/etc/vi inittab修改id:5:initdefault
linux重起的方法:ctrl+alt+backspace
查看ip的命令:ifconfig
############################# linux打开ftp #################################
linux->服务器设置->服务->勾选vsftpd 保存
编辑vsftpd.conf
增加一行:userlist_enable=YES
编辑vsftpd.user_list
username=YES 是拒绝访问的
username=NO? 是接受访问的
例如:root=NO
编辑vsftpd.ftpusers
出现在这个文件中的用户都是不能ftp登陆的,注释掉即可
例如:? #root?????? 此时root用户就可以ftp登陆了
################################### tar命令用法 ############################
tar命令的详细讲解+例子
*****例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar。
$ tar cvf usr.tar /home
例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 。
$ tar czvf usr.tar.gz /home
例3:把usr.tar.gz这个备份文件还原并解压缩。
$ tar xzvf usr.tar.gz
例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。
$ tar tvf usr.tar | more
要将文件备份到一个特定的设备,只需把设备名作为备份文件名
例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都拷贝到备份文件中?
$ tar cf /dev/fd0 /home
要恢复设备磁盘中的文件,可使用xf选项:
$ tar xf /dev/fd0
如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。
$ tar cMf /dev/fd0 /home
要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。
$ tar xMf /dev/fd0
从测试服务器通过ftp上传到vmvare的linux服务器
/opt/bea/test/shx3/shx3.tar
/
############################# linux下使用u盘 ######################################
cat /proc/partitions 后就可看到USB盘的号sdb和sdb1
操作过程:
1、首先,在/mnt下新建一子目录:
cd /mnt
mkdir usb
2 、插入优盘后,用mount装载:
mount /dev/sdb1
/mnt/usb (或mount &endash;t vfat /dev/sdb1
/mnt/usb)
3、 随后/mnt/usb即可使用。
4、 用完后,先用umount /mnt/usb卸载,然後可以拔出优盘。
看文件最后200行
tail -200f 文件名
################################# 看系统是64还是32位的 ###############################
[root@tapp1 temp]# uname -a
Linux tapp1 2.6.9-5.ELsmp #1 SMP Wed Jan 5 19:30:39 EST 2005 i686 i686 i386 GNU/Linux
[root@tapp1 temp]# more /etc/issue
Red Hat Enterprise Linux ES release 4 (Nahant)
Kernel \r on an \m
从上面可以看出是32位的,如果是64位会有64
############################ 十分有用的ln命令 #################################
ln命令
该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。
如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。
语法:ln [选项] 目标 [链接名]
ln [选项] 目标 目录
链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。
在硬链接的情况下,参数中的”目标”被链接至[链接名]。如果[链接名]是一个目录名,系统将在该目录之下建立一个或多个与”目标”同名的链接文件,链接文件和被链接文件的内容完全相同。如果[链接名]为一个文件,用户将被告知该文件已存在且不进行链接。如果指定了多个”目标”参数,那么最后一个参数必须为目录。
如果给ln命令加上- s选项,则建立符号链接。如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与”目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与”目标”同名的文件,此新建的文件实际上是指向原”目标”的符号链接文件。
例:$ ln - s lunch /home/xu
假设CVS资源库目录为/opt/cvsroot,另外再建一个连接/opt/cvspublic -> /opt/cvsroot。这个连接是对外公布的目录。这样可以方便地改变CVS资源库的实际位置。以下操作以root身份进行。
cd /opt
mkdir cvsroot
ln -s cvsroot cvspublic
############################# 创建用户相关操作 #################################
useradd和adduser一样
useradd songyc? 创建一个songyc用户
groupadd cvs??? 创建cvs组
useradd -g cvs songyc?? 创建一个组用户
########################## 改变文档所有权chown #################################
将档案 file1.txt 的拥有者设为 songyc 组的使用者设为cvs :
chown cvs:songyc file1.txt
chown -R songyc:cvs temp_dir?? 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递归方式逐个变更)
############################## unix shell编程学习笔记 ###########################
UNIX支持用分号隔开多个命令,而成为复合命令
如:ls -l *.tar; ps -ef|grep java
执行结果如下
[root@localhost root]# ls -l *.class;ps -ef|grep java
-rw-r--r--??? 1 root???? root????????? 410 Dec 25 14:27 A.class
root???? 15678 15658? 0 Apr18 ???????? 00:10:23 /opt/j2sdk1.4.2_08/bin/java -client -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=8 -Xverify:none -Dweblogic.Name=myserver -Dweblogic.management.username=weblogic -Dweblogic.management.password=weblogic -Dweblogic.Producti
root????? 9125? 9100? 0 08:59 pts/0??? 00:00:00 grep java
SHELL的类型
1、Bourne Shell:包括Sh,ksh,bash
2、C Shell:包括csh,tcsh
不同的SHELL会有不同的提示符
SHELL两种执行模式:
1、交互模式
2、非交互模式
SHELL脚本格式:
第一行必须是:# !/bin/sh???????? 放在其他行会被当作注释而不被执行。
#表示注释
简单示例:
# !/bin/sh
# 使用-F参数可以在列目录时显示出文件还是目录,在目录后会自动加一个/
ls -F
# 使用-l参数实现一行显示一个,便于操作
ls -l
# 使用-a参数列出所有隐藏的文件和目录,也就是以.开头的
ls -a
# cp命令当目标已经存在是使用-i参数可以给出提示信息避免出现严重后果
cp -i test? opt/test
# file命令可以列出文件的类型是普通文件、shell脚本、还是一个库
file /sbin/sh
# 每一个用户组都有一个文件定义其权限,可以查看相应的.profile文件
ls -l
除了可以使用&在后台运行进程,还可以将一个前台进程移动到后台。
确定那个键可以将进程挂起
[root@localhost songyc]# stty -a
speed 38400 baud; rows 47; columns 132; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
#################################### unix shell #######################################
[root@localhost root]# aa="administrator_test"??????????????? 定义变量
[root@localhost root]# echo "your test is : \n $aa"?????????? 输出引用变量
your test is : \n administrator_test????????????????????????? 输出的结果
echo 和 printf 功能相同
< type="text/javascript">
?
?
linux 下添加root 权限的用户
如果想设置一个用户,他的权限要和root一样。
useradd wind
vi /etc/passwd
wind:x:0:500::/home/wind:/bin/bash
useradd etune -u 0??????????? 也可以.
passwd etune
修改/etc/password 文件,把你添加的用户id 修改成0 就可以和root一样的权限了!
或者修改/etc/vsftp*开头的两个文件,把root注释掉,然后把/etc/pam.d/login里面的第一行注释掉!
这样你就可以用root 进行远程登陆和ftp了,不过这样不安全!
?
http://blog.csdn.net/etune/category/536078.aspx
?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/etune/archive/2009/05/05/4151694.aspx