﻿<?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-XZC.Log-随笔分类-linux/unix</title><link>http://www.blogjava.net/xzclog/category/32185.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 04 Sep 2018 08:32:21 GMT</lastBuildDate><pubDate>Tue, 04 Sep 2018 08:32:21 GMT</pubDate><ttl>60</ttl><item><title>hive集成sentry的sql用法。</title><link>http://www.blogjava.net/xzclog/archive/2018/09/03/433353.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 03 Sep 2018 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2018/09/03/433353.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/433353.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2018/09/03/433353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/433353.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/433353.html</trackback:ping><description><![CDATA[ Sentry权限控制通过Beeline（Hiveserver2 SQL 命令行接口）输入Grant 和 Revoke语句来配置。语法跟现在的一些主流的关系数据库很相似。需要注意的是：当sentry服务启用后，我们必须使用beeline接口来执行hive查询，Hive Cli并不支持sentry。

CREATE ROLE Statement
CREATE ROLE语句创建一个可以被赋权的角色。权限可以赋给角色，然后再分配给各个用户。一个用户被分配到角色后可以执行该角色的权限。

只有拥有管理员的角色可以create/drop角色。默认情况下，hive、impala和hue用户拥有管理员角色。

CREATE ROLE [role_name];
DROP ROLE Statement
DROP ROLE语句可以用来从数据库中移除一个角色。一旦移除，之前分配给所有用户的该角色将会取消。之前已经执行的语句不会受到影响。但是，因为hive在执行每条查询语句之前会检查用户的权限，处于登录活跃状态的用户会话会受到影响。

DROP ROLE [role_name];
GRANT ROLE Statement
GRANT ROLE语句可以用来给组授予角色。只有sentry的管理员用户才能执行该操作。

GRANT ROLE role_name [, role_name]
    TO GROUP （groupName） [,GROUP （groupName）]
REVOKE ROLE Statement
REVOKE ROLE语句可以用来从组移除角色。只有sentry的管理员用户才能执行该操作。

REVOKE ROLE role_name [, role_name]    
    FROM GROUP （groupName) [,GROUP (groupName)]
GRANT (PRIVILEGE) Statement
授予一个对象的权限给一个角色，该用户必须为sentry的管理员用户。

GRANT    
    (PRIVILEGE) [, (PRIVILEGE) ]    
    ON (OBJECT) (object_name)   
    TO ROLE (roleName) [,ROLE (roleName)]
REVOKE （PRIVILEGE） Statement
因为只有认证的管理员用户可以创建角色，从而只有管理员用户可以取消一个组的权限。

REVOKE    
    (PRIVILEGE) [, (PRIVILEGE) ]    
    ON (OBJECT) (object_name)   
    FROM ROLE (roleName) [,ROLE (roleName)]
GRANT (PRIVILEGE) ... WITH GRANT OPTION
在cdh5.2中，你可以委托给其他角色来授予和解除权限。比如，一个角色被授予了WITH GRANT OPTION的权限可以GRANT/REVOKE同样的权限给其他角色。因此，如果一个角色有一个库的所有权限并且设置了 WITH GRANT OPTION，该角色分配的用户可以对该数据库和其中的表执行GRANT/REVOKE语句。

GRANT
    （PRIVILEGE） 
    ON （OBJECT） （object_name）
    TO ROLE （roleName）
    WITH GRANT OPTION
只有一个带GRANT选项的特殊权限的角色或者它的父级权限可以从其他角色解除这种权限。一旦下面的语句执行，所有跟其相关的grant权限将会被解除。

REVOKE
    （RIVILEGE）
    ON （BJECT） （bject_name）
    FROM ROLE （roleName）
Hive目前不支持解除之前赋予一个角色 WITH GRANT OPTION 的权限。要想移除WITH GRANT OPTION、解除权限，可以重新去除 WITH GRANT OPTION这个标记来再次附权。

SET ROLE Statement
SET ROLE语句可以给当前会话选择一个角色使之生效。一个用户只能启用分配给他的角色。任何不存在的角色和当前用户不能使用的角色是不能生效的。如果没有使用任何角色，用户将会使用任何一个属于他的角色的权限。

