﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-I love java-文章分类-linux</title><link>http://www.blogjava.net/baizhihui19870626/category/51122.html</link><description>记录本</description><language>zh-cn</language><lastBuildDate>Tue, 17 Jul 2012 23:31:05 GMT</lastBuildDate><pubDate>Tue, 17 Jul 2012 23:31:05 GMT</pubDate><ttl>60</ttl><item><title>查看linux系统版本是32位的还是64位的</title><link>http://www.blogjava.net/baizhihui19870626/articles/382202.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 04 Jul 2012 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/382202.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/382202.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/382202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/382202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/382202.html</trackback:ping><description><![CDATA[<table border="0" cellspacing="2" cellpadding="2" width="100%">
<tbody>
<tr>
<td bgcolor="#9999cc">主题：查看linux系统版本是32位的还是64位的 <a href="http://bbs.51cto.com/thread-809423-1-1.html"><font color="#ff0000">查看完整版</font></a> 作者：300second 时间：2011-01-16 14:25</td></tr></tbody></table><br />
<table border="0" cellspacing="2" cellpadding="2" width="100%">
<tbody>
<tr>
<td bgcolor="#999999">标题：查看linux系统版本是32位的还是64位的 作者：300second 时间：2011-01-16 14:25</td></tr>
<tr>
<td width="60%">一、<br /><br /><br /><br />[root@linuxzgf ~]#getconf LONG_BIT<br /><br />[root@linuxzgf ~]#getconf WORD_BIT<br /><br />（32位的系统中int类型和long类型一般都是4字节，64位的系统中int类型还是4字节的，但是long已变成了8字节inux系统中可用"getconf WORD_BIT"和"getconf LONG_BIT"获得word和long的位数。64位系统中应该分别得到32和64。）<br /><br /><br /><br />二、<br /><br /><br /><br />[root@linuxzgf ~]#uname -a<br /><br />如果有x86_64就是64位的，没有就是32位的<br /><br />后面是X686或X86_64则内核是64位的，i686或i386则内核是32位的<br /><br /><br /><br />三、<br /><br /><br /><br />直接看看有没有/lib64目目录的方法。64位的系统会有/lib64和/lib两个目录，32位只有/lib一个。<br /><br /><br /><br />四、<br /><br /><br /><br />[root@linuxzgf ~]#file /sbin/init<br /><br />/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped<br /><br />32-bit即是32位的 linux, 如是64位的, 显示的是 64-bit<br /><br /><br /><br />五、<br /><br /><br /><br />[root@linuxzgf ~]#file /bin/cat<br /><br />/bin/cat: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped<br /><br />32-bit即是32位的 linux, 如是64位的, 显示的是 64-bit<br /><br /><br /><br />六、<br /><br /><br /><br />[root@linuxzgf ~]#uname -m<br /><br />x86_64<br /><br />3.# arch<br /><br />x86_64<br /><br />i686<br /><br /><br /><br />七、查看cpu是多少位的<br /><br /><br /><br />[root@linuxzgf ~]#more /proc/cpuinfo<br /><br /><br /><br />八、<br /><br /><br /><br />[root@linuxzgf ~]# echo $HOSTTYPE<br /><br />x86_64<br /><br /><br /><br />getconf命令还可以获取系统的基本配置信息，比如操作系统位数，内存大小，磁盘大小等。<br /><br />$getconf -a 可以看到详细的系统信息</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：dn833 时间：2011-01-17 09:41</td></tr>
<tr>
<td width="60%">呵呵方法真多啊～～</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：hyliuhzau 时间：2011-01-17 14:52</td></tr>
<tr>
<td width="60%">学习了，不错</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：corsair911 时间：2011-01-19 09:58</td></tr>
<tr>
<td width="60%">好，收为己用。</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：qingwang 时间：2011-01-19 12:16</td></tr>
<tr>
<td width="60%">:(pdd_11): 学习了</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：信使 时间：2011-01-20 10:28</td></tr>
<tr>
<td width="60%">:(mars_25): 学习了~~</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：sdbaby 时间：2011-01-21 14:55</td></tr>
<tr>
<td width="60%">记个最简单的命令:<br /><br />uname -a :lol</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：网管新生代 时间：2011-01-24 11:39</td></tr>
<tr>
<td width="60%">:(pdd_23): 学习 学习</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：mervyn 时间：2011-02-18 16:14</td></tr>
<tr>
<td width="60%">呵方法真多啊～～</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：sy02586751 时间：2011-02-21 10:00</td></tr>
<tr>
<td width="60%">受益匪浅，学习了哈</td>
<td width="40%"></td></tr>
<tr>
<td bgcolor="#999999">标题： 作者：sylmdl 时间：2011-02-22 09:49</td></tr>
<tr>
<td width="60%">学习了。多谢</td></tr></tbody></table><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/382202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-07-04 16:34 <a href="http://www.blogjava.net/baizhihui19870626/articles/382202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenVPN 的安装环境</title><link>http://www.blogjava.net/baizhihui19870626/articles/382157.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 04 Jul 2012 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/382157.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/382157.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/382157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/382157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/382157.html</trackback:ping><description><![CDATA[<p>一、OpenVPN 的安装环境<br />1、Server 端的环境<br />Red Hat Enterprise Linux AS release 4 (Nahant Update 8)<br />Kernel：2.6.27.48<br />Ip：192.168.0.1</p>
<p>2、Client 端的环境<br />Windows XP PRO SP2<br />Ip：192.168.0.2</p>
<p>&nbsp;</p>
<p>二、OpenVPN 服务端安装过程<br />1、检查 kernel 需要支持 tun 设备，需要加载 iptables 模块。<br />检查 tun 是否安装：<br />代码：</p>
<p>[root@localhost ~]# modinfo tun<br />filename:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /lib/modules/2.6.27.48/kernel/drivers/net/tun.ko<br />description:&nbsp;&nbsp;&nbsp; Universal TUN/TAP device driver<br />author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (C) 1999-2004 Max Krasnyansky &lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#97;&#120;&#107;&#64;&#113;&#117;&#97;&#108;&#99;&#111;&#109;&#109;&#46;&#99;&#111;&#109;">maxk@qualcomm.com</a>&gt;<br />license:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GPL<br />alias:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char-major-10-200<br />vermagic:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.6.27.48 SMP mod_unload modversions 686 4KSTACKS <br />depends:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; </p>
<p><br />2、检查OpenSSL<br />如果需要启用 SSL 连接，则需要先安装 OpenSSL。默认rhel4内都安装了 OpenSSL ，如果没有请自行安装。</p>
<p>3、下载安装 Lzo<br />从 <a href="http://www.oberhumer.com/opensource/lzo/download/">http://www.oberhumer.com/opensource/lzo/download/</a> 下载最新版 lzo-2.03.tar.gz<br />代码：</p>
<p>[root@localhost src]# tar zxvf lzo-2.03.tar.gz<br />[root@localhost src]# cd lzo-2.03<br />[root@localhost lzo-2.03]# ./configure<br />[root@localhost lzo-2.03]# make<br />[root@localhost lzo-2.03]# make check&nbsp;&nbsp; (运行检查，此步骤可以省略)<br />[root@localhost lzo-2.03]# make test&nbsp;&nbsp;&nbsp;&nbsp; (运行全面测试，此步骤可以省略)<br />[root@localhost lzo-2.03]# make install&nbsp;&nbsp; (试用root身份安装)<br />&nbsp; </p>
<p><br />4、下载安装 OpenVPN<br />从 <a href="http://openvpn.net/download.html">http://openvpn.net/download.html</a> 下载最新版本 openvpn-2.1.2.tar.gz<br />代码：</p>
<p>[root@localhost src]# tar zxvf openvpn-2.1.2.tar.gz<br />[root@localhost src]# cd openvpn-2.1.2<br />[root@localhost openvpn-2.1.2]# ./configure --prefix=/usr/local/openvpn \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --with-lzo-lib=/usr/local/lib&nbsp; \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --with-ssl-headers=/usr/include/openssl \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --with-ssl-lib=/lib<br />[root@localhost openvpn-2.1.2]# make<br />[root@localhost openvpn-2.1.2]# make install<br />&nbsp; </p>
<p><br />&nbsp;5、生成 vpn 服务端和客户端的证书和密钥<br />设置环境变量<br />方法一：export 声明变量<br />代码：</p>
<p>[root@localhost openvpn-2.1.2]# cd easy-rsa/2.0<br />[root@localhost 2.0]# export D=`pwd` <br />[root@localhost 2.0]# export KEY_CONFIG=$D/openssl.cnf <br />[root@localhost 2.0]# export KEY_DIR=$D/keys <br />[root@localhost 2.0]# export KEY_SIZE=1024 <br />[root@localhost 2.0]# export KEY_COUNTRY=CN <br />[root@localhost 2.0]# export KEY_PROVINCE=SH <br />[root@localhost 2.0]# export KEY_CITY=SH <br />[root@localhost 2.0]# export KEY_ORG="dzh.com" <br />[root@localhost 2.0]# export KEY_EMAIL="<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#100;&#122;&#104;&#46;&#99;&#111;&#109;">me@dzh.com</a>" <br />&nbsp; </p>
<p><br />方法二：编辑环境变量文件 vars<br />代码：</p>
<p>[root@localhost 2.0]# vi vars&nbsp;&nbsp;&nbsp; (按照上面的内容修改变量文件里的相应变量值)<br />[root@localhost 2.0]# . vars <br />&nbsp; </p>
<p><br />清理以前的ca证书和密钥<br />代码：</p>
<p>[root@localhost 2.0]# ./clean-all <br />&nbsp; </p>
<p><br />生成 CA<br />代码：</p>
<p>[root@localhost 2.0]# ./build-ca<br />Generating a 1024 bit RSA private key<br />...............++++++<br />.....++++++<br />writing new private key to 'ca.key'<br />-----<br />You are about to be asked to enter information that will be incorporated<br />into your certificate request.<br />What you are about to enter is what is called a Distinguished Name or a DN.<br />There are quite a few fields but you can leave some blank<br />For some fields there will be a default value,<br />If you enter '.', the field will be left blank.<br />-----<br />Country Name (2 letter code) [CN]:<br />State or Province Name (full name) [SH]:<br />Locality Name (eg, city) [Shanghai]:<br />Organization Name (eg, company) [dzh.com]:<br />Organizational Unit Name (eg, section) []:<br />Common Name (eg, your name or your server's hostname) [dzh.com CA]:<br />Name []:<br />Email Address [me@dzh.com]:<br />因为已经在变量里设置过了，所以直接回车就是默认值了。 <br />&nbsp; </p>
<p><br />为 openvpn 服务端生成key<br />代码：</p>
<p>[root@localhost 2.0]# ./build-key-server server<br />Generating a 1024 bit RSA private key<br />.........................................++++++<br />.........++++++<br />writing new private key to 'server.key'<br />-----<br />You are about to be asked to enter information that will be incorporated<br />into your certificate request.<br />What you are about to enter is what is called a Distinguished Name or a DN.<br />There are quite a few fields but you can leave some blank<br />For some fields there will be a default value,<br />If you enter '.', the field will be left blank.<br />-----<br />Country Name (2 letter code) [CN]:<br />State or Province Name (full name) [SH]:<br />Locality Name (eg, city) [Shanghai]:<br />Organization Name (eg, company) [dzh.com]:<br />Organizational Unit Name (eg, section) []:<br />Common Name (eg, your name or your server's hostname) [server]:<br />Name []:<br />Email Address [me@dzh.com]:</p>
<p>Please enter the following 'extra' attributes<br />to be sent with your certificate request<br />A challenge password []:<br />An optional company name []:<br />Using configuration from /usr/local/src/openvpn-2.1.2/easy-rsa/2.0/openssl.cnf<br />Check that the request matches the signature<br />Signature ok<br />The Subject's Distinguished Name is as follows<br />countryName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'CN'<br />stateOrProvinceName&nbsp;&nbsp; :PRINTABLE:'SH'<br />localityName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'Shanghai'<br />organizationName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'dzh.com'<br />commonName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'server'<br />emailAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :IA5STRING:'me@dzh.com'<br />Certificate is to be certified until Aug 17 07:20:17 2020 GMT (3650 days)<br />Sign the certificate? [y/n]:y</p>
<p><br />1 out of 1 certificate requests certified, commit? [y/n]y<br />Write out database with 1 new entries<br />Data Base Updated<br />&nbsp;<br />&nbsp;<br />&nbsp;</p>
<p><br />为客户端生成key<br />代码：</p>
<p>[root@localhost 2.0]# ./build-key client1<br />Generating a 1024 bit RSA private key<br />....................................++++++<br />........++++++<br />writing new private key to 'client1.key'<br />-----<br />You are about to be asked to enter information that will be incorporated<br />into your certificate request.<br />What you are about to enter is what is called a Distinguished Name or a DN.<br />There are quite a few fields but you can leave some blank<br />For some fields there will be a default value,<br />If you enter '.', the field will be left blank.<br />-----<br />Country Name (2 letter code) [CN]:<br />State or Province Name (full name) [SH]:<br />Locality Name (eg, city) [Shanghai]:<br />Organization Name (eg, company) [dzh.com]:<br />Organizational Unit Name (eg, section) []:<br />Common Name (eg, your name or your server's hostname) [client1]:<br />Name []:<br />Email Address [me@dzh.com]:</p>
<p>Please enter the following 'extra' attributes<br />to be sent with your certificate request<br />A challenge password []:<br />An optional company name []:<br />Using configuration from /usr/local/src/openvpn-2.1.2/easy-rsa/2.0/openssl.cnf<br />Check that the request matches the signature<br />Signature ok<br />The Subject's Distinguished Name is as follows<br />countryName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'CN'<br />stateOrProvinceName&nbsp;&nbsp; :PRINTABLE:'SH'<br />localityName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'Shanghai'<br />organizationName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'dzh.com'<br />commonName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :PRINTABLE:'client1'<br />emailAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :IA5STRING:'me@dzh.com'<br />Certificate is to be certified until Aug 17 07:24:46 2020 GMT (3650 days)<br />Sign the certificate? [y/n]:y</p>
<p><br />1 out of 1 certificate requests certified, commit? [y/n]y<br />Write out database with 1 new entries<br />Data Base Updated <br />&nbsp;<br />&nbsp;</p>
<p><br />如果有多个客户端，可以使用 ./build-key 依次生成不同的客户端key。<br />注意在进入 Common Name (eg, your name or your server's hostname) []: 的输入时, 每个证书输入的名字必须不同。</p>
<p>生成 Diffie Hellman 参数<br />代码：</p>
<p>[root@localhost 2.0]# ./build-dh<br />Generating DH parameters, 1024 bit long safe prime, generator 2<br />This is going to take a long time<br />...............................+....+..........................+..............................................................+............+..............+.................................................................+.......................................+............................................+...........+..............+..........................................................................+.......................+.......................................+................................+...........................+........+....................+.+.+........................................+....++*++*++* <br />&nbsp; </p>
<p><br />6、为服务器端生成配置文件和服务启动脚本<br />代码：</p>
<p>[root@localhost openvpn-2.1.2]# mkdir /etc/openvpn<br />[root@localhost openvpn-2.1.2]# cp sample-config-files/server.conf /etc/openvpn<br />[root@localhost openvpn-2.1.2]# cp sample-scripts/openvpn.init /etc/init.d/openvpnd<br />注意：这个默认的 openvpn.init 脚本里的openvpn应用程序的路径可能跟你实际安装的不一样，需要更改的。<br />[root@localhost openvpn-2.1.2]# vi /etc/init.d/openvpnd<br />将脚本里：openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn" 修改成实际安装的路径，比如：openvpn_locations="/usr/local/openvpn/sbin/openvpn"<br />[root@localhost openvpn-2.1.2]# chkconfig --add openvpnd<br />[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/ca.crt /etc/openvpn/<br />[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/server.crt /etc/openvpn/<br />[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/server.key /etc/openvpn/<br />[root@localhost openvpn-2.1.2]# cp easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/<br />&nbsp;<br />&nbsp; </p>
<p><br />7、启动 openvpn 服务端<br />代码：</p>
<p>[root@localhost openvpn-2.1.2]# service openvpnd start<br />Starting openvpn: [ OK ]<br />[root@localhost openvpn-2.1.2]# tail /var/log/messages<br />Aug 20 15:50:29 localhost openvpn[20961]: OpenVPN 2.1.2 i686-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Aug 20 2010<br />Aug 20 15:50:29 localhost openvpn[20961]: NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables<br />Aug 20 15:50:29 localhost openvpn[20961]: Diffie-Hellman initialized with 1024 bit key<br />Aug 20 15:50:29 localhost openvpn[20961]: TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]<br />Aug 20 15:50:29 localhost openvpn[20961]: Socket Buffers: R=[109568-&gt;131072] S=[109568-&gt;131072]<br />Aug 20 15:50:29 localhost openvpn[20961]: ROUTE default_gateway=222.73.34.190<br />Aug 20 15:50:29 localhost openvpn[20961]: TUN/TAP device tun0 opened<br />Aug 20 15:50:29 localhost openvpn[20961]: TUN/TAP TX queue length set to 100<br />Aug 20 15:50:29 localhost openvpn[20961]: /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500<br />Aug 20 15:50:29 localhost kernel: tun0: Disabled Privacy Extensions<br />Aug 20 15:50:29 localhost openvpn[20961]: /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2<br />Aug 20 15:50:29 localhost openvpn[20961]: Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]<br />Aug 20 15:50:29 localhost openvpn[20966]: UDPv4 link local (bound): [undef]:1194<br />Aug 20 15:50:29 localhost openvpn[20966]: UDPv4 link remote: [undef]<br />Aug 20 15:50:29 localhost openvpn[20966]: MULTI: multi_init called, r=256 v=256<br />Aug 20 15:50:29 localhost openvpnd:&nbsp; succeeded<br />Aug 20 15:50:29 localhost openvpn[20966]: IFCONFIG POOL: base=10.8.0.4 size=62<br />Aug 20 15:50:29 localhost openvpn[20966]: IFCONFIG POOL LIST<br />Aug 20 15:50:29 localhost openvpn[20966]: Initialization Sequence Completed<br />Aug 20 15:50:34 localhost udevd[1278]: udev done!</p>
<p>[root@localhost openvpn-2.1.2]# ifconfig -a<br />Link encap:Ethernet&nbsp; HWaddr 00:26:55:1E:D8:9A&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet addr:192.168.0.1&nbsp; Bcast:192.168.0.255&nbsp; Mask:255.255.255.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet6 addr: fe80::226:55ff:fe1e:d89a/64 Scope:Link<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UP BROADCAST RUNNING MULTICAST&nbsp; MTU:1500&nbsp; Metric:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TX packets:7 errors:0 dropped:0 overruns:0 carrier:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collisions:0 txqueuelen:1000 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX bytes:0 (0.0 b)&nbsp; TX bytes:526 (526.0 b)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Interrupt:193 Memory:fa000000-fa012100&nbsp; </p>
<p>lo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Link encap:Local Loopback&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet addr:127.0.0.1&nbsp; Mask:255.0.0.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet6 addr: ::1/128 Scope:Host<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UP LOOPBACK RUNNING&nbsp; MTU:16436&nbsp; Metric:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX packets:1754296 errors:0 dropped:0 overruns:0 frame:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TX packets:1754296 errors:0 dropped:0 overruns:0 carrier:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collisions:0 txqueuelen:0 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX bytes:165016597 (157.3 MiB)&nbsp; TX bytes:165016597 (157.3 MiB)</p>
<p>tun0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Link encap:UNSPEC&nbsp; HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inet addr:10.8.0.1&nbsp; P-t-P:10.8.0.2&nbsp; Mask:255.255.255.255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UP POINTOPOINT RUNNING NOARP MULTICAST&nbsp; MTU:1500&nbsp; Metric:1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collisions:0 txqueuelen:100 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RX bytes:0 (0.0 b)&nbsp; TX bytes:0 (0.0 b) <br />&nbsp;<br />&nbsp;</p>
<p><br />看到上面的信息就说明 openvpn 服务起来了，openvpn 服务端配置完毕了。</p>
<p>三、OpenVPN GUI For Windows 客户端安装过程<br />1、下载安装OpenVPN GUI For Windows<br />从 <a href="http://openvpn.net/index.php/open-source/downloads.html">http://openvpn.net/index.php/open-source/downloads.html</a> 下载 openvpn-2.1.2-install.exe<br />注意: OpenVPN GUI 的版本要和 OpenVPN Server 的版本配套。<br />Windows下的安装过程就不具体说了，安装大家都会的。我使用默认路径安装在C:\Program Files\OpenVPN下了。</p>
<p>2、配置客户端配置文件<br />复制 sample-config 目录下的 client.ovpn 到 config 目录下。<br />用记事本打开配置文件 client.ovpn ，修改一下部分：</p>
<p>remote my-server-1 1194&nbsp; 改为&nbsp; remote 192.168.0.1 1194<br />cert client.crt&nbsp; 改为&nbsp; cert client1.crt<br />key client.key&nbsp; 改为&nbsp; key client1.key <br />&nbsp; </p>
<p><br />把服务器端的认证证书下载下来<br />把&nbsp; ca.crt client1.crt client1.key 这三个文件从服务端下载到客户端的 config 目录里。</p>
<p>3、启动客户端GUI<br />打开&#8220;开始&#8221;菜单-----&gt;&#8220;程序&#8221;-----&gt;&#8220;openvpn&#8221;-----&gt;&#8220;openvpn gui&#8221;，在出来的程序界面里点击&#8220;链接&#8221;按钮<br />代码：</p>
<p>C:\Documents and Settings\office&gt;ipconfig /all</p>
<p>Windows IP Configuration</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host Name . . . . . . . . . . . . : office</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Primary Dns Suffix&nbsp; . . . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Node Type . . . . . . . . . . . . : Unknown<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Routing Enabled. . . . . . . . : No<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WINS Proxy Enabled. . . . . . . . : No</p>
<p>Ethernet adapter vpn:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection-specific DNS Suffix&nbsp; . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Description . . . . . . . . . . . : TAP-Win32 Adapter V9<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Physical Address. . . . . . . . . : 00-FF-FF-5D-70-E6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dhcp Enabled. . . . . . . . . . . : Yes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Autoconfiguration Enabled . . . . : Yes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address. . . . . . . . . . . . : 10.8.0.6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask . . . . . . . . . . . : 255.255.255.252<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway . . . . . . . . . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHCP Server . . . . . . . . . . . : 10.8.0.5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lease Obtained. . . . . . . . . . : 2010年8月20日 16:47:39<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lease Expires . . . . . . . . . . : 2011年8月20日 16:47:39</p>
<p>Ethernet adapter local:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection-specific DNS Suffix&nbsp; . :<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Description . . . . . . . . . . . : Realtek RTL8139/810x Family Fast Eth<br />ernet NIC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Physical Address. . . . . . . . . : 00-1B-B9-5F-C3-58<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dhcp Enabled. . . . . . . . . . . : Yes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Autoconfiguration Enabled . . . . : Yes<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IP Address. . . . . . . . . . . . : 10.9.21.74<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Subnet Mask . . . . . . . . . . . : 255.255.255.0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Default Gateway . . . . . . . . . : 10.9.21.254<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DHCP Server . . . . . . . . . . . : 10.9.21.254<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DNS Servers . . . . . . . . . . . : 114.80.136.14<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 114.80.157.11<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lease Obtained. . . . . . . . . . : 2010年8月20日 12:41:54<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Lease Expires . . . . . . . . . . : 2010年8月21日 12:41:54 <br />&nbsp;<br />&nbsp;</p>
<p><br />上面vpn 链接获取正确的ip地址，就说明客户端已经和服务端链接成功了。要是需要客户端操作系统启动就能自动链接到服务端，可以在windows的服务里找到openvpn服务，设置为&#8220;自动&#8221;就可以了。</p>
<p>本篇文章来源于 Linux公社网站(<a href="http://www.linuxidc.com">www.linuxidc.com</a>)&nbsp; 原文链接：<a href="http://www.linuxidc.com/Linux/2010-08/28264.htm">http://www.linuxidc.com/Linux/2010-08/28264.htm</a></p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/382157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-07-04 09:23 <a href="http://www.blogjava.net/baizhihui19870626/articles/382157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux创建ftp用户</title><link>http://www.blogjava.net/baizhihui19870626/articles/381795.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 29 Jun 2012 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/381795.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/381795.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/381795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/381795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/381795.html</trackback:ping><description><![CDATA[<p align="left">&nbsp;</p>
<p>Linux创建ftp用户<br />1. 安装vsftpd服务：<br />在shell下运行yum install vsftpd，即可安装成功；</p>
<p>2. 修改vsftpd的配置：<br />在/etc/vsftpd/下找到vsftpd.conf文件，修改默认配置，包括监听地址和端口，是否打开tcp、psav模式等等；配置比较简单，具体看我的文章中的vsftpd配置手册</p>
<p>3.启动vsftpd服务：<br />运行service vsftpd start即可，或者运行/etc/init.d/vsftpd start</p>
<p>4.为ftp建立用户和登录目录<br />这个和linux建用户帐号是一样的</p>
<p>先用&#8220;useradd -d 目录名 用户名&#8221;建立一个到ftp目录的用户帐号，然后在用passwd设置密码； </p>
<p>然后你就可以用你新建的用户名和帐号登录这个ftp了，ftp的登录方式是<br />ftp 主机名；<br />输入用户名；<br />输入密码。<br />当然你用ftp工具也可以哦。 </p>
<p>开启FTP <br />[root@huiyi ~]# service vsftpd start </p>
<p>Starting vsftpd for vsftpd: [ OK ] </p>
<p>关闭FTP <br />[root@huiyi ~]# service vsftpd stop </p>
<p>Shutting down vsftpd: [ OK ] </p>
<p>【1】FTP自动登录并批量下载<br />#!/bin/bash <br />ftp -n&lt;&lt; </p>
<p>user guest 123456 <br />binary <br />cd /home/data <br />lcd /home/databackup <br />prompt <br />mget * <br />close <br />bye <br />!</p>
<p>【2】FTP自动登录并上传文件<br />#!/bin/bash<br />ftp -n&lt;&lt;</p>
<p>user guest 123456 <br />binary <br />hash<br />cd /home/data <br />lcd /home/databackup <br />prompt <br />mput * <br />close<br />bye <br />！ </p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/381795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-06-29 11:48 <a href="http://www.blogjava.net/baizhihui19870626/articles/381795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rsync自动同步工具</title><link>http://www.blogjava.net/baizhihui19870626/articles/381783.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 29 Jun 2012 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/381783.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/381783.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/381783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/381783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/381783.html</trackback:ping><description><![CDATA[<div class="postTitle">
<h1><a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/feiling/archive/2012/04/02/2430481.html">Rsync自动同步工具</a></h1></div>
<div id="cnblogs_post_body">
<p><a href="http://steven2.blog.51cto.com/855881/284529">http://steven2.blog.51cto.com/855881/284529</a></p>
<p>开机自启动 </p>
<p>vi /etc/rc.local</p>
<p>/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf</p>
<p>&nbsp;</p>
<div>Linux(Debian和Fedora)下利用rsync同步工具自动同步远程服务器文件的安装和配置步骤：</div>
<div>一、安装</div>
<div>1、Debian/Ubuntu</div>
<div># apt-get install rsync (直接用系统自带的下载和安装工具安装)</div>
<div></div>
<div>2、Fedora或其它</div>
<div># wget <a href="http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz">http://rsync.samba.org/ftp/rsync/rsync-3.0.5.tar.gz</a></div>
<div># tar xf rsync-3.0.5.tar.gz</div>
<div># cd rsync-3.0.5</div>
<div># ./configure --profix=/usr/local/rsync (配置安装目录为/usr/local/rsync)</div>
<div># make</div>
<div># make install</div>
<div></div>
<div>二、配置</div>
<div>1、 服务器端(123.196.114.200)</div>
<div>1） 配置文件</div>
<div># cd /etc</div>
<div># vim rsyncd.conf</div>
<div>uid = backup (本人单独创建了备份用户,也可用root,默认是nobody)</div>
<div>gid = backup</div>
<div>use chroot = no (默认是yes（需root运行rsync）额外的安全保护)</div>
<div>max connections = 4 (设置连接数为4, 默认连接数不限制)</div>
<div>pid file = /var/run/rsyncd.pid (告诉进程写到 /var/run/rsyncd.pid 文件中) </div>
<div>lock file =/var/run/rsyncd.lock</div>
<div>log file = /var/log/rsyncd.log (日志文档)</div>
<div></div>
<div>[100qslogbak] (模块：rsync的客户端)</div>
<div>path=/home/rsync/userlog/logbackup(欲备份的文档目录)</div>
<div>comment=From webserver</div>
<div>auth user=backup (连接帐号,和系统帐号没关系,服务器必须上存在此账号)</div>
<div>secrets file=/etc/rsyncd.secrets (密码存放文件)</div>
<div>ignore errors (防止因为暂时资源不足或其他IO错误导致的严重问题)</div>
<div>read only=no (只读选项，即，不让客户端上传文件到服务器上)</div>
<div>list=no (不显示列出rsync 服务器上提供同步数据的目录)</div>
<div></div>
<div>[114bak] (模块：rsync的另一个客户端)</div>
<div>path=/home/rsync/userlog</div>
<div>comment=From agentserver</div>
<div>auth user=backup</div>
<div>secrets file = /etc/rsyncd.pwd</div>
<div>ignore errors</div>
<div>read only=yes</div>
<div>list=no</div>
<div># :wq (保存并退出)</div>
<div># vim rsyncd.secretes</div>
<div>用户名:密码 (如：backup:123456789)</div>
<div># :wq (保存并退出)</div>
<div># chmod 600 rsyncd.secretes (社区密码文件权限为600，此步必须设置)</div>
<div>2） 启动服务</div>
<div># /usr/bin/rsync --daemon (--config=/etc/rsyncd/rsyncd.conf 此句可有可无)</div>
<div>2、 客户端(192.168.1.100)</div>
<div>客户端只要配置密码文件即可。</div>
<div># cd /etc</div>
<div># vim rsyncd.secretes</div>
<div>密码 (如：123456789)</div>
<div># chmod 600 rsyncd.secretes (社区密码文件权限为600，此步必须设置)</div>
<div>注：此处密码一定要与rsync服务器端密码文件中密码保持一致。并且应为rsync客户端密码。</div>
<div># /usr/bin/rsync --zvrtopg --password-file=/etc/rsyncd.secretes --progress</div>
<div><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#115;&#121;&#110;&#99;&#64;&#49;&#49;&#50;&#46;&#49;&#48;&#54;&#46;&#49;&#49;&#52;&#46;&#50;&#48;&#48;">rsync@112.106.114.200</a>:: 100qslogbak /home/rsync/userlog/</div>
<div>注：上述命令是指把服务端的这个路径(/home/rsync/userlog/logbackup)下的文件同步到客户端的这个路径(/home/rsync/userlog/)下。若想反过来，把客户端的文件同步到服务端，则为如下：</div>
<div># /usr/bin/rsync --zvrtopg --password-file=/etc/rsyncd.secretes --progress</div>
<div>/home/rsync/userlog/ <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#115;&#121;&#110;&#99;&#64;&#49;&#49;&#50;&#46;&#49;&#48;&#54;&#46;&#49;&#49;&#52;&#46;&#50;&#48;&#48;">rsync@112.106.114.200</a>:: 100qslogbak</div>
<div># vim backup.sh (把命令保存到一个脚本文件中，以便做定时任务)</div>
<div>/usr/bin/rsync --zvrtopg --password-file=/etc/rsyncd.secretes --progress</div>
<div><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#115;&#121;&#110;&#99;&#64;&#49;&#49;&#50;&#46;&#49;&#48;&#54;&#46;&#49;&#49;&#52;&#46;&#50;&#48;&#48;">rsync@112.106.114.200</a>:: 100qslogbak /home/rsync/userlog/</div>
<div># :wq</div>
<div>3、 设置防火墙</div>
<div>Rsync默认使用的端口是873，安装配置完后，客户端和服务端都需要设置防火墙。</div>
<div># iptables -i INPUT -p tcp --dport 873 -j ACCEPT</div>
<div># iptable -L (查看防火墙的设置)</div>
<div></div>
<div>三、定时任务</div>
<div>为了让系统自动执行文件同步，需在系统的crontab中添加定时任务。</div>
<div># crontab &#8211;u root &#8211;e </div>
<div>00 2 * * * sh /usr/bin/backup.sh (凌晨2点整执行定时任务)</div>
<div># echo "/usr/bin/rsync --daemon" &gt;&gt; /etc/rc.local (开机自动启动rsync服务)</div>
<div></div>
<div>四、注意事项</div>
<div>1） 提示密码文件不能读，需要手工输入密码时，可能就是密码文件权限不是600，或者格式不对，或者是路径不对。</div>
<div>2） 提示要创建新目录或文件传输失败时，可能是欲同步的目录没有权限，最好把欲同步的目录权限修改为744。</div>
<div>3） 从客户端同步文件到服务端时，最好单个文件目录传输，否则易出错。</div></div>
<p align="left">&nbsp;</p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/381783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-06-29 10:22 <a href="http://www.blogjava.net/baizhihui19870626/articles/381783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rsync -- 客户端主动去服务端同步数据     </title><link>http://www.blogjava.net/baizhihui19870626/articles/381773.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 29 Jun 2012 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/381773.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/381773.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/381773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/381773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/381773.html</trackback:ping><description><![CDATA[客户端主动去服务端同步数据： /服务器&nbsp;&nbsp; /服务名字&nbsp; /同步到本地的路径<br />rsync -az --progress rsync://10.2.5.141/data/ /apps/rsync_test/baibai
<p align="left">&nbsp;</p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/381773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-06-29 09:41 <a href="http://www.blogjava.net/baizhihui19870626/articles/381773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RPM命令的一般格式如下：</title><link>http://www.blogjava.net/baizhihui19870626/articles/381774.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 29 Jun 2012 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/381774.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/381774.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/381774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/381774.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/381774.html</trackback:ping><description><![CDATA[<p>RPM -V&nbsp; 显示信息<br />&nbsp;&nbsp;&nbsp; -H&nbsp; 用&#8220;#&#8221;显示完成的进度<br />&nbsp;&nbsp;&nbsp; --quite&nbsp; 安静工作只有在出现错误时才给出提示信息<br />&nbsp;&nbsp;&nbsp; --help&nbsp;&nbsp; 显示帮助信息<br />RPM命令的一般格式如下：<br />#rpm option packagename</p>
<p>rpm命令的一些基本参数选项如下：<br />-i 安装所选择的一个或多个软件包<br />-q 查询软件包系统或所选择的一个或多个软件包<br />-e 删除所有选择的一个或多个软件包<br />-u 把一个已经安装好的软件包升级到新版本<br />-v 验证已安装或已选择的一个或多个软件包</p>
<p>安装RPM软件包的命令格式如下：<br />rpm -i 【安装选项】【软件包名字】&nbsp;&nbsp;&nbsp; 安装选项一般选择&#8220;--nodeps&#8221;</p>
<p>e.g：#rpm -ivh --nodeps mplayer-1.0-0.2.pre2.fr.i386.rpm<br />删除安装的RPM软件包<br />rpm -e 【删除选项】【软件包名字】</p>
<p>e.g #rpm -e mplayer</p>
<p>升级</p>
<p>e.g：#rpm -uvh --nodeps mplayer-1.0-0.2.pre2.fr.i386.rpm</p>
<p>刷新</p>
<p>e.g：#rpm -Fvh --nodeps mplayer-1.0-0.2.pre2.fr.i386.rpm</p>
<p>查询</p>
<p>1.查看系统中所有已经安装的包，要加参数-a :<br />e.g #rpm -qa<br />2.查询系统中已经安装的软件：<br />e.g rpm -q【软件名】 <br />3. #rpm -ql 软件名 查看已安装的rpm软件的位置</p>
<p><br />查询已安装软件位置：<br />如果想查询已安装软件位置的话用&#8220;whereis 软件名&#8221;来查找。：whereis java<br /></p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/381774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-06-29 09:41 <a href="http://www.blogjava.net/baizhihui19870626/articles/381774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 重启oracle</title><link>http://www.blogjava.net/baizhihui19870626/articles/381601.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 27 Jun 2012 06:38:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/381601.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/381601.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/381601.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/381601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/381601.html</trackback:ping><description><![CDATA[<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/baizhihui19870626/飞信截图20120627143521.jpg" longdesc="" /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/baizhihui19870626/飞信截图20120627143505.jpg" longdesc="" />&nbsp;<img src ="http://www.blogjava.net/baizhihui19870626/aggbug/381601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-06-27 14:38 <a href="http://www.blogjava.net/baizhihui19870626/articles/381601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux rsync同步设置详细指南 </title><link>http://www.blogjava.net/baizhihui19870626/articles/379460.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Tue, 29 May 2012 09:21:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/379460.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/379460.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/379460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/379460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/379460.html</trackback:ping><description><![CDATA[<div class="postTitle">&nbsp;</div><strong>配置rsync 同步数据 rpm包安装rsync及配置<br /><br /><br /></strong>[root@Hammer home]# rpm -qa |grep rsync #检查系统是否安装了rsync软件包<br />rsync-2.6.8-3.1<br />[root@Hammer CentOS]# rpm -ivh rsync-2.6.8-3.1.i386.rpm # 如果没有安装则手动安装<br /><br />[root@test rsync-3.0.4]# vim /etc/xinetd.d/rsync <br /><br /><br />1 配置rsync servervi /etc/xinetd.d/rsync<br />将disable=yes改为no<br /><br />service rsync<br />{<br />disable = no<br />socket_type = stream<br />wait = no<br />user = root<br />server = /usr/bin/rsync<br />server_args = --daemon<br />log_on_failure += USERID<br />}<br /><br />2 配置rsync自动启动<br />[root@test etc]# chkconfig rsync on<br />[root@test etc]# chkconfig rsync --list<br />rsync on<br /><br />3 配置rsyncd.conf <br />[root@test etc]# vim rsyncd.conf <br /><br />uid = root<br />gid = root<br />use chroot = no<br />max connections = 4<br />strict modes = yes<br />port = 873<br />pid file = /var/run/rsyncd.pid<br />lock file = /var/run/rsync.lock<br />log file = /var/log/rsyncd.log<br /><br />[backup]<br />path = /srv<br />comment = This is test<br />auth users = scihoo<br />uid = root<br />gid = root<br />secrets file = /home/rsync.ps<br />read only = no<br />list = no<br /><br /><br />4 确保etc/services中rsync端口号正确<br />[root@test etc]# vim /etc/services<br />rsync 873/tcp # rsync<br />rsync 873/udp # rsync<br /><br />5 配置rsync密码(在上边的配置文件中已经写好路径)/home/rsync.ps(名字随便写，只要和上边配置文件里的一致即可)，格式(一行一个用户)<br />[root@test etc]# vi /home/rsync.ps <br />scihoo:scihoo<br /><br />6 配置rsync密码文件权限<br />[root@test home]# chown root.root rsync.ps <br />[root@test home]# chmod 400 rsync.ps <br /><br />7 启动配置<br />[root@test home]# /etc/init.d/xinetd restart<br />Stopping xinetd: [ OK ]<br />Starting xinetd: [ OK ]<br /><br />8 如果xinetd没有的话，需要安装一下<br />[root@test home]# yum -y install xinetd<br /><br /><br />启动rsync server<br />RSYNC服务端启动的两种方法<br />9、启动rsync服务端（独立启动）<br />[root@test home]# /usr/bin/rsync --daemon<br /><br />10、启动rsync服务端 （有xinetd超级进程启动）<br />[root@test home]# /etc/init.d/xinetd reload<br /><br />11 加入rc.local<br />在各种操作系统中，rc文件存放位置不尽相同，可以修改使系统启动时把rsync --daemon加载进去。<br />[root@test home]# vi /etc/rc.local<br />/usr/local/rsync &#8211;daemon #加入一行<br /><br />12 检查rsync是否启动<br />[root@test home]# lsof -i :873<br />COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME<br />xinetd 4396 root 5u IPv4 633387 TCP *:rsync (LISTEN)<br /><br /><br /><br /><br />客户端配置<br />1 配置三个过程就可以了<br />1.1 设定密码文件<br />1.2 测试rsync执行指令<br />1.3 将rsync指令放入工作排程（crontab）<br />[root@aj1 home]# vi /etc/xinetd.d/rsync <br /><br /># default: off<br /># description: The rsync server is a good addition to an ftp server, as it \<br /># allows crc checksumming etc.<br />service rsync<br />{<br />disable = yes<br />socket_type = stream<br />wait = no<br />user = root<br />server = /usr/bin/rsync<br />server_args = --daemon<br />log_on_failure += USERID<br />}<br /><br />1.1 配置密码文件 (注：为了安全，设定密码档案的属性为：600。rsync.ps的密码一定要和Rsync Server密码设定案里的密码一样)<br />[root@aj1 home]# vi rsync.ps <br />sciooo<br /><br />[root@aj1 home]# chown root.root .rsync.ps # 注意必须给权限<br />[root@aj1 home]# chmod 600 .rsync.ps # 必须修改权限<br /><br />1.2 从服务器上下载文件<br />[root@aj1 rsync-3.0.4]# rsync -avz --password-file=/home/rsync.ps scihoo@192.168.0.206::backup /home/<br /><br />从本地上传到服务器上去<br />[root@aj1 rsync-3.0.4]# rsync -avz --password-file=/home/rsync.ps /home scihoo@192.168.0.206::backup<br /><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/379460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-29 17:21 <a href="http://www.blogjava.net/baizhihui19870626/articles/379460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>red hat linux 安装启动tftp 服务</title><link>http://www.blogjava.net/baizhihui19870626/articles/379442.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Tue, 29 May 2012 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/379442.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/379442.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/379442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/379442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/379442.html</trackback:ping><description><![CDATA[<div class="tit">red hat linux 安装启动tftp 服务</div>
<div class="date">2010-06-18 11:22</div>
<table style="width: 100%; table-layout: fixed">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<p>You can check to see if a TFTP server is set up with the following command:</p>
<dl>
<dd><strong>host $</strong> rpm -q tftp-server </dd></dl>
<p>You should expect to see output similar to:</p>
<dl>
<dd>tftp-server-0.39-2 </dd></dl>
<p>NOTE: Your version may be different than the one listed above. This is OK, the version above is just an example.</p>
<p>If it is not setup, you can follow these steps:</p>
<ol><li>Download a TFTP server for your Linux host. You can search the internet for "tftp-server". You can find the RPM package for download <a class="external text" title="http://rpmfind.net/linux/rpm2html/search.php?query=tftp-server" href="http://rpmfind.net/linux/rpm2html/search.php?query=tftp-server" rel="nofollow">here</a></li><li>Install the TFTP server package 
<dl>
<dd><strong>host $</strong> rpm -ivh &lt;tftp-server package name&gt; </dd></dl></li><li>Confirm that TFTP is installed 
<dl>
<dd><strong>host $</strong> /sbin/chkconfig --list | grep tftp </dd></dl></li><li>Turn on the TFTP server 
<dl>
<dd><strong>host $</strong> /sbin/chkconfig tftp on </dd></dl></li></ol>
<p>The default root location for TFTP files is /tftpboot.</p></div></td></tr></tbody></table><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/379442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-29 15:29 <a href="http://www.blogjava.net/baizhihui19870626/articles/379442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>lsb_release -a           查看Linux版本：</title><link>http://www.blogjava.net/baizhihui19870626/articles/379439.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Tue, 29 May 2012 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/379439.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/379439.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/379439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/379439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/379439.html</trackback:ping><description><![CDATA[&nbsp;查看Linux版本：<img src ="http://www.blogjava.net/baizhihui19870626/aggbug/379439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-29 15:07 <a href="http://www.blogjava.net/baizhihui19870626/articles/379439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Linux FTP命令详解及使用技巧</title><link>http://www.blogjava.net/baizhihui19870626/articles/378513.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 18 May 2012 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/378513.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/378513.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/378513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/378513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/378513.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p>http://blog.chinaunix.net/u/15200/showart_299136.html</p><p><span style="color: #ff0000; ">%ftp 主机名/IP&nbsp; /*登录ftp服务器，会提示输入用户名和密码*/</span></p><p><span style="color: #ff0000; ">匿名登录：用户名输入：anonymous&nbsp; 密码输入：一个邮箱格式的任意字符串</span></p><p>FTP&gt;ascii: 设定以ASCII方式传送文件(缺省值)&nbsp;<br />FTP&gt;bell: 每完成一次文件传送,报警提示.&nbsp;<br />FTP&gt;binary: 设定以二进制方式传送文件.&nbsp;<br />FTP&gt;bye: 终止主机FTP进程,并退出FTP管理方式.&nbsp;<br />FTP&gt;case: 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.&nbsp;<br />FTP&gt;cd: 同UNIX的CD命令.&nbsp;<br />FTP&gt;cdup: 返回上一级目录.&nbsp;<br />FTP&gt;chmod: 改变远端主机的文件权限.&nbsp;<br />FTP&gt;close: 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除.&nbsp;<br />FTP&gt;delete: 删除远端主机中的文件.&nbsp;<br />FTP&gt;dir [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.&nbsp;<br />FTP&gt;get [remote-file] [local-file] 从远端主机中传送至本地主机中.&nbsp;<br />FTP&gt;help [command] 输出命令的解释.&nbsp;<br />FTP&gt;lcd: 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录.&nbsp;<br />FTP&gt;ls [remote-directory] [local-file] 同DIR.&nbsp;<br />FTP&gt;macdef: 定义宏命令.&nbsp;<br />FTP&gt;mdelete [remote-files] 删除一批文件.&nbsp;<br />FTP&gt;mget [remote-files] 从远端主机接收一批文件至本地主机.&nbsp;<br />FTP&gt;mkdir directory-name 在远端主机中建立目录.&nbsp;<br />FTP&gt;mput local-files 将本地主机中一批文件传送至远端主机.&nbsp;<br />FTP&gt;open host [port] 重新建立一个新的连接.&nbsp;<br />FTP&gt;prompt: 交互提示模式.&nbsp;<br />FTP&gt;put local-file [remote-file] 将本地一个文件传送至远端主机中.&nbsp;<br />FTP&gt;pwd: 列出当前远端主机目录.&nbsp;<br />FTP&gt;quit: 同BYE.&nbsp;<br />FTP&gt;recv remote-file [local-file] 同GET.&nbsp;<br />FTP&gt;rename [from] [to] 改变远端主机中的文件名.&nbsp;<br />FTP&gt;rmdir directory-name 删除远端主机中的目录.&nbsp;<br />FTP&gt;send local-file [remote-file] 同PUT.&nbsp;<br />FTP&gt;status: 显示当前FTP的状态.&nbsp;<br />FTP&gt;system: 显示远端主机系统类型.&nbsp;<br />FTP&gt;user user-name [password] [account] 重新以别的用户名登录远端主机.&nbsp;<br />FTP&gt;? [command]: 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command，ftp 将显示全部命令的列表。<br />FTP&gt;! 从 ftp 子系统退出到外壳。</p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/378513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-18 16:51 <a href="http://www.blogjava.net/baizhihui19870626/articles/378513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>grep 北京话单写入数据MMBILLFTPLogThread.class  LogThreadIsRunFlag.log</title><link>http://www.blogjava.net/baizhihui19870626/articles/378128.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Mon, 14 May 2012 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/378128.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/378128.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/378128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/378128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/378128.html</trackback:ping><description><![CDATA[<div>grep 北京话单写入数据MMBILLFTPLogThread.class &nbsp;LogThreadIsRunFlag.log</div><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/378128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-14 17:36 <a href="http://www.blogjava.net/baizhihui19870626/articles/378128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux ----打包压缩tar -zcvf 文件名.tar.gz   目录</title><link>http://www.blogjava.net/baizhihui19870626/articles/377886.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 11 May 2012 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/377886.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/377886.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/377886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/377886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/377886.html</trackback:ping><description><![CDATA[linux ----打包压缩tar -zcvf 文件名.tar.gz &nbsp; 目录<br />tar -zcvf 20120511.tar.gz&nbsp;mms_gateway_010.log.2012_03_1* &nbsp;mms_gateway_010.log.2012_03_2*<br /> //将当前目录下的以mms_gateway_010.log.2012_03_1和mms_gateway_010.log.2012_03_2开头的文件打包压缩为20120511.tar.gz<br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/377886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-11 11:23 <a href="http://www.blogjava.net/baizhihui19870626/articles/377886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux查看环境变量当前信息命令</title><link>http://www.blogjava.net/baizhihui19870626/articles/377531.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Mon, 07 May 2012 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/377531.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/377531.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/377531.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/377531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/377531.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, Tahoma; line-height: 25px; background-color: #ffffff; "><table width="100%" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><tbody style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><tr style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><td style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Linux是一个多用户的操作系统。每个用户登录系统后，都会有一个专用的运行环境。通常每个用户默认的环境都是相同的，这个默认环境实际上就是一组环境变量的定义。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />在Windows下，查看环境变量的命令是：set，这个命令会输出系统当前的环境变量。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />Linux下Linux查看环境变量准确的说是REDHAT下应该如何查看呢，命令是：export</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">如果你想查看某一个名称的环境变量，命令是：echo $环境变量名，比如：echo $ORACLE_HOME</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />Windows对应的命令是：set 环境变量名。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />外补一篇:</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />1. Linux查看环境变量显示环境变量HOME</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ echo $HOME/home/redbooks</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />2. Linux查看环境变量设置一个新的环境变量hello</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ export HELLO=&#8221;Hello!&#8221;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ echo $HELLO<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />Hello!</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />3. Linux查看环境变量使用env命令显示所有的环境变量<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">$ env<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />HOSTNAME=redbooks.safe.org<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />PVM_RSH=/usr/bin/rsh<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />SHELL=/bin/bash<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />TERM=xterm<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />HISTSIZE=1000<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&#8230;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />4. Linux查看环境变量使用set命令显示所有本地定义的Shell变量</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ set<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />BASH=/bin/bash<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />BASH_VERSINFO=([0]=&#8221;2&#8243;[1]=&#8221;05b&#8221;[2]=&#8221;0&#8243;[3]=&#8221;1&#8243;[4]=&#8221;release&#8221;[5]=&#8221;i386-redhat-Linux-gnu&#8221;)<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />BASH_VERSION=&#8217;2.05b.0(1)-release&#8217;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />COLORS=/etc/DIR_COLORS.xterm<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />COLUMNS=80<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />DIRSTACK=()<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />DISPLAY=:0.0<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&#8230;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />5. Linux查看环境变量使用unset命令来清除环境变量</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值，则该变量值将被设为NULL。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />示例如下：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">$ export TEST=&#8221;Test&#8230;&#8221; #增加一个环境变量TEST<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ env|grep TEST #此命令有输入，证明环境变量TEST已经存在了<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />TEST=Test&#8230;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ unset $TEST #删除环境变量TEST<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ env|grep TEST #此命令没有输出，证明环境变量TEST已经存在了</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />6. Linux查看环境变量使用readonly命令设置只读变量</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />如果使用了readonly命令的话，变量就不可以被修改或清除了。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />示例如下：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">$ export TEST=&#8221;Test&#8230;&#8221; #增加一个环境变量TEST<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ readonly TEST #将环境变量TEST设为只读<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ unset TEST #会发现此变量不能被删除<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />-bash: unset: TEST: cannot unset: readonly variable<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$ TEST=&#8221;New&#8221; #会发现此也变量不能被修改<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />-bash: TEST: readonly variable</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />环境变量的设置位于/etc/profile文件</p></td></tr></tbody></table></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/377531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-07 14:57 <a href="http://www.blogjava.net/baizhihui19870626/articles/377531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 下tomcat 6.0.18 启动出现日志异常</title><link>http://www.blogjava.net/baizhihui19870626/articles/377530.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Mon, 07 May 2012 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/377530.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/377530.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/377530.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/377530.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/377530.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #4b4b4b; font-family: verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: #ffffff; "><p style="box-sizing: border-box; ">今天部署一个很简单的JSP程序，启动tomcat时出现下面的提示信息</p><p style="box-sizing: border-box; ">&nbsp;</p><p style="box-sizing: border-box; ">Using CATALINA_BASE:&nbsp;&nbsp; /software/apache-tomcat-6.0.18&nbsp;<br style="box-sizing: border-box; " />&nbsp;Using CATALINA_HOME:&nbsp; /software/apache-tomcat-6.0.18<br style="box-sizing: border-box; " />&nbsp;Using CATALINA_TMPDIR: /software/apache-tomcat-6.0.18/temp<br style="box-sizing: border-box; " />&nbsp;Using JRE_HOME:&nbsp; /usr</p><p style="box-sizing: border-box; ">用命令<br style="box-sizing: border-box; " />&nbsp;ps -ef|grep tomcat</p><p style="box-sizing: border-box; ">查看没有tomcat进程。</p><p style="box-sizing: border-box; ">查看tomcat日志信息，出现了下面的错误：</p><p style="box-sizing: border-box; "><br style="box-sizing: border-box; " />WARNING: error instantiating 'org.apache.juli.ClassLoaderLogManager' referenced by java.util.logging.manager, class not found<br style="box-sizing: border-box; " />java.lang.ClassNotFoundException: org.apache.juli.ClassLoaderLogManager not found<br style="box-sizing: border-box; " />&nbsp;&nbsp; &gt;&gt;No stacktrace available&amp;gt;&amp;gt;<br style="box-sizing: border-box; " />WARNING: error instantiating '1catalina.org.apache.juli.FileHandler,' referenced by handlers, class not found<br style="box-sizing: border-box; " />java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler,<br style="box-sizing: border-box; " />&nbsp;&nbsp; &gt;&gt;No stacktrace available&amp;gt;&amp;gt;<br style="box-sizing: border-box; " />Exception during runtime initialization<br style="box-sizing: border-box; " />java.lang.ExceptionInInitializerError<br style="box-sizing: border-box; " />&nbsp;&nbsp; &gt;&gt;No stacktrace available&amp;gt;&amp;gt;<br style="box-sizing: border-box; " />Caused by: java.lang.NullPointerException<br style="box-sizing: border-box; " />&nbsp;&nbsp; &gt;&gt;No stacktrace available&amp;gt;&amp;gt;</p><p style="box-sizing: border-box; ">最终解决办法：<br style="box-sizing: border-box; " />用命令设置JAVA_HOME环境变量<br style="box-sizing: border-box; " />export JAVA_HOME=/software/jdk1.5.0_4/</p><p style="box-sizing: border-box; "><br style="box-sizing: border-box; " />进入 %tomcat%/bin/<br style="box-sizing: border-box; " />./startup.sh<br style="box-sizing: border-box; " />启动成功！</p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/377530.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-07 14:56 <a href="http://www.blogjava.net/baizhihui19870626/articles/377530.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Vi命令详解</title><link>http://www.blogjava.net/baizhihui19870626/articles/376945.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Sat, 28 Apr 2012 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/376945.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/376945.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/376945.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/376945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/376945.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><div><h5><font><font size="3">&nbsp;vi编辑器是所有Unix及Linux系统下标准的编辑器，它的强大不逊色于任</font></font></h5><h5><font><font size="3">何最新的文本编辑器，这里只是简单地介绍一下它的用法和一小部分指令。</font></font></h5><h5><font><font size="3">由于对Unix及Linux系统的任何版本，vi编辑器是完全相同的，因此您可以在</font></font></h5><h5><font><font size="3">其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器，</font></font></h5><h5><font><font size="3">学会它后，您将在Linux的世界里畅行无阻。&nbsp;<br /><br />1、vi的基本概念&nbsp;<br /></font></font></h5><h5><font><font size="3">　　基本上vi可以分为三种状态，分别是命令模式（command mode）、插入模式（Insert mode）和底行模式（last line mode），各模式的功能区分如下：&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 1) 命令行模式(command mode）&nbsp;<br /><br />　　控制屏幕光标的移动，字符、字或行的删除，移动复制某区段及进入Insertmode下，或者到 last line mode。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 2) 插入模式（Insert mode）&nbsp;<br /><br />　　只有在Insert mode下，才可以做文字输入，按「ESC」键可回到命令行模式。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 3) 底行模式（last line mode）&nbsp;<br /><br />　　将文件保存或退出vi，也可以设置编辑环境，如寻找字符串、列出行号&#8230;&#8230;等。&nbsp;<br /></font></font></h5><h5><font><font size="3"><font><font size="3">　　</font></font>不过一般我们在使用时把vi简化成两个模式，就是将底行模式（last linemode）也算入命令行模式command mode）。&nbsp;<br /><br />2、vi的基本操作&nbsp;<br /></font></font></h5><h5><font><font size="3">&nbsp;&nbsp;&nbsp; a) 进入vi&nbsp;<br /><br />　　在系统提示符号输入vi及文件名称后，就进入vi全屏幕编辑画面：&nbsp;<br /><br />　　　$ vi myfile&nbsp;<br /><br />　　不过有一点要特别注意，就是您进入vi之后，是处于「命令行模式（command mode）」，您要切换到「插入模式（Insert mode）」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标，结果电脑一直哔哔叫，把自己气个半死，所以进入vi后，先不要乱动，转换到 「插入模式（Insert mode）」再说吧！&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; b) 切换至插入模式（Insert mode）编辑文件&nbsp;<br /><br />　　在「命令行模式（command mode）」下按一下字母「i」就可以进入「插入模式（Insert mode）」，这时候你就可以开始输入文字了。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; c) Insert 的切换&nbsp;<br /><br />　　您目前处于「插入模式（Insert mode）」，您就只能一直输入文字，如果您发现输错了字！想用光标键往回移动，将该字删除，就要先按一下「ESC」键转到「命令行模式（command mode）」再删除文字。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; d) 退出vi及保存文件&nbsp;<br /><br />　　在「命令行模式（command mode）」下，按一下「：」冒号键进入「Last line mode」，例如：&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; : w filename （输入 「w filename」将文章以指定的文件名filename保存）&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; : wq (输入「wq」，存盘并退出vi)&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; : q! (输入q!， 不存盘强制退出vi)&nbsp;<br /><br /><br />3、命令行模式（command mode）功能键&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /></font></font></h5><h5>&nbsp;&nbsp;&nbsp;&nbsp;<font><font size="3">1）. 插入模式&nbsp;<br /><br />　　按「i」切换进入插入模式「insert mode」，按&#8220;i&#8221;进入插入模式后是从光标当前位置开始输入文件；&nbsp;<br /><br />　　按「a」进入插入模式后，是从目前光标所在位置的下一个位置开始输入文字；&nbsp;<br /><br />　　按「o」进入插入模式后，是插入新的一行，从行首开始输入文字。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 2）. 从插入模式切换为命令行模式&nbsp;<br /><br />　　按「ESC」键。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 3）. 移动光标&nbsp;<br /><br />　　vi可以直接用键盘上的光标来上下左右移动，但正规的vi是用小写英文字母「h」、「j」、「k」、「l」，分别控制光标左、下、上、右移一格。&nbsp;<br /><br />　　按「ctrl」+「b」：屏幕往&#8220;后&#8221;移动一页。&nbsp;<br /><br />　　按「ctrl」+「f」：屏幕往&#8220;前&#8221;移动一页。&nbsp;<br /><br />　　按「ctrl」+「u」：屏幕往&#8220;后&#8221;移动半页。&nbsp;<br /><br />　　按「ctrl」+「d」：屏幕往&#8220;前&#8221;移动半页。&nbsp;<br /><br />　　按数字「0」：移到文章的开头。&nbsp;<br /><br />　　按「G」：移动到文章的最后。&nbsp;<br /><br />　　按「$」：移动到光标所在行的&#8220;行尾&#8221;。&nbsp;<br /><br />　　按「^」：移动到光标所在行的&#8220;行首&#8221;&nbsp;<br /><br />　　按「w」：光标跳到下个字的开头&nbsp;<br /><br />　　按「e」：光标跳到下个字的字尾&nbsp;<br /><br />　　按「b」：光标回到上个字的开头&nbsp;<br /><br />　　按「#l」：光标移到该行的第#个位置，如：5l,56l。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 4）. 删除文字&nbsp;<br /><br />　　「x」：每按一次，删除光标所在位置的&#8220;后面&#8221;一个字符。&nbsp;<br /><br />　　「#x」：例如，「6x」表示删除光标所在位置的&#8220;后面&#8221;6个字符。&nbsp;<br /><br />　　「X」：大写的X，每按一次，删除光标所在位置的&#8220;前面&#8221;一个字符。&nbsp;<br /><br />　　「#X」：例如，「20X」表示删除光标所在位置的&#8220;前面&#8221;20个字符。&nbsp;<br /><br />　　「dd」：删除光标所在行。&nbsp;<br /><br />　　「#dd」：从光标所在行开始删除#行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 5）. 复制&nbsp;<br /><br />　　「yw」：将光标所在之处到字尾的字符复制到缓冲区中。&nbsp;<br /><br />　　「#yw」：复制#个字到缓冲区&nbsp;<br /><br />　　「yy」：复制光标所在行到缓冲区。&nbsp;<br /><br />　　「#yy」：例如，「6yy」表示拷贝从光标所在的该行&#8220;往下数&#8221;6行文字。&nbsp;<br /><br />　　「p」：将缓冲区内的字符贴到光标所在位置。注意：所有与&#8220;y&#8221;有关的复制命令都必须与&#8220;p&#8221;配合才能完成复制与粘贴功能。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 6）. 替换&nbsp;<br /><br />　　「r」：替换光标所在处的字符。&nbsp;<br /><br />　　「R」：替换光标所到之处的字符，直到按下「ESC」键为止。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 7）. 回复上一次操作&nbsp;<br /><br />　　「u」：如果您误执行一个命令，可以马上按下「u」，回到上一个操作。按多次&#8220;u&#8221;可以执行多次回复。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 8）. 更改&nbsp;<br /><br />　　「cw」：更改光标所在处的字到字尾处&nbsp;<br /><br />　　「c#w」：例如，「c3w」表示更改3个字&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; 9）. 跳至指定的行&nbsp;<br /><br />　　「ctrl」+「g」列出光标所在行的行号。&nbsp;<br /><br />　　「#G」：例如，「15G」，表示移动光标至文章的第15行行首。&nbsp;<br /><br />4、Last line mode下命令简介</font></font></h5><h5><font><font size="3"><font><font size="3">　　</font></font>在使用「last line mode」之前，请记住先按「ESC」键确定您已经处于「command mode」下后，再按「：」冒号即可进入「last line mode」。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; A) 列出行号&nbsp;<br /><br />　「setnu」：输入「set nu」后，会在文件中的每一行前面列出行号。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; B) 跳到文件中的某一行&nbsp;<br /><br />　「#」：「#」号表示一个数字，在冒号后输入一个数字，再按回车键就会跳到该行了，如输入数字15，再回车，就会跳到文章的第15行。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; C) 查找字符&nbsp;<br /><br />　「/关键字」：先按「/」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往后寻找到您要的关键字为止。&nbsp;<br /><br />　「?关键字」：先按「?」键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按「n」会往前寻找到您要的关键字为止。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; D) 保存文件&nbsp;<br /><br />　「w」：在冒号输入字母「w」就可以将文件保存起来。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; E) 离开vi&nbsp;<br /><br />　「q」：按「q」就是退出，如果无法离开vi，可以在「q」后跟一个「!」强制离开vi。&nbsp;<br /><br />　「qw」：一般建议离开时，搭配「w」一起使用，这样在退出的时候还可以保存文件。&nbsp;<br /><br />5、vi命令列表&nbsp;<br /></font></font></h5><h5><font><font size="3">&nbsp;&nbsp;&nbsp; 1<font><font size="3">）</font></font>、下表列出命令模式下的一些键的功能：&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 左移光标一个字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 右移光标一个字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; k &nbsp; &nbsp;&nbsp; &nbsp; 光标上移一行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 光标下移一行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ^ &nbsp; &nbsp; &nbsp;&nbsp; 光标移动至行首&nbsp;<br /></font></font></h5><h5>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font><font size="3">&nbsp;&nbsp;&nbsp; 0 &nbsp; &nbsp; &nbsp; &nbsp; 数字&#8220;0&#8221;，光标移至文章的开头&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 光标移至文章的最后&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; 光标移动至行尾&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ctrl+f&nbsp;&nbsp;&nbsp; 向前翻屏&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ctrl+b 向后翻屏&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ctrl+d 向前翻半屏&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Ctrl+u 向后翻半屏&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; i &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 在光标位置前插入字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a &nbsp; &nbsp; &nbsp;&nbsp; 在光标所在位置的后一个字符开始增加&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; o &nbsp; &nbsp; &nbsp;&nbsp; 插入新的一行，从行首开始输入&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ESC&nbsp; 从输入状态退至命令状态&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x &nbsp; &nbsp; &nbsp; &nbsp; 删除光标后面的字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #x &nbsp; &nbsp;&nbsp; 删除光标后的＃个字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; X&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; (大写X)，删除光标前面的字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #X &nbsp; &nbsp;&nbsp; 删除光标前面的#个字符&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dd&nbsp;&nbsp; &nbsp;&nbsp; 删除光标所在的行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #dd &nbsp;&nbsp; 删除从光标所在行数的#行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; yw &nbsp; &nbsp;&nbsp; 复制光标所在位置的一个字&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #yw &nbsp;&nbsp; 复制光标所在位置的#个字&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; yy &nbsp; &nbsp; &nbsp; 复制光标所在位置的一行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #yy &nbsp; &nbsp; 复制从光标所在行数的#行&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p &nbsp; &nbsp; &nbsp; &nbsp; 粘贴&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; u &nbsp; &nbsp; &nbsp; &nbsp; 取消操作&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cw &nbsp; &nbsp;&nbsp; 更改光标所在位置的一个字&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #cw&nbsp;&nbsp;&nbsp; 更改光标所在位置的#个字&nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp; 2<font><font size="3"><font><font size="3">）</font></font></font></font>、下表列出行命令模式下的一些指令&nbsp;<br /></font></font></h5><h5>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font><font size="3">w filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 储存正在编辑的文件为filename&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wq filename&nbsp;&nbsp;&nbsp;&nbsp; 储存正在编辑的文件为filename，并退出vi&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; q!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放弃所有修改，退出vi&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; set nu &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 显示行号&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /或? &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 查找，在/后输入要查找的内容&nbsp;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; n &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 与/或?一起使用，如果查找的内容不是想要找的关键字，按n或向后（与/联用）或向前（与?联用）继续查找，直到找到为止。 对于第一次用vi，有几点注意要提醒一下：&nbsp;<br /></font></font></h5><h5><font><font size="3">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1、用vi打开文件后，是处于「命令行模式（command mode）」，您要切换到「插入模式（Insert mode）」才能够输入文字。</font></font></h5><h5><font><font size="3">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 切换方法：在「命令行模式（command mode）」下按一下字母「i」就可以进入「插入模式（Insert mode）」，这时候你就可以开始输入文字了。&nbsp;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br /></font></font></h5><h5>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<font><font size="3">2、编辑好后，需从插入模式切换为命令行模式才能对文件进行保存，切换方法：按「ESC」键。&nbsp;<br /></font></font></h5><h5>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<font><font size="3">3、保存并退出文件：在命令模式下输入:wq即可！（别忘了wq前面的:）</font></font></h5><br /><br /></div><p align="center" style="line-height: 21px; "><strong><font size="3" color="#008000">Vi命令</font></strong>&nbsp;</p>Vi 的工作模式<br />编辑模式<br />插入模式<br />命令模式<br /><br />1.6.1&nbsp;&nbsp;vi 的工作模式<br /><br />编辑模式: 用户可以利用一些预先定义的按键来移动光标、删除文字、复制或粘贴文字等。<br />l 是向右移动光标，相当于向右箭头键，<br />k 是向下移动光标，相当于向下箭头键。<br /><br />当用户在编辑模式下键入 i, a, o 等命令之后，可进入插入模式；<br />键入 : 可进入命名模式。<br />在插入模式下，用户随后输入的，除 Esc 之外的任何字符均将被看成是插入到编辑缓冲区中的字符。按 Esc 之后，从插入模式切换到编辑模式。<br />在命令模式，Vi 将把光标挪到屏幕的最下方，并在第一个字符的位置显示一个 :（冒号）。这时，用户就可以键入一些命令。这些命令可用来保存文件、读取文件内容、执行 Shell 命令、设置 Vi 参数、以正则表达式的方式查找字符串或替换字符串等。<br /><br />1.6.2&nbsp;&nbsp;编辑模式<br />1. 移动光标要对正文内容进行修改，首先必须把光标移动到指定位置。移动光标的最简单的方式是按键盘的上、下、左、右箭头键。除了这种最原始的方法之外，用户还可以利用 vi 提供的众多字符组合键，在正文中移动光标，迅速到达指定的行或列，实现定位。例如：<br />k、j、h、l 功能分别等同于上、下、左、右箭头键<br />Ctrl+b 在文件中向上移动一页（相当于 PageUp 键）<br />Ctrl+f 在文件中向下移动一页（相当于 PageDown 键）<br />H 将光标移到屏幕的最上行（Highest）<br />nH 将光标移到屏幕的第 n 行<br />2H 将光标移到屏幕的第 2 行<br />M 将光标移到屏幕的中间（Middle）<br />L 将光标移到屏幕的最下行（Lowest）<br />nL 将光标移到屏幕的倒数第 n 行<br />3L 将光标移到屏幕的倒数第 3 行<br />w 在指定行内右移光标，到下一个字的开头<br />e 在指定行内右移光标，到一个字的末尾<br />b 在指定行内左移光标，到前一个字的开头<br />0 数字0，左移光标，到本行的开头<br />$ 右移光标，到本行的末尾<br />^ 移动光标，到本行的第一个非空字符<br />2. 替换和删除将光标定位于文件内指定位置后，可以用其他字符来替换光标所指向的字符，或从当前光标位置删除一个或多<br />个字符。例如：<br />rc 用 c 替换光标所指向的当前字符<br />nrc 用 c 替换光标所指向的前 n 个字符<br />5rc 用 c 替换光标所指向的前 5 个字符<br />x 删除光标所指向的当前字符<br />nx 删除光标所指向的前 n 个字符<br />3x 删除光标所指向的前 3 个字符<br />dw 删除光标右侧的字<br />ndw 删除光标右侧的 n 个字<br />3dw 删除光标右侧的 3 个字<br />db 删除光标左侧的字<br />ndb 删除光标左侧的 n 个字<br />5db 删除光标左侧的 5 个字<br />dd 删除光标所在行，并去除空隙<br />ndd 删除 n 行内容，并去除空隙<br />3dd 删除 3 行内容，并去除空隙<br />3. 粘贴和复制从正文中删除的内容（如字符、字或行）并没有真正丢失，而是被剪切并复制到了一个内存缓冲区中。用户可<br />将其粘贴到正文中的指定位置。完成这一操作的命令是：<br />p 小写字母 p，将缓冲区的内容粘贴到光标的后面<br />P 大写字母 P，将缓冲区的内容粘贴到光标的前面<br />如果缓冲区的内容是字符或字，直接粘贴在光标的前面或后面；如果缓冲区的内容为整行正文，则粘贴在当前<br />光标所在行的上一行或下一行。<br />注意上述两个命令中字母的大小写。vi 编辑器经常以一对大、小写字母（如 p 和 P）来提供一对相似的功能<br />。通常，小写命令在光标的后面进行操作，大写命令在光标的前面进行操作。<br />有时需要复制一段正文到新位置，同时保留原有位置的内容。这种情况下，首先应当把指定内容复制（而不是<br />剪切）到内存缓冲区。完成这一操作的命令是：<br />yy 复制当前行到内存缓冲区<br />nyy 复制 n 行内容到内存缓冲区<br />5yy 复制 5 行内容到内存缓冲区<br />4. 搜索字符串和许多先进的编辑器一样，vi 提供了强大的字符串搜索功能。要查找文件中指定字或短语出现的位置，可以<br />用 vi 直接进行搜索，而不必以手工方式进行。搜索方法是：键入字符 / ，后面跟以要搜索的字符串，然后<br />按回车键。编辑程序执行正向搜索（即朝文件末尾方向），并在找到指定字符串后，将光标停到该字符串的<br />开头；键入 n 命令可以继续执行搜索，找出这一字符串下次出现的位置。用字符 ? 取代 / ，可以实现反向<br />搜索（朝文件开头方向）。例如：<br />/str1 正向搜索字符串 str1<br />n 继续搜索，找出 str1 字符串下次出现的位置<br />?str2 反向搜索字符串 str2<br />无论搜索方向如何，当到达文件末尾或开头时，搜索工作会循环到文件的另一端并继续执行。<br />5. 撤销和重复在编辑文档的过程中，为消除某个错误的编辑命令造成的后果，可以用撤消命令。另外，如果用户希望在新<br />的光标位置重复前面执行过的编辑命令，可用重复命令。<br />u 撤消前一条命令的结果<br />. 重复最后一条修改正文的命令<br />6. 文本选中vi 可进入到一种成为 Visual 的模式，在该模式下，用户可以用光标移动命令可视地选择文本，然后再执行其他编辑操作，例如删除、复制等。 v 字符选中命令 V 行选中命令<br /><br />1.6.3&nbsp;&nbsp;插入模式<br /><br />1. 进入插入模式在编辑模式下正确定位光标之后，可用以下命令切换到插入模式：<br />i 在光标左侧输入正文<br />a 在光标右侧输入正文<br />o 在光标所在行的下一行增添新行<br />O 在光标所在行的上一行增添新行<br />I 在光标所在行的开头输入正文<br />A 在光标所在行的末尾输入正文<br />上面介绍了几种切换到插入模式的简单方法。另外还有一些命令，它们允许在进入插入模式之前首先删去一段<br />正文，从而实现正文的替换。这些命令包括：<br />s 用输入的正文替换光标所指向的字符<br />ns 用输入的正文替换光标右侧 n 个字符<br />cw 用输入的正文替换光标右侧的字<br />ncw 用输入的正文替换光标右侧的 n 个字<br />cb 用输入的正文替换光标左侧的字<br />ncb 用输入的正文替换光标左侧的 n 个字<br />cd 用输入的正文替换光标的所在行<br />ncd 用输入的正文替换光标下面的 n 行<br />c$ 用输入的正文替换从光标开始到本行末尾的所有字符<br />c0 用输入的正文替换从本行开头到光标的所有字符<br />2. 退出插入模式退出插入模式的方法是，按 ESC 键或组合键Ctrl+[ 。<br />#DEMO#1.6.4&nbsp;&nbsp;命令模式在 vi 的命令模式下，可以使用复杂的命令。在编辑模式下键入&#8220;:&#8221;，光标就跳到屏幕最后一行，并在那里显示冒号，此时已进入命令模式。命令模式又称&#8220;末行模 式&#8221;，用户输入的内容均显示在屏幕的最后一行，按回车键，vi 执行命令。1. 退出命令在编辑模式下可以用 ZZ 命令退出 vi 编辑程序，该命令保存对正文所作的修改，覆盖原始文件。如果只需要<br />退出编辑程序，而不打算保存编辑的内容，可用下面的命令：<br />: q 在未作修改的情况下退出<br />: q! 放弃所有修改，退出编辑程序<br />2. 行号与文件编辑中的每一行正文都有自己的行号，用下列命令可以移动光标到指定行：<br />: n 将光标移到第 n 行<br />命令模式下，可以规定命令操作的行号范围。数值用来指定绝对行号；字符&#8220;.&#8221;表示光标所在行的行号；字符<br />符&#8220;$&#8221;表示正文最后一行的行号；简单的表达式，例如&#8220;.+5&#8221;表示当前行往下的第 5 行。例如：<br />:345 将光标移到第 345 行<br />:345w file 将第 345 行写入 file 文件<br />:3,5w file 将第 3 行至第 5 行写入 file 文件<br />:1,.w file 将第 1 行至当前行写入 file 文件<br />:.,$w file 将当前行至最后一行写入 file 文件<br />:.,.+5w file 从当前行开始将 6 行内容写入 file 文件<br />:1,$w file 将所有内容写入 file 文件，相当于 :w file 命令<br />在命令模式下，允许从文件中读取正文，或将正文写入文件。例如：<br />:w 将编辑的内容写入原始文件，用来保存编辑的中间结果<br />:wq 将编辑的内容写入原始文件并退出编辑程序（相当于 ZZ 命令）<br />:w file 将编辑的内容写入 file 文件，保持原有文件的内容不变<br />:a,bw file 将第 a 行至第 b 行的内容写入 file 文件<br />:r file 读取 file 文件的内容，插入当前光标所在行的后面<br />:e file 编辑新文件 file 代替原有内容<br />:f file 将当前文件重命名为 file<br />:f 打印当前文件名称和状态，如文件的行数、光标所在的行号等<br />3. 字符串搜索给出一个字符串，可以通过搜索该字符串到达指定行。如果希望进行正向搜索，将待搜索的字符串置于两个&#8220;<br />/&#8221;之间；如果希望反向搜索，则将字符串放在两个&#8220;?&#8221;之间。例如：<br />:/str/ 正向搜索，将光标移到下一个包含字符串 str 的行<br />:?str? 反向搜索，将光标移到上一个包含字符串 str 的行<br />:/str/w file 正向搜索，并将第一个包含字符串 str 的行写入 file 文件<br />:/str1/,/str2/w file 正向搜索，并将包含字符串 str1 的行至包含字符串 str2 的行写<br />入 file 文件<br />4. 正文替换利用 :s 命令可以实现字符串的替换。具体的用法包括：<br />:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1<br />:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1<br />:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1<br />:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1<br />:g/str1/s//str2/g 功能同上<br />从上述替换命令可以看到：g 放在命令末尾，表示对搜索字符串的每次出现进行替换；不加 g，表示只对搜索<br />字符串的首次出现进行替换；g 放在命令开头，表示对正文中所有包含搜索字符串的行进行替换操作。<br />5. 删除正文在命令模式下，同样可以删除正文中的内容。例如：<br />:d 删除光标所在行<br />:3d 删除 3 行<br />:.,$d 删除当前行至正文的末尾<br />:/str1/,/str2/d 删除从字符串 str1 到 str2 的所有行<br />6. 恢复文件vi 在编辑某个文件时，会另外生成一个临时文件，这个文件的名称通常以 . 开头，并以 .swp 结尾。vi 在<br />正常退出时，该文件被删除，若意外退出，而没有保存文件的最新修改内容，则可以使用恢复命令：<br />:recover 恢复文件<br />也可以在启动 vi 时利用 -r 选项。<br />#DEMO##DEMO#<br />1.6.5&nbsp;&nbsp;选项设置为控制不同的编辑功能，vi 提供了很多内部选项。利用 :set 命令可以设置选项。基本语法为：<br />:set option 设置选项 option<br />常见的功能选项包括：<br />autoindent 设置该选项，则正文自动缩进<br />ignorecase 设置该选项，则忽略规则表达式中大小写字母的区别<br />number 设置该选项，则显示正文行号<br />ruler 设置该选项，则在屏幕底部显示光标所在行、列的位置<br />tabstop 设置按 Tab 键跳过的空格数。例如 :set tabstop=n，n 默认值为 8<br />mk 将选项保存在当前目录的 .exrc 文件中&nbsp;</span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/376945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-04-28 11:42 <a href="http://www.blogjava.net/baizhihui19870626/articles/376945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux防火墙 配置文件 iptables详解</title><link>http://www.blogjava.net/baizhihui19870626/articles/376350.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Mon, 23 Apr 2012 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/376350.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/376350.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/376350.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/376350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/376350.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #555555; font-family: Verdana, Arial, Tahoma; line-height: 25px; background-color: #fafdfe; "><br />对于Internet上的系统，不管是什么情况都要明确一点：网络是不安全的。因此，虽然创建一个<a href="http://www.net527.cn/a/anquan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">防火墙</u></a>并不能保证系统100％安全，但却是绝对必要的。 Linux提供了一个非常优秀的<a href="http://www.net527.cn/a/anquan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">防火墙</u></a>工具&#8212;netfilter/<a href="http://www.net527.cn/a/anquan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">iptables</u></a>。它完全免费、功能强大、使用灵活、<a href="http://www.net527.cn/a/luyoujiaohuan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">可以</u></a>对流入和流出的信息进行细化控制，且<a href="http://www.net527.cn/a/luyoujiaohuan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">可以</u></a>在一台低<a href="http://www.net527.cn/a/luyoujiaohuan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">配置</u></a>机器上很好地运行。本文将简单介绍使用netfilter/<a href="http://www.net527.cn/a/anquan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">iptables</u></a>实现防火墙架设和Internet连接共享等应用。</span><span class="Apple-style-span" style="color: #555555; font-family: Verdana, Arial, Tahoma; line-height: 25px; background-color: #fafdfe; "><p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: left; ">netfilter/iptabels应用程序，被认为是 Linux中实现包过滤功能的第四代应用程序。netfilter/iptables包含在2.4以后的内核中，它可以实现防火墙、NAT（网络地址翻译）和数据包的分割等功能。netfilter工作在内核内部，而iptables则是让用户定义规则集的表结构。netfilter/iptables 从ipchains和ipwadfm（IP防火墙管理）演化而来，功能更加强大。下文将netfilter/iptabels统一称为iptables。</p><p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: left; ">可以用iptables为Unix、Linux和BSD个人工作站创建一个防火墙，也可以为一个子网创建防火墙以保护其它的系统平台。iptales只读取数据包头，不会给信息流增加负担，也无需进行验证。要想获得更好的安全性，可以将其和一个代理服务器（比如squid）相结合。</p><p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: left; ">基本概念&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />典型的防火墙设置有两个网卡：一个流入，一个流出。iptables读取流入和流出数据包的报头，将它们与规则集（Ruleset）相比较，将可接受的数据包从一个网卡转发至另一个网卡，对被拒绝的数据包，可以丢弃或按照所定义的方式来处理。&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令，规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则，并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令，一般语法如下：&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />iptables [-t table] command [match] [target]</p><p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: left; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />1．表（table）&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项：filter、nat和 mangle。该选项不是必需的，如果未指定，则filter作为缺省表。各表实现的功能如表1所示。<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />表1 三种表实现的功能<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><img height="224" src="http://www.net527.cn/uploads/allimg/100401/10121Wa3-0.jpg" width="502" alt="" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[if !vml]--&gt;2．命令（command）&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />command部分是iptables命令最重要的部分。它告诉iptables命令要做什么，例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />表2 命令的功能和样例<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><img src="http://www.net527.cn/uploads/allimg/100401/10121UG0-1.jpg" alt="" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />3．匹配（match）</p><p align="left" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; text-align: left; ">iptables命令的可选match部分指定信息包与规则匹配所应具有的特征（如源地址、目的地址、协议等）。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />表3 通用匹配及示例说明</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><img src="http://www.net527.cn/uploads/allimg/100401/10121V1E-2.jpg" alt="" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />4．目标（target）</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">目标是由规则指定的操作，对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外，还有许多可用的目标选项。表4是常用的一些目标及示例说明。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">除表4外，还有许多用于建立高级规则的其它目标，如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">表4 目标及示例说明<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /><img height="277" hspace="0" src="http://www.net527.cn/uploads/allimg/100401/10121S523-3.jpg" width="522" border="0" alt="" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; width: 522px; position: static; height: 277px; " /><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />应用iptables</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">与ipchains和ipfwadm不同的是，iptables可以配置有状态的防火墙。iptables可以检测到源地址和目的地址、源端口和目的端口及流入数据包的顺序，即iptables记住了在现有连接中，哪些数据包已经被允许接收。这使得暂时性的端口只有在需要时才会被打开，并且会拒绝所有永久性占用端口的请求，大大地加强了安全性。同时，那些被更改了报头的数据包，即使包含有一个被允许的目的地址和端口，也会被检测到并被丢弃。此外，有状态的防火墙能够指定并记住为发送或接收信息包所建立连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时，防火墙所使用的这些状态信息可以增加其效率和速度。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">1．启动和停止iptables</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">下面将正式使用iptables来创建防火墙。启动和停止iptables的方法取决于所使用的Linux发行版，可以先查看所使用Linux版本的文档。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">一般情况下，iptables已经包含在Linux发行版中，运行iptables --version来查看系统是否安装了iptables。在Red Hat 9.0中，安装的版本是iptables v1.2.7a。如果系统没有安装iptables，则可以从<a href="http://www.netfilter.org/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; ">http://www.netfilter.org</a>下载。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">2．查看规则集</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">上面仅对iptables的用法做了一个简单介绍，使用中可以运行man iptables来查看所有命令和选项的完整介绍，或者运行iptables -help来查看一个快速帮助。要查看系统中现有的iptables规划集，可以运行以下命令：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">iptables --list</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">下面是没有定义规划时iptables的样子：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Chain INPUT (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Chain FORWARD (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Chain OUTPUT (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />如上例所示，每一个数据包都要通过三个内建的链（INPUT、OUTPUT和FORWARD）中的一个。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">filter是最常用的表，在filter表中最常用的三个目标是ACCEPT、DROP和REJECT。DROP会丢弃数据包，不再对其进行任何处理。REJECT会把出错信息传送至发送数据包的主机。&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />在Red Hat 9.0中，提供一个GUI程序来让用户对系统的安装级别进行简单的配置。该工具的启动方法是：主选单&#8594;系统设置&#8594;安全工具（如图1所示）。在此将安全级别设为&#8220;高级&#8221;，并选择使用默认的防火墙规则。点击确定后，再用iptables -list显示，发现iptables与没有定义规则前已经有很大不同，如下所示：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">[root@workstation root]# iptables --list&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />Chain INPUT (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />RH-Lokkit-0-50-INPUT all -- anywhere anywhere</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Chain FORWARD (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />RH-Lokkit-0-50-INPUT all -- anywhere anywhere</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Chain OUTPUT (policy ACCEPT)&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />target prot opt source destination&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />......</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">现实中一般不使用这个GUI工具，因为它的功能有限，也不够透明。相比较而言，SuSE 9.0中相应的配置工具要好得多，它可以在GUI下对防火墙进行更加细化的配置（比如增加了IP转发和伪装等功能的配置）。尽管这样，一般还是自己来增加和删除规则。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">．增加规则</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">本例中的规则将会阻止来自某一特定IP范围内的数据包，因为该IP地址范围被管理员怀疑有大量恶意攻击者在活动：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">也可以很轻易地阻止所有流向攻击者IP地址的数据包，该命令稍有不同：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">注意这里的A选项，如前所述，使用它说明是给现有的链添加规则。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">4．删除规则</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">网络上的恶意攻击者总是在变化的，因此需要不断改变IP。假设一个网上攻击者转移到新的IP地址，而其老的IP地址被分配给一些清白的用户，那么这时这些用户的数据包将无法通过你的网络。这种情况下，可以使用带-D选项的命令来删除现有的规则：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">5．缺省的策略</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">创建一个具有很好灵活性、可以抵御各种意外事件的规则需要大量的时间。对于那些没有时间这样做的人，最基本的原则是&#8220;先拒绝所有的数据包，然后再允许需要的&#8221;。下面来为每一个链设置缺省的规则：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -P INPUT DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -P FORWARD DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -P OUTPUT ACCEPT</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">这里选项-P用于设置链的策略，只有三个内建的链才有策略。这些策略可以让信息毫无限制地流出，但不允许信息流入。很多时候需要接收外部信息，则可使用以下命令：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">6．SYN的使用</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">不能关闭所有端口，也不能只指定某些端口处于打开状态，那么怎样才能设置一个有效的规则，既可以允许普通用户正常通过，又可以阻止恶意攻击者访问网络呢？</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">刚开始使用iptables的人可以充分利用syn标识来阻止那些未经授权的访问。iptables只检测数据包的报头，事实上，除 iptables以外，很多其它有用的数据包分析都是基于报头的。比如，在进行Web冲浪时，一个请求从你的PC发送至其它地方的Web服务器上，该服务器会响应请求并发回一个数据包，同时得到你系统上的一个临时端口。与响应请求不同的是，服务器并不关心所传送的内容。可以利用这种特点来设置规则，让它阻止所有没有经过你系统授权的TCP连接：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">这里的-i指的是网卡，-p则是指协议，--syn则表示带有syn标识设置的TCP数据包。SYN用于初始化一个TCP连接，如果自己机器上没有运行任何服务器，别人也就不会向你发送SYN数据包。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">7．有状态的数据包的检测</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">前边的例子把每一个数据包看成是独立的，而不是相互关联的，依靠的是数据包的头信息。iptables会检查数据包的源和目的IP地址、源和目的端口、流入数据包的顺序号、TCP先后顺序的信息及头标记（SYN、ACK、FIN、RST等）的状态，即它会跟踪整个连接会话，从而使整个过滤过程是相互关联的。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">8．共享一个Internet连接</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">网络地址翻译和IP伪装都可以实现多台主机共享一个Internet连接，这个局域网可以是Linux和Windows系统组成的多系统局域网。假设现在有一台机器，配有两个网卡，其中eth0为&#8220;公共&#8221;网卡，eth1为&#8220;私有&#8221;网卡，即eth0被分配了一个静态的、可路由的IP地址，而eth1被分配了一个私有的、不能路由的IP，该IP是属于该局域网子网的。要实现上述功能，需要向nat和filter表中添加一些链：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -t filter -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -t filter -A FORWARD -i eth1 -o eth0 -j ACCEPT</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">这显示了有状态的数据包检测的价值。请注意，这里是如何实现流入数据包只有在属于一个已经存在的连接时才被允许，而所有来自局域网内流向外的数据包则都允许通过。第一条规则让所有流出的信息看起来都是来自防火墙机器的，而并不会显示出防火墙后面还有一个局域网。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">下面的命令为FORWARD和POSTROUTING链设置缺省的策略，在使用伪装时，有一个缺省的POSTROUTING DROP策略非常重要，否则就可能有心怀恶意的用户突破网关后伪装自己的身份。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t filter -P FORWARD DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -t nat -P POSTROUTING DROP</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">下面的命令为拨号连接设置，它可以动态地分配IP地址：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">9．运行服务器时的情况</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">有时也会把服务器放置在防火墙后面，这时iptables就需要知道从哪儿通过数据包，设置如下所示：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "># iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 80 -j DNAT -to 192.168.0.10:80&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " /># iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT -to 192.168.0.11:25</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">10．规则的保存</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">到现在为止，所有的例子都是在命令行中进行的。在测试新的规则时，这是一种很好的方式，但一旦测试结果令人满意，就可以将它们保存为脚本。可以使用 iptables-save 命令来实现：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">$ iptables-save &gt;; iptables-script</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">信息包过滤表中的所有规则都被保存在<a href="http://www.net527.cn/a/luyoujiaohuan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">文件</u></a>iptables-script中。无论何时再次引导系统，都可以使用iptables-restore命令将规则集从该脚本<a href="http://www.net527.cn/a/luyoujiaohuan/" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #256eb1; text-decoration: none; "><u style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">文件</u></a>恢复到信息包过滤表。恢复命令如下所示：</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">$ iptables-restore iptables-script</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">如果愿意在每次引导系统时自动恢复该规则集，则可以将上面指定的这条命令放到任何一个初始化Shell脚本中。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">下面的例子并不是一个完整的脚本，它只是描述了如何使用变量及提供了一些附加的规则样例。</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">#!/bin/sh&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#为变量赋值&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />IPTABLES=/sbin/iptables&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />LAN_NET="192.168.1.0/24"&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />IFACE= "eth0"&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />LO_IFACE="lo"&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />LO_IP="127.0.0.1"&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#加载所需的内核&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />/sbin/modprobe ip_conntrack&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />/sbin/modprobe iptable_nat&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#缺省情况下，IP转发都处于不可用状态，将其设置为可用状态：&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />echo "1" &gt;; /proc/sys/net/ipv4/ip_forward&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#使IP的动态分配功能可用&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />echo "1" &gt;; /proc/sys/net/ipv4/ip_dynaddr&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#每次重启这个脚本时，最好清除以前所设的规则&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -P INPUT DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -F INPUT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -P OUTPUT ACCEPT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -F OUTPUT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -P FORWARD DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -F FORWARD&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -F -t nat&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#只允许在LAN中使用SSH连接&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A INPUT -s LAN_NET -p tcp --destination-port ssh -j ACCEPT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#允许loopback!&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A INPUT -i lo -p all -j ACCEPT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A OUTPUT -o lo -p all -j ACCEPT&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#丢弃那些流入的宣称是来自本地机器的数据包&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#丢弃那些流出的不是出自本地机的数据包&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A INPUT -i $IFACE -s $LAN_NET -j DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A OUTPUT -o $IFACE -s ! $LAN_NET -j DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#限制一些流出的信息&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A OUTPUT -o eth0 -p tcp -dport 31337 -j DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />$IPTABLES -A OUTPUT -o eth0 -p tcp -sport 31337 -j DROP&nbsp;<br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; " />#此外，31335、27444、27665、20034 NetBus、9704、137-139（smb）端口也应被禁止。</p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/376350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-04-23 11:07 <a href="http://www.blogjava.net/baizhihui19870626/articles/376350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下查看端口占用进程号，程序名的方法</title><link>http://www.blogjava.net/baizhihui19870626/articles/375249.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Thu, 19 Apr 2012 03:48:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/375249.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/375249.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/375249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/375249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/375249.html</trackback:ping><description><![CDATA[LINUX网络性能之管理工具三剑客 本文是介绍管理Linux查看端口这些输出信息，该命令将显示从每个数据包传出的头和来自主机hostname对端口80的编址。 
<p>&nbsp;</p>
<p>　　Netstat -tln 命令是Linux查看端口使用情况</p>
<p>　　/etc/init.d/vsftp start 是用来启动ftp端口~！</p>
<p>　　看文件/etc/services</p>
<p>　　netstat</p>
<p>　　Linux查看端口查看已经连接的服务端口（ESTABLISHED）</p>
<p>　　netstat -a</p>
<p>　　Linux查看端口查看所有的服务端口（LISTEN，ESTABLISHED）</p>
<p>　　sudo netstat -ap</p>
<p>　　Linux查看端口查看所有的服务端口并显示对应的服务程序名</p>
<p>　　nmap ＜扫描类型＞＜扫描参数＞</p>
<p>　　例如：</p>
<p>　　nmap localhost</p>
<p>　　nmap -p 1024-65535 localhost</p>
<p>　　nmap -PT 192.168.1.127-245</p>
<p>　　当我们使用netstat -apn查看网络连接的时候，会发现很多类似下面的内容：</p>
<p>　　Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name</p>
<p>　　tcp 0 52 218.104.81.152：7710 211.100.39.250：29488 ESTABLISHED 6111/1</p>
<p>　　显示这台开放了7710端口，那么这个端口属于哪个程序呢？我们可以使用lsof -i ：7710命令来查询：</p>
<p>　　COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME</p>
<p>　　sshd 1990 root 3u IPv4 4836 TCP *：7710 （LISTEN） 网管联盟</p>
<p>　　这样，我们就知道了7710端口是属于sshd程序的。</p><br /><br /><span style="widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial, Helvetica, sans-serif, SimSun; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: none; -webkit-text-stroke-width: 0px" class="Apple-style-span"> 
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">Redhat Linux中可以用netstat -an来查看系统使用端口的情况，以root<a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" href="http://wenwen.soso.com/z/Search.e?sp=S%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95&amp;ch=w.search.yjjlink&amp;cid=w.search.yjjlink" target="_blank">用户登录</a>，可以加-p参数，查看对应程序的PID。</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">Linux中常见程序的默认端口：</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">ssh为TCP22</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">ftp(vsftp等)主动模式下<a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" href="http://wenwen.soso.com/z/Search.e?sp=S%E6%95%B0%E6%8D%AE%E7%AB%AF%E5%8F%A3&amp;ch=w.search.yjjlink&amp;cid=w.search.yjjlink" target="_blank">数据端口</a>为TCP20，命令端口为TCP21</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">httpd(apache等)默认端口为TCP80</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">dns(bind)默认端口为TCP53，UDP53</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">mail(sendmail等)默认ICMP为TCP25，POP3为110</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">dhcp默认端口为UDP67</p></span><br /><br /><br /><span style="widows: 2; text-transform: none; text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial, Helvetica, sans-serif, SimSun; white-space: normal; orphans: 2; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: none; -webkit-text-stroke-width: 0px" class="Apple-style-span"> 
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">Netstat后面的意思</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">&#183;Proto显示连接使用的协议。<span class="Apple-converted-space">&nbsp;</span><br />&#183;RefCnt表示连接到本<a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" href="http://wenwen.soso.com/z/Search.e?sp=S%E5%A5%97%E6%8E%A5%E5%8F%A3&amp;ch=w.search.yjjlink&amp;cid=w.search.yjjlink" target="_blank">套接口</a>上的进程号。<span class="Apple-converted-space">&nbsp;</span><br />&#183;Types显示套接口的类型。<span class="Apple-converted-space">&nbsp;</span><br />&#183;State显示套接口当前的状态。<span class="Apple-converted-space">&nbsp;</span><br />&#183;Path表示连接到套接口的其它进程使用的<a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" href="http://wenwen.soso.com/z/Search.e?sp=S%E8%B7%AF%E5%BE%84%E5%90%8D&amp;ch=w.search.yjjlink&amp;cid=w.search.yjjlink" target="_blank">路径名</a></p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">Netstat -tln 命令是用来查看linux的端口使用情况，</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">netstat -a 查看所有的服务端口</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">netstat -an | grep<span class="Apple-converted-space">&nbsp;</span><a style="border-bottom: rgb(0,85,153) 1px dotted; color: rgb(0,85,153); text-decoration: none" href="http://wenwen.soso.com/z/Search.e?sp=S%E7%AB%AF%E5%8F%A3%E5%8F%B7&amp;ch=w.search.yjjlink&amp;cid=w.search.yjjlink" target="_blank">端口号</a>&nbsp; 来检验下是不是已经打开了某某端口</p>
<p style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; -webkit-text-size-adjust: none">service xxx start 或者 /etc/init.d/xxx start是开启xxx某端口</p>iptables -A INPUT --dport&nbsp;xxx -j DROP<br />iptables -A OUTPUT --dport&nbsp;xxx -j DROP是关闭xxx端口</span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/375249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-04-19 11:48 <a href="http://www.blogjava.net/baizhihui19870626/articles/375249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修改LINUX目录或文件的权限和所有权详解</title><link>http://www.blogjava.net/baizhihui19870626/articles/375105.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 18 Apr 2012 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/375105.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/375105.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/375105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/375105.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/375105.html</trackback:ping><description><![CDATA[<p>一、文件和目录的权限 　　1.文件的权限：<br />　　文件所属用户 所属用户组 其它用户<br />　　权限有：<br />　　读：read 数字表示为4：110<br />　　写：write 数字表示为2：10<br />　　执行：execute 数字表示为：1<br />　　0 1 10 11 110 111 1110 1111<br />　　0 1 2 3 4 5 6 7<br />　　具体解释如下：<br />　　1: 1 可执行<br />　　2：10 可写<br />　　3. 11=10+1 可写可执行<br />　　4. 100 可读<br />　　5. 101=100+1 可读可执行(5=4+1)<br />　　6. 110=100+10 可读可写(6=4+2)<br />　　7. 111=100+10+1 可读可写可执行(7=4+2+1)<br />　　2.权限的查看：<br />　　ls -l|more/less<br />　　二、使用chmod和数字改变文件或目录的访问权限<br />　　文件和目录的权限表示，是用rwx这三个字符来代表所有者、用户组和其他用户的权限。有时候，字符似乎过于麻烦，因此还有另外一种方法是以数字来表示权限，而且仅需三个数字。<br />　　r: 对应数值4<br />　　w: 对应数值2<br />　　x：对应数值1<br />　　-：对应数值0<br />　　数字设定的关键是mode的取值，一开始许多初学者会被搞糊涂，其实很简单，我们将rwx看成二进制数，如果有则有1表示，没有则有0表示，那么rwx r-x r- -则可以表示成为：<br />　　111 101 100<br />　　再将其每三位转换成为一个十进制数，就是754。<br />　　例如，我们想让a.txt这个文件的权限为：<br />　　自己 同组用户 其他用户<br />　　可读 是 是 是<br />　　可写 是 是<br />　　可执 行<br />　　那么，我们先根据上表得到权限串为：rw-rw-r--，那么转换成二进制数就是110 110 100，再每三位转换成为一个十进制数，就得到664，因此我们执行命令：<br />　　[root@localhost ~]# chmod 664 a.txt<br />　　按照上面的规则，rwx合起来就是4+2+1=7，一个rwxrwxrwx权限全开放的文件，数值表示为777;而完全不开放权限的文件&#8220;---------&#8221;其数字表示为000。下面举几个例子：<br />　　-rwx------:等于数字表示700。<br />　　-rwxr&#8212;r--:等于数字表示744。<br />　　-rw-rw-r-x:等于数字表示665。<br />　　drwx&#8212;x&#8212;x:等于数字表示711。<br />　　drwx------:等于数字表示700。<br />　　在文本模式下，可执行chmod命令去改变文件和目录的权限。我们先执行ls -l 看看目录内的情况：<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rw-r--r-- 1 root root 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　可以看到当然文件conkyrc.sample文件的权限是644,然后把这个文件的权限改成777。执行下面命令<br />　　[root@localhost ~]# chmod 777 conkyrc.sample<br />　　然后ls -l看一下执行后的结果：<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　可以看到conkyrc.sample文件的权限已经修改为rwxrwxrwx<br />　　如果要加上特殊权限，就必须使用4位数字才能表示。特殊权限的对应数值为：<br />　　s或 S (SUID)：对应数值4。<br />　　s或 S (SGID)：对应数值2。<br />　　t或 T ：对应数值1。<br />　　用同样的方法修改文件权限就可以了<br />　　例如：<br />　　[root@localhost ~]# chmod 7600 conkyrc.sample<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rwS--S--T 1 root root 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　加入想一次修改某个目录下所有文件的权限，包括子目录中的文件权限也要修改，要使用参数-R表示启动递归处理。<br />　　例如：<br />　　[root@localhost ~]# chmod 777 /home/user 注：仅把/home/user目录的权限设置为rwxrwxrwx<br />　　[root@localhost ~]# chmod -R 777 /home/user 注：表示将整个/home/user目录与其中的文件和子目录的权限都设置为rwxrwxrwx<br />　　三、使用命令chown改变目录或文件的所有权<br />　　文件与目录不仅可以改变权限，其所有权及所属用户组也能修改，和设置权限类似，用户可以通过图形界面来设置，或执行chown命令来修改。<br />　　我们先执行ls -l看看目录情况：<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rwxrwxrwx 1 root root 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　可以看到conkyrc.sample文件的所属用户组为root，所有者为root。<br />　　执行下面命令，把conkyrc.sample文件的所有权转移到用户user:<br />　　[root@localhost ~]# chown user conkyrc.sample<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rwxrwxrwx 1 user root 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　要改变所属组，可使用下面命令：<br />　　[root@localhost ~]# chown :users conkyrc.sample<br />　　[root@localhost ~]# ls -l<br />　　总用量 368<br />　　-rwxrwxrwx 1 user users 12172 8月 15 23:18 conkyrc.sample<br />　　drwxr-xr-x 2 root root 48 9月 4 16:32 Desktop<br />　　-r--r--r-- 1 root root 331844 10月 22 21:08 libfreetype.so.6<br />　　drwxr-xr-x 2 root root 48 8月 12 22:25 MyMusic<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth0<br />　　-rwxr-xr-x 1 root root 9776 11月 5 08:08 net.eth1<br />　　-rwxr-xr-x 1 root root 512 11月 5 08:08 net.lo<br />　　drwxr-xr-x 2 root root 48 9月 6 13:06 vmware<br />　　要修改目录的权限，使用-R参数就可以了，方法和前面一样。</p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/375105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-04-18 14:42 <a href="http://www.blogjava.net/baizhihui19870626/articles/375105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux命令创建和修改用户及密码 </title><link>http://www.blogjava.net/baizhihui19870626/articles/375104.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 18 Apr 2012 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/375104.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/375104.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/375104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/375104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/375104.html</trackback:ping><description><![CDATA[<p>linux下创建用户<br />1、添加ftp用户<br />useradd ftpname -d /home/ftp<br />passwd ftppwd<br />以下操作都以root权限进行：<br />service vsftpd start 启动Linux自带的FTP服务<br />2. 添加普通用户<br />useradd nagios &#8211;d /usr/local/nagios<br />chown nagios.nagios /usr/local/nagios<br />将用户切换到nagios 用户，添加nagios的访问用户：<br />su nagios<br />htpasswd &#8211;c /usr/local/nagios/etc/htpasswd.users nagiosadmin<br />系统会提示输入两次密码，例如两次输入nagios。<br />注: 这是第一次创建用户，需要&#8220;-c&#8221;选项，表示创建一个存放用户名和密码的文件，当再次添加用户或修改密码时不用&#8220;-c&#8221;选项。 </p>
<p>添加新的用户账号使用useradd命令，其语法如下： </p>
<p>　　useradd 选项 用户名 </p>
<p>　　其中各选项含义如下： </p>
<p>　　-c comment 指定一段注释性描述。 </p>
<p>　　-d 目录 指定用户主目录，如果此目录不存在，则同时使用-m选项，可以创建主目录。 </p>
<p>　　-g 用户组 指定用户所属的用户组。 </p>
<p>　　-G 用户组，用户组 指定用户所属的附加组。 </p>
<p>　　-s Shell文件 指定用户的登录Shell。 </p>
<p>　　-u 用户号 指定用户的用户号，如果同时有-o选项，则可以重复使用其他用户的标识号。 </p>
<p>　　用户名 指定新账号的登录名。 </p>
<p>　　例如： </p>
<p>　　# useradd &#8211;d /usr/sam -m sam </p>
<p>　　此命令创建了一个用户sam，其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam（/usr为默认的用户主目录所在的父目录）。 </p>
<p>　　# useradd -s /bin/sh -g group &#8211;G adm,root gem </p>
<p>　　此命令新建了一个用户gem，该用户的登录Shell是/bin/sh，它属于group用户组，同时又属于adm和root用户组，其中group用户组是其主组。 </p>
<p>　　增加用户账号就是在/etc/passwd文件中为新用户增加一条记录，同时更新其他系统文件如/etc/shadow, /etc/group等。这几个文件的内容在后面会做详细介绍。 </p>
<p>　　Linux提供了集成的系统管理工具userconf，它可以用来对用户账号进行统一管理。 </p>
<p>　　如果一个用户的账号不再使用，可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除，必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令，其格式如下： </p>
<p>　　userdel 选项 用户名 </p>
<p>　　常用的选项是-r，它的作用是把用户的主目录一起删除。 </p>
<p>　　例如： </p>
<p>　　# userdel sam </p>
<p>　　此命令删除用户sam在系统文件中（主要是/etc/passwd, /etc/shadow, /etc/group等）的记录，同时删除用户的主目录。 </p>
<p>　　修改用户账号就是根据实际情况更改用户的有关属性，如用户号、主目录、用户组、登录Shell等。 </p>
<p>　　修改已有用户的信息使用usermod命令，其格式如下： </p>
<p>　　usermod 选项 用户名 </p>
<p>　　常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等，这些选项的意义与useradd命令中的选项一样，可以为用户指定新的资源值。另外，有些系统可以使用如下选项： </p>
<p>　　-l 新用户名 </p>
<p>　　这个选项指定一个新的账号，即将原来的用户名改为新的用户名。 </p>
<p>　　例如： </p>
<p>　　# usermod -s /bin/ksh -d /home/z &#8211;g developer sam </p>
<p>　　此命令将用户sam的登录Shell修改为ksh，主目录改为/home/z，用户组改为developer。 </p>
<p>　　用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令，但是被系统锁定，无法使用，必须为其指定口令后才可以使用，即使是指定空口令。 </p>
<p>　　指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令，普通用户只能用它修改自己的口令。命令的格式为： </p>
<p>　　passwd 选项 用户名 </p>
<p>　　可使用的选项： </p>
<p>　　-l 锁定口令，即禁用账号。 </p>
<p>　　-u 口令解锁。 </p>
<p>　　-d 使账号无口令。 </p>
<p>　　-f 强迫用户下次登录时修改口令。 </p>
<p>　　如果默认用户名，则修改当前用户的口令。 </p>
<p>　　例如，假设当前用户是sam，则下面的命令修改该用户自己的口令： </p>
<p>　　$ passwd </p>
<p>　　Old password:****** </p>
<p>　　New password:******* </p>
<p>　　Re-enter new password:******* </p>
<p>　　如果是超级用户，可以用下列形式指定任何用户的口令： </p>
<p>　　# passwd sam </p>
<p>　　New password:******* </p>
<p>　　Re-enter new password:******* </p>
<p>　　普通用户修改自己的口令时，passwd命令会先询问原口令，验证后再要求用户输入两遍新口令，如果两次输入的口令一致，则将这个口令指定给用户；而超级用户为用户指定口令时，就不需要知道原口令。 </p>
<p>　　为了系统安全起见，用户应该选择比较复杂的口令，例如最好使用8位长的口令，口令中包含有大写、小写字母和数字，并且应该与姓名、生日等不相同。 </p>
<p>　　为用户指定空口令时，执行下列形式的命令： </p>
<p>　　# passwd -d sam </p>
<p>　　此命令将用户sam的口令删除，这样用户sam下一次登录时，系统就不再询问口令。 </p>
<p>　　passwd命令还可以用-l(lock)选项锁定某一用户，使其不能登录，例如： </p>
<p>　　# passwd -l sam</p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/375104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-04-18 14:40 <a href="http://www.blogjava.net/baizhihui19870626/articles/375104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Perl格式化输出时间日期</title><link>http://www.blogjava.net/baizhihui19870626/articles/372904.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 28 Mar 2012 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372904.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372904.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372904.html</trackback:ping><description><![CDATA[<p>方法一：</p>
<p>use POSIX qw(strftime);</p>
<p>&nbsp;</p>
<p>my $timeStr1 = strftime "%Y-%m-%d", localtime;</p>
<p>my $timeStr2 = strftime "%Y-%m-%d", localtime(time-86400); （前一天）</p>
<p>print "$timeStr \n";</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>方法二：</p>
<p>&nbsp;</p><pre><p>#!/usr/bin/perl</p><p> </p><p>($sec,$min,$hour,$day,$mon,$year,$weekday,$yeardate,$savinglightday)</p><p>  = (localtime(time));</p><p> </p><p>$sec  = ($sec &lt; 10)? "0$sec":$sec;</p><p>$min  = ($min &lt; 10)? "0$min":$min;</p><p>$hour = ($hour &lt; 10)? "0$hour":$hour;</p><p>$day  = ($day &lt; 10)? "0$day":$day;</p><p>$mon  = ($mon &lt; 9)? "0".($mon+1):($mon+1);</p><p>$year += 1900;</p><p> </p><p>$today = "$day.$mon.$year|$hour:$min:$sec";</p><p> </p><p>print $today."\n";</p><p>print time."\n";</p><p> </p><p> </p><p> </p><p> </p><p> </p><p>如果要输出一天前的日期，将time减去一天的秒数（86400）。</p><p> </p><p>(localtime(time-86400));</p><p> </p><p> </p><p> </p><p> </p><p>#!/usr/bin/perl</p><p> </p><p>print &amp;get_time(10)."\n";</p><p> </p><p>sub get_time {</p><p>  </p><p>  $interval = $_[0]*60;</p><p>  </p><p>  ($sec,$min,$hour,$day,$mon,$year,$weekday,$yeardate,$savinglightday)</p><p>    = (localtime(time + $interval));</p><p> </p><p>  $sec  = ($sec &lt; 10)? "0$sec":$sec;</p><p>  $min  = ($min &lt; 10)? "0$min":$min;</p><p>  $hour = ($hour &lt; 10)? "0$hour":$hour;</p><p>  $day  = ($day &lt; 10)? "0$day":$day;</p><p>  $mon  = ($mon &lt; 9)? "0".($mon+1):($mon+1);</p><p>  $year += 1900;</p><p>  </p><p>  return "$year-$mon-$day $hour:$min:$sec.00";</p><p>  </p><p>}</p><p> </p><p> </p><p> </p><p>sub getTime(){</p><p> (my $sec,my $min,my $hour,my $day,my $mon,my $year,my $weekday,my $yeardate,my $savinglightday)</p><p>= (localtime(time));</p><p> $sec = ($sec &lt; 10)? "0$sec":$sec;</p><p> $min = ($min &lt; 10)? "0$min":$min;</p><p> $hour = ($hour &lt; 10)? "0$hour":$hour;</p><p> $day = ($day &lt; 10)? "0$day":$day;</p><p> $mon = ($mon &lt; 9)? "0".($mon+1):($mon+1);</p><p> $year += 1900;</p><p> </p><p> my $now = "$year$mon$day $hour:$min:$sec ";</p><p> return $now;</p><p>}</p></pre><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-28 15:10 <a href="http://www.blogjava.net/baizhihui19870626/articles/372904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>perl的时间处理之localtime和strftime</title><link>http://www.blogjava.net/baizhihui19870626/articles/372903.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 28 Mar 2012 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372903.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372903.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372903.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372903.html</trackback:ping><description><![CDATA[<p>大家都是使用的 localtime 来取得当地日期时间和日期。这个函数如果在标量环境时，会以字符串的形式来传回目前的时间和日期 。默认的 localtime 的函数是以 1970 到今天的秒来做整数计算的。默认这个程序会调用 time 的函数来给它提供一个值。<br />使用方法：</p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="shell"><span style="font-family: Arial, 宋体; font-size: 14px">例如，print scalar (localtime)这个代码，它输出的结果将类似于Thu Sep 16 23:00:06 1999。在列表上下文中，localtime将返回能够描述当前时间的一个元素列表：</span><span style="font-size: small"><br /><span style="font-family: Arial, 宋体; font-size: 14px">(</span></span><span style="font-size: 12px"><span style="font-family: Arial, 宋体; font-size: 14px">$sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime;</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">字段    值</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$sec     秒，0 ~ 59</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$min     分，0 ~ 59</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$hour     时，0 ~ 23</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$mday     月份中的日期， 1 ~ 2 8、2 9、3 0或3 1</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$mon     年份中的月份， 0 ~ 11（这里请特别要小心）</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$year_off    1900年以来的年份。将1900加上这个数字，得出正确的4位数年份</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$wday     星期几，0 ~ 6</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$yday     一年中的第几天，0 ~ 364或365</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">$isdst     如果夏令时有效，则为真</span><br /><span style="font-family: Arial, 宋体; font-size: 14px">不要将19附加给localtime返回的年份。它返回的年份是1900的偏移量。比如，在1999年，年份是99;在2000年中,它是100,将 1999与该值相加，可以在2000年以后正确地产生年份。perl不存在2000年问题，但是，如果简单地将19(或20)附加给该年份，就会导致程序中产生2000年问题</span></span> <p><span style="font-family: Arial, 宋体; font-size: 14px">真正的年月日 就是: $year_off + 1900 , $mon+1,$mday</span></p></pre></div></div>
<p>上面这个函数常用，但是返回值非常乱，可读性非常不好，让我们很容易出错，所以我推荐 strftime 这个时间函数。当然，还有另一个模块 DataTime 也相当不错。不过 strftime 非常象 Linux 常用的 date 的命令。strftime 是 C 中 POSIX 的一个功能函数。被包含进了 Perl 中。好象 PHP 也是支持的</p>
<p>使用起来很容易，如下:</p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="perl"><span style="font-style: italic; color: #666666">#!/usr/bin/perl</span>
<span style="color: #000000; font-weight: bold">use</span> strict<span style="color: #339933">;</span>
<span style="color: #000000; font-weight: bold">use</span> warnings<span style="color: #339933">;</span>
<span style="color: #000000; font-weight: bold">use</span> POSIX <span style="color: #000066">qw</span><span style="color: #009900">(</span>strftime<span style="color: #009900">)</span><span style="color: #339933">;</span>
<span style="color: #000066">print</span> strftime<span style="color: #009900">(</span><span style="color: #ff0000">"%Y-%m-%d %H:%M:%S<span style="color: #000099; font-weight: bold">\n</span>"</span><span style="color: #339933">,</span> <span style="color: #000066">localtime</span><span style="color: #009900">(</span><span style="color: #000066">time</span><span style="color: #009900">)</span><span style="color: #009900">)</span><span style="color: #339933">;</span></pre></div></div>
<p>会输出 <br /><strong>2010-08-21 07:44:24</strong></p>
<p><strong>Strftime 时间域</strong> <img class="wp-smiley" alt=":(" src="http://hiphotos.baidu.com/mylongwalk/pic/item/13aa8825f7d3c3534d088d5c.jpg" /> 这个和 date 的命令的字符格式是一样的)<br />% H 小时（00..23）<br />% I 小时（01..12）<br />% k 小时（0..23）<br />% l 小时（1..12）<br />% M 分（00..59）<br />% p 显示出AM或PM<br />% r 时间（hh：mm：ss AM或PM），12小时<br />% s 从1970年1月1日00：00：00到目前经历的秒数<br />% S 秒（00..59）<br />% T 时间（24小时制）（hh:mm:ss）<br />% X 显示时间的格式（％H:％M:％S）<br />% Z 时区 日期域<br />% a 星期几的简称（ Sun..Sat）<br />% A 星期几的全称（ Sunday..Saturday）<br />% b 月的简称（Jan..Dec）<br />% B 月的全称（January..December）<br />% c 日期和时间（ Mon Nov 8 14：12：46 CST 1999）<br />% d 一个月的第几天（01..31）<br />% D 日期（mm／dd／yy）<br />% h 和%b选项相同<br />% j 一年的第几天（001..366）<br />% m 月（01..12）<br />% w 一个星期的第几天（0代表星期天）<br />% W 一年的第几个星期（00..53，星期一为第一天）<br />% x 显示日期的格式（mm/dd/yy）<br />% y 年的最后两个数字（ 1999则是99）<br />% Y 年（例如：1970，1996等）<br /><strong><br /></strong></p>
<p><strong>常用的实例</strong></p>
<p>得到日期的全部</p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="shell">perl -MPOSIX -le 'print strftime "%c", localtime();'</pre></div></div>
<p><em>Sat 21 Aug 2010 07:54:34 AM CST</em></p>
<p>得到普通的指定的日期</p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="perl">perl <span style="color: #339933">-</span>MPOSIX <span style="color: #339933">-</span><span style="color: #b1b100">le</span> <span style="color: #ff0000">'print strftime "%a %d %b %Y %H:%M:%S %Z", localtime();'</span></pre></div></div>
<p><em>Sat 21 Aug 2010 07:54:11 CST</em></p>
<p>得到一个小时以前的时间 </p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="perl">perl <span style="color: #339933">-</span>MPOSIX <span style="color: #339933">-</span><span style="color: #b1b100">le</span> <span style="color: #ff0000">'print strftime "%c", localtime(time()-3600);'</span></pre></div></div>
<p><em>Sat 21 Aug 2010 06:55:54 AM CST</em></p>
<p>得到一天前的时间</p>
<div class="wp_syntax">
<div class="code"><pre style="font-family: monospace" class="perl">perl <span style="color: #339933">-</span>MPOSIX <span style="color: #339933">-</span><span style="color: #b1b100">le</span> <span style="color: #ff0000">'print strftime "%c", localtime(time()-86400);'</span></pre></div></div>
<p>Fri 20 Aug 2010 07:56:36 AM CST</p><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-28 15:09 <a href="http://www.blogjava.net/baizhihui19870626/articles/372903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Perl读写文本文件，简单而又简洁</title><link>http://www.blogjava.net/baizhihui19870626/articles/372889.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 28 Mar 2012 04:57:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372889.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372889.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372889.html</trackback:ping><description><![CDATA[1、文件名前面没有"&gt;"表示读文件open(FILE,"C:\test.txt";while(&lt;FILE&gt;{print "$_\n";close(FILE);<br />2、文件名前面有一个"&gt;"表示写文件，并覆盖原有内容open(FILE,"&gt;C:\test.txt";print FILE "大家好\n";close(FILE);<br />3、文件名前面有两个"&gt;"表示在这个文件后面追加内容open(FILE,"&gt;&gt;C:\test.txt";print FILE "大家好\n";close(FILE);<img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-28 12:57 <a href="http://www.blogjava.net/baizhihui19870626/articles/372889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DBI的安装----安装DBI组件。 Can't locate DBI.pm in @INC</title><link>http://www.blogjava.net/baizhihui19870626/articles/372871.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 28 Mar 2012 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372871.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372871.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372871.html</trackback:ping><description><![CDATA[<p><span style="color: red">1.DBI的安装</span><br /><span style="color: red"># wget http://www.cpan.org/modules/by-module/DBI/DBI-1.608.tar.gz</span>&nbsp;<br /><span style="color: red"># tar zxvf DBI-1.608.tar.gz</span>&nbsp;<br /><span style="color: red"># cd DBI-1.608</span><br /><span style="color: red"># perl Makefile.PL</span><br /><span style="color: red"># make</span><br /><span style="color: red"># make test</span><br /><span style="color: red"># make install</span></p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-28 09:48 <a href="http://www.blogjava.net/baizhihui19870626/articles/372871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux crontab 命令格式与详细例子</title><link>http://www.blogjava.net/baizhihui19870626/articles/372780.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Tue, 27 Mar 2012 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372780.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372780.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372780.html</trackback:ping><description><![CDATA[<span style="text-align: left; widows: 2; text-transform: none; background-color: rgb(255,255,255); text-indent: 0px; letter-spacing: normal; font: 14px/26px Arial; white-space: normal; orphans: 2; color: rgb(51,51,51); word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span">
<p><span style="background-color: yellow">基本格式 :</span><br /><span style="background-color: yellow">*　　*　　*　　*　　*　　command</span><br /><span style="background-color: yellow">分　时　日　月　周　命令</span></p>
<p><span style="background-color: yellow">第1列表示分钟1～59 每分钟用*或者 */1表示</span><br /><span style="background-color: yellow">第2列表示小时1～23（0表示0点）</span><br /><span style="background-color: yellow">第3列表示日期1～31</span><br /><span style="background-color: yellow">第4列表示月份1～12</span><br /><span style="background-color: yellow">第5列标识号星期0～6（0表示星期天）</span><br /><span style="background-color: yellow">第6列要运行的命令</span></p>
<p><span style="background-color: yellow">crontab文件的一些例子：</span></p>
<p><span style="background-color: yellow">30 21 * * * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">上面的例子表示每晚的21:30重启apache。</span></p>
<p><span style="background-color: yellow">45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">上面的例子表示每月1、10、22日的4 : 45重启apache。</span></p>
<p><span style="background-color: yellow">10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">上面的例子表示每周六、周日的1 : 10重启apache。</span></p>
<p><span style="background-color: yellow">0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。</span></p>
<p><span style="background-color: yellow">0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">上面的例子表示每星期六的11 : 00 pm重启apache。</span></p>
<p><span style="background-color: yellow">* */1 * * * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">每一小时重启apache</span></p>
<p><span style="background-color: yellow">* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">晚上11点到早上7点之间，每隔一小时重启apache</span></p>
<p><span style="background-color: yellow">0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">每月的4号与每周一到周三的11点重启apache</span></p>
<p><span style="background-color: yellow">0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart</span><br /><span style="background-color: yellow">一月一号的4点重启apache</span></p>
<p>&nbsp;</p>
<p><span style="background-color: yellow">名称 : crontab</span></p>
<p><span style="background-color: yellow">使用权限 : 所有使用者</span></p>
<p><span style="background-color: yellow">使用方式 :</span></p>
<p><span style="background-color: yellow">crontab file [-u user]-用指定的文件替代目前的crontab。</span></p>
<p><span style="background-color: yellow">crontab-[-u user]-用标准输入替代目前的crontab.</span></p>
<p><span style="background-color: yellow">crontab-1[user]-列出用户目前的crontab.</span></p>
<p><span style="background-color: yellow">crontab-e[user]-编辑用户目前的crontab.</span></p>
<p><span style="background-color: yellow">crontab-d[user]-删除用户目前的crontab.</span></p>
<p><span style="background-color: yellow">crontab-c dir- 指定crontab的目录。</span></p>
<p><span style="background-color: yellow">crontab文件的格式：M H D m d cmd.</span></p>
<p>&nbsp;</p>
<p><span style="background-color: yellow">M: 分钟（0-59）。</span></p>
<p><span style="background-color: yellow">H：小时（0-23）。</span></p>
<p><span style="background-color: yellow">D：天（1-31）。</span></p>
<p><span style="background-color: yellow">m: 月（1-12）。</span></p>
<p><span style="background-color: yellow">d: 一星期内的天（0~6，0为星期天）。</span></p>
<p><span style="background-color: yellow">cmd要运行的程序，程序被送入sh执行，这个shell只有USER,HOME,SHELL这三个环境变量</span></p>
<p><span style="background-color: yellow">说明 :</span></p>
<p><span style="background-color: yellow">crontab 是用来让使用者在固定时间或固定间隔执行程序之用，换句话说，也就是类似使用者的时程表。-u user 是指设定指定</span></p>
<p><span style="background-color: yellow">user 的时程表，这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话，就是表示设</span></p>
<p><span style="background-color: yellow">定自己的时程表。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="background-color: yellow">参数 :</span></p>
<p><span style="background-color: yellow">crontab -e : 执行文字编辑器来设定时程表，内定的文字编辑器是 VI，如果你想用别的文字编辑器，则请先设定 VISUAL 环境变数</span></p>
<p><span style="background-color: yellow">来指定使用那个文字编辑器(比如说 setenv VISUAL joe)</span></p>
<p><span style="background-color: yellow">crontab -r : 删除目前的时程表</span></p>
<p><span style="background-color: yellow">crontab -l : 列出目前的时程表</span></p>
<p><span style="background-color: yellow">crontab file [-u user]-用指定的文件替代目前的crontab。</span></p>
<p><span style="background-color: yellow">时程表的格式如下 :</span></p>
<p><span style="background-color: yellow">f1 f2 f3 f4 f5 program</span></p>
<p><span style="background-color: yellow">其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份，f5 表示一个星期中的第几天。program 表示要执</span></p>
<p><span style="background-color: yellow">行的程序。</span></p>
<p><span style="background-color: yellow">当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程序，其馀类推</span></p>
<p><span style="background-color: yellow">当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时表示从第 a 到第 b 小时都要执行，其馀类推</span></p>
<p><span style="background-color: yellow">当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时个时间间隔执行一次，其馀类推</span></p>
<p><span style="background-color: yellow">当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行，其馀类推</span></p>
<p><span style="background-color: yellow">使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来设定时程表。</span></p>
<p><span style="background-color: yellow">例子 :</span></p>
<p><span style="background-color: yellow">#每天早上7点执行一次 /bin/ls :</span></p>
<p><span style="background-color: yellow">0 7 * * * /bin/ls</span></p>
<p><span style="background-color: yellow">在 12 月内, 每天的早上 6 点到 12 点中，每隔3个小时执行一次 /usr/bin/backup :</span></p>
<p><span style="background-color: yellow">0 6-12/3 * 12 * /usr/bin/backup</span></p>
<p><span style="background-color: yellow">周一到周五每天下午 5:00 寄一封信给 alex@domain.name :</span></p>
<p><span style="background-color: yellow">0 17 * * 1-5 mail -s "hi" alex@domain.name &lt; /tmp/maildata</span></p>
<p><span style="background-color: yellow">每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"</span></p>
<p><span style="background-color: yellow">20 0-23/2 * * * echo "haha"</span></p>
<p><span style="background-color: yellow">注意 :</span></p>
<p><span style="background-color: yellow">当程序在你所指定的时间执行后，系统会寄一封信给你，显示该程序执行的内容，若是你不希望收到这样的信，请在每一行空一格之</span></p>
<p><span style="background-color: yellow">后加上 &gt; /dev/null 2&gt;&amp;1 即可</span></p>
<p>&nbsp;</p>
<p><span style="background-color: yellow">例子2 :</span></p>
<p><span style="background-color: yellow">#每天早上6点10分</span></p>
<p><span style="background-color: yellow">10 6 * * * date</span></p>
<p><span style="background-color: yellow">#每两个小时</span></p>
<p><span style="background-color: yellow">0 */2 * * * date</span></p>
<p><span style="background-color: yellow">#晚上11点到早上8点之间每两个小时，早上8点</span></p>
<p><span style="background-color: yellow">0 23-7/2，8 * * * date</span></p>
<p><span style="background-color: yellow">#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点</span></p>
<p><span style="background-color: yellow">0 11 4 * mon-wed date</span></p>
<p><span style="background-color: yellow">#1月份日早上4点</span></p>
<p><span style="background-color: yellow">0 4 1 jan * date</span></p>
<p><span style="background-color: yellow">范例</span></p>
<p><span style="background-color: yellow">$crontab -l 列出用户目前的crontab.</span></p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-27 12:56 <a href="http://www.blogjava.net/baizhihui19870626/articles/372780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux创建文件夹命令</title><link>http://www.blogjava.net/baizhihui19870626/articles/372770.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Tue, 27 Mar 2012 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372770.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372770.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372770.html</trackback:ping><description><![CDATA[mkdir /home/u1 创建文件夹/home/u1<br />chown oracle /home/u1 表示改变目录所有者为oracle账户;<br />chgrp dba /home/u1 改变/home/u1目录为dba所有;<br />chmod 755 /home/u1 表示oracle账户对/home/u1目录有755权限;<br />rmdir /home/u1 表示删除/home/u1目录<br /><br />hostname可以查看linux的计算机名;<br />whoami可以查看当前用户;<br />pwd显示当前路径;<br />df查看系统的硬件信息<br />ls -lrt l表示显示详细列表，-t表示按时间排序,-r反向排序<br /><br />cat orcl_ora_3436.trc|grep bucket<br /><br />以下查看相关文件内容:<br />more /etc/oratab<br />cat /etc/passwd<br />cat /etc/group <img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-27 11:05 <a href="http://www.blogjava.net/baizhihui19870626/articles/372770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设置Linux ssh登录前后的欢迎信息</title><link>http://www.blogjava.net/baizhihui19870626/articles/372694.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Mon, 26 Mar 2012 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372694.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372694.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372694.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372694.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372694.html</trackback:ping><description><![CDATA[<p style="margin-right: 0px"><span style="border-collapse: collapse; font-family: song, Verdana; font-size: large"><font style="font-family: 楷体_GB2312"><font style="font-size: 16px"><span style="font-family: ">Linux可以设置登录前后的欢迎信息，虽然没什么实际用处，纯粹为了好玩，体现一下自己系统的一点个性！</span></font></font></span></p>
<p style="margin-right: 0px"><span style="border-collapse: collapse; font-family: song, Verdana; font-size: large"><font style="font-family: 楷体_GB2312"><font style="font-size: 16px"><span style="font-family: "></span></font></font></span></p>
<p style="margin-right: 0px"><span style="border-collapse: collapse; font-family: song, Verdana; font-size: large"><font style="font-family: 楷体_GB2312"><font style="font-size: 16px"><span style="font-family: ">在登录系统输入用户名之前，可以看到上方有<span style="font-style: italic; font-family: ">WELCOME......</span>之类的信息，这里会显示LINUX发行版本名称，内核版本号，日期，机器信息等等信息，要设置的话，首先打开<span style="font-family: ; color: rgb(0,1,255)">/etc/issue</span>文件，可以看到里面是这样一段"<span style="font-family: ; color: rgb(0,153,2)">Welcome to &lt;LINUX 发行版本名称&gt;-kernel 后接各项参数\</span>"</span></font></font></span></p><span style="border-collapse: collapse; font-family: song, Verdana; font-size: large"><font style="font-family: 楷体_GB2312"><font style="font-size: 16px"><span style="font-family: "></span>
<p style="margin-right: 0px"><br /><span style="font-family: ">后接的参数的各项说明：</span></p>
<p style="margin-right: 0px"><br /><span style="font-family: ">\r 显示KERNEL内核版本号；</span><br /><span style="font-family: ">\l 显示虚拟控制台号；</span><br /><span style="font-family: ">\d 显示当前日期；<span style="font-family: "> </span></span><br /><span style="font-family: ">\n 显示主机名；</span><br /><span style="font-family: ">\m 显示机器类型，即CPU架构，如i386等；</span></p><span style="font-family: "></span>
<p style="margin-right: 0px"><br /><span style="font-family: ">了解了参数的意义，就来修改，将上面一段欢迎信息修改如下，可以显示所有必要的信息：</span></p><span style="font-family: "></span>
<p style="margin-right: 0px"><br /><span style="font-family: ">Welcome to &lt;LINUX 发行版本名称&gt;-kernel \r (\l) \d \n \m.</span></p>
<p style="margin-right: 0px"><span style="font-family: "></span><br /><span style="font-family: ">要看效果，EXIT退出登录后看看！</span><br /><br /><span style="font-family: ">还有<span style="font-family: ; color: rgb(0,1,255)">/etc/motd</span>这个文件，可以在里面加入自己喜欢的任何欢迎信息，这段信息将会在登录成功后显示！</span></font></font></span></p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-26 11:20 <a href="http://www.blogjava.net/baizhihui19870626/articles/372694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vi编辑器的操作</title><link>http://www.blogjava.net/baizhihui19870626/articles/372517.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 23 Mar 2012 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372517.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372517.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372517.html</trackback:ping><description><![CDATA[ 
<p>打开文件：vi 文件名</p>
<p>从命令模式切换到输入模式：a</p>
<p>输入模式切换到命令模式：ESC</p>
<p>末行模式：:</p>
<p>保存：:w</p>
<p>保存退出：:wq</p>
<p>不保存强制退出：:q!</p>
<p>保存强制退出：:wq!</p>
<p>光标移动到文件首：[[</p>
<p>光标移动到文件尾：]]</p>
<p>下翻页：ctrl+f</p>
<p>上翻页：ctrl+b</p><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-23 10:54 <a href="http://www.blogjava.net/baizhihui19870626/articles/372517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在Linux下配置Java开发环境详述</title><link>http://www.blogjava.net/baizhihui19870626/articles/372516.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 23 Mar 2012 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372516.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372516.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372516.html</trackback:ping><description><![CDATA[1、去http://java.sun.com/j2se/1.4.2/download.html 下载一个Linux Platform的JDK，建议下载RPM自解压格式的（RPM in self-extracting file，j2sdk-1_4_2_06-linux-i586- rpm.bin）。<br /><br />　　2. 上载到Linux服务器上，在shell下执行命令：<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　chmod 755 j2sdk-1_4_2_06-linux-i586-rpm.bin<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　./j2sdk-1_4_2_06-linux-i586-rpm.bin<br /><br />　　这时会有一段Sun的协议，敲几次空格键，当询问是否同意的时候，敲yes就可以了。<br /><br />　　Sun Microsystems, Inc.<br /><br />　　Binary Code License Agreement<br /><br />　　for the<br /><br />　　JAVATM 2 SOFTWARE DEVELOPMENT KIT<br /><br />　　(J2SDK), STANDARD<br /><br />　　EDITION, VERSION 1.4.2_X<br /><br />　　...<br /><br />　　Do you agree to the above<br /><br />　　license terms? [yes or no]yes<br /><br />　　Unpacking...<br /><br />　　Checksumming...<br /><br />　　0<br /><br />　　0<br /><br />　　Extracting...<br /><br />　　UnZipSFX 5.40 of 28 November 1998,<br /><br />　　by Info-ZIP (Zip-Bugs@lists.wku.edu).<br /><br />　　inflating: j2sdk-1_4_2_06-linux-i586.rpm<br /><br />　　Done.<br /><br />　　注: 如果直接执行unzip命令来解压也是可以的,总之得到一个rpm软件包。<br /><br />　　3、程序会自动生成一个j2sdk-1_4_2_06-linux-i586.rpm文件，这是主程序包，下面来安装：<br /><br />　　[root@LinuxServer rpm]#rpm -ivh<br /><br />　　j2sdk-1_4_2_06-linux-i586.rpm<br /><br />　　Preparing... ######################<br /><br />　　##################### [100%]<br /><br />　　1:j2sdk ########################<br /><br />　　################### [100%]<br /><br />　　4、设置环境变量<br /><br />　　通常都喜欢用export命令直接在shell下设置：<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　export JAVA_HOME=/usr/java/j2sdk1.4.2_06<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:<br /><br />　　$JAVA_HOME/lib/<br /><br />　　tools.jar<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　export PATH=$PATH:$JAVA_HOME/bin<br /><br />　　当然这样设置环境变量是可以生效的，但是只对当前shell生效。如果从另外一个shell登陆，将不能使用刚才设置的变量。所以最好的方法还是修改.bashr c文件。<br /><br />　　[root@LinuxServer rpm]#vi .bashrc<br /><br />　　set JAVA_HOME=/usr/java/j2sdk1.4.2_06<br /><br />　　export JAVA_HOME<br /><br />　　set PATH=$PATH:$JAVA_HOME/bin<br /><br />　　export PATH<br /><br />　　set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:<br /><br />　　$JAVA_HOME/lib/tools.jar<br /><br />　　export CLASSPATH<br /><br />　　当然也可以通过更改/etc/profile来实现，不过不推荐这么做，<br /><br />　　因为这样的设置将对所以用户的shell都生效，对系统安全会产生影响。<br /><br />　　就是在这个文件的最后加上:<br /><br />　　export JAVA_HOME=/usr/java/j2sdk1.4.2_06<br /><br />　　export CLASSPATH=.:$JAVA_HOME/lib/dt.jar<br /><br />　　:$JAVA_HOME/lib/tools.jar<br /><br />　　export PATH=$PATH:$JAVA_HOME/bin<br /><br />　　下面来验证一下变量设置是否生效（####注意:在验证前先logout一下，再重新登陆）：<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　echo $JAVA_HOME<br /><br />　　/usr/java/j2sdk1.4.2_06/<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　echo $CLASSPATH<br /><br />　　/usr/java/j2sdk1.4.2_06/lib/dt.jar:<br /><br />　　/usr/java/j2sdk1.4.2_06/lib/tools.jar<br /><br />　　[root@LinuxServer rpm]#<br /><br />　　echo $PATH<br /><br />　　/usr/java/j2sdk1.4.2_06/bin/:<br /><br />　　/usr/kerberos/sbin:/usr/kerberos/bin:<br /><br />　　/usr/local/sbi<br /><br />　　n:<br /><br />　　/usr/local/bin:/sbin:/bin:/usr/sbin:<br /><br />　　/usr/bin:/usr/X11R6/bin:/root/bin<br /><br />　　[root@LinuxServer rpm]# JAVA-version<br /><br />　　JAVA version "1.4.2_06"<br /><br />　　JAVA(TM) 2 Runtime Environment,<br /><br />　　Standard Edition (build 1.4.2_06-b03)<br /><br />　　JAVA HotSpot(TM) Client<br /><br />　　VM (build 1.4.2_06-b03, mixed mode)<br /><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-23 10:48 <a href="http://www.blogjava.net/baizhihui19870626/articles/372516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统下如何查看及修改文件读写权限</title><link>http://www.blogjava.net/baizhihui19870626/articles/372515.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Fri, 23 Mar 2012 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/372515.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/372515.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/372515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/372515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/372515.html</trackback:ping><description><![CDATA[<span id="zoom" class="a14c">&nbsp; 
<p style="text-indent: 2em">查看文件权限的语句： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">在终端输入: 
<p style="text-indent: 2em">
<p style="text-indent: 2em">ls -l xxx.xxx （xxx.xxx是文件名） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">那么就会出现相类似的信息，主要都是这些： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rw-rw-r-- 
<p style="text-indent: 2em">
<p style="text-indent: 2em">一共有10位数 
<p style="text-indent: 2em">
<p style="text-indent: 2em">其中： 最前面那个 - 代表的是类型 
<p style="text-indent: 2em">
<p style="text-indent: 2em">中间那三个 rw- 代表的是所有者（user） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">然后那三个 rw- 代表的是组群（group） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">最后那三个 r-- 代表的是其他人（other） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">然后我再解释一下后面那9位数： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">r 表示文件可以被读（read） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">w 表示文件可以被写（write） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">x 表示文件可以被执行（如果它是程序的话） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">- 表示相应的权限还没有被授予 
<p style="text-indent: 2em">
<p style="text-indent: 2em">现在该说说修改文件权限了 
<p style="text-indent: 2em">
<p style="text-indent: 2em">在终端输入： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">chmod o+w xxx.xxx 
<p style="text-indent: 2em">
<p style="text-indent: 2em">表示给其他人授予写xxx.xxx这个文件的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">chmod go-rw xxx.xxx 
<p style="text-indent: 2em">
<p style="text-indent: 2em">表示删除xxx.xxx中组群和其他人的读和写的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">其中： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">u 代表所有者（user） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">g 代表所有者所在的组群（group） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">o 代表其他人，但不是u和g （other） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">a 代表全部的人，也就是包括u，g和o 
<p style="text-indent: 2em">
<p style="text-indent: 2em">r 表示文件可以被读（read） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">w 表示文件可以被写（write） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">x 表示文件可以被执行（如果它是程序的话） 
<p style="text-indent: 2em">
<p style="text-indent: 2em">其中：rwx也可以用数字来代替 
<p style="text-indent: 2em">
<p style="text-indent: 2em">r ------------4 
<p style="text-indent: 2em">w -----------2 
<p style="text-indent: 2em">x ------------1 
<p style="text-indent: 2em">- ------------0 
<p style="text-indent: 2em">
<p style="text-indent: 2em">行动： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">+ 表示添加权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">- 表示删除权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">= 表示使之成为唯一的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">当大家都明白了上面的东西之后，那么我们常见的以下的一些权限就很容易都明白了： 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rw------- (600) 只有所有者才有读和写的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rw-r--r-- (644) 只有所有者才有读和写的权限，组群和其他人只有读的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rwx------ (700) 只有所有者才有读，写，执行的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rwxr-xr-x (755) 只有所有者才有读，写，执行的权限，组群和其他人只有读和执行的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rwx--x--x (711) 只有所有者才有读，写，执行的权限，组群和其他人只有执行的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rw-rw-rw- (666) 每个人都有读写的权限 
<p style="text-indent: 2em">
<p style="text-indent: 2em">-rwxrwxrwx (777) 每个人都有读写和执行的权限 </p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/372515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-03-23 10:45 <a href="http://www.blogjava.net/baizhihui19870626/articles/372515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>