选择一个角色使用：
To enable a specific role: 
使用所有的角色：
To enable a specific role: 
关闭所有角色
SET ROLE NONE;
SHOW Statement
显示当前用户拥有库、表、列相关权限的数据库：
SHOW DATABASES;
显示当前用户拥有表、列相关权限的表；
SHOW TABLES;
显示当前用户拥有SELECT权限的列：
SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];
显示当前系统中所有的角色（只有管理员用户可以执行）：
SHOW ROLES;
显示当前影响当前会话的角色：
SHOW CURRENT ROLES;
显示指定组的被分配到的所有角色（只有管理员用户和指定组内的用户可以执行）
SHOW ROLE GRANT GROUP (groupName);
SHOW语句可以用来显示一个角色被授予的权限或者显示角色的一个特定对象的所有权限。
显示指定角色的所有被赋予的权限。（只有管理员用户和指定角色分配到的用户可以执行）。下面的语句也会显示任何列级的权限。
SHOW GRANT ROLE (roleName);
显示指定对象的一个角色的所有被赋予的权限（只有管理员用户和指定角色分配到的用户可以执行）。下面的语句也会显示任何列级的权限。
SHOW GRANT ROLE (roleName) on (OBJECT) (objectName);
----------------------------我也是有底线的-----------------------------<img src ="http://www.blogjava.net/xzclog/aggbug/433353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2018-09-03 18:19 <a href="http://www.blogjava.net/xzclog/archive/2018/09/03/433353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux系统查看当前主机CPU、内存、机器型号及主板信息</title><link>http://www.blogjava.net/xzclog/archive/2017/09/10/432806.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sun, 10 Sep 2017 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/09/10/432806.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432806.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/09/10/432806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432806.html</trackback:ping><description><![CDATA[<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong style="font-weight: bold">Linux系统查看当前主机CPU、内存、机器型号及主板信息：</strong></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px"><br />查看CPU信息（型号）<br /># cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c</p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<wbr></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">查看内存信息<br /># cat /proc/meminfo</p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<wbr></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">查看主板型号：<br /># dmidecode |grep -A16 "System Information$"</p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<wbr></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">查看机器型号<br />#<span class="Apple-converted-space">&nbsp;</span>dmidecode | grep "Product Name"</p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<wbr></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">查看当前操作系统内核信息<br /># uname -a</p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<wbr></p>
<p style="list-style-type: none; word-wrap: normal; border-top: 0px; border-right: 0px; white-space: normal; word-spacing: 0px; border-bottom: 0px; text-transform: none; word-break: normal; color: rgb(73,73,73); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 14px/21px simsun; padding-left: 0px; margin: 0px 0px 5px; border-left: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(251,237,198); text-indent: 0px; -webkit-text-stroke-width: 0px">查看当前操作系统发行版信息<br /># cat /etc/issue | grep Linux</p><img src ="http://www.blogjava.net/xzclog/aggbug/432806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-09-10 16:37 <a href="http://www.blogjava.net/xzclog/archive/2017/09/10/432806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python日期的加减等操作</title><link>http://www.blogjava.net/xzclog/archive/2017/08/14/432743.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 14 Aug 2017 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/08/14/432743.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432743.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/08/14/432743.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432743.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432743.html</trackback:ping><description><![CDATA[<h6 style="font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; font-variant: normal; white-space: normal; word-spacing: 0px; text-transform: none; font-weight: bold; color: rgb(0,0,0); padding-bottom: 0px; font-style: normal; text-align: left; padding-top: 0px; padding-left: 0px; margin: 10px 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">1. 日期输出格式化</h6>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">所有日期、时间的api都在datetime模块内。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">1. datetime =&gt; string</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:648ef218-aeec-4c01-bef2-ebcb4d5bec37" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">now =<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> datetime.datetime.now()
now.strftime(</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">输出2012-03-05 16:26:23.870105</span></pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">strftime是datetime类的实例方法。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">2. string =&gt; datetime</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:295b584f-1206-4a8e-848e-f25834e520f4" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">t_str = <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-05 16:26:23</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">
d </span>= datetime.datetime.strptime(t_str, <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>)</pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">strptime是datetime类的静态方法。</p>
<h6 style="font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; font-variant: normal; white-space: normal; word-spacing: 0px; text-transform: none; font-weight: bold; color: rgb(0,0,0); padding-bottom: 0px; font-style: normal; text-align: left; padding-top: 0px; padding-left: 0px; margin: 10px 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">2. 日期比较操作</h6>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">在datetime模块中有timedelta类，这个类的对象用于表示一个时间间隔，比如两个日期或者时间的差别。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">构造方法：</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:098f8a5b-eaa1-4496-b273-258fe081a61a" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)</pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">所有的参数都有默认值0，这些参数可以是int或float，正的或负的。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">可以通过timedelta.days、tiemdelta.seconds等获取相应的时间值。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">timedelta类的实例，支持加、减、乘、除等操作，所得的结果也是timedelta类的实例。比如：</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8b5e1dec-0036-46b5-b2e1-386b4d403f04" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">year = timedelta(days=365<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
ten_years </span>= year *10<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">
nine_years </span>= ten_years - year</pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">同时，date、time和datetime类也支持与timedelta的加、减运算。</p>
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; font-variant: normal; white-space: normal; word-spacing: 0px; border-bottom: rgb(204,204,204) 1px solid; text-transform: none; font-weight: normal; color: rgb(0,0,0); padding-bottom: 5px; font-style: normal; text-align: left; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 5px; background-color: rgb(245,245,245); text-indent: 0px; -webkit-text-stroke-width: 0px"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">datetime1 = datetime2 +/-<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> timedelta
timedelta </span>= datetime1 - datetime2</pre></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">这样，可以很方便的实现一些功能。</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">1. 两个日期相差多少天。</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c0e6e6e9-b297-4b7d-8f86-60a4f773db59" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">d1 = datetime.datetime.strptime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-05 17:41:20</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>, <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
d2 </span>= datetime.datetime.strptime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-02 17:41:20</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>, <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
delta </span>= d1 -<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> d2
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span> delta.days</pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">输出：3</p>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">2. 今天的n天后的日期。</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:06b1764d-fa66-41ad-bd71-2728cb07203e" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)"><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">now =<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> datetime.datetime.now()
delta </span>= datetime.timedelta(days=3<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
n_days </span>= now +<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> delta
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span> n_days.strftime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>)</pre></div></div>
<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 10px auto; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">输出：2012-03-08 17:44:50</p>
<div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4a51978a-6cc5-4d9a-98ea-4d39a460e77e" class="wlWriterEditableSmartContent" style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 13px/19px Verdana, Arial, Helvetica, sans-serif; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(254,254,242); text-indent: 0px; -webkit-text-stroke-width: 0px">
<div class="cnblogs_code" style="overflow: auto; font-size: 12px !important; border-top: rgb(204,204,204) 1px solid; font-family: 'Courier New' !important; border-right: rgb(204,204,204) 1px solid; border-bottom: rgb(204,204,204) 1px solid; color: rgb(0,0,0); padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 5px 0px; border-left: rgb(204,204,204) 1px solid; padding-right: 5px; background-color: rgb(245,245,245)">
<div class="cnblogs_code_toolbar" style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 5px 0px 0px; padding-right: 0px; background-color: rgb(245,245,245)"><span class="cnblogs_code_copy" style="font-size: 12px !important; font-family: 'Courier New' !important; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 5px"><a onclick="copyCnblogsCode(this)" title="复制代码" style="text-decoration: underline; border-top: medium none; border-right: medium none; border-bottom: medium none; color: rgb(7,93,179); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px; background-color: rgb(245,245,245)" href="javascript:void(0);"><img style="max-width: 900px; border-top: medium none; border-right: medium none; border-bottom: medium none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px; background-color: rgb(245,245,245)" alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div><pre style="word-wrap: break-word; font-size: 12px !important; font-family: 'Courier New' !important; white-space: pre-wrap; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">coding=utf-8</span>
<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">import</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> datetime
now</span>=<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">datetime.datetime.now()
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> now
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">将日期转化为字符串 datetime =&gt; string</span>
<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span> now.strftime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)

t_str </span>= <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-05 16:26:23</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>
<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">将字符串转换为日期 string =&gt; datetime</span>
d=datetime.datetime.strptime(t_str,<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> d

</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">在datetime模块中有timedelta类，这个类的对象用于表示一个时间间隔，比如两个日#期或者时间的差别。</span>

<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">计算两个日期的间隔</span>
d1 = datetime.datetime.strptime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-05 17:41:20</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>, <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
d2 </span>= datetime.datetime.strptime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">2012-03-02 17:41:20</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>, <span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
delta </span>= d1 -<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> d2
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> delta.days
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px"> delta

</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">#</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">今天的n天后的日期。</span>
now=<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">datetime.datetime.now()
delta</span>=datetime.timedelta(days=3<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">)
n_days</span>=now+<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">delta
</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(0,0,255); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">print</span> n_days.strftime(<span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">%Y-%m-%d %H:%M:%S</span><span style="font-size: 12px !important; font-family: 'Courier New' !important; color: rgb(128,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 0px">'</span>)</pre>
<div class="cnblogs_code_toolbar" style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 5px 0px 0px; padding-right: 0px; background-color: rgb(245,245,245)"><span class="cnblogs_code_copy" style="font-size: 12px !important; font-family: 'Courier New' !important; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; line-height: 1.5; padding-right: 5px"><a onclick="copyCnblogsCode(this)" title="复制代码" style="text-decoration: underline; border-top: medium none; border-right: medium none; border-bottom: medium none; color: rgb(7,93,179); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px; background-color: rgb(245,245,245)" href="javascript:void(0);"><img style="max-width: 900px; border-top: medium none; border-right: medium none; border-bottom: medium none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: medium none; padding-right: 0px; background-color: rgb(245,245,245)" alt="复制代码" src="http://common.cnblogs.com/images/copycode.gif" /></a></span></div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432743.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-08-14 23:09 <a href="http://www.blogjava.net/xzclog/archive/2017/08/14/432743.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux shell 多线程执行程序</title><link>http://www.blogjava.net/xzclog/archive/2017/08/02/432719.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 02 Aug 2017 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/08/02/432719.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432719.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/08/02/432719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432719.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432719.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">Shell中并没有真正意义的多线程，要实现多线程可以启动多个后端进程，最大程度利用cpu性能。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">直接看代码示例吧。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">(1) 顺序执行的代码</p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important;"><span style="color: #008080; line-height: 1.5 !important;"> 1</span> #!/bin/<span style="line-height: 1.5 !important;">bash </span><span style="color: #008080; line-height: 1.5 !important;"> 2</span> <span style="color: #0000ff; line-height: 1.5 !important;">date</span> <span style="color: #008080; line-height: 1.5 !important;"> 3</span> <span style="color: #0000ff; line-height: 1.5 !important;">for</span> i <span style="color: #0000ff; line-height: 1.5 !important;">in</span> `<span style="color: #0000ff; line-height: 1.5 !important;">seq</span> <span style="color: #800080; line-height: 1.5 !important;">1</span> <span style="color: #800080; line-height: 1.5 !important;">5</span><span style="line-height: 1.5 !important;">` </span><span style="color: #008080; line-height: 1.5 !important;"> 4</span> <span style="color: #0000ff; line-height: 1.5 !important;">do</span> <span style="color: #008080; line-height: 1.5 !important;"> 5</span> <span style="line-height: 1.5 !important;">{ </span><span style="color: #008080; line-height: 1.5 !important;"> 6</span>     <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="color: #800000; line-height: 1.5 !important;">sleep 5</span><span style="color: #800000; line-height: 1.5 !important;">"</span> <span style="color: #008080; line-height: 1.5 !important;"> 7</span>     <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #008080; line-height: 1.5 !important;"> 8</span> <span style="line-height: 1.5 !important;">} </span><span style="color: #008080; line-height: 1.5 !important;"> 9</span> <span style="color: #0000ff; line-height: 1.5 !important;">done</span> <span style="color: #008080; line-height: 1.5 !important;">10</span> <span style="color: #0000ff; line-height: 1.5 !important;">date</span> </pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">输出：</p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important;">Sat Nov <span style="color: #800080; line-height: 1.5 !important;">19</span> <span style="color: #800080; line-height: 1.5 !important;">09</span>:<span style="color: #800080; line-height: 1.5 !important;">21</span>:<span style="color: #800080; line-height: 1.5 !important;">51</span> CST <span style="color: #800080; line-height: 1.5 !important;">2016</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span><span style="line-height: 1.5 !important;"> Sat Nov </span><span style="color: #800080; line-height: 1.5 !important;">19</span> <span style="color: #800080; line-height: 1.5 !important;">09</span>:<span style="color: #800080; line-height: 1.5 !important;">22</span>:<span style="color: #800080; line-height: 1.5 !important;">16</span> CST <span style="color: #800080; line-height: 1.5 !important;">2016</span></pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">(2) 并行代码</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;"><span style="color: #ff0000;"><strong>使用'&amp;'+wait 实现&#8220;多进程&#8221;实现</strong></span></p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important;"><span style="color: #008080; line-height: 1.5 !important;"> 1</span> #!/bin/<span style="line-height: 1.5 !important;">bash </span><span style="color: #008080; line-height: 1.5 !important;"> 2</span> <span style="color: #0000ff; line-height: 1.5 !important;">date</span> <span style="color: #008080; line-height: 1.5 !important;"> 3</span> <span style="color: #0000ff; line-height: 1.5 !important;">for</span> i <span style="color: #0000ff; line-height: 1.5 !important;">in</span> `<span style="color: #0000ff; line-height: 1.5 !important;">seq</span> <span style="color: #800080; line-height: 1.5 !important;">1</span> <span style="color: #800080; line-height: 1.5 !important;">5</span><span style="line-height: 1.5 !important;">` </span><span style="color: #008080; line-height: 1.5 !important;"> 4</span> <span style="color: #0000ff; line-height: 1.5 !important;">do</span> <span style="color: #008080; line-height: 1.5 !important;"> 5</span> <strong><span style="color: #ff0000; line-height: 1.5 !important;">{ </span></strong><span style="color: #008080; line-height: 1.5 !important;"> 6</span>     <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="color: #800000; line-height: 1.5 !important;">sleep 5</span><span style="color: #800000; line-height: 1.5 !important;">"</span> <span style="color: #008080; line-height: 1.5 !important;"> 7</span>     <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #008080; line-height: 1.5 !important;"> 8</span> <span style="color: #ff0000; line-height: 1.5 !important;"><strong>} &amp;</strong></span> <span style="color: #008080; line-height: 1.5 !important;"> 9</span> <span style="color: #0000ff; line-height: 1.5 !important;">done</span> <span style="color: #008080; line-height: 1.5 !important;">10</span> <strong><span style="color: #ff0000; line-height: 1.5 !important;">wait</span></strong><span style="line-height: 1.5 !important;">  ##等待所有子后台进程结束 </span><span style="color: #008080; line-height: 1.5 !important;">11</span> <span style="color: #0000ff; line-height: 1.5 !important;">date</span></pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">输出：</p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important;">Sat Nov <span style="color: #800080; line-height: 1.5 !important;">19</span> <span style="color: #800080; line-height: 1.5 !important;">09</span>:<span style="color: #800080; line-height: 1.5 !important;">25</span>:<span style="color: #800080; line-height: 1.5 !important;">07</span> CST <span style="color: #800080; line-height: 1.5 !important;">2016</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span> <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span> <span style="color: #800080; line-height: 1.5 !important;">5</span><span style="line-height: 1.5 !important;"> Sat Nov </span><span style="color: #800080; line-height: 1.5 !important;">19</span> <span style="color: #800080; line-height: 1.5 !important;">09</span>:<span style="color: #800080; line-height: 1.5 !important;">25</span>:<span style="color: #800080; line-height: 1.5 !important;">12</span> CST <span style="color: #800080; line-height: 1.5 !important;">2016</span></pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">&nbsp;(3) 对于大量处理任务如何实现启动后台进程的数量可控？</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">　　简单的方法可以使用2层for/while循环实现，<strong><span style="color: #ff0000;">每次wait内层循环的多个后台程序执行完成</span></strong>。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">　　但是这种方式的问题是，如果<strong><span style="color: #ff0000;">内层循环有&#8220;慢节点&#8221;</span></strong>可能导致整个任务的执行执行时间长。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">　　更高级的实现可以看(4)</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">(4) 使用命名管道(fifo)实现每次启动后台进程数量可控。&nbsp;</p><div style="margin: 5px 0px; font-size: 12px !important;"><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; margin-left: 22px; white-space: pre-wrap; word-wrap: break-word; font-family: &quot;Courier New&quot; !important;"><span style="color: #008080; line-height: 1.5 !important;"> 1</span> #!/bin/<span style="line-height: 1.5 !important;">bash </span><span style="color: #008080; line-height: 1.5 !important;"> 2</span>  <span style="color: #008080; line-height: 1.5 !important;"> 3</span> <span style="color: #0000ff; line-height: 1.5 !important;">function</span><span style="line-height: 1.5 !important;"> my_cmd(){ </span><span style="color: #008080; line-height: 1.5 !important;"> 4</span>     t=<span style="line-height: 1.5 !important;">$RANDOM </span><span style="color: #008080; line-height: 1.5 !important;"> 5</span>     t=$[t%<span style="color: #800080; line-height: 1.5 !important;">15</span><span style="line-height: 1.5 !important;">] </span><span style="color: #008080; line-height: 1.5 !important;"> 6</span>     <span style="color: #0000ff; line-height: 1.5 !important;">sleep</span><span style="line-height: 1.5 !important;"> $t </span><span style="color: #008080; line-height: 1.5 !important;"> 7</span>     <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="color: #800000; line-height: 1.5 !important;">sleep $t s</span><span style="color: #800000; line-height: 1.5 !important;">"</span> <span style="color: #008080; line-height: 1.5 !important;"> 8</span> <span style="line-height: 1.5 !important;">} </span><span style="color: #008080; line-height: 1.5 !important;"> 9</span>  <span style="color: #008080; line-height: 1.5 !important;">10</span> tmp_fifofile=<span style="color: #800000; line-height: 1.5 !important;">"</span><span style="color: #800000; line-height: 1.5 !important;">/tmp/$$.fifo</span><span style="color: #800000; line-height: 1.5 !important;">"</span>  <span style="color: #008080; line-height: 1.5 !important;">11</span> <span style="color: #0000ff; line-height: 1.5 !important;">mkfifo</span><span style="line-height: 1.5 !important;"> $tmp_fifofile      # 新建一个fifo类型的文件 </span><span style="color: #008080; line-height: 1.5 !important;">12</span> exec <span style="color: #800080; line-height: 1.5 !important;">6</span>&lt;&gt;<span style="line-height: 1.5 !important;">$tmp_fifofile     # 将fd6指向fifo类型 </span><span style="color: #008080; line-height: 1.5 !important;">13</span> <span style="color: #0000ff; line-height: 1.5 !important;">rm</span><span style="line-height: 1.5 !important;"> $tmp_fifofile    #删也可以 </span><span style="color: #008080; line-height: 1.5 !important;">14</span>  <span style="color: #008080; line-height: 1.5 !important;">15</span> thread_num=<span style="color: #800080; line-height: 1.5 !important;">5</span><span style="line-height: 1.5 !important;">  # 最大可同时执行线程数量 </span><span style="color: #008080; line-height: 1.5 !important;">16</span> job_num=<span style="color: #800080; line-height: 1.5 !important;">100</span><span style="line-height: 1.5 !important;">   # 任务总数 </span><span style="color: #008080; line-height: 1.5 !important;">17</span>  <span style="color: #008080; line-height: 1.5 !important;">18</span> <span style="line-height: 1.5 !important;">#根据线程总数量设置令牌个数 </span><span style="color: #008080; line-height: 1.5 !important;">19</span> <span style="color: #0000ff; line-height: 1.5 !important;">for</span> ((i=<span style="color: #800080; line-height: 1.5 !important;">0</span>;i&lt;${thread_num};i++));<span style="color: #0000ff; line-height: 1.5 !important;">do</span> <span style="color: #008080; line-height: 1.5 !important;">20</span>     <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> <span style="color: #008080; line-height: 1.5 !important;">21</span> <span style="color: #0000ff; line-height: 1.5 !important;">done</span> &gt;&amp;<span style="color: #800080; line-height: 1.5 !important;">6</span>  <span style="color: #008080; line-height: 1.5 !important;">22</span>  <span style="color: #008080; line-height: 1.5 !important;">23</span> <span style="color: #0000ff; line-height: 1.5 !important;">for</span> ((i=<span style="color: #800080; line-height: 1.5 !important;">0</span>;i&lt;${job_num};i++));<span style="color: #0000ff; line-height: 1.5 !important;">do</span><span style="line-height: 1.5 !important;"> # 任务数量 </span><span style="color: #008080; line-height: 1.5 !important;">24</span>     # 一个read -<span style="line-height: 1.5 !important;">u6命令执行一次，就从fd6中减去一个回车符，然后向下执行， </span><span style="color: #008080; line-height: 1.5 !important;">25</span> <span style="line-height: 1.5 !important;">    # fd6中没有回车符的时候，就停在这了，从而实现了线程数量控制 </span><span style="color: #008080; line-height: 1.5 !important;">26</span>     read -<span style="line-height: 1.5 !important;">u6  </span><span style="color: #008080; line-height: 1.5 !important;">27</span>  <span style="color: #008080; line-height: 1.5 !important;">28</span> <span style="line-height: 1.5 !important;">    #可以把具体的需要执行的命令封装成一个函数 </span><span style="color: #008080; line-height: 1.5 !important;">29</span> <span style="line-height: 1.5 !important;">    {    </span><span style="color: #008080; line-height: 1.5 !important;">30</span> <span style="line-height: 1.5 !important;">        my_cmd </span><span style="color: #008080; line-height: 1.5 !important;">31</span>     } &amp; <span style="color: #008080; line-height: 1.5 !important;">32</span>  <span style="color: #008080; line-height: 1.5 !important;">33</span>     <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> &gt;&amp;<span style="color: #800080; line-height: 1.5 !important;">6</span> # 当进程结束以后，再向fd6中加上一个回车符，即补上了read -<span style="line-height: 1.5 !important;">u6减去的那个 </span><span style="color: #008080; line-height: 1.5 !important;">34</span> <span style="color: #0000ff; line-height: 1.5 !important;">done</span> <span style="color: #008080; line-height: 1.5 !important;">35</span>  <span style="color: #008080; line-height: 1.5 !important;">36</span> <span style="color: #0000ff; line-height: 1.5 !important;">wait</span> <span style="color: #008080; line-height: 1.5 !important;">37</span> exec <span style="color: #800080; line-height: 1.5 !important;">6</span>&gt;&amp;-<span style="line-height: 1.5 !important;"> # 关闭fd6 </span><span style="color: #008080; line-height: 1.5 !important;">38</span> <span style="color: #0000ff; line-height: 1.5 !important;">echo</span> <span style="color: #800000; line-height: 1.5 !important;">"</span><span style="color: #800000; line-height: 1.5 !important;">over</span><span style="color: #800000; line-height: 1.5 !important;">"</span></pre><div style="margin-top: 5px;"><span style="padding-right: 5px; line-height: 1.5 !important;"><a title="复制代码" style="color: #1d58d1; border: none !important;"><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="max-width: 900px; border: none !important;" /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: #ffffff;">参考:http://lawrence-zxc.github.io/2012/06/16/shell-thread/</p><img src ="http://www.blogjava.net/xzclog/aggbug/432719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-08-02 17:01 <a href="http://www.blogjava.net/xzclog/archive/2017/08/02/432719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ontab 在固定时间或固定间隔执行某文件或命令 </title><link>http://www.blogjava.net/xzclog/archive/2017/07/27/432699.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 27 Jul 2017 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/07/27/432699.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432699.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/07/27/432699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432699.html</trackback:ping><description><![CDATA[<div>1. crontab  命令：用于在某个时间，系统自动执行你所希望的程序文件或命令。<br />2. crontab  的参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (edit user's crontab)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (list  user's crontab)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (delete user's crontab)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  (prompt before deleting user's crontab)<br />3.下面进行一个例子：在8月6号18时每隔3分钟执行以下命令：who &gt;&gt;  /apple/test_crontab.log<br />&nbsp;&nbsp; 步骤一：先创建一个文件cronfile:内容为如下：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */3 18 6 8 * who  &gt;&gt; /apple/test_crontab_log<br />&nbsp;&nbsp; 步骤二：将文件cronfile 加入到cron守护进行（命令为：crontab cronfile）<br />4.  检查是否加入到守护进程cron中，用命令：crontab -l<br />&nbsp;&nbsp;  如何出来的内容中包含你刚刚的内容，则加入成功。每隔3分钟查看下test_crontab.log文件，看看是否有内容。<br />5. 对crontab内容格式的解释：f1 f2 f3 f4 f5 program<br />&nbsp;&nbsp; f1  是表示分钟（0-59），f2 表示小时（0-23），f3 表示一个月份中的第几日（1-（31、30、29、28）），f4 表示月份（1-12），f5  表示一个星期中的第几天（0-6（0表示周日））。program 表示要执行的程式（可以理解为文件或命令）<br />&nbsp;&nbsp; f1：为*时候表示每隔1分钟，如果为*/n  表示每隔n分钟，如果为3，4 表示第3,4分钟，如果为2-6表示第2分钟到第6分钟。<br />&nbsp;&nbsp; f2：为*时候表示每隔1小说。如果为*/n  表示每隔n小时,如果为3,4 表示第3,4小时，如果为2-6表示第2小时到第6小时<br />&nbsp;&nbsp; f3: 为*时候表示每天。n 表示第n天<br />&nbsp;&nbsp; f4:  为*时候表示每月。n 表示第n个月<br />&nbsp;&nbsp; f5: 为*时候表示每周。0表示周日，6表示周六，1-4表示周一到周六<br />6. 具体例子：（来自crontab百度百科）<br />&nbsp;&nbsp; a. 每月每天每小时的第 0 分钟执行一次 /bin/ls :  　　0 * * * * /bin/ls 　　<br />&nbsp;&nbsp; b. 在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次  /usr/bin/backup : <br />&nbsp; &nbsp; &nbsp; */20 6-12 * 12 * /usr/bin/backup 　<br />　 c. 周一到周五每天下午  5:00 寄一封信给 alex_mail_name : 　<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 17 * * 1-5 mail -s "hi" alex_mail_name  &lt; /tmp/maildata 　　<br />&nbsp;&nbsp; d. 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo  "haha" 　　<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 0-23/2 * * * echo "haha" 　　<br />&nbsp;&nbsp; e.  晚上11点到早上8点之间每两个小时和早上8点 显示日期　　0 23-7/2，8 * * * date&nbsp;</div><img src ="http://www.blogjava.net/xzclog/aggbug/432699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-07-27 18:59 <a href="http://www.blogjava.net/xzclog/archive/2017/07/27/432699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell时间处理、加减、以及时间差</title><link>http://www.blogjava.net/xzclog/archive/2017/07/06/432649.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 06 Jul 2017 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/07/06/432649.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432649.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/07/06/432649.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432649.html</trackback:ping><description><![CDATA[<div><div>最近一段时间，在处理Shell 脚本时候，遇到时间的处理问题。 时间的加减，以及时间差的计算。&nbsp;</div><div></div><div></div><div>&nbsp;</div><div></div><div></div><div></div><div>1。 时间加减</div><div></div><div>&nbsp;</div><div></div><div>这里处理方法，是将基础的时间转变为时间戳，然后，需要增加或者改变时间，变成 秒。&nbsp;</div><div></div><div></div><div>&nbsp;</div><div></div><div></div><div></div><div>如：1990-01-01 01:01:01 &nbsp;加上 1小时 20分</div><div></div><div>处理方法：</div><div></div><div>a.将基础时间转为时间戳</div><div></div><div>time1=$(date +%s -d '1990-01-01 01:01:01')</div><div></div><div>echo $time1</div><div></div><div>631126861 【时间戳】</div><div></div><div>&nbsp;</div><div></div><div>b.将增加时间变成秒</div><div></div><div>[root@localhost ~]# time2=$((1*60*60+20*60))</div><div>[root@localhost ~]# echo $time2</div><div></div><div>4800</div><div></div><div>&nbsp;</div><div></div><div>c.两个时间相加，计算出结果时间</div><div></div><div>time1=$(($time1+$time2))</div><div></div><div>time1=$(date +%Y-%m-%d\ %H:%M:%S -d "1970-01-01 UTC $time1 seconds");</div><div></div><div>echo $time1</div><div></div><div>1990-01-01 02:21:01</div><div></div><div>&nbsp;</div><div></div><div>2。时间差计算方法</div><div></div><div>&nbsp;</div><div></div><div>如：2010-01-01 与 2009-01-01 11:11:11 时间差</div><div></div><div>原理：同样转成时间戳，然后计算天，时，分，秒</div><div></div><div>&nbsp;</div><div></div><div>time1=$(($(date +%s -d '2010-01-01') - $(date +%s -d '2009-01-01 11:11:11')));</div><div></div><div>echo time1</div><div></div><div>&nbsp;</div><div></div><div>将time1 / 60 秒，就变成分了。</div><div></div><div>&nbsp;</div><div></div><div>补充说明：</div><div></div><div>shell 单括号运算符号：</div><div></div><div>a=$(date);</div><div></div><div>等同于：a=`date`;</div><div></div><div>&nbsp;</div><div></div><div>双括号运算符:</div><div></div><div>a=$((1+2));</div><div></div><div>echo $a;</div><div></div><div>等同于：</div><div></div><div>a=`expr 1 + 2`</div></div><div></div><img src ="http://www.blogjava.net/xzclog/aggbug/432649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-07-06 16:33 <a href="http://www.blogjava.net/xzclog/archive/2017/07/06/432649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>curl模拟http发送get或post接口测试 </title><link>http://www.blogjava.net/xzclog/archive/2017/05/18/432539.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 18 May 2017 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/05/18/432539.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432539.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/05/18/432539.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432539.html</trackback:ping><description><![CDATA[<div><p>可参照：http://www.voidcn.com/blog/Vindra/article/p-4917667.html</p><p>一、get请求&nbsp;</p><p>curl "http://www.baidu.com" &nbsp;如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地</p><p>curl -i "http://www.baidu.com" &nbsp;显示全部信息</p><p>curl -l "http://www.baidu.com" 只显示头部信息</p><p>curl -v "http://www.baidu.com" 显示get请求全过程解析</p><p>&nbsp;</p><p>wget "http://www.baidu.com"也可以</p><p>&nbsp;</p><p>二、post请求</p><p>curl -d "param1=value1&amp;param2=value2" "http://www.baidu.com"</p><p>&nbsp;</p><p>三、json格式的post请求</p><p>curl -l -H "Content-type: application/json" -X POST -d '{"phone":"13521389587","password":"test"}' http://domain/apis/users.json</p><p>例如：</p>   <p>curl -l -H "Content-type: application/json" -X POST -d '{"ver": "1.0","soa":{"req":"123"},"iface":"me.ele.lpdinfra.prediction.service.PredictionService","method":"restaurant_make_order_time","args":{"arg2":"\"stable\"","arg1":"{\"code\":[\"WIND\"],\"temperature\":11.11}","arg0":"{\"tracking_id\":\"100000000331770936\",\"eleme_order_id\":\"100000000331770936\",\"platform_id\":\"4\",\"restaurant_id\":\"482571\",\"dish_num\":1,\"dish_info\":[{\"entity_id\":142547763,\"quantity\":1,\"category_id\":1,\"dish_name\":\"[0xe7][0x89][0xb9][0xe4][0xbb][0xb7][0xe8][0x85][0x8a][0xe5][0x91][0xb3][0xe5][0x8f][0x89][0xe7][0x83][0xa7][0xe5][0x8f][0x8c][0xe6][0x8b][0xbc][0xe7][0x85][0xb2][0xe4][0xbb][0x94][0xe9][0xa5][0xad]\",\"price\":31.0}],\"merchant_location\":{\"longitude\":\"121.47831425\",\"latitude\":\"31.27576153\"},\"customer_location\":{\"longitude\":\"121.47831425\",\"latitude\":\"31.27576153\"},\"created_at\":1477896550,\"confirmed_at\":1477896550,\"dishes_total_price\":0.0,\"food_boxes_total_price\":2.0,\"delivery_total_price\":2.0,\"pay_amount\":35.0,\"city_id\":\"1\"}"}}' http://vpcb-lpdinfra-stream-1.vm.elenet.me:8989/rpc</p><p>ps：json串内层参数需要格式化</p></div><img src ="http://www.blogjava.net/xzclog/aggbug/432539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-05-18 11:28 <a href="http://www.blogjava.net/xzclog/archive/2017/05/18/432539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux netstat命令使用收集，查看80端口连接数</title><link>http://www.blogjava.net/xzclog/archive/2017/05/17/432536.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 17 May 2017 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/05/17/432536.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432536.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/05/17/432536.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432536.html</trackback:ping><description><![CDATA[<span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">服务器上的一些统计数据：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">1)统计80端口连接数</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -nat|grep -i "80"|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">2）统计httpd协议连接数</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">ps -ef|grep httpd|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">3）、统计已连接上的，状态为&#8220;established</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -na|grep ESTABLISHED|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">4)、查出哪个IP地址连接最多,将其封了.</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -na|grep ESTABLISHED|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -na|grep SYN|awk {print $5}|awk -F: {print $1}|sort|uniq -c|sort -r +0n</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">---------------------------------------------------------------------------------------------</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">1、查看apache当前并发访问数：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -an | grep ESTABLISHED | wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">对比httpd.conf中MaxClients的数字差距多少。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">2、查看有多少个进程数：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">ps aux|grep httpd|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">3、可以使用如下参数查看数据</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">server-status?auto</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">#ps -ef|grep httpd|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">1388</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">统计httpd进程数，连个请求会启动一个进程，使用于Apache服务器。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">表示Apache能够处理1388个并发请求，这个值Apache可根据负载情况自动调整。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">#netstat -nat|grep -i "80"|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">4341</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -an会打印系统当前网络链接状态，而grep -i "80"是用来提取与80端口有关的连接的，wc -l进行连接数统计。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">最终返回的数字就是当前所有80端口的请求总数。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">#netstat -na|grep ESTABLISHED|wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">376</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -an会打印系统当前网络链接状态，而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">最终返回的数字就是当前所有80端口的已建立连接的总数。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -nat||grep ESTABLISHED|wc - 可查看所有建立连接的详细记录</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">查看Apache的并发请求数及其TCP连接状态：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">Linux命令：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">返回结果示例：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">LAST_ACK 5</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">SYN_RECV 30</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">ESTABLISHED 1597</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">FIN_WAIT1 51</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">FIN_WAIT2 504</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">TIME_WAIT 1057</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">其中的</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">SYN_RECV表示正在等待处理的请求数；</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">ESTABLISHED表示正常数据传输状态；</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">TIME_WAIT表示处理完毕，等待超时结束的请求数。</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">---------------------------------------------------------------------------------------------</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">查看httpd进程数（即prefork模式下Apache能够处理的并发请求数）：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">Linux命令：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp;ps -ef | grep httpd | wc -l</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">查看Apache的并发请求数及其TCP连接状态：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">Linux命令：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp; &nbsp;netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">返回结果示例：</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">LAST_ACK 5</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">SYN_RECV 30</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">ESTABLISHED 1597</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">FIN_WAIT1 51</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">FIN_WAIT2 504</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">TIME_WAIT 1057</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">说明:</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp;SYN_RECV表示正在等待处理的请求数；</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp;ESTABLISHED表示正常数据传输状态；</span><br style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" /><span style="white-space: normal; word-spacing: 0px; text-transform: none; float: none; color: rgb(50,50,50); text-align: left; font: 14px 微软雅黑, Arial, Helvetica, sans-serif; widows: 1; display: inline !important; letter-spacing: normal; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp; &nbsp;TIME_WAIT表示处理完毕，等待超时结束的请求数。</span><img src ="http://www.blogjava.net/xzclog/aggbug/432536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-05-17 23:12 <a href="http://www.blogjava.net/xzclog/archive/2017/05/17/432536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>redis主从 以及认证配置</title><link>http://www.blogjava.net/xzclog/archive/2017/05/10/432508.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 10 May 2017 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/05/10/432508.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432508.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/05/10/432508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432508.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;以前用redis用的很多，各种数据类型用的飞起，算是用得很溜了。不过那都是封装好的方法，自己直接调用。以前的公司比较规范，开发只是开发，很少去做跟运维相关的事情。&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; 换了一份工作，不过这边项目刚开始起步，各种东西还不是很全，需要从头做起。运维什么的都是自己来。这下要考虑的东西就多了。比如说re...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2017/05/10/432508.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/432508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-05-10 10:49 <a href="http://www.blogjava.net/xzclog/archive/2017/05/10/432508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Kerberos简介</title><link>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 25 Apr 2017 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432480.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432480.html</trackback:ping><description><![CDATA[<div><h1><span style="line-height: 1.5; font-size: 2em;">1.&nbsp; Kerberos简介</span></h1><h2>1.1. 功能</h2><ol><li><p><span style="font-size: 18px;">一个安全认证协议</span></p></li><li><p><span style="font-size: 18px;">用tickets验证</span></p></li><li><p><span style="font-size: 18px;">避免本地保存密码和在互联网上传输密码</span></p></li><li><p><span style="font-size: 18px;">包含一个可信任的第三方</span></p></li><li><p><span style="font-size: 18px;">使用对称加密</span></p></li><li><p><span style="font-size: 18px;">客户端与服务器（非KDC）之间能够相互验证</span></p></li></ol><p>Kerberos只提供一种功能&#8212;&#8212;在网络上安全的完成用户的身份验证。它并不提供授权功能或者审计功能。</p><h2>1.2. 概念</h2><p>首次请求，三次通信方</p><ul><li>the Authentication Server</li><li>the Ticket Granting Server</li><li>the Service or host machine that you&#8217;re wanting access to.</li></ul><p align="center"><img width="786" height="590" alt="" src="http://images.cnitblog.com/i/440394/201405/161359440784098.jpg" />&nbsp;</p><p align="center">图 1&#8209;1 角色</p><p>其他知识点</p><ul><li>每次通信，消息包含两部分，一部分可解码，一部分不可解码</li><li>服务端不会直接有KDC通信</li><li>KDC保存所有机器的账户名和密码</li><li>KDC本身具有一个密码</li></ul><h1>2.&nbsp; 3次通信</h1><p>&nbsp;<img style="margin-right: auto; margin-left: auto; display: block;" alt="" src="http://images.cnitblog.com/i/440394/201405/161403404066531.png" /></p><p>　　我们这里已获取服务器中的一张表（数据）的服务以为，为一个http服务。</p><h2>2.1. 你和验证服务</h2><p>　　如果想要获取http服务，你首先要向KDC表名你自己的身份。这个过程可以在你的程序启动时进行。Kerberos可以通过kinit获取。介绍自己通过未加密的信息发送至KDC获取Ticket Granting Ticket (TGT)。</p><p>（1）信息包含</p><ul><li>你的用户名/ID</li><li>你的IP地址</li><li>TGT的有效时间</li></ul><p>　　Authentication Server收到你的请求后，会去数据库中验证，你是否存在。注意，仅仅是验证是否存在，不会验证对错。</p><p>　　如果存在，Authentication Server会产生一个随机的Session key(可以是一个64位的字符串)。这个key用于你和Ticket Granting Server (TGS)之间通信。</p><p>（2）回送信息</p><p>　　Authentication Server同样会发送两部分信息给你，一部分信息为TGT，通过KDC自己的密码进行加密，包含：</p><ul><li>你的name/ID</li><li>TGS的name/ID</li><li>时间戳</li><li>你的IP地址</li><li>TGT的生命周期</li><li><span style="color: #00ff00;"><strong>TGS session key</strong></span></li></ul><p>另外一部分通过你的密码进行加密，包含的信息有</p><ul><li>TGS的name/ID</li><li>时间戳</li><li>生命周期</li><li><span style="color: #00ff00;"><strong>TGS session key</strong></span></li></ul><p align="center">&nbsp;<img width="835" height="630" alt="" src="http://images.cnitblog.com/i/440394/201405/161407343596805.png" /></p><p align="center">图 2&#8209;1 第一次通信</p><p>　　如果你的密码是正确的，你就能解密第二部分信息，获取到TGS session key。如果，密码不正确，无法解密，则认证失败。第一部分信息TGT，你是无法解密的，但需要展示缓存起来。</p><h2>2.2. 你和TGS</h2><p>如果第一部分你已经成功，你已经拥有无法解密的TGT和一个TGS Session Key。</p><p>（1）&nbsp;&nbsp;&nbsp; 请求信息</p><p>　a) &nbsp;通过TGS Session Key加密的<strong>认证器</strong>部分：</p><ul><li>你的name/ID</li><li>时间戳</li></ul><p>b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 明文传输部分：</p><ul><li>请求的Http服务名（就是请求信息）</li><li>HTTP Service的Ticket生命周期</li></ul><p>c)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TGT部分</p><p>　　Ticket Granting Server收到信息后，首先检查数据库中是否包含有你请求的Http服务名。如果无，直接返回错误信息。</p><p>　　如果存在，则通过KDC的密码解密TGT，这个时候。我们就能获取到TGS Session key。然后，通过TGS Session key去解密你传输的第一部分认证器，获取到你的用户名和时间戳。</p><p><strong>TGS再进行验证：</strong></p><ol><li>对比TGT中的用户名与认证器中的用户名</li><li>比较时间戳（网上有说认证器中的时间错和TGT中的时间错，个人觉得应该是认证器中的时间戳和系统的时间戳），不能超过一定范围</li><li>检查是否过期</li><li>检查IP地址是否一致</li><li>检查认证器是否已在TGS缓存中（避免应答攻击）</li><li><strong>可以在这部分添加权限认证服务</strong></li></ol><p>　　TGS随机产生一个<strong><span style="color: #ff0000;">Http Service Session Key</span></strong>, 同时准备Http Service Ticket(ST)。</p><p>（2）&nbsp;&nbsp;&nbsp; 回答信息</p><p>　　a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过Http服务的密码进行加密的信息（ST）：</p><ul><li>你的name/ID</li><li>Http服务name/ID</li><li>你的IP地址</li><li>时间戳</li><li>ST的生命周期</li><li><span style="color: #ff0000;"><strong>Http Service Session Key</strong></span></li></ul><p>　　b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<span style="color: #00ff00;"><strong>TGS Session Key</strong></span>加密的信息</p><ul><li>Http服务name/ID</li><li>时间戳</li><li>ST的生命周期</li><li><span style="color: #ff0000;"><strong>Http Service Session Key</strong></span></li></ul><p>　　你收到信息后，通过<span style="color: #00ff00;"><strong>TGS Session Key</strong></span>解密，获取到了<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>，但是你无法解密ST。</p><p>&nbsp;<img width="934" height="687" alt="" src="http://images.cnitblog.com/i/440394/201405/161411563901158.png" /></p><p align="center">图 2&#8209;2 第二次通信</p><h2>2.3. 你和Http服务</h2><p>　　在前面两步成功后，以后每次获取Http服务，在Ticket没有过期，或者无更新的情况下，都可直接进行这一步。省略前面两个步骤。</p><p>（1）&nbsp;&nbsp;&nbsp; 请求信息</p><p>　　a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<strong>Http Service Session Key</strong><strong>，</strong>加密部分</p><ul><li>你的name/ID</li><li>时间戳</li></ul><p>　　b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ST</p><p>　　　Http服务端通过自己的密码解压ST（KDC是用Http服务的密码加密的），这样就能够获取到<strong>Http Service Session Key</strong>，解密第一部分。</p><p><strong>服务端解密好ST后，进行检查</strong></p><ol><li>对比ST中的用户名（KDC给的）与认证器中的用户名</li><li>比较时间戳（网上有说认证器中的时间错和TGT中的时间错，个人觉得应该是认证器中的时间戳和系统的时间戳），不能超过一定范围</li><li>检查是否过期</li><li>检查IP地址是否一致</li><li>检查认证器是否已在HTTP服务端的缓存中（避免应答攻击）</li></ol><p>（2）&nbsp;&nbsp;&nbsp; 应答信息</p><p>a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>加密的信息</p><ul><li>Http服务name/ID</li><li>时间戳</li></ul><p>&nbsp;<img width="827" height="437" alt="" src="http://images.cnitblog.com/i/440394/201405/161413397653706.png" /></p><p align="center">图 2&#8209;3 第三次通信</p><p>　　你在通过缓存的<span style="color: #ff0000;"><strong>Http Service Session Key</strong></span>解密这部分信息，然后验证是否是你想要的服务器发送给你的信息。完成你的服务器的验证。</p><p>至此，整个过程全部完成。</p></div><img src ="http://www.blogjava.net/xzclog/aggbug/432480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-25 15:56 <a href="http://www.blogjava.net/xzclog/archive/2017/04/25/432480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NTP服务及时间同步(CentOS6.x)</title><link>http://www.blogjava.net/xzclog/archive/2017/04/14/432453.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 14 Apr 2017 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2017/04/14/432453.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/432453.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2017/04/14/432453.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/432453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/432453.html</trackback:ping><description><![CDATA[今有一小型项目，完全自主弄，原来以为很简单的NTP服务，我给折腾了2个多小时才整撑头（以前都是运维搞，没太注意，所以这技术的东西，在简单都需要亲尝啊），这里记录为以后别再浪费时间。
  
   目标环境，5台linux centos 6.3， 一台作为NTPD服务与外部公共NTP服务同步时间，同时作为内网的NTPD服务器，其他机器与这台服务做时间同步。

 服务器IP	角色 	 说明	同步方式
 192.168.1.135 	 NTPD服务	
 1、负责与外部公共NTPD服务同步标准时间
 2、作为内外网络的NTPD服务
NTPD服务平滑同步
 192.168.1.xxx	 内外NTP客户端	 内网设备与192.168.1.135同步时间	NTPD服务平滑同步
 &#8230;&#8230;	  内外NTP客户端	  内网设备与192.168.1.135同步时间	NTPD服务平滑同步
  
1、NTP时间同步方式选择
   NTP同步方式在linux下一般两种：使用ntpdate命令直接同步和使用NTPD服务平滑同步。有什么区别呢，简单说下，免得时间长了，概念又模糊。
   现有一台设备，系统时间是 13:00 , 真实的当前时间(在空中，也许卫星上，这里假设是在准备同步的上级目标NTP服务器)是: 12:30  。如果我们使用ntpdate同步（ntpdate -u 目标NTP服务器IP），操作系统的时间立即更新为12:30,假如，我们的系统有一个定时应用，是在每天12:40运行，那么实际今天这个的任务已经运行过了（当前时间是13:00嘛），现在被ntpdate修改为12:30，那么意味作10分钟后，又会执行一次任务，这就糟糕了，这个任务只能执行一次的嘛！！我想你（其实是我）已经懂了ntpdate时间同步的隐患，当然这个例子有些极端，但的确是有风险的，生产环境我不打算这么干，还是稳妥点好。所以解决该问题的办法就是时间平滑更改，不会让一个时间点在一天内经历两次，这就是NTPD服务方式平滑同步时间，它每次同步时间的偏移量不会太陡，是慢慢来的（问：怎么来，没有细究，只晓得一次一点的同步，完全同步好需要较长时间，所以一般开启NTPD服务同步前先用ntpdate先手动同步一次）。
 
2、安装配置
CentOS 6.3系统已经自带了NTPD服务，一般默认是按照了的，如果没有安装，先检查下，然后配置好yum仓库，yum方式安装下就OK，具体如下：
# rpm -q ntp
ntp-4.2.4p8-2.el6.x86_64    // 这表示已安装了，如果没有安装，这是空白。
如果没有安装，我们按照下
# yum install ntp
......
按上面的安装方式在内网每台服务器上都安装好NTP软件包。
完成后，都需要配置NTP服务为自启动
# chkconfig ntpd on
# chkconfig --list ntpd
ntpd           0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
 
在配置前，先使用ntpdate手动同步下时间，免得本机与外部时间服务器时间差距太大，让ntpd不能正常同步。
# ntpdate -u 202.112.10.36
22 Dec 16:52:38 ntpdate[6400]: adjust time server 202.112.10.36 offset 0.012135 sec
 
配置内网NTP-Server(192.168.1.135)
下面主要是配置内网的NPTD服务器(192.168.1.135), NTPD服务配置核心就在/etc/ntp.conf文件，配置好了就OK。网上特别是老外的文章都很简单，我上当了，妈哟，基础环境不一样，我们得中国特色才行。先上配置文件再说，红色部分是我的修改，其他的是默认。
 
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
 
driftfile /var/lib/ntp/drift
 
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
 
# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1
 
# Hosts on local network are less restricted.
# 允许内网其他机器同步时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
server 210.72.145.44 perfer   # 中国国家受时中心
server 202.112.10.36             # 1.cn.pool.ntp.org
server 59.124.196.83             # 0.asia.pool.ntp.org
 
#broadcast 192.168.1.255 autokey        # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 autokey            # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
 
# allow update time by the upper server 
# 允许上层时间服务器主动修改本机时间
restrict 210.72.145.44 nomodify notrap noquery
restrict 202.112.10.36 nomodify notrap noquery
restrict 59.124.196.83 nomodify notrap noquery
 
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. 
# 外部时间服务器不可用时，以本地时间作为时间服务
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
 
# Enable public key cryptography.
#crypto
 
includefile /etc/ntp/crypto/pw
 
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography. 
keys /etc/ntp/keys
 
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
 
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
 
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
 
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
配置参数和命令简单说明请参考：http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf
 
配置文件修改完成，保存退出，启动服务。
# service ntpd start
......
启动后，一般需要5-10分钟左右的时候才能与外部时间服务器开始同步时间。可以通过命令查询NTPD服务情况。
 
查看服务连接和监听
# netstat -tlunp | grep ntp      
udp        0      0 192.168.1.135:123           0.0.0.0:*                               23103/ntpd          
udp        0      0 127.0.0.1:123               0.0.0.0:*                               23103/ntpd          
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               23103/ntpd          
udp        0      0 fe80::6cae:8bff:fe3d:f65:123 :::*                                    23103/ntpd          
udp        0      0 fe80::6eae:8bff:fe3d:f65:123 :::*                                    23103/ntpd          
udp        0      0 ::1:123                     :::*                                    23103/ntpd          
udp        0      0 :::123                      :::*                                    23103/ntpd  
看红色加粗的地方，表示连接和监听已正确，采用UDP方式
 
ntpq -p 查看网络中的NTP服务器，同时显示客户端和每个服务器的关系
# ntpq -p
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*202.112.10.36   202.112.10.60    2 u  277  128  314  201.553    9.193  17.068
+59.124.196.83   129.6.15.28      2 u   88  128  377   71.153  -25.111  14.004
 LOCAL(0)        .LOCL.          10 l   15   64  377    0.000    0.000   0.000
 
位置	标志	含义
符号	*	响应的NTP服务器和最精确的服务器
+	响应这个查询请求的NTP服务器
blank(空格)	没有响应的NTP服务器
标题	remote	响应这个请求的NTP服务器的名称
refid	NTP服务器使用的更高一级服务器的名称
st	正在响应请求的NTP服务器的级别
when	上一次成功请求之后到现在的秒数
poll	本地和远程服务器多少时间进行一次同步，单位秒，在一开始运行NTP的时候这个poll值会比较小，服务器同步的频率大，可以尽快调整到正确的时间范围，之后poll值会逐渐增大，同步的频率也就会相应减小
reach	用来测试能否和服务器连接，是一个八进制值，每成功连接一次它的值就会增加
delay	从本地机发送同步要求到ntp服务器的往返时间
offset	主机通过NTP时钟同步与所同步时间源的时间偏移量，单位为毫秒，offset越接近于0，主机和ntp服务器的时间越接近
jitter	统计了在特定个连续的连接数里offset的分布情况。简单地说这个数值的绝对值越小，主机的时间就越精确
 
ntpstat 命令查看时间同步状态，这个一般需要5-10分钟后才能成功连接和同步。所以，服务器启动后需要稍等下。
刚启动的时候，一般是：
# ntpstat 
unsynchronised
  time server re-starting
   polling server every 64 s
连接并同步后:
synchronised to NTP server (202.112.10.36) at stratum 3 
   time correct to within 275 ms
   polling server every 256 s
 
OK，内网的NTPD服务已经配置完成，如果所有正常后，开始配置内网的其他设备与这台服务器作为时间同步服务。
 
配置内网NTP-Clients
内网其他设备作为NTP的客户端配置，相对就比较简单，而且所有设备的配置都相同。
首先需要安装NTPD服务，然后配置为自启动（与NTP-Server完全一样）。然后找其中一台配置/etc/ntp.conf文件，配置完成验证通过后，拷贝到其他客户端机器，直接使用即可。
# yum install ntp
...
# chkconfig ntp on
# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
 
# 配置时间服务器为本地的时间服务器
server 192.168.1.135
 
restrict 192.168.1.135 nomodify notrap noquery
 
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10
 
includefile /etc/ntp/crypto/pw
 
keys /etc/ntp/keys
 为了简单，这里只列出了配置项，注释全部清理了。
 OK，保存退出，请求服务器前，请先使用ntpdate手动同步下时间
# ntpdate -u 192.168.0.135
22 Dec 17:09:57 ntpdate[6439]: adjust time server 192.168.1.135 offset 0.004882 sec
这里有可能出现同步失败，一般情况下原因都是本地的NTPD服务器还没有正常启动起来，一般需要几分钟时间后才能开始同步。
错误判断请参考后面的错误处理。
 
# service ntpd start
....
启动后，查看同步情况
# ntpq -p
# ntpstat
.....
因为是内网，一般ntpstat很快就可以同步上，几分钟需要等下.
OK，本机客户端配置完成后，使用SCP拷贝/etc/ntp.conf到其他需要同步的客户端机器，启动NTPD服务即可。
其他客户端机器上操作配置如下：
#  ntpdate -u 192.168.0.135
22 Dec 17:09:57 ntpdate[6439]: adjust time server 192.168.1.135 offset 0.004882 sec
# scp 192.168.1.xxx:/etc/ntp.conf /etc/ntp.conf
# service ntpd start
 
 
3、错误问题处理
用于收集安装，配置和应用中出现的问题
 
错误1：ntpdate -u ip ->  no server suitable for synchronization found
判断：在ntp客户端用ntpdate &#8211;d serverIP查看，发现有&#8220;Server dropped: strata too high&#8221;的错误，并且显示&#8220;stratum 16&#8221;。而正常情况下stratum这个值得范围是&#8220;0~15&#8221;。
原因：NTP server还没有和其自身或者它的server同步上。在ntp server上重新启动ntp服务后，ntp server自身或者与其server的同步的需要一个时间段，这个过程可能是5分钟，在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
处理：等待几分钟后，重试一般解决。
也可以使用命令 ntpq -p查看情况
参考：http://blog.csdn.net/weidan1121/article/details/3953021
 <img src ="http://www.blogjava.net/xzclog/aggbug/432453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2017-04-14 11:25 <a href="http://www.blogjava.net/xzclog/archive/2017/04/14/432453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UTF-8编码文件BOM头的检测与删除</title><link>http://www.blogjava.net/xzclog/archive/2016/09/18/431799.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sun, 18 Sep 2016 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/09/18/431799.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/431799.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/09/18/431799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/431799.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/431799.html</trackback:ping><description><![CDATA[<div><p>所谓BOM，全称是<a href="http://en.wikipedia.org/wiki/Byte_order_mark" rel="nofollow" target="_blank">Byte Order Mark</a>，它是一个Unicode字符，通常出现在文本的开头，用来标识字节序（Big/Little Endian），除此以外还可以标识编码（UTF-8/16/32），如果出现在文本中间，则解释为<a href="http://en.wikipedia.org/wiki/Zero-width_non-breaking_space" rel="nofollow" target="_blank">zero width no-break space</a>。  注：Unicode相关知识的详细介绍请参考<a href="http://unicode.org/faq/utf_bom.html" rel="nofollow" target="_blank">UTF-8, UTF-16, UTF-32 &amp; BOM</a>。<br /> <br />对于UTF-8/16/32而言，它们名字中的8/16/32指的是编码单位是多少位的，也就是说，它们的编码单位分别是8/16/32位，换算成字节就<br />是1/2/4字节，如果是多字节，就要牵扯到字节序，UTF-8以单字节为编码单位，所以不存在字节序。 <br />UTF-8主要的优点是可以兼容ASCII，但如果使用BOM的话，这个好处就荡然无存了，除此以外，BOM的存在还可能引发一些问题，比如下面错误便都<br />有可能是BOM导致的：</p><br /><ul><br /><li>Shell: No such file or directory<br /></li><li>PHP: Warning: Cannot modify header information &#8211; headers already sent<br /></li></ul><br /><p>在详细讨论UTF-8编码中BOM的检测与删除问题前，不妨先通过一个例子热热身：</p><br /><pre>shell&gt; curl -s http://phone.10086.cn/ | head -1 | sed -n l<br />\357\273\277&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional\<br />//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;\r$</pre><br /><p>如上所示，前三个字节分别是357、273、277，这就是八进制的BOM。</p><br /><pre>shell&gt; curl -s http://phone.10086.cn/ | head -1 | hexdump -C<br />00000000  ef bb bf 3c 21 44 4f 43 54 59 50 45 20 68 74 6d |...&lt;!DOCTYPE htm|<br />00000010 6c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 |l PUBLIC "-//W3C|<br />00000020  2f 2f 44 54 44 20 58 48  54 4d 4c 20 31 2e 30 20  |//DTD XHTML 1.0 |<br />00000030  54 72 61 6e 73 69 74 69  6f 6e 61 6c 2f 2f 45 4e  |Transitional//EN|<br />00000040  22 20 22 68 74 74 70 3a  2f 2f 77 77 77 2e 77 33  |" "http://www.w3|<br />00000050  2e 6f 72 67 2f 54 52 2f  78 68 74 6d 6c 31 2f 44  |.org/TR/xhtml1/D|<br />00000060  54 44 2f 78 68 74 6d 6c  31 2d 74 72 61 6e 73 69  |TD/xhtml1-transi|<br />00000070  74 69 6f 6e 61 6c 2e 64  74 64 22 3e 0d 0a        |tional.dtd"&gt;..|</pre><br /><p>如上所示，前三个字节分别是EF、BB、BF，这就是十六进制的BOM。 注：用到了第三方网站的页面，不能保证例子始终可用。 <br />实际做项目开发时，可能会面对成百上千个文本文件，如果有几个文件混入了BOM，那么很难察觉，如果没有带BOM的UTF-8文本文件，可以用vi杜撰几<br />个，相关命令如下：</p><br /><p>设置UTF-8编码：</p><br /><pre>:set fileencoding=utf-8</pre><br /><p>添加BOM：</p><br /><pre>:set bomb</pre><br /><p>删除BOM：</p><br /><pre>:set nobomb</pre><br /><p>查询BOM：</p><br /><pre>:set bomb?</pre><br /><p>如何检测UTF-8编码中的BOM呢？</p><br /><pre>shell&gt; grep -r -I -l $'^\xEF\xBB\xBF' /path</pre><br /><p>如何删除UTF-8编码中的BOM呢？</p><br /><pre>shell&gt; grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'</pre><br /><p>推荐：如果你使用SVN的话，可以在pre-commit钩子里加上相关代码用以杜绝BOM。</p><br /><pre>#!/bin/bash<br /><br />REPOS="$1"<br />TXN="$2"<br /><br />SVNLOOK=/usr/bin/svnlook<br /><br />for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}'); do<br /> if $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | grep -q $'^\xEF\xBB\xBF'; then<br />        echo "Byte Order Mark be found in $FILE" 1&gt;&amp;2<br /> exit 1<br /> fi<br />done</pre><br /><p>本文用到了很多shell命令，篇幅所限，恕不详述，如果有不明白的就请自己搜索吧。</p></div><img src ="http://www.blogjava.net/xzclog/aggbug/431799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-09-18 09:38 <a href="http://www.blogjava.net/xzclog/archive/2016/09/18/431799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 命令 xxd linux下查看二进制文件</title><link>http://www.blogjava.net/xzclog/archive/2016/09/18/431800.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sun, 18 Sep 2016 01:38:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/09/18/431800.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/431800.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/09/18/431800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/431800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/431800.html</trackback:ping><description><![CDATA[<div><p>当我们需要把二进制转成c语言中使用的16进制字符数组时，命令xxd是很有用的。</p> <p>xxd 帮助信息如下：关键选项标黑。</p> <p>[root@localhost ]# xxd --help<br />Usage:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xxd [options] [infile  [outfile]]<br />&nbsp;&nbsp;&nbsp; or<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xxd -r [-s [-]offset] [-c cols] [-ps] [infile  [outfile]]<br />Options:<br />&nbsp;&nbsp;&nbsp; -a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toggle autoskip: A single '*' replaces  nul-lines. Default off.<br />&nbsp;&nbsp;&nbsp; -b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; binary digit dump (incompatible with  -p,-i,-r). Default hex.<br />&nbsp;&nbsp;&nbsp; -c cols&nbsp;&nbsp;&nbsp;&nbsp; format &lt;cols&gt; octets per line.  Default 16 (-i: 12, -ps: 30).<br />&nbsp;&nbsp;&nbsp; -E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show characters in EBCDIC.  Default ASCII.<br />&nbsp;&nbsp;&nbsp;<strong> -g&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number of octets per group in normal  output. Default 2</strong>. 每个goup的字节数，默认为2，可设置。<br />&nbsp;&nbsp;&nbsp; -h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print this  summary.<br />&nbsp;&nbsp;&nbsp;<strong> -i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output in C include file style</strong>.  ：输出为c包含文件的风格，数组方式存在。<br />&nbsp;&nbsp;&nbsp; <strong>-l len&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop after &lt;len&gt;  octets.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ：转换到len个字节后停止转换。<br /></strong>&nbsp;&nbsp;&nbsp; -ps&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; output in postscript  plain hexdump style.<br />&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reverse operation: convert (or patch)  hexdump into binary.<br />&nbsp;&nbsp;&nbsp; -r -s off&nbsp;&nbsp; revert with &lt;off&gt; added to file  positions found in hexdump.<br />&nbsp;&nbsp;&nbsp; -s [+][-]seek start at &lt;seek&gt; bytes  abs. (or +: rel.) infile offset.<br />&nbsp;&nbsp;<strong> -u&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use upper case hex  letters. ： 字节大写方式<br /></strong>&nbsp;&nbsp;&nbsp; -v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show version: "xxd V1.10 27oct98  by Juergen Weigert".</p> <p>比如运行：</p> <p>&gt; xxd -g 1 -i -u -l 10000000 nm.ts &gt; xxd_test.txt</p> <p>生成的文本显示：</p> <p>unsigned char __0513_1634_ch32_666_10_ts[] = {<br />0X47, 0X02, 0X03, 0X13,  0XF8, 0X5A, 0XC5, 0X40, 0X26, 0XE4, 0XD0, 0XDE,<br />0XAD, 0XB8, 0X76, 0X89, 0X85,  0X23, 0X06, 0X04, 0X6E, 0X05, 0X8B, 0X09,<br />0XC0, 0X5C, 0X96, 0X4F, 0X18, 0X51,  0X41, 0XC8, 0X40, 0X9F, 0X06, 0X93,<br />0X38, 0XC1, 0XBB, 0X1A, 0XBC, 0XAC, 0X47,  0XFF, 0X5E, 0X54, 0XEB, 0XA7,<br />0X14, 0X36, 0X85, 0X8A, 0X90, 0X14, 0X17, 0XA2,  0X9D, 0XC0, 0X84, 0X56,<br />0XCB, 0X97, 0X78, 0XC8, 0X57, 0X15, 0X3E, 0X61, 0X6F,  0XFE, 0XC9, 0X39,<br />0XEF, 0XD3, 0XB6, 0X6A, 0XD2, 0XE4, 0XFB, 0X4C, 0X05, 0XF6,  0X03, 0XED,<br />0X50, 0XB3, 0XE7, 0X46, 0X57, 0X24, 0X71, 0X16, 0X38, 0X45, 0X53,  0X19,<br />0X56, 0X25, 0X3C, 0X8D, 0X4C, 0XA9, 0X28, 0X9A, 0XB2, 0X99, 0X76,  0X52,<br />0X28, 0XE9, 0XD6, 0XD6, 0X11, 0X94, 0X89, 0X19, 0X4D, 0XEA, 0X68,  0X76,<br />0X53, 0XC6, 0XAA, 0X3A, 0XD4, 0XA1, 0X25, 0XA5, 0X03, 0XB0, 0X73,  0XA0,<br />0XAE, 0X11, 0XC9, 0XBD, 0X37, 0X17, 0X11, 0X5F, 0X30, 0X34, 0X34,  0X0B</p> <p>.....</p> <p>};</p> <p>unsigned int nm.ts_len = 10000000;</p> <p>另外，在vim中也可以把文件转换为16进制来显示：</p> <p>:%!xxd</p> <p>返回正常显示：</p> <p>:%!xxd -r</p> <p>&nbsp;</p> <p>linux下查看二进制文件<br />以十六进制格式输出：<br />od [选项] 文件<br />od -d 文件&nbsp;&nbsp;十进制输出<br />&nbsp; &nbsp;-o  文件&nbsp;&nbsp;八进制输出<br />&nbsp; &nbsp;-x 文件&nbsp;&nbsp;十六进制输出<br />xxd 文件&nbsp;&nbsp;输出十六进制<br /><br />在vi命令状态下：<br />:%!xxd&nbsp;  &nbsp;:%!od&nbsp; &nbsp; 将当前文本转化为16进制格式<br />:%!xxd -c 12 每行显示12个字节<br />:%!xxd -r&nbsp; &nbsp;  将当前文本转化回文本格式<br /></p></div><img src ="http://www.blogjava.net/xzclog/aggbug/431800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-09-18 09:38 <a href="http://www.blogjava.net/xzclog/archive/2016/09/18/431800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Shell中的IFS解惑 </title><link>http://www.blogjava.net/xzclog/archive/2016/04/01/429934.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Fri, 01 Apr 2016 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/04/01/429934.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/429934.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/04/01/429934.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/429934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/429934.html</trackback:ping><description><![CDATA[<div><p><span style="font-size: 14px;"><strong>一、IFS 介绍</strong></span></p><p><span style="font-size: 14px;">&nbsp; &nbsp; &nbsp;Shell 脚本中有个变量叫<span style="font-family: &quot;Courier New&quot;;"> IFS(Internal Field Seprator)</span>&nbsp;，内部域分隔符。完整</span><span style="font-size: 14px;">定义是<span style="font-family: &quot;Courier New&quot;;">The shell uses the value stored in IFS, which is the<span style="color: #6600cc;"> space, tab, and newline</span> characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.</span></span></p><p><span style="font-size: 14px;">&nbsp; &nbsp; &nbsp;Shell 的环境变量分为 set, env 两种，其中 set 变量可以通过 export 工具导入到 env 变量中。其中，</span><span style="font-size: 14px;">set 是显示设置shell变量，仅在本 shell 中有效；</span><span style="font-size: 14px;">env 是显示设置用户环境变量 ，仅在当前会话中有效。</span><span style="font-size: 14px;">换句话说，set  变量里包含了 env 变量，但 set 变量不一定都是 env 变量。这两种变量不同之处在于变量的作用域不同。显然，env 变量的作用域要大些，它可以在 subshell 中使用。</span></p><p><span style="font-size: 14px;">&nbsp; &nbsp; &nbsp;而 IFS 是一种 set 变量，当 shell 处理"命令替换"和"参数替换"时，shell 根据 IFS 的值，默认是 space, tab, newline 来拆解读入的变量，然后对特殊字符进行处理，最后重新组合赋值给该变量。</span></p><p><span style="font-size: 14px;"><strong>二、IFS 简单实例</strong></span></p><p><span style="font-size: 14px;"><strong>1、</strong>查看变量 IFS 的值。<br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;echo&nbsp;$IFS&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$IFS"&nbsp;|&nbsp;od&nbsp;-b&nbsp;&nbsp;</li><li>0000000&nbsp;040&nbsp;011&nbsp;012&nbsp;012&nbsp;&nbsp;</li><li>0000004&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ echo $IFS  $ echo "$IFS" | od -b 0000000 040 011 012 012 0000004</pre><p><span style="font-size: 14px;">直接输出IFS是看不到的，把它转化为二进制就可以看到了，"040"是空格，"011"是Tab，"012"是换行符"\n" 。最后一个 012 是因为 echo 默认是会换行的。<br /></span></p><p><span style="font-size: 14px;"><strong>2、</strong>$* 和 $@ 的细微差别<br /><span style="font-size: 14px;">&nbsp; &nbsp; &nbsp;从下面的例子中可以看出，如果是用冒号引起来，表示这个变量不用IFS替换！！所以可以看到这个变量的"原始值"。反之，如果不加引号，输出时会根据IFS的值来分割后合并输出！ $* 是按照IFS中的第一个值来确定的！下面这两个例子还有细微的差别！</span><br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;IFS=:;&nbsp;&nbsp;</span></li><li>$&nbsp;set&nbsp;x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$*&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$*"&nbsp;&nbsp;</li><li>x:y:z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$@&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$@"&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ IFS=:; $ set x y z $ echo $* x y z $ echo "$*" x:y:z $ echo $@ x y z $ echo "$@" x y z</pre><span style="font-size: 14px;"><span style="font-size: 14px;">&nbsp;上例 set 变量其实是3个参数，而下面这个例子实质是2个参数，即&nbsp;<u>set "x y z"</u>&nbsp;&nbsp;和&nbsp;<u>set x y z</u>&nbsp;是完全不同的。</span><br /></span><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;set&nbsp;"x"&nbsp;"y&nbsp;z"&nbsp;&nbsp;</span></li><li>$&nbsp;echo&nbsp;$*&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$*"&nbsp;&nbsp;</li><li>x:y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$@&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$@"&nbsp;&nbsp;</li><li>x&nbsp;y&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$*&nbsp;|od&nbsp;-b&nbsp;&nbsp;</li><li>0000000&nbsp;170&nbsp;040&nbsp;171&nbsp;040&nbsp;172&nbsp;012&nbsp;&nbsp;</li><li>0000006&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$*"&nbsp;|od&nbsp;-b&nbsp;&nbsp;</li><li>0000000&nbsp;170&nbsp;072&nbsp;171&nbsp;040&nbsp;172&nbsp;012&nbsp;&nbsp;</li><li>0000006&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ set "x" "y z" $ echo $* x y z $ echo "$*" x:y z $ echo $@ x y z $ echo "$@" x y z $ echo $* |od -b 0000000 170 040 171 040 172 012 0000006 $ echo "$*" |od -b 0000000 170 072 171 040 172 012 0000006</pre><p><span style="font-size: 14px;">小结：$* 会根据 IFS 的不同来组合值，而 $@ 则会将值用" "来组合值！</span></p><p><span style="font-size: 14px;"><strong>3、</strong>for 循环中的奇怪现象<br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;for&nbsp;x&nbsp;in&nbsp;$var&nbsp;;do&nbsp;echo&nbsp;$x&nbsp;|od&nbsp;-b&nbsp;;done&nbsp;&nbsp;</span></li><li>0000000&nbsp;012&nbsp;&nbsp;</li><li>0000001&nbsp;&nbsp;</li><li>0000000&nbsp;040&nbsp;141&nbsp;012&nbsp;&nbsp;</li><li>0000003&nbsp;&nbsp;</li><li>0000000&nbsp;142&nbsp;012&nbsp;&nbsp;</li><li>0000002&nbsp;&nbsp;</li><li>0000000&nbsp;012&nbsp;&nbsp;</li><li>0000001&nbsp;&nbsp;</li><li>0000000&nbsp;143&nbsp;012&nbsp;&nbsp;</li><li>0000002&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ for x in $var ;do echo $x |od -b ;done 0000000 012 0000001 0000000 040 141 012 0000003 0000000 142 012 0000002 0000000 012 0000001 0000000 143 012 0000002</pre><p>&nbsp;</p><span style="font-size: 14px;">先暂且不解释 for 循环的内容！看下面这个输出！<span style="font-size: 14px;">IFS 的值同上！&nbsp;<span style="color: #ff0000;"><strong>var=": a:b::c:"</strong></span>，</span><br /></span><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;echo&nbsp;$var&nbsp;|od&nbsp;-b&nbsp;&nbsp;</span></li><li>0000000&nbsp;040&nbsp;040&nbsp;141&nbsp;040&nbsp;142&nbsp;040&nbsp;040&nbsp;143&nbsp;012&nbsp;&nbsp;</li><li>0000011&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$var"&nbsp;|od&nbsp;-b&nbsp;&nbsp;</li><li>0000000&nbsp;072&nbsp;040&nbsp;141&nbsp;072&nbsp;142&nbsp;072&nbsp;072&nbsp;143&nbsp;072&nbsp;012&nbsp;&nbsp;</li><li>0000012&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ echo $var |od -b 0000000 040 040 141 040 142 040 040 143 012 0000011 $ echo "$var" |od -b 0000000 072 040 141 072 142 072 072 143 072 012 0000012</pre><p><span style="font-size: 14px;">"$var"的值应该没做替换，所以还是 ": a:b::c:" (注 "072" 表示冒号)，但是$var 则发生了变化！注意输出的最后一个冒号没有了，也没有替换为空格！Why？</span></p><p>&nbsp;</p><p><span style="font-size: 14px;"><strong>使用 $var </strong>时是经历了这样一个过程！首先，<span style="color: #ff0000;">按照这样的规则 [变量][IFS][变量][IFS]&#8230;&#8230;根据原始 var 值中所有的分割符(此处是":")划分出变量，如果IFS的值是有多个字符组成，如IFS=":;"，那么此处的[IFS]指的是IFS中的<em>任意一个字符</em>($* 是按<em>第一个字符</em>来分隔！)，如 ":" 或者 ";"  ，<strong>后面不再对[IFS]做类似说明</strong>！(注：[IFS]会有多个值，多亏 <a href="http://bbs.chinaunix.net/space-uid-8213186.html">#blackold</a> 的提醒)；</span>然后，得到类似这样的 list， "" &nbsp; " a" &nbsp; "b" &nbsp;"" &nbsp; "c" &nbsp;。如果此时<strong> echo $var</strong>，则需要在这些变量之间用空格隔开，也就是<span style="font-size: 14px;">"" &nbsp;[space] &nbsp; " &nbsp;a" &nbsp;[space] &nbsp;"b" [space] &nbsp;"" [space] &nbsp;"c" ，<strong>忽略掉空值</strong>，</span>最终输出是 [space]<strong>[space]a</strong>[space]<strong>b</strong>[space][space]<strong>c</strong>  ！</span></p><p><span style="font-size: 14px;">如果最后一个字符不是分隔符，如 var="a:b"，那么最后一个分隔符后的变量就是最后一个变量！</span></p><p><span style="font-size: 14px;"><span style="color: #cc0000;">这个地方要注意下！！如果IFS就是空格，那么类似于"<span style="font-size: 14px;">&nbsp;[space][space]a[space]b[space][space]c&nbsp;</span>"会合并重复的部分，且去头空格，去尾空格，那么最终输出会变成类似&nbsp;<span style="font-size: 14px;">a[space]b[space]c ，所以，如果IFS是默认值，那么处理的结果就很好算出来，直接合并、忽略多余空格即可！</span></span></span></p><p><span style="font-size: 14px;">另外，$* 和 $@ 在函数中的处理过程是这样的(只考虑"原始值"！)！"$@"，就是像上面处理后赋值，但是 "$*" 却不一样！它的值是用分隔符(如":")而不是空格隔开！具体例子见最后一个例子！</span></p><p><span style="font-size: 14px;">好了，现在来解释 for 循环的内容。for 循环遍历上面这个列表就可以了，所以 for 循环的第一个输出是空！("012"是echo输出的换行符 )。。。。后面的依次类推！不信可以试试下面这个例子，结果是一样的！<br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;for&nbsp;x&nbsp;in&nbsp;""&nbsp;"&nbsp;a"&nbsp;"b"&nbsp;""&nbsp;"c"&nbsp;;do&nbsp;echo&nbsp;$x&nbsp;|od&nbsp;-b&nbsp;;done&nbsp;&nbsp;</span></li><li>0000000&nbsp;012&nbsp;&nbsp;</li><li>0000001&nbsp;&nbsp;</li><li>0000000&nbsp;040&nbsp;141&nbsp;012&nbsp;&nbsp;</li><li>0000003&nbsp;&nbsp;</li><li>0000000&nbsp;012&nbsp;&nbsp;</li><li>0000001&nbsp;&nbsp;</li><li>0000000&nbsp;142&nbsp;012&nbsp;&nbsp;</li><li>0000002&nbsp;&nbsp;</li><li>0000000&nbsp;012&nbsp;&nbsp;</li><li>0000001&nbsp;&nbsp;</li><li>0000000&nbsp;143&nbsp;012&nbsp;&nbsp;</li><li>0000002&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ for x in "" " a" "b" "" "c" ;do echo $x |od -b ;done 0000000 012 0000001 0000000 040 141 012 0000003 0000000 012 0000001 0000000 142 012 0000002 0000000 012 0000001 0000000 143 012 0000002</pre><p><span style="font-size: 14px;"><strong>三、IFS的其他实例</strong></span></p><p><span style="font-size: 14px;"><strong>Example 1:</strong></span></p><p>&nbsp;</p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;IFS=:&nbsp;&nbsp;</span></li><li>$&nbsp;var=ab::cd&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$var&nbsp;&nbsp;</li><li>ab&nbsp;&nbsp;cd&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$var"&nbsp;&nbsp;</li><li>ab::cd&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ IFS=: $ var=ab::cd $ echo $var ab  cd $ echo "$var" ab::cd</pre><span style="font-size: 14px;">解释下：x 的值是 "ab::cd"，当进行到 echo $x 时，因为$符，所以会进行变量替换。Shell 根据 IFS 的值将 x 分解为 ab "" cd，然后echo，插入空隔，ab[space]""[space]cd，忽略""，输出 &nbsp;<u>ab &nbsp;cd</u>&nbsp;。<br /></span> <p><span style="font-size: 14px;"><strong>Example 2 :</strong><br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;read&nbsp;a&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xy&nbsp;&nbsp;z&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$a&nbsp;&nbsp;</li><li>xy&nbsp;&nbsp;z&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ read a        xy  z $ echo $a xy  z</pre><p><span style="font-size: 14px;">解释：这是&nbsp;<a href="http://bbs.chinaunix.net/thread-207178-1-1.html">http://bbs.chinaunix.net/thread-207178-1-1.html</a>&nbsp;上的一个例子。此时IFS是默认值，本希望把所有的输入(包括空格)都放入变量a中，但是输出的a却把前面的空格给忽略了！！原因是：默认的 IFS 会按 space tab newline 来分割。这里需要注意的一点是，read  命令的实现过程，即在读入时已经替换了。解决办法是在开头加上一句 IFS=";" ，这里必须加上双引号，因为分号有特殊含义。</span></p><p><span style="font-size: 14px;"><strong>Example 3 :</strong><br /></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>$&nbsp;tmp="&nbsp;&nbsp;&nbsp;xy&nbsp;z"&nbsp;&nbsp;</span></li><li>$&nbsp;a=$tmp&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;$a&nbsp;&nbsp;</li><li>$&nbsp;echo&nbsp;"$a"&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">$ tmp="   xy z" $ a=$tmp $ echo $a $ echo "$a"</pre><p><span style="font-size: 14px; white-space: pre;">解释：<span style="color: #000099;">什么时候会根据 IFS 来"处理"呢？</span>我觉得是，对于不加引号的变量，使用时都会参考IFS，但是要注意其原始值！</span></p><p><span style="font-size: 14px;"><strong>Example 4 ：</strong></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>#!/bin/bash&nbsp;&nbsp;</span></li><li>IFS_old=$IFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#将原IFS值保存，以便用完后恢复&nbsp;&nbsp;</li><li>IFS=$&#8217;\n&#8217;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更改IFS值为$&#8217;\n&#8217;&nbsp;，注意，以回车做为分隔符，IFS必须为：$&#8217;\n&#8217;&nbsp;&nbsp;</li><li>for&nbsp;i&nbsp;in&nbsp;$((cat&nbsp;pwd.txt))&nbsp;#pwd.txt&nbsp;来自这个命令：cat&nbsp;/etc/passwd&nbsp;&gt;pwd.txt&nbsp;&nbsp;</li><li>do&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$i&nbsp;&nbsp;</li><li>done&nbsp;&nbsp;</li><li>IFS=$IFS_old&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#恢复原IFS值&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">#!/bin/bash IFS_old=$IFS      #将原IFS值保存，以便用完后恢复 IFS=$&#8217;\n&#8217;        #更改IFS值为$&#8217;\n&#8217; ，注意，以回车做为分隔符，IFS必须为：$&#8217;\n&#8217; for i in $((cat pwd.txt)) #pwd.txt 来自这个命令：cat /etc/passwd &gt;pwd.txt do     echo $i done IFS=$IFS_old      #恢复原IFS值</pre><span style="font-size: 14px;">另外一个例子，把IP地址逆转输出：<br /></span> <p><span style="font-size: 14px;"><strong>Example 5 :</strong></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>#!/bin/bash&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;</li><li>IP=220.112.253.111&nbsp;&nbsp;</li><li>IFS="."&nbsp;&nbsp;</li><li>TMPIP=$(echo&nbsp;$IP)&nbsp;&nbsp;</li><li>IFS="&nbsp;"&nbsp;#&nbsp;space&nbsp;&nbsp;</li><li>echo&nbsp;$TMPIP&nbsp;&nbsp;</li><li>for&nbsp;x&nbsp;in&nbsp;$TMPIP&nbsp;;do&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;Xip="${x}.$Xip"&nbsp;&nbsp;</li><li>done&nbsp;&nbsp;</li><li>echo&nbsp;${Xip%.}&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">#!/bin/bash  IP=220.112.253.111 IFS="." TMPIP=$(echo $IP) IFS=" " # space echo $TMPIP for x in $TMPIP ;do      Xip="${x}.$Xip" done echo ${Xip%.}</pre><p><span style="color: #ff0000;"><span style="font-size: 14px;"><strong>Complex_Example 1: &nbsp;</strong><a href="http://bbs.chinaunix.net/forum.php?mod=viewthread&amp;tid=3660898&amp;page=1#pid21798049">http://bbs.chinaunix.net/forum.php?mod=viewthread&amp;tid=3660898&amp;page=1#pid21798049</a></span></span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>function&nbsp;output_args_ifs(){&nbsp;&nbsp;</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"=$*"&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"="$*&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;m&nbsp;in&nbsp;$*&nbsp;;do&nbsp;&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"[$m]"&nbsp;&nbsp;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;&nbsp;</li><li>}&nbsp;&nbsp;</li><li>&nbsp;&nbsp;</li><li>IFS=':'&nbsp;&nbsp;</li><li>var='::a:b::c:::'&nbsp;&nbsp;</li><li>output_args_ifs&nbsp;$var&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">function output_args_ifs(){     echo "=$*"     echo "="$*     for m in $* ;do          echo "[$m]"     done }  IFS=':' var='::a:b::c:::' output_args_ifs $var</pre><p>&nbsp;</p><p><span style="font-size: 14px;">输出为：</span></p><div bg_plain"=""><div><div><strong>[plain]</strong> <a title="view plain" href="http://blog.csdn.net/whuslei/article/details/7187639#">view plain</a><span data-mod="popu_168"> <a title="copy" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">copy</a></span><span data-mod="popu_169"> <a title="print" href="http://blog.csdn.net/whuslei/article/details/7187639#" target="_blank">print</a></span><a title="?" href="http://blog.csdn.net/whuslei/article/details/7187639#">?</a></div></div><ol><li><span>=::a:b::c::&nbsp;&nbsp;#&nbsp;少了最后一个冒号！看前面就知道为什么了&nbsp;&nbsp;</span></li><li>=&nbsp;&nbsp;a&nbsp;b&nbsp;&nbsp;c&nbsp;&nbsp;&nbsp;</li><li>[]&nbsp;&nbsp;</li><li>[]&nbsp;&nbsp;</li><li>[a]&nbsp;&nbsp;</li><li>[b]&nbsp;&nbsp;</li><li>[]&nbsp;&nbsp;</li><li>[c]&nbsp;&nbsp;</li><li>[]&nbsp;&nbsp;</li></ol></div><pre style="display: none;" name="code">=::a:b::c::  # 少了最后一个冒号！看前面就知道为什么了 =  a b  c  [] [] [a] [b] [] [c] []</pre><p><span style="font-size: 14px;">由于 "output_args_ifs $var" 中 $var 没有加引号，所以根据IFS替换！根据IFS划分出变量： "" &nbsp;"" &nbsp;"a" &nbsp;"b" &nbsp;"" &nbsp;"c" "" ""(可以通过输出 $# 来测试参数的个数！)，重组的结果为</span></p><p><span style="font-size: 14px;">&nbsp;"$@" 的值是 &nbsp;<span style="font-size: 14px;">"" [space] "" [space] &nbsp;"a" [space] &nbsp;"b" &nbsp;[space] "" [space] &nbsp;"c" [space] "" [space] ""，可以通过，echo==&gt;" &nbsp;a b &nbsp;c &nbsp; "<br /> "$*" 的值是 &nbsp; <span style="font-size: 14px;">"" [IFS] "" [<span style="font-size: 14px;">IFS</span>] &nbsp;"a" [<span style="font-size: 14px;">IFS</span>] &nbsp;"b" &nbsp;[<span style="font-size: 14px;">IFS</span>] "" [<span style="font-size: 14px;">IFS</span>] &nbsp;"c" [<span style="font-size: 14px;">IFS</span>] "" [IFS] ""，忽略""</span><span style="font-size: 14px;">，echo=&gt;"::a:b::c::"</span></span></span></p><p><span style="font-size: 14px;">注意， $* 和 $@ 的值都是&nbsp;<span style="font-size: 14px;">&nbsp;"" &nbsp; "" &nbsp; "a" &nbsp; "b" &nbsp; "" &nbsp; "c" &nbsp;"" &nbsp;"" 。可以说是一个列表&#8230;&#8230;因为他们本来就是由 $1 $2 $3&#8230;&#8230;组成的。</span></span></p><p><span style="font-size: 14px;">所以，《Linux程序设计》里推荐使用 $@，而不是$*</span></p><p><span style="font-size: 14px;"><span style="color: #000099;"><strong>总结：</strong>IFS 其实还是很麻烦的，稍有不慎就会产生很奇怪的结果，因此使用的时候要注意！我也走了不少弯路，只希望能给后来者一些帮助。本文若有问题，欢迎指正！！谢谢！</span></span></p><p><span style="font-size: 14px;">如有转载，请注明<a href="http://blog.csdn.net/whuslei/article/details/blog.csdn.net/whuslei">blog.csdn.net/whuslei</a><br />参考：<br /><a href="http://blog.chinaunix.net/space.php?uid=20543672&amp;do=blog&amp;id=94358">http://blog.chinaunix.net/space.php?uid=20543672&amp;do=blog&amp;id=94358</a><br /><a href="http://smilejay.com/2011/12/bash_ifs/#comment-51">http://smilejay.com/2011/12/bash_ifs/#comment-51</a><br /></span></p></div><img src ="http://www.blogjava.net/xzclog/aggbug/429934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-04-01 15:00 <a href="http://www.blogjava.net/xzclog/archive/2016/04/01/429934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux diff与comm命令比较文件(找出新增内容)</title><link>http://www.blogjava.net/xzclog/archive/2016/03/24/429791.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 24 Mar 2016 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/03/24/429791.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/429791.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/03/24/429791.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/429791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/429791.html</trackback:ping><description><![CDATA[<div><p>在项目中遇到一个奇怪的bug，是由一行简单代码引起的。<br />代码作用：比较两个UNIX文本文件，找出并打印文本2比文本1新增加的内容。<br />代码调用了diff命令，例如：<br />&nbsp;<br />&nbsp;<br /></p><div><div><span style="cursor: pointer;"><u>复制代码</u></span></div>代码如下:</div><div id="phpcode9"><br /> # temp1.txt文件内容<br />$&gt; cat temp1.txt<br />20110224<br />20110225<br />20110228<br />20110301<br />20110302<br /># temp2.txt文件内容<br />$&gt; cat temp2.txt<br />20110228<br />20110301<br />20110302<br />20110303<br />20110304</div><p>&nbsp;</p><p># diff命令输出结果</p><p><br /></p><div><div><span style="cursor: pointer;"><u>复制代码</u></span></div>代码如下:</div><div id="phpcode10"><br />$&gt; diff temp1.txt temp2.txt<br />1,2d0<br />&lt; 20110224<br />&lt; 20110225<br />5a4,5<br />&gt; 20110303<br />&gt; 20110304<br /># 只输出temp2.txt文件独有的内容<br />$&gt; diff temp1.txt temp2.txt | grep "&gt; " | sed 's/&gt; //g'<br />20110303<br />20110304</div><p>&nbsp;</p><p>说明：输出结果去掉了两个文件的共同内容，只输出了temp2.txt的新增部分，和预想的结果一样。<br />&nbsp;<br />但是，随着temp1.txt文件内容的增加，diff命令出现了不同预期的结果：</p><p><br /></p><div><div><span style="cursor: pointer;"><u>复制代码</u></span></div>代码如下:</div><div id="phpcode11"><br />$&gt; cat temp1.txt<br />20101216<br />20101217<br />20101220<br />20101221<br />20101223<br />20101224<br />20101227<br />20101228<br />20101229<br />20101230<br />20101231<br />20110103<br />20110104<br />20110105<br />20110106<br />20110107<br />20110110<br />20110111<br />20110112<br />20110113<br />20110114<br />20110117<br />20110118<br />20110119<br />20110120<br />20110121<br />20110124<br />20110125<br />20110126<br />20110127<br />20110128<br />20110131<br />20110201<br />20110202<br />20110203<br />20110204<br />20110207<br />20110208<br />20110209<br />20110210<br />20110211<br />20110214<br />20110215<br />20110216<br />20110217<br />20110218<br />20110221<br />20110222<br />20110223<br />20110224<br />20110225<br />20110228<br />20110301<br />20110302<br />20110303<br />$&gt; cat temp2.txt<br />20110228<br />20110301<br />20110302<br />20110303<br />20110304<br />20110307<br />20110308<br />20110309<br />20110310<br />20110311<br />20110314<br />$&gt; diff temp1.txt temp2.txt<br />1,55c1,11<br />&lt; 20101216<br />&lt; 20101217<br />&lt; 20101220<br />&lt; 20101221<br />&lt; 20101223<br />&lt; 20101224<br />&lt; 20101227<br />&lt; 20101228<br />&lt; 20101229<br />&lt; 20101230<br />&lt; 20101231<br />&lt; 20110103<br />&lt; 20110104<br />&lt; 20110105<br />&lt; 20110106<br />&lt; 20110107<br />&lt; 20110110<br />&lt; 20110111<br />&lt; 20110112<br />&lt; 20110113<br />&lt; 20110114<br />&lt; 20110117<br />&lt; 20110118<br />&lt; 20110119<br />&lt; 20110120<br />&lt; 20110121<br />&lt; 20110124<br />&lt; 20110125<br />&lt; 20110126<br />&lt; 20110127<br />&lt; 20110128<br />&lt; 20110131<br />&lt; 20110201<br />&lt; 20110202<br />&lt; 20110203<br />&lt; 20110204<br />&lt; 20110207<br />&lt; 20110208<br />&lt; 20110209<br />&lt; 20110210<br />&lt; 20110211<br />&lt; 20110214<br />&lt; 20110215<br />&lt; 20110216<br />&lt; 20110217<br />&lt; 20110218<br />&lt; 20110221<br />&lt; 20110222<br />&lt; 20110223<br />&lt; 20110224<br />&lt; 20110225<br />&lt; 20110228<br />&lt; 20110301<br />&lt; 20110302<br />&lt; 20110303<br />---<br />&gt; 20110228<br />&gt; 20110301<br />&gt; 20110302<br />&gt; 20110303<br />&gt; 20110304<br />&gt; 20110307<br />&gt; 20110308<br />&gt; 20110309<br />&gt; 20110310<br />&gt; 20110311<br />&gt; 20110314<br />$&gt; diff temp1.txt temp2.txt | grep "&gt; " | sed 's/&gt; //g'<br />20110228<br />20110301<br />20110302<br />20110303<br />20110304<br />20110307<br />20110308<br />20110309<br />20110310<br />20110311<br />20110314</div><p>&nbsp;</p><p>可以看到，diff命令不但输出了temp2.txt文件的新增部分（20110304-20110314），也同时输出了两个文件的共同内容（20110228-20110303），从而导致了与预期不一致的结果。<br />查看diff命令的man手册发现，diff的作用是比较两个文件的内容，并输出两个文件之间的差异，产生一个能够将两个文件互相转换的列表，但这个列表并不能100%保证是最小集。<br />于是，以上例子中，可以看到diff给出了temp1.txt和temp2.txt文件的比较差异结果，但其中包含了两个文件的共同部分，因此与预期不一样。<br />&nbsp;<br />解决方法：<br />用comm命令代替diff，例如：</p><p><br /></p><div><div><span style="cursor: pointer;"><u>复制代码</u></span></div>代码如下:</div><div id="phpcode12"><br />$&gt; comm -13 temp1.txt temp2.txt<br />20110304<br />20110307<br />20110308<br />20110309<br />20110310<br />20110311<br />20110314</div><p>&nbsp;</p><p>comm命令用来比较两个文件，具体用法：<br />comm [-123] file1 file2<br />-1 过滤file1独有的内容<br />-2 过滤file2独有的内容<br />-3 过滤file1和file2重复的内容<br />&nbsp;<br />备注：<br />diff的输出格式，主要有以下几种：<br />n1 a n3,n4<br />n1,n2 d n3<br />n1,n2 c n3,n4<br />例如"1,2d0" "5a4,5" "1,55c1,11"等。<br />其中n1和n2指第一个文件的行数，n3和n4指第二个文件的行数。"a"代表add增加，"d"代表delete删除，"c"代表change整块变动。<br />有了diff的输出结果，可以使用patch命令将一个文件恢复成另一个，例如：</p><p><br /></p><div><div><span style="cursor: pointer;"><u>复制代码</u></span></div>代码如下:</div><div id="phpcode13"><br />$&gt; cat temp1.txt<br />20110224<br />20110225<br />20110228<br />20110301<br />20110302<br />$&gt; cat temp2.txt<br />20110228<br />20110301<br />20110302<br />20110303<br />20110304<br />$&gt; diff temp1.txt temp2.txt &gt; temp.diff<br />$&gt; cat temp.diff<br />1,2d0<br />&lt; 20110224<br />&lt; 20110225<br />5a4,5<br />&gt; 20110303<br />&gt; 20110304<br /># 使用temp.diff和temp1.txt恢复temp2文件<br />$&gt; patch -i temp.diff -o temp2_restore.txt temp1.txt<br />Looks like a normal diff.<br />done<br /># 完成后temp2_restore和原temp2文件内容一致<br />$&gt; cat temp2_restore.txt<br />20110228<br />20110301<br />20110302<br />20110303<br />20110304</div></div><img src ="http://www.blogjava.net/xzclog/aggbug/429791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-03-24 12:09 <a href="http://www.blogjava.net/xzclog/archive/2016/03/24/429791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell 判断ftp是否成功连接</title><link>http://www.blogjava.net/xzclog/archive/2016/03/24/429790.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 24 Mar 2016 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/03/24/429790.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/429790.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/03/24/429790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/429790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/429790.html</trackback:ping><description><![CDATA[<div><div><div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">status</span><span style="word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">=<span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">`</span></span>ftp  -v -n $ip&lt;&lt;END_SCRIPT</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">user  $name $code</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">binary</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">cd  $remote_dir</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">lcd  $local_dir</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">prompt</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">mget  *.txt</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">#mdelete  *.txt</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">close</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">bye</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">END_SCRIPT<span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">`</span></div></div> <div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"><br style="word-break: break-all" /></span></div> <div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "> <div style="word-break: break-all; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">echo  $status|grep "226 Transfer complete"</div> <div style="word-break: break-all; font-weight: bold; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">if  [ $? -eq 0 ]</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">then</span></div></div> <div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">&nbsp;  &nbsp; &nbsp;&nbsp;echo "Connect Succeed!!!"</span></div> <div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">&nbsp;  &nbsp; &nbsp; exit 0<br style="word-break: break-all" /></span></div> <div style="font-size: 14px; font-family: 'Hiragino Sans GB', 'Helvetica Neue', 微软雅黑, Tohoma; word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 21px; "><span style="word-break: break-all; font-weight: bold; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">else</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp;&nbsp;echo $status|grep "530 Login incorrect"</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp;&nbsp;if [ $? -eq 0 ]</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp;&nbsp;then</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;echo "FTP Connect Error!!!"</div></div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit 1</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp;&nbsp;else</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo "No data transferred!!!"</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit 0</div></div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">&nbsp;  &nbsp; &nbsp;&nbsp;fi</div> <div style="word-break: break-all; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">fi</div></div></span></div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/429790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-03-24 12:08 <a href="http://www.blogjava.net/xzclog/archive/2016/03/24/429790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下一次性删除大量文件方法</title><link>http://www.blogjava.net/xzclog/archive/2016/02/14/429317.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Sun, 14 Feb 2016 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2016/02/14/429317.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/429317.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2016/02/14/429317.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/429317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/429317.html</trackback:ping><description><![CDATA[<div>[转载]http://www.blogjava.net/hongqiang/archive/2012/07/12/382939.html  <div></div> <div> <div>假如你要在linux下删除大量文件，比如100万、1000万，像/var/spool/clientmqueue/的mail邮件，&nbsp;<wbr></div> <div></div> <div>像/usr/local/nginx/proxy_temp的nginx缓存等，那么rm -rf *可能就不好使了。&nbsp;<wbr></div> <div>rsync提供了一些跟删除相关的参数&nbsp;<wbr></div> <div>rsync --help | grep delete&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--del &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>  &nbsp;<wbr> &nbsp;<wbr> an alias for --delete-during&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--delete &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>  &nbsp;<wbr> &nbsp;<wbr>delete files that don't exist on the sending side&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--delete-before &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> receiver  deletes before transfer (default)&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--delete-during &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> receiver  deletes during transfer, not before&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--delete-after &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>  &nbsp;<wbr>receiver deletes after transfer, not before&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--delete-excluded &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> also delete  excluded files on the receiving side&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--ignore-errors &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> delete even  if there are I/O errors&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>--max-delete=NUM &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>don't  delete more than NUM files&nbsp;<wbr></div> <div></div> <div>其中--delete-before &nbsp;<wbr> &nbsp;<wbr>接收者在传输之前进行删除操作&nbsp;<wbr></div> <div>可以用来清空目录或文件，如下：&nbsp;<wbr></div> <div>1、先建立一个空目录&nbsp;<wbr></div> <div>mkdir /data/blank&nbsp;<wbr></div> <div>2、用rsync删除目标目录&nbsp;<wbr></div> <div>rsync --delete-before -d /data/blank/ /var/spool/clientmqueue/&nbsp;<wbr></div> <div>这样目标目录很快就被清空了&nbsp;<wbr></div> <div></div> <div>又假如你有一些特别大的文件要删除，比如nohup.out这样的实时更新的文件，动辄都是几十个G上百G的，也可&nbsp;<wbr></div> <div></div> <div>以用rsync来清空大文件，而且效率比较高&nbsp;<wbr></div> <div>1、创建空文件&nbsp;<wbr></div> <div>touch /data/blank.txt&nbsp;<wbr></div> <div>2、用rsync清空文件&nbsp;<wbr></div> <div>rsync -a --delete-before --progress --stats /root/blank.txt  /root/nohup.out&nbsp;<wbr></div> <div>building file list ...&nbsp;<wbr></div> <div>1 file to consider&nbsp;<wbr></div> <div>blank.txt&nbsp;<wbr></div> <div>&nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr> &nbsp;<wbr>0 100% &nbsp;<wbr> &nbsp;<wbr>0.00kB/s  &nbsp;<wbr> &nbsp;<wbr>0:00:00 (xfer#1, to-check=0/1)&nbsp;<wbr></div> <div></div> <div>Number of files: 1&nbsp;<wbr></div> <div>Number of files transferred: 1&nbsp;<wbr></div> <div>Total file size: 0 bytes&nbsp;<wbr></div> <div>Total transferred file size: 0 bytes&nbsp;<wbr></div> <div>Literal data: 0 bytes&nbsp;<wbr></div> <div>Matched data: 0 bytes&nbsp;<wbr></div> <div>File list size: 27&nbsp;<wbr></div> <div>File list generation time: 0.006 seconds&nbsp;<wbr></div> <div>File list transfer time: 0.000 seconds&nbsp;<wbr></div> <div>Total bytes sent: 73&nbsp;<wbr></div> <div>Total bytes received: 31&nbsp;<wbr></div> <div></div> <div>sent 73 bytes &nbsp;<wbr>received 31 bytes &nbsp;<wbr>208.00 bytes/sec&nbsp;<wbr></div> <div>total size is 0 &nbsp;<wbr>speedup is 0.00&nbsp;<wbr></div> <div></div> <div></div> <div>tips：&nbsp;<wbr></div> <div>当SRC和DEST文件性质不一致时将会报错&nbsp;<wbr></div> <div>当SRC和DEST性质都为文件【f】时，意思是清空文件内容而不是删除文件&nbsp;<wbr></div> <div>当SRC和DEST性质都为目录【d】时，意思是删除该目录下的所有文件，使其变为空目录&nbsp;<wbr></div> <div>最重要的是，它的处理速度相当快，处理几个G的文件也就是秒级的事&nbsp;<wbr></div> <div>最核心的内容是：rsync实际上用的就是替换原理&nbsp;<wbr></div></div> <div></div> <div>另外一种方式：利用xagr与ls结合</div> <div> <div></div> <div>ls | xargs -n 20 rm -fr</div> <div>ls当然是输出所有的文件名(用空格分割)</div> <div>xargs就是将ls的输出，每20个为一组(以空格为分隔符)，作为rm -rf的参数</div> <div>也就是说将所有文件名20个为一组，由rm -rf删除，这样就不会超过命令行的长度了</div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/429317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2016-02-14 11:05 <a href="http://www.blogjava.net/xzclog/archive/2016/02/14/429317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>15个实用的Linux find命令示例</title><link>http://www.blogjava.net/xzclog/archive/2015/12/23/428787.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 23 Dec 2015 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/12/23/428787.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428787.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/12/23/428787.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428787.html</trackback:ping><description><![CDATA[<div><div><p>除了在一个目录结构下查找文件这种基本的操作，你还可以用find命令实现一些实用的操作，使你的命令行之旅更加简易。</p><p>本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。</p><p>首先，在你的home目录下面创建下面的空文件，来测试下面的find命令示例。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_224023"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div><div number15="" index14=""  alt2"="">15</div><div number16="" index15=""  alt1"="">16</div><div number17="" index16=""  alt2"="">17</div><div number18="" index17=""  alt1"="">18</div><div number19="" index18=""  alt2"="">19</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># vim create_sample_files.sh</code></div><div number2="" index1=""  alt1"=""><code functions"="">touch</code> <code plain"="">MybashProgram.sh</code></div><div number3="" index2=""  alt2"=""><code functions"="">touch</code> <code plain"="">mycprogram.c</code></div><div number4="" index3=""  alt1"=""><code functions"="">touch</code> <code plain"="">MyCProgram.c</code></div><div number5="" index4=""  alt2"=""><code functions"="">touch</code> <code plain"="">Program.c</code></div><div number6="" index5=""  alt1"=""><code functions"="">mkdir</code> <code plain"="">backup</code></div><div number7="" index6=""  alt2"=""><code functions"="">cd</code> <code plain"="">backup</code></div><div number8="" index7=""  alt1"=""><code functions"="">touch</code> <code plain"="">MybashProgram.sh</code></div><div number9="" index8=""  alt2"=""><code functions"="">touch</code> <code plain"="">mycprogram.c</code></div><div number10="" index9=""  alt1"=""><code functions"="">touch</code> <code plain"="">MyCProgram.c</code></div><div number11="" index10=""  alt2"=""><code functions"="">touch</code> <code plain"="">Program.c</code></div><div number12="" index11=""  alt1"=""><code comments"=""># chmod +x create_sample_files.sh</code></div><div number13="" index12=""  alt2"=""><code comments"=""># ./create_sample_files.sh</code></div><div number14="" index13=""  alt1"=""><code comments"=""># ls -R</code></div><div number15="" index14=""  alt2"=""><code plain"="">.:</code></div><div number16="" index15=""  alt1"=""><code plain"="">backup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MybashProgram.sh&nbsp; MyCProgram.c</code></div><div number17="" index16=""  alt2"=""><code plain"="">create_sample_files.sh&nbsp; mycprogram.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Program.c</code></div><div number18="" index17=""  alt1"=""><code plain"="">.</code><code plain"="">/backup</code><code plain"="">:</code></div><div number19="" index18=""  alt2"=""><code plain"="">MybashProgram.sh&nbsp; mycprogram.c&nbsp; MyCProgram.c&nbsp; Program.c</code></div></div></td></tr></tbody></table></div></div><h3>1. 用文件名查找文件</h3><p>这是find命令的一个基本用法。下面的例子展示了用MyCProgram.c作为查找名在当前目录及其子目录中查找文件的方法。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_233960"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find -name "MyCProgram.c"</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/backup/MyCProgram</code><code plain"="">.c</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/MyCProgram</code><code plain"="">.c</code></div></div></td></tr></tbody></table></div></div><h3>2.用文件名查找文件，忽略大小写</h3><p>这是find命令的一个基本用法。下面的例子展示了用MyCProgram.c作为查找名在当前目录及其子目录中查找文件的方法，忽略了大小写。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_211072"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find -iname "MyCProgram.c"</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/mycprogram</code><code plain"="">.c</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/backup/mycprogram</code><code plain"="">.c</code></div><div number4="" index3=""  alt1"=""><code plain"="">.</code><code plain"="">/backup/MyCProgram</code><code plain"="">.c</code></div><div number5="" index4=""  alt2"=""><code plain"="">.</code><code plain"="">/MyCProgram</code><code plain"="">.c</code></div></div></td></tr></tbody></table></div></div><p>&nbsp;</p><h3>3. 使用mindepth和maxdepth限定搜索指定目录的深度</h3><p>在root目录及其子目录下查找passwd文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_27801"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find / -name passwd</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/usr/share/doc/nss_ldap-253/pam</code><code plain"="">.d</code><code plain"="">/passwd</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/usr/bin/passwd</code></div><div number4="" index3=""  alt1"=""><code plain"="">.</code><code plain"="">/etc/pam</code><code plain"="">.d</code><code plain"="">/passwd</code></div><div number5="" index4=""  alt2"=""><code plain"="">.</code><code plain"="">/etc/passwd</code></div></div></td></tr></tbody></table></div></div><p>在root目录及其1层深的子目录中查找passwd. (例如root &#8212; level 1, and one sub-directory &#8212; level 2)</p><div><div notranslate="" shell=""  ie"="" id="highlighter_196308"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find -maxdepth 2 -name passwd</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/etc/passwd</code></div></div></td></tr></tbody></table></div></div><p>在root目录下及其最大两层深度的子目录中查找passwd文件. (例如 root &#8212; level 1, and two sub-directories &#8212; level 2 and 3 )</p><div><div notranslate="" shell=""  ie"="" id="highlighter_769789"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find / -maxdepth 3 -name passwd</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/usr/bin/passwd</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/etc/pam</code><code plain"="">.d</code><code plain"="">/passwd</code></div><div number4="" index3=""  alt1"=""><code plain"="">.</code><code plain"="">/etc/passwd</code></div></div></td></tr></tbody></table></div></div><p>在第二层子目录和第四层子目录之间查找passwd文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_804570"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div></td><td><div><div number1="" index0=""  alt2"=""><code comments"=""># find -mindepth 3 -maxdepth 5 -name passwd</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code><code plain"="">/usr/bin/passwd</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/etc/pam</code><code plain"="">.d</code><code plain"="">/passwd</code></div></div></td></tr></tbody></table></div></div><h3>4. 在find命令查找到的文件上执行命令</h3><p>下面的例子展示了find命令来计算所有不区分大小写的文件名为&#8220;MyCProgram.c&#8221;的文件的MD5验证和。{}将会被当前文件名取代。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_240995"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">-iname </code><code string"="">"MyCProgram.c"</code> <code plain"="">-</code><code functions"="">exec</code> <code plain"="">md5sum {} \;</code></div><div number2="" index1=""  alt1"=""><code plain"="">d41d8cd98f00b204e9800998ecf8427e&nbsp; .</code><code plain"="">/mycprogram</code><code plain"="">.c</code></div><div number3="" index2=""  alt2"=""><code plain"="">d41d8cd98f00b204e9800998ecf8427e&nbsp; .</code><code plain"="">/backup/mycprogram</code><code plain"="">.c</code></div><div number4="" index3=""  alt1"=""><code plain"="">d41d8cd98f00b204e9800998ecf8427e&nbsp; .</code><code plain"="">/backup/MyCProgram</code><code plain"="">.c</code></div><div number5="" index4=""  alt2"=""><code plain"="">d41d8cd98f00b204e9800998ecf8427e&nbsp; .</code><code plain"="">/MyCProgram</code><code plain"="">.c</code></div></div></td></tr></tbody></table></div></div><h3>5. 相反匹配</h3><p>显示所有的名字不是MyCProgram.c的文件或者目录。由于maxdepth是1，所以只会显示当前目录下的文件和目录。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_183774"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">-maxdepth 1 -not -iname </code><code string"="">"MyCProgram.c"</code></div><div number2="" index1=""  alt1"=""><code plain"="">.</code></div><div number3="" index2=""  alt2"=""><code plain"="">.</code><code plain"="">/MybashProgram</code><code plain"="">.sh</code></div><div number4="" index3=""  alt1"=""><code plain"="">.</code><code plain"="">/create_sample_files</code><code plain"="">.sh</code></div><div number5="" index4=""  alt2"=""><code plain"="">.</code><code plain"="">/backup</code></div><div number6="" index5=""  alt1"=""><code plain"="">.</code><code plain"="">/Program</code><code plain"="">.c</code></div></div></td></tr></tbody></table></div></div><h3>6. 使用inode编号查找文件</h3><p>任何一个文件都有一个独一无二的inode编号，借此我们可以区分文件。创建两个名字相似的文件，例如一个有空格结尾，一个没有。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_639243"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">touch</code> <code string"="">"test-file-name"</code></div><div number2="" index1=""  alt1"=""><code comments"=""># touch "test-file-name "</code></div><div number3="" index2=""  alt2"=""><code plain"="">[Note: There is a space at the end]</code></div><div number4="" index3=""  alt1"=""><code comments"=""># ls -1 test*</code></div><div number5="" index4=""  alt2"=""><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div><div number6="" index5=""  alt1"=""><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div></div></td></tr></tbody></table></div></div><p>从ls的输出不能区分哪个文件有空格结尾。使用选项-i，可以看到文件的inode编号，借此可以区分这两个文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_470565"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">ls</code> <code plain"="">-i1 </code><code functions"="">test</code><code plain"="">*</code></div><div number2="" index1=""  alt1"=""><code plain"="">16187429 </code><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div><div number3="" index2=""  alt2"=""><code plain"="">16187430 </code><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div></div></td></tr></tbody></table></div></div><p>你可以如下面所示在find命令中指定inode编号。在此，find命令用inode编号重命名了一个文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_888828"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">-inum 16187430 -</code><code functions"="">exec</code> <code functions"="">mv</code> <code plain"="">{} new-</code><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name \;</code></div><div number2="" index1=""  alt1"="">&nbsp;</div><div number3="" index2=""  alt2"=""><code spaces"="">&nbsp;</code><code comments"=""># ls -i1 *test*</code></div><div number4="" index3=""  alt1"=""><code plain"="">16187430 new-</code><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div><div number5="" index4=""  alt2"=""><code plain"="">16187429 </code><code functions"="">test</code><code plain"="">-</code><code functions"="">file</code><code plain"="">-name</code></div></div></td></tr></tbody></table></div></div><p>你可以在你想对那些像上面一样的糟糕命名的文件做某些操作时使用这一技术。例如，名为file?.txt的文件名字中有一个特殊字符。若你想执行&#8220;rm file?.txt&#8221;，下面所示的所有三个文件都会被删除。所以，采用下面的步骤来删除&#8221;file?.txt&#8221;文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_722020"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">ls</code></div><div number2="" index1=""  alt1"=""><code plain"="">file1.txt&nbsp; file2.txt&nbsp; </code><code functions"="">file</code><code plain"="">?.txt</code></div></div></td></tr></tbody></table></div></div><p>找到每一个文件的inode编号。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_210937"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">ls</code> <code plain"="">-i1</code></div><div number2="" index1=""  alt1"=""><code plain"="">804178 file1.txt</code></div><div number3="" index2=""  alt2"=""><code plain"="">804179 file2.txt</code></div><div number4="" index3=""  alt1"=""><code plain"="">804180 </code><code functions"="">file</code><code plain"="">?.txt</code></div></div></td></tr></tbody></table></div></div><p>如下所示：?使用inode编号来删除那些具有特殊符号的文件名。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_585581"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">-inum 804180 -</code><code functions"="">exec</code> <code functions"="">rm</code> <code plain"="">{} \;</code></div><div number2="" index1=""  alt1"=""><code comments"=""># ls</code></div><div number3="" index2=""  alt2"=""><code plain"="">file1.txt&nbsp; file2.txt</code></div><div number4="" index3=""  alt1"=""><code plain"="">[Note: The </code><code functions"="">file</code> <code plain"="">with name </code><code string"="">"file?.txt"</code> <code plain"="">is now removed]</code></div></div></td></tr></tbody></table></div></div><h3>7. 根据文件权限查找文件</h3><p>下面的操作时合理的：</p><ul><li>找到具有指定权限的文件</li><li>忽略其他权限位，检查是否和指定权限匹配</li><li>根据给定的八进制/符号表达的权限搜索</li></ul><p>此例中，假设目录包含以下文件。注意这些文件的权限不同。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_788639"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">ls</code> <code plain"="">-l</code></div><div number2="" index1=""  alt1"=""><code plain"="">total 0</code></div><div number3="" index2=""  alt2"=""><code plain"="">-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all</code></div><div number4="" index3=""  alt1"=""><code plain"="">-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read</code></div><div number5="" index4=""  alt2"=""><code plain"="">---------- 1 root root 0 2009-02-19 20:31 no_for_all</code></div><div number6="" index5=""  alt1"=""><code plain"="">-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file</code></div><div number7="" index6=""  alt2"=""><code plain"="">-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read</code></div><div number8="" index7=""  alt1"=""><code plain"="">----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read</code></div></div></td></tr></tbody></table></div></div><p>找到具有组读权限的文件。使用下面的命令来找到当前目录下对同组用户具有读权限的文件，忽略该文件的其他权限。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_453434"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -perm -g=r -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-l {} \;</code></div><div number2="" index1=""  alt1"=""><code plain"="">-rw-r--r-- 1 root root 0 2009-02-19 20:30 .</code><code plain"="">/everybody_read</code></div><div number3="" index2=""  alt2"=""><code plain"="">-rwxrwxrwx 1 root root 0 2009-02-19 20:31 .</code><code plain"="">/all_for_all</code></div><div number4="" index3=""  alt1"=""><code plain"="">----r----- 1 root root 0 2009-02-19 20:27 .</code><code plain"="">/others_can_only_read</code></div><div number5="" index4=""  alt2"=""><code plain"="">-rw-r----- 1 root root 0 2009-02-19 20:27 .</code><code plain"="">/others_can_also_read</code></div></div></td></tr></tbody></table></div></div><p>找到对组用户具有只读权限的文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_699849"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -perm g=r -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-l {} \;</code></div><div number2="" index1=""  alt1"=""><code plain"="">----r----- 1 root root 0 2009-02-19 20:27 .</code><code plain"="">/others_can_only_read</code></div></div></td></tr></tbody></table></div></div><p>找到对组用户具有只读权限的文件(使用八进制权限形式)。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_768682"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -perm 040 -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-l {} \;</code></div><div number2="" index1=""  alt1"=""><code plain"="">----r----- 1 root root 0 2009-02-19 20:27 .</code><code plain"="">/others_can_only_read</code></div></div></td></tr></tbody></table></div></div><h3>8. 找到home目录及子目录下所有的空文件(0字节文件)</h3><p>下面命令的输出文件绝大多数都是锁定文件盒其他程序创建的place hoders</p><div><div notranslate="" shell=""  ie"="" id="highlighter_106190"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">~ -empty</code></div></div></td></tr></tbody></table></div></div><p>只列出你home目录里的空文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_719078"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -maxdepth 1 -empty</code></div></div></td></tr></tbody></table></div></div><p>只列出当年目录下的非隐藏空文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_495502"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -maxdepth 1 -empty -not -name </code><code string"="">".*"</code></div></div></td></tr></tbody></table></div></div><h3>9. 查找5个最大的文件</h3><p>下面的命令列出当前目录及子目录下的5个最大的文件。这会需要一点时间，取决于命令需要处理的文件数量。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_923076"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-s {} \; | </code><code functions"="">sort</code> <code plain"="">-n -r | </code><code functions"="">head</code> <code plain"="">-5</code></div></div></td></tr></tbody></table></div></div><h3>10. 查找5个最小的文件</h3><p>方法同查找5个最大的文件类似，区别只是sort的顺序是降序。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_179773"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-s {} \; | </code><code functions"="">sort</code> <code plain"="">-n&nbsp; | </code><code functions"="">head</code> <code plain"="">-5</code></div></div></td></tr></tbody></table></div></div><p>上面的命令中，很可能你看到的只是空文件(0字节文件)。如此，你可以使用下面的命令列出最小的文件，而不是0字节文件。</p><div id="highlighter_686633"><div><div notranslate="" shell=""  ie"="" id="highlighter_239021"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -not -empty -</code><code functions"="">type</code> <code plain"="">f -</code><code functions"="">exec</code> <code functions"="">ls</code> <code plain"="">-s {} \; | </code><code functions"="">sort</code> <code plain"="">-n&nbsp; | </code><code functions"="">head</code> <code plain"="">-5</code></div></div></td></tr></tbody></table></div></div><h3>11. 使用-type查找指定文件类型的文件</h3><p>只查找socket文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_174964"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">s</code></div></div></td></tr></tbody></table></div></div><p>查找所有的目录</p><div><div notranslate="" shell=""  ie"="" id="highlighter_320956"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">d</code></div></div></td></tr></tbody></table></div></div><p>查找所有的一般文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_539705"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">f</code></div></div></td></tr></tbody></table></div></div><p>查找所有的隐藏文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_516507"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">. -</code><code functions"="">type</code> <code plain"="">f -name </code><code string"="">".*"</code></div></div></td></tr></tbody></table></div></div><p><strong></strong>查找所有的隐藏目录</p><div><div notranslate="" shell=""  ie"="" id="highlighter_558974"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">-</code><code functions"="">type</code> <code plain"="">d -name </code><code string"="">".*"</code></div></div></td></tr></tbody></table></div></div><h3>12. 通过和其他文件比较修改时间查找文件</h3><p>显示在指定文件之后做出修改的文件。下面的find命令将显示所有的在ordinary_file之后创建修改的文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_619399"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div><div number10="" index9=""  alt1"="">10</div><div number11="" index10=""  alt2"="">11</div><div number12="" index11=""  alt1"="">12</div><div number13="" index12=""  alt2"="">13</div><div number14="" index13=""  alt1"="">14</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">ls</code> <code plain"="">-lrt</code></div><div number2="" index1=""  alt1"=""><code plain"="">total 0</code></div><div number3="" index2=""  alt2"=""><code plain"="">-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read</code></div><div number4="" index3=""  alt1"=""><code plain"="">----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read</code></div><div number5="" index4=""  alt2"=""><code plain"="">-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file</code></div><div number6="" index5=""  alt1"=""><code plain"="">-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read</code></div><div number7="" index6=""  alt2"=""><code plain"="">-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all</code></div><div number8="" index7=""  alt1"=""><code plain"="">---------- 1 root root 0 2009-02-19 20:31 no_for_all</code></div><div number9="" index8=""  alt2"="">&nbsp;</div><div number10="" index9=""  alt1"=""><code comments"=""># find -newer ordinary_file</code></div><div number11="" index10=""  alt2"=""><code plain"="">.</code></div><div number12="" index11=""  alt1"=""><code plain"="">.</code><code plain"="">/everybody_read</code></div><div number13="" index12=""  alt2"=""><code plain"="">.</code><code plain"="">/all_for_all</code></div><div number14="" index13=""  alt1"=""><code plain"="">.</code><code plain"="">/no_for_all</code></div></div></td></tr></tbody></table></div></div><h3>13. 通过文件大小查找文件</h3><p>使用-size选项可以通过文件大小查找文件。</p><p>查找比指定文件大的文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_237880"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">~ -size +100M</code></div></div></td></tr></tbody></table></div></div><p>查找比指定文件小的文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_520328"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">~ -size -100M</code></div></div></td></tr></tbody></table></div></div><p>查找符合给定大小的文件</p><div><div notranslate="" shell=""  ie"="" id="highlighter_158764"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">~ -size 100M</code></div></div></td></tr></tbody></table></div></div><p>注意: &#8211; 指比给定尺寸小，+ 指比给定尺寸大。没有符号代表和给定尺寸完全一样大。</p><h3>14. 给常用find操作取别名</h3><p>若你发现有些东西很有用，你可以给他取别名。并且在任何你希望的地方执行。</p><p>常用的删除a.out文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_67271"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">alias</code> <code plain"="">rmao=</code><code string"="">"find . -iname a.out -exec rm {} \;"</code></div><div number2="" index1=""  alt1"=""><code comments"=""># rmao</code></div></div></td></tr></tbody></table></div></div><p>删除c程序产生的core文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_169400"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">alias</code> <code plain"="">rmc=</code><code string"="">"find . -iname core -exec rm {} \;"</code></div><div number2="" index1=""  alt1"=""><code comments"=""># rmc</code></div></div></td></tr></tbody></table></div></div><h3>15. 用find命令删除大型打包文件</h3><p>下面的命令删除大于100M的*.zip文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_274927"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">find</code> <code plain"="">/ -</code><code functions"="">type</code> <code plain"="">f -name *.zip -size +100M -</code><code functions"="">exec</code> <code functions"="">rm</code> <code plain"="">-i {} \;"</code></div></div></td></tr></tbody></table></div></div><p>用别名rm100m删除所有大雨100M的*.tar文件。使用同样的思想可以创建rm1g,rm2g,rm5g的一类别名来删除所有大于1G,2G,5G的文件。</p><div><div notranslate="" shell=""  ie"="" id="highlighter_756634"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td><div number1="" index0=""  alt2"="">1</div><div number2="" index1=""  alt1"="">2</div><div number3="" index2=""  alt2"="">3</div><div number4="" index3=""  alt1"="">4</div><div number5="" index4=""  alt2"="">5</div><div number6="" index5=""  alt1"="">6</div><div number7="" index6=""  alt2"="">7</div><div number8="" index7=""  alt1"="">8</div><div number9="" index8=""  alt2"="">9</div></td><td><div><div number1="" index0=""  alt2"=""><code functions"="">alias</code> <code plain"="">rm100m=</code><code string"="">"find / -type f -name *.tar -size +100M -exec rm -i {} \;"</code></div><div number2="" index1=""  alt1"=""><code comments"=""># alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"</code></div><div number3="" index2=""  alt2"=""><code comments"=""># alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"</code></div><div number4="" index3=""  alt1"=""><code comments"=""># alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"</code></div><div number5="" index4=""  alt2"="">&nbsp;</div><div number6="" index5=""  alt1"=""><code comments"=""># rm100m</code></div><div number7="" index6=""  alt2"=""><code comments"=""># rm1g</code></div><div number8="" index7=""  alt1"=""><code comments"=""># rm2g</code></div><div number9="" index8=""  alt2"=""><code comments"=""># rm5g</code></div></div></td></tr></tbody></table></div></div><p>Find命令示例(第二部分)</p><p>若你喜欢这篇关于find命令的Mommy文章，别忘了看看第二部分的关于find命令的Daddy文章。《<a title="爹地，我找到了！15个极好的Linux find命令示例" href="http://blog.jobbole.com/48931/" target="_blank">爹地，我找到了！15个极好的Linux find命令示例</a>》</p></div></div></div><img src ="http://www.blogjava.net/xzclog/aggbug/428787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-12-23 10:34 <a href="http://www.blogjava.net/xzclog/archive/2015/12/23/428787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux中用shell获取昨天、明天或多天前的日期</title><link>http://www.blogjava.net/xzclog/archive/2015/12/08/428555.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 08 Dec 2015 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/12/08/428555.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428555.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/12/08/428555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428555.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p>原文地址：http://www.itwis.com/html/os/linux/20100202/7360.html</p><p>&nbsp;</p><p>&nbsp;</p><p>linux中用shell获取昨天、明天或多天前的日期:</p><p>在Linux中对man date -d 参数说的比较模糊,以下举例进一步说明:</p><p># -d, --date=STRING display time described by STRING, not `now&#8217;</p><p><span style="font-family: monospace; font-size: small; "><span style="white-space: pre-wrap; "></span></span></p><div class="dp-highlighter bg_c-sharp" style="width: 700px; text-align: left; "><div class="bar"><div class="tools"><strong>[c-sharp]</strong> <a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="CopyToClipboard" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 577px; top: 702px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_1" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_1" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&amp;width=18&amp;height=18" wmode="transparent"></div></div></div><ol start="1" class="dp-c" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;next-day&nbsp;+%Y%m%d&nbsp;#明天日期&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">20091024&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;last-day&nbsp;+%Y%m%d&nbsp;#昨天日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">20091022&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;yesterday&nbsp;+%Y%m%d&nbsp;#昨天日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">20091022&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;tomorrow&nbsp;+%Y%m%d&nbsp;#&nbsp;明天日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">20091024&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;last-month&nbsp;+%Y%m&nbsp;#上个月日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">200909&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;next-month&nbsp;+%Y%m&nbsp;#下个月日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">200911&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">[root@Gman&nbsp;root]#&nbsp;date&nbsp;-d&nbsp;next-year&nbsp;+%Y&nbsp;#明年日期&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">2010&nbsp;&nbsp;</span></li></ol></div> </span><p>&nbsp;</p><p>&nbsp;</p><p><span><span>DATE=$(date +%Y%m%d --date '2 days ago') #获取昨天或多天前的日期</span></span></p><p>&nbsp;</p><p><span></span></p><p>&nbsp;</p><p>&nbsp;</p><p><span></span></p><p>名称 : date</p><p>使用权限 : 所有使用者</p><p>使用方式 : date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]</p><p>说明 : date 能用来显示或设定系统的日期和时间，在显示方面，使用者能设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 :</p><p>&nbsp;</p><div class="dp-highlighter bg_c-sharp" style="width: 700px; text-align: left; "><div class="bar"><div class="tools"><strong>[c-sharp]</strong>&nbsp;<a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="CopyToClipboard" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 577px; top: 1461px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_2" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&amp;width=18&amp;height=18" wmode="transparent"></div></div></div><ol start="1" class="dp-c" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span style="border-width: initial; border-color: initial; ">时间方面&nbsp;:&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%&nbsp;:&nbsp;印出&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%&nbsp;%n&nbsp;:&nbsp;下一行&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%t&nbsp;:&nbsp;跳格&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%H&nbsp;:&nbsp;小时(00..23)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%I&nbsp;:&nbsp;小时(01..12)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%k&nbsp;:&nbsp;小时(0..23)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%l&nbsp;:&nbsp;小时(1..12)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%M&nbsp;:&nbsp;分钟(00..59)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%p&nbsp;:&nbsp;显示本地&nbsp;AM&nbsp;或&nbsp;PM&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%r&nbsp;:&nbsp;直接显示时间&nbsp;(12&nbsp;小时制，格式为&nbsp;hh:mm:ss&nbsp;[AP]M)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%s&nbsp;:&nbsp;从&nbsp;1970&nbsp;年&nbsp;1&nbsp;月&nbsp;1&nbsp;日&nbsp;00:00:00&nbsp;UTC&nbsp;到目前为止的秒数&nbsp;%S&nbsp;:&nbsp;秒(00..61)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%T&nbsp;:&nbsp;直接显示时间&nbsp;(24&nbsp;小时制)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%X&nbsp;:&nbsp;相当于&nbsp;%H:%M:%S&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%Z&nbsp;:&nbsp;显示时区&nbsp;&nbsp;</span></li></ol></div>&nbsp;<p>&nbsp;</p><p>&nbsp;</p><div class="dp-highlighter bg_c-sharp" style="width: 700px; text-align: left; "><div class="bar"><div class="tools"><strong>[c-sharp]</strong>&nbsp;<a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="CopyToClipboard" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 577px; top: 1826px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_3" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&amp;width=18&amp;height=18" wmode="transparent"></div></div></div><ol start="1" class="dp-c" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span style="border-width: initial; border-color: initial; ">日期方面&nbsp;:&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%a&nbsp;:&nbsp;星期几&nbsp;(Sun..Sat)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%A&nbsp;:&nbsp;星期几&nbsp;(Sunday..Saturday)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%b&nbsp;:&nbsp;月份&nbsp;(Jan..Dec)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%B&nbsp;:&nbsp;月份&nbsp;(January..December)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%c&nbsp;:&nbsp;直接显示日期和时间&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%d&nbsp;:&nbsp;日&nbsp;(01..31)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%D&nbsp;:&nbsp;直接显示日期&nbsp;(mm/dd/yy)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%h&nbsp;:&nbsp;同&nbsp;%b&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%j&nbsp;:&nbsp;一年中的第几天&nbsp;(001..366)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%m&nbsp;:&nbsp;月份&nbsp;(01..12)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%U&nbsp;:&nbsp;一年中的第几周&nbsp;(00..53)&nbsp;(以&nbsp;Sunday&nbsp;为一周的第一天的情形)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%w&nbsp;:&nbsp;一周中的第几天&nbsp;(0..6)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%W&nbsp;:&nbsp;一年中的第几周&nbsp;(00..53)&nbsp;(以&nbsp;Monday&nbsp;为一周的第一天的情形)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%x&nbsp;:&nbsp;直接显示日期&nbsp;(mm/dd/yy)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%y&nbsp;:&nbsp;年份的最后两位数字&nbsp;(00.99)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">%Y&nbsp;:&nbsp;完整年份&nbsp;(0000..9999)&nbsp;&nbsp;</span></li></ol></div>&nbsp;<p>&nbsp;</p><p>&nbsp;</p><p>若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[[CC]YY][.ss]，</p><p>其中 MM 为月份，</p><p>DD 为日，</p><p>hh 为小时，</p><p>mm 为分钟，</p><p>CC 为年份前两位数字，</p><p>YY 为年份后两位数字，</p><p>ss 为秒数</p><p>把计 :</p><p>-d datestr : 显示 datestr 中所设定的时间 (非系统时间)</p><p>--help : 显示辅助讯息</p><p>-s datestr : 将系统时间设为 datestr 中所设定的时间</p><p>-u : 显示目前的格林威治时间</p><p>--version : 显示版本编号</p><p>例子 :</p><p>显示时间后跳行，再显示目前日期 : date +%T%n%D</p><p>显示月份和日数 : date +%B %d</p><p>显示日期和设定时间(12:34:56) : date --date 12:34:56</p><p>设置系统当前时间（12:34:56）：date --s 12:34:56</p><p>注意 : 当你不希望出现无意义的 0 时(比如说 1999/03/07)，则能在标记中插入 - 符号，比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。 当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。</p><p>ntp时间同步</p><p>linux系统下默认安装了ntp服务，手动进行ntp同步如下</p><p>ntpdate ntp1.nl.net</p><p>当然，也能指定其他的ntp服务器</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>-------------------------------------------------------------------</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>扩展功能</p><p>date 工具可以完成更多的工作，不仅仅只是打印出当前的系统日期。您可以使用它来得到给定的日期究竟是星期几，并得到相对于当前日期的相对日期。了解某一天是星期几</p><p>GNU 对 date 命令的另一个扩展是 -d 选项，当您的桌上没有日历表时（UNIX 用户不需要日历表），该选项非常有用。使用这个功能强大的选项，通过将日期作为引号括起来的参数提供，您可以快速地查明一个特定的日期究竟是星期几：</p><p>$ date -d "nov 22"</p><p>Wed Nov 22 00:00:00 EST 2006</p><p>$</p><p>在本示例中，您可以看到今年的 11 月 22 日是星期三。</p><p>所以，假设在 11 月 22 日召开一个重大的会议，您可以立即了解到这一天是星期三，而这一天您将赶到驻地办公室。</p><p>获得相对日期</p><p>d 选项还可以告诉您，相对于 当前日期若干天的究竟是哪一天，从现在开始的若干天或若干星期以后，或者以前（过去）。通过将这个相对偏移使用引号括起来，作为 -d 选项的参数，就可以完成这项任务。</p><p>例如，您需要了解两星期以后的日期。如果您处于 Shell 提示符处，那么可以迅速地得到答案：</p><p>$ date -d &#8217;2 weeks&#8217;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div class="dp-highlighter bg_c-sharp" style="width: 700px; text-align: left; "><div class="bar"><div class="tools"><strong>[c-sharp]</strong>&nbsp;<a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="ViewSource" title="view plain" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">view plain</a><a href="http://blog.csdn.net/acme_woo/article/details/5774353#" class="CopyToClipboard" title="copy" style="background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); border-width: initial; border-color: initial; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat; ">copy</a><div style="position: absolute; left: 577px; top: 4275px; width: 18px; height: 18px; z-index: 99; "><embed id="ZeroClipboardMovie_4" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="18" height="18" name="ZeroClipboardMovie_4" align="center" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=4&amp;width=18&amp;height=18" wmode="transparent"></div></div></div><ol start="1" class="dp-c" style="border-width: initial; border-color: initial; "><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; "><span style="border-width: initial; border-color: initial; ">关于使用该命令，还有其他一些重要的方法。使用&nbsp;next/last指令，您可以得到以后的星期几是哪一天：&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;<span class="string" style="border-width: initial; border-color: initial; ">'next&nbsp;monday'</span><span style="border-width: initial; border-color: initial; ">&nbsp;(下周一的日期)&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;next-day&nbsp;+%Y%m%d（明天的日期）或者：date&nbsp;-d&nbsp;tomorrow&nbsp;+%Y%m%d&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;last-day&nbsp;+%Y%m%d(昨天的日期)&nbsp;或者：date&nbsp;-d&nbsp;yesterday&nbsp;+%Y%m%d&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;last-month&nbsp;+%Y%m(上个月是几月)&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;next-month&nbsp;+%Y%m(下个月是几月)&nbsp;&nbsp;</span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">使用&nbsp;ago&nbsp;指令，您可以得到过去的日期：&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;<span class="string" style="border-width: initial; border-color: initial; ">'30&nbsp;days&nbsp;ago'</span><span style="border-width: initial; border-color: initial; ">&nbsp;（30天前的日期）&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">您可以使用负数以得到相反的日期：&nbsp;&nbsp;</span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;<span class="string" style="border-width: initial; border-color: initial; ">'dec&nbsp;14&nbsp;-2&nbsp;weeks'</span><span style="border-width: initial; border-color: initial; ">&nbsp;（相对:dec&nbsp;14这个日期的两周前的日期）&nbsp;&nbsp;</span></span></li><li class="alt" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;<span class="string" style="border-width: initial; border-color: initial; ">'-100&nbsp;days'</span><span style="border-width: initial; border-color: initial; ">&nbsp;(100天以前的日期)&nbsp;&nbsp;</span></span></li><li class="" style="border-width: initial; border-color: initial; line-height: 18px; "><span style="border-width: initial; border-color: initial; ">$&nbsp;date&nbsp;-d&nbsp;<span class="string" style="border-width: initial; border-color: initial; ">'50&nbsp;days'</span><span style="border-width: initial; border-color: initial; ">(50天后的日期)&nbsp;&nbsp;</span></span></li></ol></div>&nbsp;<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>这个技巧非常有用，它可以根据将来的日期为自己设置提醒，可能是在脚本或 Shell 启动文件中，如下所示：</p><p>DAY=`date -d '2 weeks' +"%b %d"`</p><p>if test "`echo $DAY`" = "Aug 16"; then echo 'Product launch is now two weeks away!'; fi&nbsp;</p><img src ="http://www.blogjava.net/xzclog/aggbug/428555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-12-08 09:33 <a href="http://www.blogjava.net/xzclog/archive/2015/12/08/428555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINUX - awk命令之NF和$NF区别</title><link>http://www.blogjava.net/xzclog/archive/2015/12/07/428541.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 07 Dec 2015 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/12/07/428541.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428541.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/12/07/428541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428541.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: 宋体; line-height: 28px; background-color: #ffffff; "><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">LINUX - awk命令之NF和$NF区别</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">LINUX - awk命令之NF和$NF区别 &nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">NF和$NF 区别问答：</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">1.awk中$NF是什么意思？</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">#pwd</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">/usr/local/etc</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">~# echo $PWD | awk -F/ '{print $NF}'</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">etc</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">NF代表：浏览记录的域的个数</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">$NF代表 ：最后一个Field(列)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">2.awk下面的变量NF和$NF有什么区别?</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">{print NF} 也有{print $NF}</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">前者是输出了域个数，后者是输出最后一个字段的内容</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">如：~# echo $PWD | awk -F/ '{print $NF}'</div></span><img src ="http://www.blogjava.net/xzclog/aggbug/428541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-12-07 10:23 <a href="http://www.blogjava.net/xzclog/archive/2015/12/07/428541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bash shell脚本执行的几种方法</title><link>http://www.blogjava.net/xzclog/archive/2015/12/02/428474.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 02 Dec 2015 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/12/02/428474.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428474.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/12/02/428474.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428474.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428474.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: &#930;���ź�, ����; line-height: 24px; background-color: #ffffff; "><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">bash shell 脚本执行的方法有多种，本文作一个总结，供大家学习参考。</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">&nbsp;&nbsp;&nbsp; 假设我们编写好的shell脚本的文件名为hello.sh，文件位置在/data/shell目录中并已有执行权限。</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; "><u>方法一：切换到shell脚本所在的目录（此时，称为工作目录）执行shell脚本：<br /></u>cd /data/shell<br />./hello.sh<br />./的意思是说在当前的工作目录下执行hello.sh。如果不加上./，bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录（/data/shell）可能不在执行程序默认的搜索路径之列,也就是说，不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的，所以必须加上./才可执行。</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; "><u>方法二：以绝对路径的方式去执行bash shell脚本：</u><br />/data/shell/hello.sh</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; "><u>方法三：直接使用bash 或sh 来执行bash shell脚本：</u><br />cd /data/shell</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">bash hello.sh<br />或<br />cd /data/shell</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">sh hello.sh<br />&nbsp;&nbsp;&nbsp; 注意，若是以方法三的方式来执行，那么，可以不必事先设定shell的执行权限，甚至都不用写shell文件中的第一行（指定bash路径）。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行，而是被人家调用执行，所以不要执行权限。那么不用指定bash路径自然也好理解了啊，呵呵&#8230;&#8230;。</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; "><u>方法四：在当前的shell环境中执行bash shell脚本：</u><br />cd /data/shell</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">. hello.sh<br />或<br />cd /data/shell</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">source hello.sh<br />&nbsp;&nbsp;&nbsp; 前三种方法执行shell脚本时都是在当前shell（称为父shell）开启一个子shell环境，此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭，然后又回到父shell中。而方法四则是在当前shell中执行的。</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">假设shell脚本文件为hello.sh<br />放在/root目录下。<br /><br />下面介绍几种在终端执行shell脚本的方法：</p><div class="codetitle" style="margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 2px; padding-right: 3px; padding-bottom: 2px; padding-left: 3px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 0px; border-left-width: 1px; border-style: initial; border-color: initial; border-left-color: #a2b7db; border-left-style: solid; width: 625px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f6fb; clear: both; font-size: 14px; border-top-color: #a2b7db; border-top-style: solid; border-right-color: #a2b7db; border-right-style: solid; background-position: initial initial; background-repeat: initial initial; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; float: right; cursor: pointer; "><u style="color: #000000; font-size: 14px; ">复制代码</u></span>代码如下:</div><div id="c_TFLAF276" class="codebody" style="margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; padding-right: 3px; padding-bottom: 5px; padding-left: 5px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-top-color: #a2b7db; border-right-color: #a2b7db; border-bottom-color: #a2b7db; border-left-color: #a2b7db; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 623px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f5fc; clear: both; font-family: Arial; font-size: 12px; ">[root@localhost home]# cd /root/<br />[root@localhost ~]#vim hello.sh<br />#!&nbsp; /bin/bash<br />cd /tmp<br />echo "hello guys!"<br />echo "welcome to my Blog:linuxboy.org!"</div><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">1.切换到shell脚本所在的目录，执行：</p><div class="codetitle" style="margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 2px; padding-right: 3px; padding-bottom: 2px; padding-left: 3px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 0px; border-left-width: 1px; border-style: initial; border-color: initial; border-left-color: #a2b7db; border-left-style: solid; width: 625px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f6fb; clear: both; font-size: 14px; border-top-color: #a2b7db; border-top-style: solid; border-right-color: #a2b7db; border-right-style: solid; background-position: initial initial; background-repeat: initial initial; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; float: right; cursor: pointer; "><u style="color: #000000; font-size: 14px; ">复制代码</u></span>代码如下:</div><div id="c_vF5QgJ52" class="codebody" style="margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; padding-right: 3px; padding-bottom: 5px; padding-left: 5px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-top-color: #a2b7db; border-right-color: #a2b7db; border-bottom-color: #a2b7db; border-left-color: #a2b7db; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 623px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f5fc; clear: both; font-family: Arial; font-size: 12px; ">[root@localhost ~]# ./hello.sh<br />-bash: ./ hello.sh: 权限不够</div><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">2.以绝对路径的方式执行：</p><div class="codetitle" style="margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 2px; padding-right: 3px; padding-bottom: 2px; padding-left: 3px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 0px; border-left-width: 1px; border-style: initial; border-color: initial; border-left-color: #a2b7db; border-left-style: solid; width: 625px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f6fb; clear: both; font-size: 14px; border-top-color: #a2b7db; border-top-style: solid; border-right-color: #a2b7db; border-right-style: solid; background-position: initial initial; background-repeat: initial initial; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; float: right; cursor: pointer; "><u style="color: #000000; font-size: 14px; ">复制代码</u></span>代码如下:</div><div id="c_iVj83RFX" class="codebody" style="margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; padding-right: 3px; padding-bottom: 5px; padding-left: 5px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-top-color: #a2b7db; border-right-color: #a2b7db; border-bottom-color: #a2b7db; border-left-color: #a2b7db; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 623px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f5fc; clear: both; font-family: Arial; font-size: 12px; ">[root@localhost ~]# /root/Desktop/hello.sh<br />-bash: /root/Desktop/ hello.sh: 权限不够</div><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">3.直接用bash或sh执行：</p><div class="codetitle" style="margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 2px; padding-right: 3px; padding-bottom: 2px; padding-left: 3px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 0px; border-left-width: 1px; border-style: initial; border-color: initial; border-left-color: #a2b7db; border-left-style: solid; width: 625px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f6fb; clear: both; font-size: 14px; border-top-color: #a2b7db; border-top-style: solid; border-right-color: #a2b7db; border-right-style: solid; background-position: initial initial; background-repeat: initial initial; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; float: right; cursor: pointer; "><u style="color: #000000; font-size: 14px; ">复制代码</u></span>代码如下:</div><div id="c_s6NGKwLA" class="codebody" style="margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; padding-right: 3px; padding-bottom: 5px; padding-left: 5px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-top-color: #a2b7db; border-right-color: #a2b7db; border-bottom-color: #a2b7db; border-left-color: #a2b7db; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 623px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f5fc; clear: both; font-family: Arial; font-size: 12px; ">[root@localhost ~]# bash hello.sh<br />hello guys!<br />welcome to my Blog:linuxboy.org!<br />[root@localhost ~]# pwd<br />/root<br />&nbsp;<br />[root@localhost ~]# sh hello.sh<br />hello guys!<br />welcome to my Blog:linuxboy.org!<br />[root@localhost ~]# pwd<br />/root</div><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">&nbsp;&nbsp; 注意：用以上三种方法执行shell脚本，现行的shell会开启一个子shell环境，去执行shell脚本，前两种必须要有执行权限才能够执行。也可以让shell脚本在现行的shell中执行：</p><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">4.现行的shell中执行</p><div class="codetitle" style="margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 2px; padding-right: 3px; padding-bottom: 2px; padding-left: 3px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 0px; border-left-width: 1px; border-style: initial; border-color: initial; border-left-color: #a2b7db; border-left-style: solid; width: 625px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f2f6fb; clear: both; font-size: 14px; border-top-color: #a2b7db; border-top-style: solid; border-right-color: #a2b7db; border-right-style: solid; background-position: initial initial; background-repeat: initial initial; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; float: right; cursor: pointer; "><u style="color: #000000; font-size: 14px; ">复制代码</u></span>代码如下:</div><div id="c_bjJVhSD2" class="codebody" style="margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; padding-right: 3px; padding-bottom: 5px; padding-left: 5px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-top-color: #a2b7db; border-right-color: #a2b7db; border-bottom-color: #a2b7db; border-left-color: #a2b7db; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; width: 623px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f3f5fc; clear: both; font-family: Arial; font-size: 12px; ">[root@localhost ~]# . hello.sh<br />hello guys!<br />welcome to my Blog:linuxboy.org!<br />[root@localhost tmp]# pwd<br />/tmp&nbsp;<br />&nbsp;<br />[root@localhost ~]# source hello.sh<br />hello guys!<br />welcome to my Blog:linuxboy.org!<br />[root@localhost tmp]# pwd<br />/tmp</div><p style="margin-top: 20px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; line-height: 24px; color: #000000; ">&nbsp;&nbsp;&nbsp; 对于第4种不会创建子进程，而是在父进程中直接执行。<br />&nbsp;&nbsp;&nbsp; 上面的差异是因为子进程不能改变父进程的执行环境，所以CD(内建命令，只有内建命令才可以改变shell 的执行环境)没有成功，但是第4种没有子进程，所以CD成功。</p></span><img src ="http://www.blogjava.net/xzclog/aggbug/428474.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-12-02 10:33 <a href="http://www.blogjava.net/xzclog/archive/2015/12/02/428474.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>awk中RS,ORS,FS,OFS区别与联系</title><link>http://www.blogjava.net/xzclog/archive/2015/11/26/428378.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 26 Nov 2015 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/26/428378.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428378.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/26/428378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428378.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: awk中RS,ORS,FS,OFS区别与联系张映&nbsp;发表于&nbsp;2010-12-02分类目录：&nbsp;shell标签：awk,&nbsp;FS,&nbsp;OFS,&nbsp;ORS,&nbsp;RS,&nbsp;shell学习awk时，一定要记得动手去实践，只有在实践中才能发现问题，以下就我在学习中和实践中的经验，总结一下RS,ORS,FS,OFS的区别...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/11/26/428378.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/428378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-26 23:35 <a href="http://www.blogjava.net/xzclog/archive/2015/11/26/428378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Perl 和 Python 的比较 </title><link>http://www.blogjava.net/xzclog/archive/2015/11/26/428377.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 26 Nov 2015 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/26/428377.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428377.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/26/428377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428377.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作为万年Perl 党表示最近开始学Python 了，下面会记录一下学习中Python 和Perl 的对比，如果你也是一个Perl 用户，看过了也会对Python 有一个大致的印象吧。事实上，写着写着我发现如果你是一名Python 用户，看完后也会对Perl 有一个大致的了解 _(:з)&#8736;)_基本数据类型1. Perl 中的标量a. Perl 中的标量在Python ...&nbsp;&nbsp;<a href='http://www.blogjava.net/xzclog/archive/2015/11/26/428377.html'>阅读全文</a><img src ="http://www.blogjava.net/xzclog/aggbug/428377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-26 23:20 <a href="http://www.blogjava.net/xzclog/archive/2015/11/26/428377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原]Perl和Python的比较（主要是性能比较）</title><link>http://www.blogjava.net/xzclog/archive/2015/11/26/428376.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 26 Nov 2015 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/26/428376.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428376.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/26/428376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428376.html</trackback:ping><description><![CDATA[<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Python语法简单，而且通过缩进的方式来表现层次结构，代码非常简明易懂，对初学者来说，比较容易上手。</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">Perl的模式匹配非常强大，同时匹配的符号有很多种，难以阅读和维护。</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">在文本处理方面，python通过加载re模块来实现模式匹配的查找和替换。而Perl内置就有模式匹配功能。</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">note：内置命令和外部命令的区别。</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">通过代码来直接做比较。</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px">python版：</span></span></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; color: rgb(51,51,51); padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"></span></span></p><pre style="border-bottom: rgb(255,255,204) 1px solid; border-left: rgb(255,255,204) 1px solid; text-transform: none; background-color: rgb(255,255,252); text-indent: 0px; font: 16px/24px 'Courier New'; letter-spacing: normal; color: rgb(0,0,0); overflow: auto; border-top: rgb(255,255,204) 1px solid; border-right: rgb(255,255,204) 1px solid; word-spacing: 0px; -webkit-text-stroke-width: 0px" class="python" name="code" snippet_file_name="blog_20150429_1_3497813" code_snippet_id="655749">#!/usr/bin/python
import re
import fileinput
exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I)
location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I)
for line in fileinput.input():
    fn = fileinput.filename()
    currline = line.rstrip()
    mprev = exists_re.search(currline)
    if(mprev):
        xlogtime = mprev.group(1)
    mcurr = location_re.search(currline)
    if(mcurr):
        print fn, xlogtime, mcurr.group(1)
</pre><br style="text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px" /><span style="text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; display: inline !important; font: 16px/24px Arial; white-space: normal; float: none; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">Perl版：</span> 
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Arial, Helvetica, simsun, u5b8bu4f53; padding-top: 0px"><span style="padding-bottom: 0px; line-height: 25px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px"></span></span></p><pre style="border-bottom: rgb(255,255,204) 1px solid; border-left: rgb(255,255,204) 1px solid; text-transform: none; background-color: rgb(255,255,252); text-indent: 0px; font: 16px/24px 'Courier New'; letter-spacing: normal; color: rgb(51,51,51); overflow: auto; border-top: rgb(255,255,204) 1px solid; border-right: rgb(255,255,204) 1px solid; word-spacing: 0px; -webkit-text-stroke-width: 0px" class="plain" name="code" snippet_file_name="blog_20150429_2_1399334" code_snippet_id="655749">#!/usr/bin/perl
while (&lt;&gt;) {
    chomp;
    if (m/^(.*?) INFO.*Such a record already exists/i) {
        $xlogtime = $1;
    }
    if (m/^AwbLocation (.*?) insert into/i) {
        print "$ARGV $xlogtime $1\n";
    }
}
</pre>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"></p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">time process_file.py *log &nbsp;&gt; summarypy.log</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">real &nbsp; 0m8.185s</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">user &nbsp;0m8.018s</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">sys &nbsp; &nbsp;0m0.092s</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">time process_file.pl &nbsp;*log &gt; summaypl.log</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">real &nbsp; &nbsp;0m1.481s</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">user &nbsp; 0m1.294s</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">sys &nbsp; &nbsp; 0m0.124s</p>
<h1 style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 0px; padding-left: 0px; padding-right: 0px; font: bold 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(51,51,51); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(34,34,34); padding-top: 0px"><strong>在文本处理方面，Perl 比Python快8倍左右</strong>。</span></h1>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">所以在处理大文件如大日志方面，用perl更好，因为更快。</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">如果对速度要求不是很严格的话，用python更好，因为python简洁易懂，容易维护和阅读。</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">为什么在文本处理时，Perl比Python快很多呢？</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">这是因为Perl的模式匹配是其内置功能，而Python需要加载re模块，使用内置命令比外部命令要快很多。</p>
<h1 style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 0px; padding-left: 0px; padding-right: 0px; font: bold 14px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">内置命令和外部命令的区别</h1>
<div style="text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px">Linux命令有内置命令和外部命令之分，功能基本相同，但是调用有些细微差别。</div>
<div style="text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px"><strong>内置命令</strong>实际上是shell程序的一部分，其中包含的是一些简单的linux系统命令，这些命令在shell程序识别并在shell程序内部完成运行，通常在<strong>linux系统加载运行时shell就被加载并驻留在系统内存中</strong>。内部命令是设在bash源代码里面的，其执行速度比外部命令快，因为<strong>解析内部命令shell不需要创建子进程</strong>，比如exit，cd，pwd，echo，history等。</div>
<div style="text-transform: none; background-color: rgb(237,237,237); text-indent: 0px; font: 16px/24px Arial; white-space: normal; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-text-stroke-width: 0px"><strong>外部命令</strong>是linux系统中的实用应用程序，因为实用程序的功能通常比较强大，其包含的程序量也很大，<strong>在系统加载的时候并不随系统一起被加载到内存中，而是在需要的时候才将其调入内存</strong>。通常外部命令的实体并不包含在shell中，但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找，加载存放，并控制命令的执行。外部命令是在bash之外额外安装的，通常放在/bin, /usr/bin, /sbin, &nbsp;/usr/sbin,....等。</div>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(54,46,43); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px">用type命令可以分辨内部命令与外部命令。</p>
<p style="padding-bottom: 0px; text-transform: none; background-color: rgb(237,237,237); text-indent: 28px; margin: 10px 0px; padding-left: 0px; padding-right: 0px; font: 14px/26px Arial; white-space: normal; letter-spacing: normal; color: rgb(54,46,43); word-spacing: 0px; padding-top: 0px; -webkit-text-stroke-width: 0px"><img style="border-bottom: medium none; border-left: medium none; margin: auto; display: block; max-width: 260px; vertical-align: middle; border-top: medium none; border-right: medium none" alt="" src="http://img.blog.csdn.net/20150429154127930?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmVubnlfeXUxMDI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" /></p><br class="Apple-interchange-newline" /><img src ="http://www.blogjava.net/xzclog/aggbug/428376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-26 23:15 <a href="http://www.blogjava.net/xzclog/archive/2015/11/26/428376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> iptables详解 </title><link>http://www.blogjava.net/xzclog/archive/2015/11/24/428348.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 24 Nov 2015 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/24/428348.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428348.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/24/428348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428348.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #666666; font-family: 宋体, Arial; font-size: 16px; line-height: 26px; background-color: #ffffff; "><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">一：前言</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>防火墙，其实说白了讲，就是用于实现Linux下访问控制的功能的，它分为硬件的或者软件的防火墙两种。无论是在哪个网络中，防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作，这就是防火墙的策略，规则，以达到让它对出入网络的IP、数据进行检测。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>目前市面上比较常见的有3、4层的防火墙，叫<font color="#0000f0" style="word-wrap: break-word; ">网络层的防火墙</font>，还有7层的防火墙，其实是<font color="#0000f0" style="word-wrap: break-word; ">代理层的网关</font>。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>对于TCP/IP的七层模型来讲，我们知道第三层是网络层，三层的防火墙会在这层<font color="#0000f0" style="word-wrap: break-word; ">对源地址和目标地址进行检测</font>。但是对于七层的防火墙，不管你<font color="#0000f0" style="word-wrap: break-word; ">源端口或者目标端口，源地址或者目标地址是什么，都将对你所有的东西进行检查</font>。所以，对于设计原理来讲，七层防火墙更加安全，但是这却带来了效率更低。所以市面上通常的防火墙方案，都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问，所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制，配置的不好甚至有可能成为流量的瓶颈。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">二：iptables 的历史以及工作原理</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">1.iptables的发展:</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>iptables的前身叫ipfirewall （内核1.x时代）,这是一个作者从freeBSD上移植过来的，能够工作在内核当中的，对数据包进行检测的一款简易访问控制工具。但是ipfirewall工作功能极其有限(它需要将所有的规则都放进内核当中，这样规则才能够运行起来，而放进内核，这个做法一般是极其困难的)。当内核发展到2.x系列的时候，软件更名为ipchains，它可以定义多条规则，将他们串起来，共同发挥作用，而现在，它叫做iptables，可以<font color="#0000f0" style="word-wrap: break-word; ">将规则组成一个列表，实现绝对详细的访问控制功能</font>。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>他们都是工作在用户空间中，定义规则的工具，本身并不算是防火墙。它们定义的规则，可以<font color="#0000f0" style="word-wrap: break-word; ">让在内核空间当中的netfilter来读取</font>，并且实现让防火墙工作。而放入内核的地方必须要是特定的位置，必须是tcp/ip的协议栈经过的地方。而这个tcp/ip协议栈必须经过的地方，可以实现读取规则的地方就叫做 netfilter.(网络过滤器)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 作者一共在内核空间中选择了5个位置，</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 1.内核空间中：从一个网络接口进来，到另一个网络接口去的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 2.数据包从内核流入用户空间的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 3.数据包从用户空间流出的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 4.进入/离开本机的外网接口</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 5.进入/离开本机的内网接口</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">2.iptables的工作机制</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>从上面的发展我们知道了作者选择了5个位置，来作为控制的地方，但是你有没有发现，其实前三个位置已经基本上能将路径彻底封锁了，但是为什么已经在进出的口设置了关卡之后还要在内部卡呢？ 由于数据包尚未进行路由决策，还不知道数据要走向哪里，所以在进出口是没办法实现数据过滤的。所以要在内核空间里设置转发的关卡，进入用户空间的关卡，从用户空间出去的关卡。那么，既然他们没什么用，那我们为什么还要放置他们呢？因为我们<font color="#0000f0" style="word-wrap: break-word; ">在做NAT和DNAT的时候，目标地址转换必须在路由之前转换</font>。所以<font color="#0000f0" style="word-wrap: break-word; ">我们必须在外网而后内网的接口处进行设置关卡</font>。 &nbsp; &nbsp; &nbsp; &nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;这五个位置也被称为五个钩子函数（hook functions）,也叫五个规则链。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>1.PREROUTING (路由前)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>2.INPUT (数据包流入口)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>3.FORWARD (转发管卡)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>4.OUTPUT(数据包出口)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>5.POSTROUTING（路由后）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; 这是NetFilter规定的五个规则链，任何一个数据包，只要经过本机，必将经过这五个链中的其中一个链。 &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">3.防火墙的策略</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>防火墙策略一般分为两种，一种叫&#8220;通&#8221;策略，一种叫&#8220;堵&#8221;策略，<font color="#0000f0" style="word-wrap: break-word; ">通策略，默认门是关着的，必须要定义谁能进</font>。<font color="#0000f0" style="word-wrap: break-word; ">堵策略则是，大门是洞开的，但是你必须有身份认证，否则不能进</font>。所以我们要定义，让进来的进来，让出去的出去，<font color="#0000f0" style="word-wrap: break-word; ">所以通，是要全通，而堵，则是要选择</font>。当我们定义的策略的时候，要分别定义多条功能，其中：定义数据包中允许或者不允许的策略，filter过滤的功能，而定义地址转换的功能的则是nat选项。为了让这些功能交替工作，我们制定出了&#8220;表&#8221;这个定义，来定义、区分各种不同的工作功能和处理方式。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>我们现在用的比较多个功能有3个：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>1.filter 定义允许或者不允许的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>2.nat 定义地址转换的&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3.mangle功能:修改报文原数据</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开，在里面做标记/修改内容的。而防火墙标记，其实就是靠mangle来实现的。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; ">小扩展:</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>对于filter来讲一般只能做在3个链上：INPUT ，FORWARD ，OUTPUT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>对于nat来讲一般也只能做在3个链上：PREROUTING ，OUTPUT ，POSTROUTING</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>而mangle则是5个链都可以做：PREROUTING，INPUT，FORWARD，OUTPUT，POSTROUTING</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>iptables/netfilter（这款软件）是工作在用户空间的，它可以让规则进行生效的，本身不是一种服务，而且规则是立即生效的。而我们iptables现在被做成了一个服务，可以进行启动，停止的。启动，则将规则直接生效，停止，则将规则撤销。&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>iptables还支持自己定义链。但是自己定义的链，必须是跟某种特定的链关联起来的。在一个关卡设定，指定当有数据的时候专门去找某个特定的链来处理，当那个链处理完之后，再返回。接着在特定的链中继续检查。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><font color="#800080" style="word-wrap: break-word; ">注意：</font>规则的次序非常关键，谁的<font color="#0000f0" style="word-wrap: break-word; ">规则越严格，应该放的越靠前</font>，而检查规则的时候，是按照从上往下的方式进行检查的。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">三．规则的写法:</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;iptables定义规则的方式比较复杂:</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;格式：iptables [-t table] COMMAND chain CRETIRIA -j ACTION</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>&nbsp;-t table ：3个filter nat mangle</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>&nbsp;COMMAND：定义如何对规则进行管理</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>&nbsp;chain：指定你接下来的规则到底是在哪个链上操作的，当定义策略的时候，是可以省略的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>&nbsp;CRETIRIA:指定匹配标准</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>&nbsp;-j ACTION :指定如何进行处理</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;比如：不允许172.16.0.0/24的进行访问。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;当然你如果想拒绝的更彻底：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;iptables -L -n -v<span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>#查看定义规则的详细信息</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">四：详解COMMAND:</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">1.链管理命令（这都是立即生效的）</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>-P :设置默认策略的（设定默认门是关着的还是开着的）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>默认策略一般只有两种</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>iptables -P INPUT (DROP|ACCEPT) &nbsp;默认是关的/默认是开的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>比如：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作，所以关于外界连接的所有规则包括Xshell连接之类的，远程连接都被拒绝了。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; -F: FLASH，清空规则链的(注意每个链的管理权限)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp; &nbsp; iptables -t nat -F PREROUTING</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp; &nbsp; iptables -t nat -F 清空nat表的所有链</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; -N:NEW 支持用户新建一个链</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; -X: 用于删除用户自定义的空链</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 使用方法跟-N相同，但是在删除之前必须要将里面的链给清空昂了</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; -E：用来Rename chain主要是用来给用户自定义的链重命名</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -E oldname newname</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-Z：清空链，及链中默认规则的计数器的（有两个计数器，被匹配到多少个数据包，多少个字节）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iptables -Z :清空</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">2.规则管理命令</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-A：追加，在当前链的最后新增一个规则</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-I num : 插入，把当前规则插入为第几条。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -I 3 :插入为第三条</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-R num：Replays替换/修改第几条规则</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 格式：iptables -R 3 &#8230;&#8230;&#8230;&#8230;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-D num：删除，明确指定删除第几条规则</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">3.查看管理命令 &#8220;-L&#8221;</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;附加子命令</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-n：以数字的方式显示ip，它会将ip直接显示出来，如果不加-n，则会将ip反向解析成主机名。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-v：显示详细信息</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-vv</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-vvv :越多越详细</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-x：在计数器上显示精确值，不做单位换算</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;--line-numbers : 显示规则的行号</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-t nat：显示所有的关卡的信息</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">五：详解匹配标准</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">1.通用匹配：源地址目标地址的匹配</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-s：指定作为源地址匹配，这里不能指定主机名称，必须是IP</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>IP | IP/MASK | 0.0.0.0/0.0.0.0</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>而且地址可以取反，加一个&#8220;!&#8221;表示除了哪个IP之外</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-d：表示匹配目标地址</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-p：用于匹配协议的（这里的协议通常有3种，TCP/UDP/ICMP）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-i eth0：从这块网卡流入的数据</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>流入一般用在INPUT和PREROUTING上</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;-o eth0：从这块网卡流出的数据</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>流出一般在OUTPUT和POSTROUTING上</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">2.扩展匹配</strong></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; ">2.1隐含扩展：对协议的扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; -p tcp :TCP协议的扩展。一般有三种扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>--dport XX-XX：指定目标端口,不能指定多个非连续端口,只能指定单个端口，比如</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>--dport 21 &nbsp;或者 --dport 21-23 (此时表示21,22,23)</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>--sport：指定源端口</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>--tcp-fiags：TCP的标志位（SYN,ACK，FIN,PSH，RST,URG）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp; &nbsp;&nbsp;对于它，一般要跟两个参数：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>1.检查的标志位</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>2.必须为1的标志位</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>--tcpflags syn,ack,fin,rst syn &nbsp; = &nbsp; &nbsp;--syn</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>表示检查这4个位，这4个位中syn必须为1，其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包，还有一种简写方式，叫做--syn</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; -p udp：UDP协议的扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; --dport</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; --sport</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; -p icmp：icmp数据报文的扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; --icmp-type：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>echo-request(请求回显)，一般用8 来表示</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>所以 --icmp-type 8 匹配请求回显数据包</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>echo-reply （响应的数据包）一般用0来表示</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; ">2.2显式扩展（-m）</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;扩展各种模块</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; -m multiport：表示启用多端口扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; 之后我们就可以启用比如 --dports 21,23,80</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">六：详解-j ACTION</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;常用的ACTION：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;DROP：悄悄丢弃</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>一般我们多用DROP来隐藏我们的身份，以及隐藏我们的链表</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;REJECT：明示拒绝</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;ACCEPT：接受</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>custom_chain：转向一个自定义的链</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;DNAT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;SNAT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;MASQUERADE：源地址伪装</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;REDIRECT：重定向：主要用于实现端口重定向</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;MARK：打防火墙标记的</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>&nbsp;RETURN：返回</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>在自定义链执行完毕后使用返回，来返回原规则链。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">练习题1：</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;只要是来自于172.16.0.0/16网段的都允许访问我本机的172.16.100.1的SSHD服务</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;分析：首先肯定是在允许表中定义的。因为不需要做NAT地址转换之类的，然后查看我们SSHD服务，在22号端口上，处理机制是接受，对于这个表，需要有一来一回两个规则，如果我们允许也好，拒绝也好，对于访问本机服务，我们最好是定义在INPUT链上，而OUTPUT再予以定义就好。(会话的初始端先定义)，所以加规则就是：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;定义进来的： iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;定义出去的： iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp;将默认策略改成DROP:</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">				</span>&nbsp;&nbsp;iptables -P INPUT DROP</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">				</span>&nbsp;&nbsp;iptables -P OUTPUT DROP</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">				</span>&nbsp;&nbsp;iptables -P FORWARD DROP</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">七：状态检测：</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>是一种显式扩展，用于检测会话之间的连接关系的，有了检测我们可以实现会话间功能的扩展</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; 什么是状态检测？对于整个TCP协议来讲，它是一个有连接的协议，三次握手中，第一次握手，我们就叫NEW连接，而从第二次握手以后的，ack都为1，这是正常的数据传输，和tcp的第二次第三次握手，叫做已建立的连接（ESTABLISHED）,还有一种状态，比较诡异的，比如：SYN=1 ACK=1 RST=1,对于这种我们无法识别的，我们都称之为INVALID无法识别的。还有第四种，FTP这种古老的拥有的特征，每个端口都是独立的，21号和20号端口都是一去一回，他们之间是有关系的，这种关系我们称之为RELATED。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>所以我们的状态一共有四种：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; NEW</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; ESTABLISHED</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; RELATED</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; INVALID</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>所以我们对于刚才的练习题，可以增加状态检测。比如进来的只允许状态为NEW和ESTABLISHED的进来，出去只允许ESTABLISHED的状态出去，这就可以将比较常见的反弹式木马有很好的控制机制。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">对于练习题的扩展：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>进来的拒绝出去的允许，进来的只允许ESTABLISHED进来，出去只允许ESTABLISHED出去。默认规则都使用拒绝</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>iptables -L -n --line-number &nbsp;：查看之前的规则位于第几行</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 改写INPUT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 此时如果想再放行一个80端口如何放行呢？</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">练习题2：</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">假如我们允许自己ping别人，但是别人ping自己ping不通如何实现呢？</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">分析：对于ping这个协议，进来的为8（ping），出去的为0(响应).我们为了达到目的，需要8出去,允许0进来</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">在出去的端口上：iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">在进来的端口上：iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">小扩展：对于127.0.0.1比较特殊，我们需要明确定义它</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">八：SNAT和DNAT的实现</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>由于我们现在IP地址十分紧俏，已经分配完了，这就导致我们必须要进行地址转换，来节约我们仅剩的一点IP资源。那么通过iptables如何实现NAT的地址转换呢？</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">1.SNAT基于原地址的转换</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>基于原地址的转换一般用在我们的许多<font color="#0000f0" style="word-wrap: break-word; ">内网用户通过一个外网的口上网的时候，这时我们将我们内网的地址转换为一个外网的IP，我们就可以实现连接其他外网IP的功能</font>。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">所以我们在iptables中就要定义到底如何转换：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">定义的样式：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>这样，只要是来自本地网络的试图通过网卡访问网络的，都会被统统转换成172.16.100.1这个IP.</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>那么，如果172.16.100.1不是固定的怎么办？</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>我们都知道当我们使用联通或者电信上网的时候，一般它都会在每次你开机的时候随机生成一个外网的IP，意思就是外网地址是动态变换的。这时我们就要将外网地址换成 MASQUERADE(动态伪装):它可以实现自动寻找到外网地址，而自动将其改为正确的外网地址。所以，我们就需要这样设置：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;这里要注意：地址伪装并不适用于所有的地方。</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#800080" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">2.DNAT目标地址转换</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span><font color="#0000f0" style="word-wrap: break-word; ">对于目标地址转换，数据流向是从外向内的，外面的是客户端，里面的是服务器端</font></font><font color="#0000f0" style="word-wrap: break-word; font-size: medium; ">通过目标地址转换，我们可以让外面的ip通过我们对外的外网ip来访问我们服务器不同的服务器，而我们的服务却放在内网服务器的不同的服务器上</font><span style="word-wrap: break-word; font-size: medium; ">。</span></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 如何做目标地址转换呢？：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --todestination 172.16.100.2</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; 目标地址转换要做在到达网卡之前进行转换,所以要做在PREROUTING这个位置上</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">九：控制规则的存放以及开启</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><br style="word-wrap: break-word; " /></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>注意：你所定义的所有内容，当你重启的时候都会失效，要想我们能够生效，需要使用一个命令将它保存起来</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">	</span>1.service iptables save 命令</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>它会保存在/etc/sysconfig/iptables这个文件中</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 2.iptables-save 命令</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">		</span>iptables-save &gt; /etc/sysconfig/iptables</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; 3.iptables-restore 命令</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>开机的时候，它会自动加载/etc/sysconfig/iptabels</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>如果开机不能加载或者没有加载，而你想让一个自己写的配置文件（假设为iptables.2）手动生效的话：</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>iptables-restore &lt; /etc/sysconfig/iptables.2</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; "><span class="Apple-tab-span" style="word-wrap: break-word; white-space: pre; ">			</span>则完成了将iptables中定义的规则手动生效</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp;</font></div><div style="word-wrap: break-word; "><font size="3" color="#f00000" style="word-wrap: break-word; "><strong style="word-wrap: break-word; ">十：总结</strong></font></div><div style="word-wrap: break-word; "><font size="3" style="word-wrap: break-word; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Iptables是一个非常重要的工具，它是每一个防火墙上几乎必备的设置，也是我们在做大型网络的时候，为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解，同时，我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候，尽量能结合着各种各样的项目，实验来完成，这样对你加深iptables的配置，以及各种技巧有非常大的帮助。</font></div><div style="word-wrap: break-word; "></div><div style="word-wrap: break-word; ">附加iptables比较好的文章：</div><div style="word-wrap: break-word; "><a href="http://www.linuxso.com/linuxpeixun/10332.html" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #565656; ">netfilter/iptables全攻略</a></div><div id="haloword-lookup" class="ui-widget-content ui-draggable" style="word-wrap: break-word; "><div id="haloword-title" style="word-wrap: break-word; "><span id="haloword-word" style="word-wrap: break-word; "></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音" style="word-wrap: break-word; text-decoration: none; color: #565656; "></a><div id="haloword-control-container" style="word-wrap: break-word; "><a href="http://blog.chinaunix.net/uid-26495963-id-3279216.html#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #565656; "></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗" style="word-wrap: break-word; text-decoration: none; color: #565656; "></a></div></div></div></span><img src ="http://www.blogjava.net/xzclog/aggbug/428348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-24 17:17 <a href="http://www.blogjava.net/xzclog/archive/2015/11/24/428348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下IPTABLES配置详解</title><link>http://www.blogjava.net/xzclog/archive/2015/11/24/428347.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Tue, 24 Nov 2015 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/11/24/428347.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/428347.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/11/24/428347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/428347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/428347.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; "><div><strong>如果你的IPTABLES基础知识还不了解,建议先去看看.</strong></div><div><strong>开始配置</strong></div><div><strong>我们来配置一个filter表的防火墙.</strong></div><div><strong>(1)查看本机关于IPTABLES的设置情况</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />Chain INPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain FORWARD (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain OUTPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain RH-Firewall-1-INPUT (0 references)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icmp --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; icmp type 255&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; esp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ah&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 224.0.0.251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:5353&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; udp dpt:631&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state RELATED,ESTABLISHED&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:22&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:80&nbsp;<br />ACCEPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state NEW tcp dpt:25&nbsp;<br />REJECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0/0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reject-with icmp-host-prohibited&nbsp;<br />可以看出我在安装linux时,选择了有防火墙,并且开放了22,80,25端口.</div><div>如果你在安装linux时没有选择启动防火墙,是这样的</div><div><div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />Chain INPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain FORWARD (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain OUTPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;</div><div>什么规则都没有.</div><div><strong>(2)清除原有规则.</strong></div><div>不管你在安装linux时是否启动了防火墙,如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.</div><div><div><font color="#0000ff">[root@tp ~]# iptables -F</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除预设表filter中的所有规则链的规则<br /><font color="#0000ff">[root@tp ~]# iptables -X</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除预设表filter中使用者自定链中的规则</div><div>我们在来看一下</div><div><font color="#0000ff">[root@tp ~]# iptables -L -n</font><br />Chain INPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain FORWARD (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain OUTPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.</div><div><span style="line-height: 1.5; font-size: 9pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]#&nbsp;</font>/etc/rc.d/init.d/iptables save</font></span></div><div></div><div><span style="line-height: 1.5; font-size: 9pt; ">这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.</span></div><div><span style="line-height: 1.5; font-size: 9pt; "><font color="#0000ff">[root@tp ~]# service iptables restart</font></span></div><div></div><div>现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧</div><div><strong>(3)设定预设规则</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -p INPUT DROP</font></div><div><font color="#0000ff">[root@tp ~]# iptables -p OUTPUT ACCEPT</font></div><div><font color="#0000ff">[root@tp ~]# iptables -p FORWARD DROP</font><br /><strong><font color="#ff0000" style="background-color: #ffffff; ">上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包</font></strong></div><div><strong><font color="#ff0000" style="background-color: #ffffff; ">而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.</font></strong></div><div><strong><font color="#ff0000" style="background-color: #ffffff; ">可以看出INPUT,FORWARD两个链采用的是允许什么包通过,而OUTPUT链采用的是不允许什么包通过.</font></strong></div><div><strong><font color="#ff0000" style="background-color: #ffffff; ">这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.</font></strong></div><div>注:如果你是远程SSH登陆的话,当你输入第一个命令回车的时候就应该掉了.因为你没有设置任何规则.</div><div>怎么办,去本机操作呗!</div><div><strong>(4)添加规则.</strong></div><div><strong><font color="#000000">首先添加INPUT链,INPUT链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链</font></strong></div><div><strong><font color="#000000">为了能采用远程SSH登陆,我们要开启22端口.</font></strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT</font></div><div><font color="#ff0000" style="background-color: #ffffff; ">[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT</font>&nbsp;<strong>(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一部,好多人都是望了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.</strong></div><div><strong>其他的端口也一样,如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链:</strong></div><div><font color="#ff0000">[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其他同理.)</font></div><div><strong>如果做了WEB服务器,开启80端口.</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT</font><br /><strong>如果做了邮件服务器,开启25,110端口.</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT<br />[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT</font><br /><strong>如果做了FTP服务器,开启21端口</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT</font></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT</font></div><div><strong>如果做了DNS服务器,开启53端口</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT</font></div><div>如果你还做了其他的服务器,需要开启哪个端口,照写就行了.</div><div>上面主要写的都是INPUT链,凡是不在上面的规则里的,都DROP</div><div><strong>允许icmp包通过,也就是允许ping,</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)</font></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT&nbsp;&nbsp;&nbsp; (INPUT设置成DROP的话)</font></div><div><div><strong>允许loopback!(不然会导致DNS无法正常关闭等问题)</strong></div><div><font color="#0000ff">IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)<br />IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)<br /></font></div></div><div>下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.</div><div><strong>减少不安全的端口连接</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP</font></div><div><font color="#0000ff">[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP</font></div><div><font color="#000000" size="2">有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会</font></div><div><font color="#000000">还有其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139（smb）,2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.</font></div><div></div><div><strong><font color="#ff0000">当然出入更安全的考虑你也可以包OUTPUT链设置成DROP,那你添加的规则就多一些,就像上边添加</font></strong></div><div><strong><font color="#ff0000">允许SSH登陆一样.照着写就行了.</font></strong></div><div></div><div><strong>下面写一下更加细致的规则,就是限制到某台机器</strong></div><div><strong>如:我们只允许192.168.0.3的机器进行SSH连接</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT</font></div><div>如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP.</div><div>24表示子网掩码数.但要记得把 /etc/sysconfig/iptables 里的这一行删了.</div><div>-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 因为它表示所有地址都可以登陆.</div><div>或采用命令方式:</div><div><font color="#0000ff">[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT</font></div><div>然后保存,我再说一边,反是采用命令的方式,只在当时生效,如果想要重起后也起作用,那就要保存.写入到/etc/sysconfig/iptables文件里.</div><div><span style="line-height: 1.5; font-size: 9pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]#&nbsp;</font>/etc/rc.d/init.d/iptables save</font></span></div><div>这样写 !192.168.0.3 表示除了192.168.0.3的ip地址</div><div>其他的规则连接也一样这么设置.</div><div></div><div><strong>在下面就是FORWARD链,FORWARD链的默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.</strong></div><div><strong>开启转发功能,(在做NAT时,FORWARD默认规则是DROP时,必须做)</strong></div><div><font color="#0000ff">[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT</font></div><div><font color="#0000ff">[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT</font></div><div><strong>丢弃坏的TCP包</strong></div><div>[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP</div><div><strong>处理IP碎片数量,防止攻击,允许每秒100个</strong></div><div><font color="#0000ff">[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT</font></div><div><strong>设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包.</strong></div><div><font color="#0000ff">[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT</font></div><div>我在前面只所以允许ICMP包通过,就是因为我在这里有限制.</div><div><font color="#000000"><strong>二,配置一个NAT表放火墙</strong></font></div><div><strong>1,查看本机关于NAT的设置情况</strong></div><div><strong>[root@tp rc.d]# iptables -t nat -L</strong><br />Chain PREROUTING (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>Chain POSTROUTING (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />SNAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; all&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; 192.168.0.0/24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; anywhere&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to:211.101.46.235</div><div>Chain OUTPUT (policy ACCEPT)<br />target&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prot opt source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; destination&nbsp;&nbsp;&nbsp;&nbsp;</div><div>我的NAT已经配置好了的(只是提供最简单的代理上网功能,还没有添加防火墙规则).关于怎么配置NAT,参考我的另一篇文章</div><div>当然你如果还没有配置NAT的话,你也不用清除规则,因为NAT在默认情况下是什么都没有的</div><div><strong>如果你想清除,命令是</strong></div><div><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -F -t nat</font></span></div><div><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New"><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -X -t nat</font></span></font></span></div><div><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New"><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New" color="#0000ff">[root@tp ~]# iptables -<span style="line-height: 1.5; font-size: 10pt; "><span style="line-height: 1.5; font-size: 10pt; "><font face="Courier New">Z</font></span></span>&nbsp;-t nat</font></span></font></span></div><div><span style="line-height: 1.5; font-size: 10pt; "></span></div><div><strong>2,添加规则</strong></div><div><strong>添加基本的NAT地址转换,(关于如何配置NAT可以看我的另一篇文章),</strong></div><div><strong>添加规则,我们只添加DROP链.因为默认链全是ACCEPT.</strong></div><div><strong>防止外网用内网IP欺骗</strong></div><div><font color="#0000ff">[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP<br />[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP<br />[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP</font><br /><strong>如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)</strong></div><div><strong>例：</strong></div><div><div><span style="line-height: 1.5; font-size: 10pt; "><strong>禁止与211.101.46.253的所有连接</strong></span></div><font color="#0000ff"></font><span style="line-height: 1.5; font-size: 10pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]# iptables&nbsp;</font>-t nat -A PREROUTING&nbsp;&nbsp;&nbsp; -d 211.101.46.253 -j DROP</font></span></div></div></div><div><div><span style="line-height: 1.5; font-size: 10pt; "><span style="line-height: 1.5; font-size: 10pt; "><strong>禁用FTP(21)端口</strong></span></span></div><div><span style="line-height: 1.5; font-size: 10pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]# iptables&nbsp;</font>-t nat -A PREROUTING -p tcp --dport 21 -j DROP</font></span></div><div><strong>这样写范围太大了,我们可以更精确的定义.</strong></div><div><span style="line-height: 1.5; font-size: 10pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]# iptables&nbsp;</font>-t nat -A PREROUTING&nbsp;&nbsp;&nbsp; -p tcp --dport 21 -d 211.101.46.253 -j DROP</font></span></div><div><span style="line-height: 1.5; font-size: 10pt; "><strong>这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.</strong></span></div></div><div><strong>按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.</strong></div><div></div><div><strong>最后：</strong></div><div><strong>drop非法连接</strong><br /><font color="#0000ff">[root@tp ~]# iptables -A INPUT&nbsp;&nbsp;&nbsp;&nbsp; -m state --state INVALID -j DROP<br />[root@tp ~]# iptables -A OUTPUT&nbsp;&nbsp;&nbsp; -m state --state INVALID -j DROP<br />[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP</font><br /><strong>允许所有已经建立的和相关的连接</strong><br /><font color="#0000ff">[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br />[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br /></font></div><p style="line-height: 1.5; margin-top: 10px; margin-bottom: 10px; "><span style="line-height: 1.5; font-size: 9pt; "><font color="#0000ff"><font face="Courier New">[root@tp ~]#&nbsp;</font>/etc/rc.d/init.d/iptables save</font></span></p><p style="line-height: 1.5; margin-top: 10px; margin-bottom: 10px; "><span style="line-height: 1.5; font-size: 9pt; "><strong>这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用．</strong></span></p><p style="line-height: 1.5; margin-top: 10px; margin-bottom: 10px; "><span style="line-height: 1.5; font-size: 9pt; "><font color="#0000ff">[root@tp ~]# service iptables restart</font></span></p><br /><strong>别忘了保存，不行就写一部保存一次．你可以一边保存，一边做实验，看看是否达到你的要求，</strong><div><strong>上面的所有规则我都试过，没有问题．</strong></div><div><strong>写这篇文章，用了我将近１个月的时间．查找资料，自己做实验，希望对大家有所帮助．如有不全及不完善的地方还请提出.</strong></div><div><strong>因为本篇文章以配置为主.关于IPTABLES的基础知识及指令命令说明等我会尽快传上,当然你可以去网上搜索一下,还是很多的.</strong></div></span><img src ="http://www.blogjava.net/xzclog/aggbug/428347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-11-24 16:15 <a href="http://www.blogjava.net/xzclog/archive/2015/11/24/428347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sed替换单引号</title><link>http://www.blogjava.net/xzclog/archive/2015/10/29/427970.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 29 Oct 2015 11:52:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/10/29/427970.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427970.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/10/29/427970.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427970.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 24px; background-color: #ffffff; "><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">&nbsp;echo "Cfoo'barxml" | sed "s/'/::/g" |&nbsp; sed 's/::/\\:/g' |&nbsp; sed "s/:/'/g"&nbsp;&nbsp;&nbsp; 替换单引号为 \'</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">------------------------</p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">sed 替换单引号'<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">echo "mmm<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">'</span>sss" &gt; test</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">cat test</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />把test内容中单引号替换成双引号<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18pt; ">sed 's/'"'"/'"''/g' test&nbsp; ==&gt; sed&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: underline; ">'s/'</span>&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: underline; ">" ' "</span>&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: underline; ">/</span>&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: underline; ">' " '</span>&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-decoration: underline; ">'/g'</span>&nbsp;test</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />解析下：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />'s/' =&gt; 要进行替换操作，后紧跟匹配字符<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />"'" =&gt; 用双引号包裹着单引号<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />/&nbsp;&nbsp; =&gt;分割符<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />'"'&nbsp; =&gt; 用单引号包裹着双引号<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />'/g' =&gt;分隔符，全局替换<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " />当然还可以使用下面这两种方法替换：<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed s#<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">\'</span>#<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">\"</span>#g test&nbsp;&nbsp; 最外层使用#分隔，</span>里面使用转义单引号，转义双引号<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed "s/<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">'</span>/<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #ff0000; ">\"</span>/g" test</span>&nbsp;&nbsp;&nbsp; 最外层使用双引号，里面使用单引号，转义双引号<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">echo "mmm'sss"&nbsp; | sed 's/'"'"/'"''/g'</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">echo "mmm'sss"&nbsp; | sed s#\'#\"#g</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">echo "mmm'sss"&nbsp; | sed "s/'/\"/g"</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">awk '{print "sed '\''s/"$1"\\t/"$2"\\t/g'\'' ref_Zv9_top_level.bed.chrom"}' ref_Zv9_top_level.gff3_transID</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed 's/rna10004\t/XR_223343.1\t/g' ref_Zv9_top_level.bed.chrom</span><br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed 's/rna10000\t/XR_223342.1\t/g' ref_Zv9_top_level.bed.chrom</span></p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed 's/\]/\"/g'&nbsp;&nbsp; 替换]为&#8220;<br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; " /></span></p><p style="margin-top: 10px; margin-bottom: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">sed 's/\[/\"/g'&nbsp;&nbsp;&nbsp;<span style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-size: 18px; ">替换[为&#8220;</span></span></p></span><img src ="http://www.blogjava.net/xzclog/aggbug/427970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-10-29 19:52 <a href="http://www.blogjava.net/xzclog/archive/2015/10/29/427970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell中${}的妙用</title><link>http://www.blogjava.net/xzclog/archive/2015/10/29/427967.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Thu, 29 Oct 2015 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/10/29/427967.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427967.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/10/29/427967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427967.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: 宋体; line-height: 28px; background-color: #ffffff; "><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">shell中${}的妙用</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">1. 截断功能</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file#*/}: &nbsp; &nbsp; &nbsp; 拿掉第一条/及其左边的字符串：dir1/dir2/dir3/my.file.txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file##*/}: &nbsp; &nbsp;拿掉最后一条/及其左边的字符串：my.file.txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file#*.}: &nbsp; &nbsp; &nbsp; 拿掉第一个.及其左边的字符串：file.txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file##*.}: &nbsp; &nbsp;拿掉最后一个.及其左边的字符串：txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file%/*}: &nbsp; &nbsp; 拿掉最后条/及其右边的字符串：/dir1/dir2/dir3</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file%%/*}: 拿掉第一条/及其右边的字符串：(空值)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file%.*}: &nbsp; &nbsp;拿掉最后一个.及其右边的字符串：/dir1/dir2/dir3/my.file</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file%%.*}: 拿掉第一个.及其右边的字符串：/dir1/dir2/dir3/my</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">记忆的方法为：</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">[list]#是去掉左边, ##最后一个</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">&nbsp; &nbsp; &nbsp; %是去掉右边, %%第一个</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">2. 字符串提取&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">单一符号是最小匹配﹔两个符号是最大匹配。</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:0:5}：提取最左边的 5 个字节：/dir1</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:5:5}：提取第 5 个字节右边的连续 5 个字节：/dir2</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">3. 字符串替换</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file/dir/path}：将第一个 dir 提换为 path：/path1/dir2/dir3/my.file.txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file//dir/path}：将全部 dir 提换为 path：/path1/path2/path3/my.file.txt</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">4. 针对不同的变量状态赋值(没设定、空值、非空值)：</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file-my.file.txt}: 若$file没有设定，则使用my.file.txt作返回值。(空值及非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:-my.file.txt}:若$file没有设定或为空值，则使用my.file.txt作返回值。(非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file+my.file.txt}: 若$file设为空值或非空值，均使用my.file.txt作返回值。(没设定时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:+my.file.txt}:若$file为非空值，则使用my.file.txt作返回值。(没设定及空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file=my.file.txt}: 若$file没设定，则使用my.file.txt作返回值，同时将$file 赋值为 my.file.txt。(空值及非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:=my.file.txt}:若$file没设定或为空值，则使用my.file.txt作返回值，同时将 $file 赋值为 my.file.txt。(非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file?my.file.txt}: 若$file没设定，则将my.file.txt输出至 STDERR。(空值及非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${file:?my.file.txt}:若$file没设定或为空值，则将my.file.txt输出至STDERR。(非空值时不作处理)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">注意:&nbsp;</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">":+"的情况是不包含空值的.</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">":-", ":="等只要有号就是包含空值(null).</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">5. 变量的长度</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${#file}</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">6. 数组运算</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">A=(a b c def)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${A[@]} 或 ${A[*]} 可得到 a b c def (全部组数)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${A[0]} 可得到 a (第一个组数)，${A[1]} 则为第二个组数...</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${#A[@]} 或 ${#A[*]} 可得到 4 (全部组数数量)</div><div style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; border-right-width: 0px; list-style-type: none; list-style-position: initial; list-style-image: initial; ">${#A[0]} 可得到 1 (即第一个组数(a)的长度)，${#A[3]} 可得到 3 (第四个组数(def)的长度)</div></span><img src ="http://www.blogjava.net/xzclog/aggbug/427967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-10-29 16:18 <a href="http://www.blogjava.net/xzclog/archive/2015/10/29/427967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux find命令忽略目录的查找方法</title><link>http://www.blogjava.net/xzclog/archive/2015/10/28/427938.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 28 Oct 2015 03:33:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/10/28/427938.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427938.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/10/28/427938.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427938.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #444444; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; line-height: 25px; "><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">在linux操作系统中，find命令非常强大，在文件与目录的查找方面可谓无所不至其极，如果能结合xargs命令使得，更是强大无比。</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">以下来看看find命令忽略目录查找的用法吧。</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">例1，根据文件属性查找：</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode66" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find . -type f -name "*config*" ! -path "./tmp/*" ! -path "./scripts/*" ! -path "./node_modules/*"&nbsp;<br />Explanation:<br />find . - Start find from current working directory (recursively by default)&nbsp;<br />-type f - Specify to find that you only want files in the results&nbsp;<br />-name "*_peaks.bed" - Look for files with the name ending in _peaks.bed&nbsp;<br />! -path "./tmp/*" - Exclude all results whose path starts with ./tmp/&nbsp;<br />! -path "./scripts/*" - Also exclude all results whose path starts with ./scripts/</div><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "></p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">例2，根据文件内容查找：</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode67" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />grep -n -r --exclude-dir='node_modules' --exclude-dir='logs' --exclude="nohup.out" 192 *</div></span><br /><br /><br /><br /><span class="Apple-style-span" style="color: #444444; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; line-height: 25px; "><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">使用find命令在linux系统中查找文件时，有时需要忽略某些目录，可以使用 -prune 参数来进行过滤。<br />不过必须注意：要忽略的路径参数要紧跟着搜索的路径之后，否则该参数无法起作用。</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">例如：指定搜索/home/zth目录下的所有文件，但是会忽略/home/zth/astetc的路径：</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode59" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find /home/zth -path "/home/zth/astetc" -prune -o -type f -print</div><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "></p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">按照文件名来搜索则为：</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode60" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find /home/zth -path "/home/zth/astetc" -prune -o -type f -name "cdr_*.conf" -print</div><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "></p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">要忽略两个以上的路径如何处理？</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode61" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find /home/zth /( -path "/home/zth/astetc" -o -path "/home/zth/etc" /) -prune -o -type f -print<br />find /home/zth /( -path "/home/zth/astetc" -o -path "/home/zth/etc" /) -prune -o -type f -name "cdr_*.conf" -print</div><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "></p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">注意：/( 和/) 前后都有空格。</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">查找某个文件包含内容，以下语句可以解决目录带空格的问题：</p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "><br /></p><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode62" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find ./ -name "mysql*" -print0 |xargs -0 grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"</div><br />如果目录不带空格，可以这样：<br />&nbsp;<br /><br /><div class="msgheader" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; border-top-color: #0099cc; border-top-width: 1px; border-top-style: solid; padding-left: 3px; font-size: 12px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #f6fbff; margin-top: 3px; margin-right: auto; margin-bottom: 0px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; "><div class="right" style="float: right; "><span style="cursor: pointer; "><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode63" style="clear: both; border-right-color: #0099cc; border-right-width: 1px; border-right-style: solid; padding-right: 3px; padding-left: 3px; font-size: 14px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: #ddedfb; margin-top: 0px; margin-right: auto; margin-bottom: 3px; margin-left: auto; overflow-x: hidden; overflow-y: hidden; border-left-color: #0099cc; border-left-width: 1px; border-left-style: solid; word-break: break-all; border-bottom-color: #0099cc; border-bottom-width: 1px; border-bottom-style: solid; word-wrap: break-word; "><br />find ./ -name "mysql*" |xargs grep "SELECT lead_id FROM vicidial_list where vendor_lead_code"</div><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; "></p><p style="margin-top: 13px; margin-right: 0px; margin-bottom: 13px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; ">通过以上的例子，大家应该可以掌握find命令查找文件时，忽略相关目录的方法了。</p></span><img src ="http://www.blogjava.net/xzclog/aggbug/427938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-10-28 11:33 <a href="http://www.blogjava.net/xzclog/archive/2015/10/28/427938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CURL常用命令</title><link>http://www.blogjava.net/xzclog/archive/2015/09/23/427449.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Wed, 23 Sep 2015 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/xzclog/archive/2015/09/23/427449.html</guid><wfw:comment>http://www.blogjava.net/xzclog/comments/427449.html</wfw:comment><comments>http://www.blogjava.net/xzclog/archive/2015/09/23/427449.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xzclog/comments/commentRss/427449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xzclog/services/trackbacks/427449.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: Verdana, 'Lucida Grande', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; background-color: #ffffff; "><p style="margin-top: 10px; margin-bottom: 10px; ">原文地址：&nbsp;<a href="http://www.thegeekstuff.com/2012/04/curl-examples/" style="color: #1d58d1; text-decoration: none; ">http://www.thegeekstuff.com/2012/04/curl-examples/</a></p><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong><br />下载单个文件，默认将输出打印到标准输出中(STDOUT)中</strong></span></p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; ">curl http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.centos.org</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>通过-o/-O选项保存下载的文件到指定的文件中：</strong></span><br />-o：将文件保存为命令行中指定的文件名的文件中<br />-O：使用URL中默认的文件名保存文件到本地</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 将文件下载到本地并命名为mygettext.html
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -o mygettext.html http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.gnu.org/software/gettext/manual/gettext.html</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 将文件保存到本地并命名为gettext.html
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> curl -O http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.gnu.org/software/gettext/manual/gettext.html</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">同样可以使用转向字符"&gt;"对输出进行转向输出</p><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>同时获取多个文件</strong></span></p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl -O URL1 -O URL2</pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">若同时从同一站点下载多个文件时，curl会尝试重用链接(connection)。</p><p style="margin-top: 10px; margin-bottom: 10px; ">通过-L选项进行重定向<br />默认情况下CURL不会发送HTTP Location headers(重定向).当一个被请求页面移动到另一个站点时，会发送一个HTTP Loaction header作为请求，然后将请求重定向到新的地址上。<br />例如：访问google.com时，会自动将地址重定向到google.com.hk上。</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 1</span> curl http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.google.com</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 2</span> &lt;HTML&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 3</span> &lt;HEAD&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 4</span>     &lt;meta http-equiv=<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">content-type</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> content=<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">text/html;charset=utf-8</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span>&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 5</span>     &lt;TITLE&gt;<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">302</span> Moved&lt;/TITLE&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 6</span> &lt;/HEAD&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 7</span> &lt;BODY&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 8</span>     &lt;H1&gt;<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">302</span> Moved&lt;/H1&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; "> 9</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">    The document has moved
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">10</span>     &lt;A HREF=<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">http://www.google.com.hk/url?sa=p&amp;amp;hl=zh-CN&amp;amp;pref=hkredirect&amp;amp;pval=yes&amp;amp;q=http://www.google.com.hk/&amp;amp;ust=1379402837567135amp;usg=AFQjCNF3o7umf3jyJpNDPuF7KTibavE4aA</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span>&gt;here&lt;/A&gt;<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">.
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">11</span> &lt;/BODY&gt;
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">12</span> &lt;/HTML&gt;</pre><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; ">上述输出说明所请求的档案被转移到了http://www.google.com.hk。</p><p style="margin-top: 10px; margin-bottom: 10px; ">这是可以通过使用-L选项进行强制重定向</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 让curl使用地址重定向，此时会查询google.com.hk站点
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -L http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.google.com</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>断点续传</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; ">通过使用-C选项可对大文件使用断点续传功能，如：</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 当文件在下载完成之前结束该进程
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> $ curl -O http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.gnu.org/software/gettext/manual/gettext.html</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> ##############             <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">20.1</span>%
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> # 通过添加-<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">C选项继续对该文件进行下载，已经下载过的文件不会被重新下载
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">6</span> curl -C - -O http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.gnu.org/software/gettext/manual/gettext.html</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">7</span> ###############            <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">21.1</span>%</pre><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>对CURL使用网络限速</strong></span><br />通过--limit-rate选项对CURL的最大网络使用进行限制</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> # 下载速度最大不会超过1000B/<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">second
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> curl --limit-rate 1000B -O http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.gnu.org/software/gettext/manual/gettext.html</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">下载指定时间内修改过的文件</p><p style="margin-top: 10px; margin-bottom: 10px; ">当下载一个文件时，可对该文件的最后修改日期进行判断，如果该文件在指定日期内修改过，就进行下载，否则不下载。<br />该功能可通过使用-z选项来实现：</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> # 若yy.html文件在2011/<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">12</span>/<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">21之后有过更新才会进行下载
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -z <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">21</span>-Dec-<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">11</span> http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">www.example.com/yy.html</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>CURL授权</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; ">在访问需要授权的页面时，可通过-u选项提供用户名和密码进行授权</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl -<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">u username:password URL
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 通常的做法是在命令行只输入用户名，之后会提示输入密码，这样可以保证在查看历史记录时不会将密码泄露
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> curl -u username URL</pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><strong><span style="font-size: 15px; ">从FTP服务器下载文件</span></strong></p><p style="margin-top: 10px; margin-bottom: 10px; ">CURL同样支持FTP下载，若在url中指定的是某个文件路径而非具体的某个要下载的文件名，CURL则会列出该目录下的所有文件名而并非下载该目录下的所有文件</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 列出public_html下的所有文件夹和文件
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -u ftpuser:ftppass -O <span style="font-size: 12px !important; line-height: 1.5 !important; color: #0000ff; ">ftp</span>:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">ftp_server/public_html/</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 下载xss.php文件
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> curl -u ftpuser:ftppass -O <span style="font-size: 12px !important; line-height: 1.5 !important; color: #0000ff; ">ftp</span>:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">ftp_server/public_html/xss.php</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>上传文件到FTP服务器</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; ">通过 -T 选项可将指定的本地文件上传到FTP服务器上</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 将myfile.txt文件上传到服务器
curl </span>-u ftpuser:ftppass -T myfile.txt <span style="font-size: 12px !important; line-height: 1.5 !important; color: #0000ff; ">ftp</span>:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">ftp.testserver.com</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">
# 同时上传多个文件
curl </span>-u ftpuser:ftppass -T <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">{file1,file2}</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #0000ff; ">ftp</span>:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">ftp.testserver.com</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; ">
# 从标准输入获取内容保存到服务器指定的文件中
curl </span>-u ftpuser:ftppass -T - <span style="font-size: 12px !important; line-height: 1.5 !important; color: #0000ff; ">ftp</span>:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">ftp.testserver.com/myfile_1.txt</span></pre><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; "><strong><span style="font-size: 15px; ">获取更多信息</span></strong></p><p style="margin-top: 10px; margin-bottom: 10px; ">通过使用 -v 和 -trace获取更多的链接信息</p><p style="margin-top: 10px; margin-bottom: 10px; "><strong><span style="font-size: 15px; ">通过字典查询单词</span></strong></p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 查询bash单词的含义
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl dict:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">dict.org/d:bash</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 列出所有可用词典
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> curl dict:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">dict.org/show:db</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">6</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">7</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 在foldoc词典中查询bash单词的含义
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">8</span> curl dict:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">dict.org/d:bash:foldoc</span></pre><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>为CURL设置代理</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; ">-x 选项可以为CURL添加代理功能</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 指定代理主机和端口
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -x proxysever.test.com:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #800080; ">3128</span> http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">google.co.in</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 14pt; "><strong>其他网站整理</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>保存与使用网站cookie信息</strong></span></p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 将网站的cookies信息保存到sugarcookies文件中
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -D sugarcookies http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">localhost/sugarcrm/index.php</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 使用上次保存的cookie信息
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> curl -b sugarcookies http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">localhost/sugarcrm/index.php</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; "><span style="font-size: 15px; "><strong>传递请求数据</strong></span></p><p style="margin-top: 10px; margin-bottom: 10px; ">默认curl使用GET方式请求数据，这种方式下直接通过URL传递数据<br />可以通过 --data/-d 方式指定使用POST方式传递数据</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># GET
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">2</span> curl -u username https:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">api.github.com/user?access_token=XXXXXXXXXX</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">3</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">4</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># POST
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">5</span> curl -u username --data <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">param1=value1&amp;param2=value</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> https:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">api.github.com</span>
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">6</span> 
<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">7</span> <span style="font-size: 12px !important; line-height: 1.5 !important; color: #000000; "># 也可以指定一个文件，将该文件中的内容当作数据传递给服务器端
</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">8</span> curl --data @filename https:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">github.api.com/authorizations</span></pre><div class="cnblogs_code_toolbar" style="margin-top: 5px; background-color: #f5f5f5; "><span class="cnblogs_code_copy" style="font-size: 12px !important; line-height: 1.5 !important; padding-right: 5px; "><a href="http://www.cnblogs.com/gbyukg/p/3326825.html" title="复制代码" style="color: #1d58d1; text-decoration: none; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; "><img src="http://common.cnblogs.com/images/copycode.gif" alt="复制代码" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; background-color: #f5f5f5 !important; border-top-style: none !important; border-right-style: none !important; border-bottom-style: none !important; border-left-style: none !important; border-width: initial !important; border-color: initial !important; " /></a></span></div></div><p style="margin-top: 10px; margin-bottom: 10px; ">注：默认情况下，通过POST方式传递过去的数据中若有特殊字符，首先需要将特殊字符转义在传递给服务器端，如value值中包含有空格，则需要先将空格转换成%20，如：</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl -d <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">value%201</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">hostname.com</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">在新版本的CURL中，提供了新的选项 --data-urlencode，通过该选项提供的参数会自动转义特殊字符。</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl --data-urlencode <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">value 1</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">hostname.com</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">除了使用GET和POST协议外，还可以通过 -X 选项指定其它协议，如：</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl -I -X DELETE https:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">api.github.cim</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">上传文件</p><div class="cnblogs_code" style="font-size: 12px !important; margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; color: #000000; max-width: 900px; "><pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; margin-right: 0px; margin-left: 22px; font-size: 12px !important; font-family: 'Courier New' !important; "><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008080; ">1</span> curl --form <span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">fileupload=@filename.txt</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #800000; ">"</span> http:<span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">//</span><span style="font-size: 12px !important; line-height: 1.5 !important; color: #008000; ">hostname/resource</span></pre></div><p style="margin-top: 10px; margin-bottom: 10px; ">&nbsp;</p><p style="margin-top: 10px; margin-bottom: 10px; "><a href="http://curl.haxx.se/docs/httpscripting.html" style="color: #1d58d1; text-decoration: none; ">http://curl.haxx.se/docs/httpscripting.html</a></p></span><img src ="http://www.blogjava.net/xzclog/aggbug/427449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xzclog/" target="_blank">xzc</a> 2015-09-23 16:55 <a href="http://www.blogjava.net/xzclog/archive/2015/09/23/427449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>