<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>https://blog.liuts.com/index.php</link> 
<description><![CDATA[互联网运维与架构]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>https://blog.liuts.com/post/210/</link>
<title><![CDATA[SDR1.0(SHELL+Dialog+RSA)Linux主机管理[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Mon, 02 Aug 2010 03:27:37 +0000</pubDate> 
<guid>https://blog.liuts.com/post/210/</guid> 
<description>
<![CDATA[ 
	<strong>前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;07年上线的一个Linux集中式管理，基于bash shell+Dialog+mysql+python+mod_perl来实现，现在共享出来，希望平台的思想及实现方法能够给大家一些帮助，以下为系统的说明文档。<br/><br/><strong>一、开发目的</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了使管理Linux服务器群变得更安全、简单、高效、智能。一定程度上缩小了维护成本，提高工作效率，做好应付将来管理上千台Linux服务器打好基础。<br/><br/><strong>二、背景</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前管理Linux服务器的方式还是走SSH到终端的管理方式，此方式存在一定的全安隐患。管理这些服务器的passwd就很头疼，稍微不注意，passwd会被黑客获取，造成灾难性的后果。管理应用方面，同样也是通过管理员电脑到每台服务器去操作，同样的一个操作就得到每台服务器上面重复地去做，消耗了很多时间与精力。在服务器性能监控方面，目前在应用Cacti、nagios平台，全此方式让管理员很被动，一般都是等到故障发生了才发现问题，影响了用户体验。主要原因是不能提前了解到服务器的健康状态。没有实时的跟踪、报警、分析机制。以后服务器会翻倍地增加，目前这种管理方式很明显已经不适应发展的需求。<br/><br/><strong>三、系统特点</strong><br/><span style="color: #008000;">安全性</span>-管理系统具有很好的安全性，通过2048位RSA密钥进行监控服务器与被监控服务器的认证，可以省去输入繁琐和易泄露的密码。系统管理员只要对主监控服务器做好安全配置并保管好私钥即可，被监控服务器外网远程终端默认将会被关闭，系统会定期扫描被监控服务器内/外网安全情况，生成分析结果给管理员。系统管理员可以定期更换公钥、私钥来提高安全系数。登录监控平台需要密码(perl pack加密)认证，每个操作窗口都加入会话认证，整个系统编译后的文件都是以二进制方式存放。<br/><br/><span style="color: #008000;">智能化</span>-监控服务器会根据被监控服务器上的应用部署相应的代理客户端，由代理客户端来检查、监控、分析本服务器的状态，分析结果将通过邮件、WEB、短信通知给系统管理员。让管理员不间隔了解到服务器的状态信息，代理客户端同时也具备管理本服务器应用的权力，当应用发生故障时它会自我修复并通知管理员。<br/><br/><span style="color: #008000;">易用性</span>-系统是基于Linux shell模式下的对话框展示，中文环境，同时也支持鼠标操作，功能清晰明了，操作时系统也会提示相应的文字提示，非常简单。<br/><br/><span style="color: #008000;">高效率</span>-新上架的服务器只要进行如下三步即可上线提供服务，即添加服务器->初始化->部署应用。如果要在多台服务器上进行一样的操作，只要选择好操作事件跟操作对象就可以了。<br/><br/><span style="color: #008000;">灵活性</span>-升级被监控服务器上的对象很方便，只要在监控服务器上更新好相应对象代码，系统会自动到被监控服务器上去更新它们。<br/><br/><span style="color: #008000;">可扩展性</span>-系统提供的高级应用功能，其它同事也可以编写自己的模块，根据不同应用可以定制不同的功能模块，系统提供这样的接口。<br/><br/><strong>4、系统网络架构图</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=152" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=152" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>5、系统流程图</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=155" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=155" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>6、系统主界面</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=154" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=154" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>四、系统主要功能</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDR1.0是基于Linux bash shell+mysql+python+mod_perl工具开发，功能覆盖了Linux常用常用操作，下面详细介绍系统主要功能：<br/>1、系统目录结构<br/>/<br/>│&nbsp;&nbsp;add_firewall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加防火墙<br/>│&nbsp;&nbsp;add_server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;添加服务器<br/>│&nbsp;&nbsp;add_app&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部署应用<br/>│&nbsp;&nbsp;add_agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部署代理<br/>│&nbsp;&nbsp;authorized_keys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公钥<br/>│&nbsp;&nbsp;checkonline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录验证<br/>│&nbsp;&nbsp;config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配制文件<br/>│&nbsp;&nbsp;c_server_class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多选服务器列表<br/>│&nbsp;&nbsp;go&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;登录<br/>│&nbsp;&nbsp;identity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;私钥<br/>│&nbsp;&nbsp;list_server_do&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择服务器<br/>│&nbsp;&nbsp;list_server_info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器信息<br/>│&nbsp;&nbsp;main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;功能选择<br/>│&nbsp;&nbsp;msgbox&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提示信息<br/>│&nbsp;&nbsp;r_server_class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单选服务器<br/>├─tyapp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用安装脚本<br/>│<br/>├─bin<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nohup.out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfile<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syslog2mysql.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syslogs to mysql shell<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TyserverScan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器端口扫描(外网)<br/>│<br/>├─cron<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TyserverwebScan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验证WEB状态主程序<br/>│<br/>├─document<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开发文档<br/>│<br/>├─key<br/>│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;identitybak&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old key<br/>│<br/>├─logs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统操作日志目录<br/>├─tyagent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代理程序目录<br/>└─tysysadmin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前端cgi-bin目录<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─cgi-bin<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.pl<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index.cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模块入口程序<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmail.cgi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;邮件报警接口<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─css<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.CSS<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;├─js<br/>&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyright.js<br/>&nbsp;&nbsp;&nbsp;&nbsp;│<br/>&nbsp;&nbsp;&nbsp;&nbsp;└─modules<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;└─Apache<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerLoglist.pm&nbsp;&nbsp;服务器日志列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerScanport.pm&nbsp;&nbsp;服务器端口扫描<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServerScanweb.pm&nbsp;&nbsp;服务器状态扫描<br/><br/><strong>五、功能介绍</strong><br/><span style="color: #00008B;">5.1服务器列表</span><br/>[功能]列表显示已添加至系统的服务器及其状态。<br/>[操作方法]选择添加服务器->选择服务器分类->列表出此类别服务器信息，包括LAN IP、WAN IP、日志客户端、SSH终端、防火墙、部署代理等等信息。<br/><br/><span style="color: #00008B;">5.2添加服务器</span><br/>[功能]添加服务器到系统。<br/>[操作方法]选择添加服务器->选择服务器分类->输入服务器名称、内网IP、外网IP，上下方向键切换输入框，这几项都不允许为空，输入完毕后点[Add]。<br/><br/><span style="color: #00008B;">5.3安全检测</span><br/>[功能]扫描服务器内网端口开放情况。<br/>[操作方法]选择安全检测->选择服务器分类->选择服务器->显示扫描进度条并将结果写入数据库。<br/><span style="color: #00008B;">5.4部署代理</span><br/>[功能]给服务器部署代理。<br/>[操作方法]选择部署代理->选择服务器分类->选择服务器->选择代理类型->[OK]。<br/><br/><span style="color: #00008B;">5.5连接状态</span><br/>[功能]查看已添加的被监控服务器与主监控服务器的连接状态，在做其它操作之前查看此项是一个好习惯。<br/>[操作方法]选择连接状态->显示探测进度条->生成结果。<br/><br/><span style="color: #00008B;">5.6更换证书</span><br/>[功能]更新主、被监控服务器的私、公钥，为了保障整个安全，定期更换证书是很有必要的。<br/>[操作方法]选择更换证->显示探测进度条。<br/><br/><span style="color: #00008B;">5.7管理终端</span><br/>[功能]开/关远程访问被监控服务器SSH终端。<br/>[操作方法] 选择管理终终->选择服务器分类->选择服务器->（开/关）->[OK]。<br/><br/><span style="color: #00008B;">5.8操作日志</span><br/>[功能]查看系统操作日志，方便查看历史操作记录。<br/>[操作方法]选择操作日志->选择日期(TAB切换年/月/日，方向键选择日)->显示操作日志记录。<br/><br/><span style="color: #00008B;">5.9部署日志</span><br/>[功能]添加被监控服务器系统日志到日志服务器，实时观察其状态。<br/>[操作方法] 选择部署日志->选择服务器分类->选择服务器(显示未添加的服务器列表) ->[OK]。<br/><br/><span style="color: #00008B;">6.0部署应用</span><br/>[功能]给服务器部署应用。<br/>[操作方法]选择部署应用->选择服务器分类->选择服务器->选择应用类型->[OK]。<br/><br/><span style="color: #00008B;">6.1部署防火墙</span><br/>[功能]给服务器部署防火墙(Firewall)。<br/>[操作方法]选择部署应用->选择服务器分类->选择服务器->选择防火墙类型->[OK]。<br/><br/><span style="color: #00008B;">6.2初始化</span><br/>[功能]初始化服务器，优化系统内核、删除无用用户、停止无用服务等等。<br/>[操作方法]选择初始化->选择服务器分类->选择服务器-> [OK]。<br/><br/><span style="color: #00008B;">6.3高级应用</span><br/>[功能]本系统扩展的一个接口。<br/>[操作方法]选择高级应用->进入命令行状态->运行相应接口(参数)。<br/><br/><span style="color: #00008B;">6.4用户管理</span><br/>[功能]本系统用户帐号管理。<br/>[操作方法]选择用户管理->开发中…。<br/><br/><span style="color: #00008B;">6.5退出文字</span><br/>[功能]退出本系统。<br/>[操作方法]选择退出->操作结束。<br/><br/><strong>六、截图说明</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=151" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=151" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[应用分类]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=150" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=150" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[服务器清单]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=149" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=149" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[添加服务器]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=145" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=145" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安装应用平台]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=146" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=146" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[操作日志]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=147" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=147" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安装功能代理]<br/><br/><a href="https://blog.liuts.com/attachment.php?fid=148" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=148" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="800"/></a><br/>[安全扫描]<br/><br/><strong>七、使用指南</strong><br/>1、通过ssh登录监控管理器。<br/>2、[root@sysadmin ~]#go<br/>3、输入管理员密码：<br/>4、验证通过进入管理窗口。<br/><br/><strong>八、前端应用</strong><br/>1、定制作业<br/><textarea name="code" class="c" rows="15" cols="100">
* */1 * * * /var/www/tyAdmin/cron/TyserverwebScan
30 0 * * * /var/www/tyAdmin/cron/TyserverScan
</textarea><br/>2、配置<br/>将ServerLoglist.pm、ServerScanport.pm、ServerScanweb.pm复制到/opt/apache/perl/modules/Apache目录<br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
<VirtualHost 192.168.100.10:80>
 ServerName cgi.sina.com.cn
 ServerAdmin liutiansi@gmail.com
 ErrorLog /var/log/apache/cgi.sina.com.cn/error.log
 CustomLog /var/log/apache/cgi.sina.com.cn/access.log combined
 DocumentRoot /var/www/tysysadmin
 ScriptAlias /cgi-bin/ "/var/www/tysysadmin/cgi-bin/"

 <Directory "/var/www/tysysadmin/cgi-bin">
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlResponseHandler ModPerl::Registry
&nbsp;&nbsp;PerlOptions +ParseHeaders
&nbsp;&nbsp;PerlSendHeader On
&nbsp;&nbsp;Options +ExecCGI
&nbsp;&nbsp;Order Deny,Allow
&nbsp;&nbsp;Deny from all
&nbsp;&nbsp;Allow from 192.168.100.0/255.255.255.0
 </Directory>

 <Directory "/opt/apache/perl/modules/Apache">
&nbsp;&nbsp;Order Deny,Allow
&nbsp;&nbsp;Deny from all
&nbsp;&nbsp;Allow from 192.168.100.0/255.255.255.0
 </Directory>

PerlRequire /var/www/tysysadmin/cgi-bin/index.cgi
 <Location /ServerLoglist>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerLoglist
 </Location>

 <Location /ServerScanport>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerScanport
 </Location>

 <Location /ServerScanweb>
&nbsp;&nbsp;SetHandler perl-script
&nbsp;&nbsp;PerlHandler Apache::ServerScanweb
 </Location>
</VirtualHost>
</textarea><br/><br/>3、服务器日志时时跟踪<br/>http://192.168.100.10/ServerLoglist<br/><br/>4、服务器端口扫描<br/>http://192.168.100.10/ServerScanport<br/><br/>5、服务器WEB状态监控<br/>http://192.168.100.10/ServerScanweb<br/><br/><strong>九、安装</strong><br/>yum -y install dialog<br/>1、tar -zxvf SDR1.0.tar.gz<br/>2、cd SDR1.0<br/>3、vi config 修改成实际参数<br/><textarea name="code" class="c" rows="15" cols="100">
sysadmin_path="/home/SDR1.0"
mysql_bin="/usr/local/mysql/bin/mysql"&nbsp;&nbsp;&nbsp;&nbsp; #mysql客户端连接器位置
mysql_host="localhost"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#数据库主机
mysql_user="systemuser"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #数据库帐号
mysql_passwd="123456"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #数据库密码
scan_port="U:53,161,T:21-25,80,81,3306,8080"&nbsp;&nbsp;&nbsp;&nbsp;#安全扫描端口
ConnectTimeout="5"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#连接远程服务器outime
system_info="天涯Linux服务器管理系统SDR1.0"
copyright_info="&#92;Zb&#92;Z7天涯在线网络有限公司 网络系统部&nbsp;&nbsp; 作者：刘天斯&nbsp;&nbsp;&nbsp;&nbsp;邮箱：lliutiansi@gmail.com"
</textarea><br/><br/>4、创建Mysql数据库"sysadmin"，并导入SDR1.0/sql/sysadmin.sql<br/>5、修改系统环境<br/>&nbsp;&nbsp;5.1环境变量：vi /etc/profile<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>export PATH=$PATH:/usr/local/bin:/home/SDR1.0<br/></div></div><br/>&nbsp;&nbsp;5.2配置ssh链接<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>ln -s /usr/bin/ssh /usr/bin/sshto<br/></div></div><br/>&nbsp;&nbsp;5.3、修改mysql客户端编码<br/>&nbsp;&nbsp;vi /etc/my.cnf<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>[client]<br/> default-character-set=utf8<br/></div></div><br/><br/>6、安装nmap<br/>yum -y install nmap<br/><br/>7、生成公私钥<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#cd /home/SDR1.0<br/>删除原公私钥<br/>#rm -rf authorized_keys identity<br/>#ssh-keygen -t dsa -b 2048 -f identity<br/>#mv identity.pub authorized_keys<br/>#chmod 600 identity authorized_keys<br/></div></div><br/>8、因修改了环境变量，退出终端exit再登录操作系统，进入/home/SDR1.0，运行"go"，默认密码为“123456”。OVER：）<br/><br/><strong>十、开发变量说明</strong><br/><textarea name="code" class="c" rows="15" cols="100">
1、go[$go_encrypt][服务器加密后的密码][全局]
2、go[$outmessage][密码不正确提示变量][全局(关闭窗口后失效)]
3、checkonline[$outmessage][检查是否登录][全局]
4、当前进程PID：main[$main_pid][登录进程号][全局]
5、选择当前功能值：main[$main_value][功能ID号][全局]
6、选择当前服务器类别值：c_server_class[$server_class_value][服务器列表][全局]
7、选择当前服务器类别值：r_server_class[$server_class_value][服务器列表][全局]
8、选择当前服务器值：$server_value [服务器内网IP][全局]
＃------------------------------------------------------------
*全局:对下级窗口有效，生命期为主窗口关闭。
</textarea><br/><strong>十一、处理模块代码</strong><br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/sh
#Function:select checklist server
#Writer:liutiansi
#Mail:lliutiansi@gmail.com
#Date:2007-11-03 23:57
source config
source checkonline

list_server_do_tempfile=`list_server_do_tempfile 2>/dev/null` &#124;&#124; list_server_do_tempfile=/tmp/server$main_pid
trap "rm -f $list_server_do_tempfile /tmp/add_firewall$main_pid /tmp/add_agent$main_pid /tmp/add_app$main_pid" 0 1 2 5 15
#过滤服务器列表
case $main_value in
&nbsp;&nbsp;9)
&nbsp;&nbsp;&nbsp;&nbsp;sqltj=" and TOLOG='N'"
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;16)
&nbsp;&nbsp;&nbsp;&nbsp;sqltj=" and TOFIREWALL='N'"
&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
esac
list_server_do_result=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVER,SERVERIP,SERVERNAME,TOLOG,TOLD,TOFIREWALL from sysadmin.ty_server where SERVERCLASS='$server_class_value'$sqltj order by SERVER;" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;awk '&#123;print $2" "$3"　日志["$5"]　终端["$6"]　防火墙["$7"] "$4&#125;'`
list_server_do_result1=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVICENAME from sysadmin.ty_system_service where ID='$main_value';" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;awk '&#123;print $2&#125;'`"->"
returncode=0
while test $returncode != 1 && test $returncode != 250
do
&nbsp;&nbsp;exec 3>&1
&nbsp;&nbsp;dialog --clear --colors --backtitle "$copyright_info" --title "$system_info" &#92;
&nbsp;&nbsp;--checklist "&#92;n&#92;n$list_server_do_result1选择服务器：" 25 70 14 &#92;
&nbsp;&nbsp;$list_server_do_result &#92;
&nbsp;&nbsp;2>$list_server_do_tempfile 

&nbsp;&nbsp;returncode=$?
&nbsp;&nbsp;
&nbsp;&nbsp;#对returncode值进行选择分支;
&nbsp;&nbsp;case $returncode in
&nbsp;&nbsp;#0为点击[OK]按钮；
&nbsp;&nbsp;0)
&nbsp;&nbsp;&nbsp;&nbsp;server_value=`cat $list_server_do_tempfile`
&nbsp;&nbsp;&nbsp;&nbsp;export server_value
&nbsp;&nbsp;&nbsp;&nbsp;#对功能ID进行选择
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;counter=`echo "$server_value"&#124;awk '&#123;print NF&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;Gap=`expr 100 / $counter`
&nbsp;&nbsp;&nbsp;&nbsp;num=0
&nbsp;&nbsp;&nbsp;&nbsp;case $main_value in
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;###########################################安全扫描########################################
&nbsp;&nbsp;&nbsp;&nbsp;3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#通过nmap扫描服务器端口；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`nmap -p $scan_port $vlist&#124;awk 'NR==5,NR==12&#123;print $1"状态："$2&#125;' 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#将扫描结果入库；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set SCANPORT='$result' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result_up_str="[√]ok:$vlist扫描结果$result已成功入库！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist扫描结果$result入库失败！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在扫描$vlist...&#92;n-------------------------------------------------&#92;n$result"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　开始扫描......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署代理########################################
&nbsp;&nbsp;&nbsp;&nbsp;4)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用代理选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_agent
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择代理的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agent_value=`cat /tmp/add_agent$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$agent_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$agent_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#循环代理个数；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for agentkey in $agent_value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agentkey=`echo "$agentkey"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#获取代理crontab类型；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AGENTCRONTAB=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select AGENTCRONTAB from sysadmin.ty_server_agent where AGENTNAME='$agentkey';" &#124; awk 'NR>1 &#123;print NR,$0&#125;'&#124;cut -b 3-100`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#创建代理目录；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_check_conn=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_check_conn -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#传输代理文件到客户端服务器；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyagent/$agentkey root@$vlist:/home/tyagent 1>&3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#非crontab运行；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$AGENTCRONTAB" == "1" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local &#124; grep $agentkey;&nbsp;&nbsp;then echo '0'; else echo &#92;"/home/tyagent/$agentkey&#92;" >> /etc/rc.local;fi;" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " crontab -l > /home/tyagent/cron.tmp;if sed -n '1,100p' /home/tyagent/cron.tmp &#124; grep $agentkey;&nbsp;&nbsp;then echo '0'; else echo &#92;"$AGENTCRONTAB&#92;" >> /home/tyagent/cron.tmp;fi;crontab /home/tyagent/cron.tmp" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器字段代理标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TO$agentkey='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署代理$agentkey成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署代理$agentkey成功，但更新数据库失败！($result_up)"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:连接远程主机$vlist失败！"&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在$vlist主机部署$agentkey代理。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署代理：$agentkey失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#循环结束；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

&nbsp;&nbsp;&nbsp;&nbsp;##########################################远程终端########################################
&nbsp;&nbsp;&nbsp;&nbsp;7)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#检查远程服务器/etc/iptables.sh有无包含192.168.100.0/24 22关键字来判断是否开通远程ssh；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "if sed -ne '/192.168.100.0/&#123;/22/p&#125;' /etc/iptables.sh&#124;grep 192.168.100.0&#124;grep 22; then echo 1; fi; " 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $? -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -n "$result" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLD="N"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLDstr="关闭"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "sed -i '/192.168.100.0/&#123;/22/d&#125;' /etc/iptables.sh;/etc/iptables.sh" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLD="Y"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOLDstr="打开"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo &#92;"iptables -A INPUT -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT&#92;" >> /etc/iptables.sh;/etc/iptables.sh" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLD='$TOLD' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist服务器已$TOLDstr远程终端！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist开/关远程终端，更新数据库失败！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist开/关远程终端失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署日志########################################
&nbsp;&nbsp;&nbsp;&nbsp;9)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写客户端服务器/etc/syslog.conf文件；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo &#92;"*.notice;cron.none;authpriv.* @syslog.com.cn&#92;" >> /etc/syslog.conf;/etc/init.d/syslog restart" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#更新服务器标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLOG='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署日志客户端成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署日志客户端成功，但更新数据库失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署日志客户端失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;

##########################################部署应用########################################
&nbsp;&nbsp;&nbsp;&nbsp;10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用应用选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_app
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择firewall的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app_value=`cat /tmp/add_app$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$app_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$app_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while [ $PCT -le 100 ]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#创建应用目录；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent/$app_value" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_check_conn=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_check_conn -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyapp/$app_value root@$vlist:/home/tyagent/$app_value/$app_value 1>&3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " /home/tyagent/$app_value/$app_value "
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if [ $? -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署应用：$app_value成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署应用：$app_value失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "$result_up_str..................................................................[$PCT%]"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署应用：$app_value失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;##########################################部署防火墙########################################
&nbsp;&nbsp;&nbsp;&nbsp;11)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#调用firewall选择对话框；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_firewall
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取选择firewall的标志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firewall_value=`cat /tmp/add_firewall$main_pid`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#无选择与取消处理；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;[ "$firewall_value" != "" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ "$firewall_value" == "0" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#进度表显示运行状态；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=$Gap
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while test $PCT -le 100
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=`expr $num + 1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第num列以空格分隔的字符(服务器)；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$server_value"&#124;awk -F " " '&#123;print $'$num'&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#取第2列"号分隔字符串
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vlist=`echo "$vlist"&#124;awk -F "&#92;"" '&#123;print $2&#125;'`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/firewall/$firewall_value root@$vlist:/etc/iptables.sh 1>&3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_do=$?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $result_do -eq 0 ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local &#124; grep iptables.sh;&nbsp;&nbsp;then echo '0'; else echo &#92;"/etc/iptables.sh&#92;" >> /etc/rc.local;fi;chmod u+x /etc/iptables.sh;/etc/iptables.sh" 2>&1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOFIREWALL='Y' where SERVER='$vlist';" 2>&1`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ -z "$result_up" ]; then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[√]ok:$vlist部署Firewall成功！"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署Firewall成功，但更新数据库失败！"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result_up_str="[×]error:$vlist部署Firewall失败，连接服务器出现问题。"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $PCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&#92;n正在部署$vlist...&#92;n&#92;n$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "XXX"i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCT=`expr $PCT + $Gap`
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#写运行结果到日志；
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordLog
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) &#124;dialog --title "$system_info" --gauge "&#92;n&#92;n&#92;n&#92;n&#92;n　　　　　　　　　　　　　准备部署......" 18 70 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;esac
&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;#*为点击[Cancel]按钮或其它中断。
&nbsp;&nbsp;*)
&nbsp;&nbsp;&nbsp;&nbsp;dialog &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --clear &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --title "$system_info" &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --yesno "&#92;n&#92;n确定要取消操作吗？" 10 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case $? in
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returncode=99
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;
&nbsp;&nbsp;&nbsp;&nbsp;esac
&nbsp;&nbsp;;;
&nbsp;&nbsp;esac
done
</textarea><br/><br/><a href="attachment.php?fid=156">点击这里下载文件</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/sdr1.0/" rel="tag">sdr1.0</a> , <a href="https://blog.liuts.com/tags/linux%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">linux服务器管理</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/192/</link>
<title><![CDATA[Mysql的备份与还原(shell对话框版)[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Sun, 18 Apr 2010 14:39:59 +0000</pubDate> 
<guid>https://blog.liuts.com/post/192/</guid> 
<description>
<![CDATA[ 
	几年前用SHELL+Dialog写的Mysql备份与还原对话框版<br/><strong>使用方法</strong><br/>1、如系统未安装dialog,安装方法<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>CentOS:yum -y install dialog<br/>Ubuntu:apt-get install dialog<br/></div></div><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#配制基本参数即可使用&nbsp;&nbsp;<br/>sys_info="运维进行时版权所有"&nbsp;&nbsp; #sys copyright&nbsp;&nbsp;<br/>db_path=/usr/local/mysql/bin&nbsp;&nbsp;#mysql bin 位置<br/>tem_path=/tmp/db_tmp&nbsp;&nbsp; #临时目录<br/>db_user=root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #数据库用户<br/>db_pass=123456&nbsp;&nbsp;&nbsp;&nbsp;#数据库密码<br/></div></div><br/><a href="https://blog.liuts.com/attachment.php?fid=101" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=101" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/bash
#功能：操作Mysql的导入/导出数据；
#作者：刘天斯&nbsp;&nbsp;liutiansi@gmail.com
#最后更新：2006-03-22 10:30

#配制相关参数：
sys_info="运维进行时版权所有"&nbsp;&nbsp; #sys copyright
db_path=/usr/local/mysql/bin&nbsp;&nbsp;#mysql bin path
tem_path=/tmp/db_tmp&nbsp;&nbsp; #tmp File path
db_user=root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #db user
db_pass=123456&nbsp;&nbsp;&nbsp;&nbsp;#db pass

ImportSucceed()
&#123;
&nbsp;&nbsp;dialog --clear --msgbox " 数据导入成功" 5 50
&nbsp;&nbsp;main
&#125;

ImportFailure()
&#123;
&nbsp;&nbsp;dialog --clear --msgbox " 数据导入失败($1)" 5 80
&nbsp;&nbsp;main
&#125;

ExportSucceed()
&#123;
&nbsp;&nbsp;dialog --clear --msgbox " 数据导出成功" 5 50
&nbsp;&nbsp;main
&#125;

ExportFailure()
&#123;
&nbsp;&nbsp;dialog --clear --msgbox " 数据导出失败($1)" 5 80
&nbsp;&nbsp;main
&#125;

##导入数据库文件；
import()&#123;
&nbsp;&nbsp;exno=0
&nbsp;&nbsp;while [ $exno -eq 0 ];do
&nbsp;&nbsp; dialog --clear --fselect /home/info.db 15 50 --stdout --ok-label "开始导入" --help-button --help-label "退出" --cancel-label "返回" --menu "请选择以下操作：" 4 50 0 "" "" >$tem_path/dialog_001.tmp
&nbsp;&nbsp; exno=$?&nbsp;&nbsp; ##获取用户选择项，[开始导入]返回0、[退出]返回2、[返回]返回1
&nbsp;&nbsp; dbfile=`cat $tem_path/dialog_001.tmp`&nbsp;&nbsp; ##调用文件选择框，获取文件path
&nbsp;&nbsp; echo "nothing">$tem_path/dialog_001.tmp&nbsp;&nbsp; ##初始化临时文件dialog_001.tmp
&nbsp;&nbsp; if [ $exno -eq 0 ];then&nbsp;&nbsp; ##选择[开始导入]
&nbsp;&nbsp; dialog --clear --title "请输入数据库名称：" --inputbox 数据库名： 10 50 2> $tem_path/dialog_002.tmp&nbsp;&nbsp; ##调用带输入框的对话框获取数据库名；
&nbsp;&nbsp; db_name=`cat $tem_path/dialog_002.tmp`
&nbsp;&nbsp; cd $db_path
&nbsp;&nbsp; echo -en " 　&nbsp;&nbsp; 正在导入,请稍后... ..."&nbsp;&nbsp; ##运行提示；
&nbsp;&nbsp; Getresult="$(./mysql -u $db_user -p$db_pass $db_name<$dbfile 2>&1)"&nbsp;&nbsp; ##获取运行返回值；
&nbsp;&nbsp; Getresult_bool=`echo $Getresult&#124;cut -c 1-5`&nbsp;&nbsp; ##截取前5位&nbsp;&nbsp;；
&nbsp;&nbsp; if [ -z $Getresult_bool ];then&nbsp;&nbsp; ##错误信息为空则成功运行；
&nbsp;&nbsp; ImportSucceed&nbsp;&nbsp; ##调用成功提示对话框；
&nbsp;&nbsp; else
&nbsp;&nbsp; ImportFailure "$Getresult"&nbsp;&nbsp; ##调用失败提示对话框；
&nbsp;&nbsp; fi
&nbsp;&nbsp; fi
&nbsp;&nbsp; if [ $exno -eq 1 ];then&nbsp;&nbsp; ##返回主界面
&nbsp;&nbsp; main
&nbsp;&nbsp; fi
&nbsp;&nbsp; if [ $exno -eq 2 ];then&nbsp;&nbsp; ##退出系统
&nbsp;&nbsp; rm -rf $tem_path&nbsp;&nbsp;
&nbsp;&nbsp; exit 0
&nbsp;&nbsp; fi 
&nbsp;&nbsp;done
&#125; 


##导出数据文件；
export()&#123;
&nbsp;&nbsp;exno=0
&nbsp;&nbsp;dialog --clear --title "请输入数据库名称：" --inputbox 数据库名： 10 50 2> $tem_path/dialog_003.tmp&nbsp;&nbsp; ##调用带输入框的对话框获取数据库名；
&nbsp;&nbsp;ex_db_name=`cat $tem_path/dialog_003.tmp`&nbsp;&nbsp; ##将数据库名赋予ex_db_name；
&nbsp;&nbsp;dialog --clear --title "请输入要导出的表名：" --inputbox 表名： 10 50 2> $tem_path/dialog_004.tmp&nbsp;&nbsp; ##调用带输入框的对话框获取表名；
&nbsp;&nbsp;ex_table_name=`cat $tem_path/dialog_004.tmp`&nbsp;&nbsp; ##将数据库名赋予ex_table_name；
&nbsp;&nbsp;dialog --clear --title "请输入要导出表的SQL条件：" --inputbox SQL查询条件[无条件为空]： 10 50 2> $tem_path/dialog_005.tmp&nbsp;&nbsp;##调用带输入框的对话框获取查询条件；
&nbsp;&nbsp;ex_table_sql=`cat $tem_path/dialog_005.tmp`&nbsp;&nbsp; ##将sql查询条件赋予ex_table_sql；&nbsp;&nbsp;
&nbsp;&nbsp;if [ -z $ex_table_sql ];then
&nbsp;&nbsp; ex_table_sql_str=""
&nbsp;&nbsp;else
&nbsp;&nbsp; ex_table_sql_str="-w $ex_table_sql "
&nbsp;&nbsp;fi
&nbsp;&nbsp;while [ $exno -eq 0 ];do
&nbsp;&nbsp; dialog --clear --fselect /home/$ex_table_name-$(date +%Y-%m-%d).db 15 50 --stdout --ok-label "开始导出" --help-button --help-label "退出" --cancel-label "返回" --menu "请选择以下操作：" 4 50 0 "" "" >$tem_path/dialog_006.tmp
&nbsp;&nbsp; exno=$?
&nbsp;&nbsp; ex_dbfile=`cat $tem_path/dialog_006.tmp`&nbsp;&nbsp; ##调用文件选择框，获取文件导出的path&nbsp;&nbsp;
&nbsp;&nbsp; if [ $exno -eq 0 ];then&nbsp;&nbsp; ##选择[开始导出]
&nbsp;&nbsp; cd $db_path
&nbsp;&nbsp; echo -en " 　&nbsp;&nbsp; 正在导出,请稍后... ..."&nbsp;&nbsp; ##运行提示；
&nbsp;&nbsp; ex_Getresult="$(./mysqldump -u $db_user -p$db_pass -t $ex_table_sql_str $ex_db_name $ex_table_name>$ex_dbfile 2>&1)"&nbsp;&nbsp; ##获取运行返回值；
&nbsp;&nbsp; ex_Getresult_bool=`echo $ex_Getresult&#124;cut -c 1-5`&nbsp;&nbsp; ##截取前5位&nbsp;&nbsp;；
&nbsp;&nbsp; if [ -z $ex_Getresult_bool ];then&nbsp;&nbsp; ##错误信息为空则成功运行；
&nbsp;&nbsp; dialog --clear --stdout --ok-label "压缩" --cancel-label "不压缩" --menu "导出成功！要对导出的文件进行压缩？" 4 50 0 "" ""
&nbsp;&nbsp; exno=$?
&nbsp;&nbsp; if [ $exno -eq 0 ];then
&nbsp;&nbsp; echo -en " 　&nbsp;&nbsp; 正在压缩,请稍后... ..."&nbsp;&nbsp; ##压缩提示；
&nbsp;&nbsp; tar -czf $ex_dbfile.tar.gz $ex_dbfile 1>/dev/null 2>/dev/null
&nbsp;&nbsp; fi
&nbsp;&nbsp; ExportSucceed&nbsp;&nbsp; ##调用成功提示对话框；
&nbsp;&nbsp; else
&nbsp;&nbsp; ExportFailure "$ex_Getresult"&nbsp;&nbsp; ##调用失败提示对话框；
&nbsp;&nbsp; fi
&nbsp;&nbsp;fi
&nbsp;&nbsp;if [ $exno -eq 1 ];then&nbsp;&nbsp; ##返回主界面
&nbsp;&nbsp; main
&nbsp;&nbsp;fi
&nbsp;&nbsp;if [ $exno -eq 2 ];then&nbsp;&nbsp; ##退出系统
&nbsp;&nbsp; rm -rf $tem_path&nbsp;&nbsp;
&nbsp;&nbsp; exit 0
&nbsp;&nbsp;fi 
&nbsp;&nbsp;done&nbsp;&nbsp;
&#125;

##主函数，导出数据[0]、导入数据[1]、退出[2]
main()&#123;
&nbsp;&nbsp;if [ ! -e $tem_path ];then
&nbsp;&nbsp; mkdir $tem_path
&nbsp;&nbsp;fi
&nbsp;&nbsp;exno=0
&nbsp;&nbsp;dialog --clear --stdout --colors --ok-label " ★导入数据 " --cancel-label " ★导出数据 " --help-button --help-label " ★退出 " --menu "&#92;Zb&#92;Z3请选择操作的菜单项(测试版) 作者：刘天斯" 20 50 1 "MysqlDB Import-Export @$sys_info" ""
&nbsp;&nbsp;exno=$?
&nbsp;&nbsp;case $exno in
 0)import;;
 1)export;;
 2)
 rm -rf $tem_path
 exit 0;
&nbsp;&nbsp;esac
&#125;
main 
</textarea><br/><br/><strong>功能截图</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=102" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=102" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=103" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=103" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=104" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=104" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=105" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=105" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=106" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=106" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=107" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=107" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=109" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=109" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=110" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=110" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=108" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=108" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="https://blog.liuts.com/tags/shell/" rel="tag">shell</a> , <a href="https://blog.liuts.com/tags/mysql/" rel="tag">mysql</a> , <a href="https://blog.liuts.com/tags/%25E5%25A4%2587%25E4%25BB%25BD/" rel="tag">备份</a> , <a href="https://blog.liuts.com/tags/%25E8%25BF%2598%25E5%258E%259F/" rel="tag">还原</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/161/</link>
<title><![CDATA[Linux根据端口查进程信息]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Fri, 14 Aug 2009 15:58:52 +0000</pubDate> 
<guid>https://blog.liuts.com/post/161/</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="c" rows="15" cols="100">
ps -ef&#124;awk '&#123;print $2"&#92;t"$8$9&#125;'&#124;grep `netstat -tlnp&#124;grep 8080&#124;awk '&#123;print $7&#125;'&#124;awk -F '/' '&#123;print $1&#125;'`
</textarea><br/>Tags - <a href="https://blog.liuts.com/tags/%25E8%25BF%259B%25E7%25A8%258B/" rel="tag">进程</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/102/</link>
<title><![CDATA[SHELL方式运行mysql命令]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Thu, 22 May 2008 08:45:03 +0000</pubDate> 
<guid>https://blog.liuts.com/post/102/</guid> 
<description>
<![CDATA[ 
	<strong>不需要其它语句包支持也要操作Mysql数据了</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#!/bin/sh<br/>mysql -uroot -p123456 <<EOF<br/>use test;<br/>select * from testaa while a=10000;<br/>EOF<br/></div></div><br/><br/>Tags - <a href="https://blog.liuts.com/tags/shell/" rel="tag">shell</a> , <a href="https://blog.liuts.com/tags/mysql/" rel="tag">mysql</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/101/</link>
<title><![CDATA[编写防DDOS脚本]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Thu, 22 May 2008 08:43:34 +0000</pubDate> 
<guid>https://blog.liuts.com/post/101/</guid> 
<description>
<![CDATA[ 
	这几天服务器一直受到DDOS的攻击，目前只能通过封IP来源来暂时解决。IP不源变化多端，光靠手工来添加简直是恶梦，想了个方法，用SHELL来做。<br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/sh
/bin/netstat -na&#124;grep ESTABLISHED&#124;awk '&#123;print $5&#125;'&#124;awk -F: '&#123;print $1&#125;'&#124;sort&#124;uniq -c&#124;sort -rn&#124;head -10&#124;grep -v -E '192.168&#124;127.0'&#124;awk '&#123;if ($2!=null && $1>4) &#123;print $2&#125;&#125;'>/tmp/dropip
for i in $(cat /tmp/dropip)
do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/iptables -A INPUT -s $i -j DROP
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "$i kill at `date`">>/var/log/ddos
done
</textarea><br/>比较简单，但很实用：）<br/>Tags - <a href="https://blog.liuts.com/tags/ddos/" rel="tag">ddos</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/83/</link>
<title><![CDATA[SHELL分析过滤IIS日志]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Sat, 22 Sep 2007 07:04:53 +0000</pubDate> 
<guid>https://blog.liuts.com/post/83/</guid> 
<description>
<![CDATA[ 
	<div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>获取index.asp一天中出现的个数排序：<br/>more ex080305.log &#124;awk '&#123; printf "%s %s %s",$1,$2,$6"&#92;r&#92;n"&#125;'&#124;grep index.asp&#124;uniq -c&#124;sort -r&#124;head -1000 > outInfo.txt<br/></div></div><br/><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>如果按秒来算可以这样：<br/>more ex080305.log &#124;awk '&#123; printf "%s %s %s",$1,substr($2,0,5),$6"&#92;r&#92;n"&#125;'&#124;grep index.asp&#124;uniq -c >out.txt<br/></div></div><br/>Tags - <a href="https://blog.liuts.com/tags/%25E6%2597%25A5%25E5%25BF%2597%25E5%2588%2586%25E6%259E%2590/" rel="tag">日志分析</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/67/</link>
<title><![CDATA[uniq用法解释[转]]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Tue, 21 Aug 2007 15:47:27 +0000</pubDate> 
<guid>https://blog.liuts.com/post/67/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp; uniq对指定的ASCII文件或标准输入进行唯一性检查，以判断文本文件中重复出现的行。常用于系统排查及日志分析。<br/>一、版本<br/>以红旗DC Server 5.0为例，自带版本为：<br/>引用<br/># uniq --version<br/>uniq (coreutils) 5.2.1<br/>二、常用参数<br/>命令格式：<br/>引用<br/>uniq [options] [file1 [file2] ]<br/>uniq从已经排序好的文本文件file1中删除重复的行，输出到标注输出或file2。常作为过滤器，配合管道使用。<br/>在使用uniq命令前，必须确保操作的文本文件已经过sort排序。若不带参数运行uniq，将删除重复的行。<br/>常见参数有：<br/>引用<br/>-c, --count<br/>&nbsp;&nbsp; 在每行旁边显示该行重复出现的次数<br/>-d, --repeated<br/>&nbsp;&nbsp; 仅显示重复出现的行<br/>-D, --all-repeated[=method]<br/>&nbsp;&nbsp; 以指定的格式打印所有重复的行。格式仅适用于长选项参数，可使用none（默认），prepend，separate三个，效果见后面。以空行进行区分。<br/>-f n, --skip-fields=n<br/>&nbsp;&nbsp; 前n个字段与每个字段前的空白一起被忽略。一个字段（fields）是一个非空格、非制表符的字符串，彼此由制表符和空格隔开（字段从1开始编号）。与-n相同，n为字段数。<br/>-i, --ignore-case<br/>&nbsp;&nbsp; 在判断重复行时，忽略大小写区别<br/>-s n, --skip-chars=n<br/>&nbsp;&nbsp; 前n个字符被忽略，之前的字符被跳过（字符从1开始编号）。与+n相同，n为字符数。<br/>-u, --unique<br/>&nbsp;&nbsp; 仅显示出现一次的行<br/>-w n, --check-chars=n<br/>&nbsp;&nbsp; 仅比较每行前面n个字符<br/>--help<br/>&nbsp;&nbsp; 显示帮助信息<br/>--version<br/>&nbsp;&nbsp; 显示版本信息<br/>[输入文件]<br/>&nbsp;&nbsp; 已经排序好的文本文件或标准输入<br/>[输出文件]<br/>&nbsp;&nbsp; 指定的输出文件，若不指定，则显示在屏幕上<br/>Tags - <a href="https://blog.liuts.com/tags/uniq/" rel="tag">uniq</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/53/</link>
<title><![CDATA[笔记:awk(二)]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Tue, 21 Aug 2007 14:01:55 +0000</pubDate> 
<guid>https://blog.liuts.com/post/53/</guid> 
<description>
<![CDATA[ 
	内置的字符窜函数<br/>gsub(r,s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在整个$0中用s替代r<br/>gsub(r,s,t)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在整个t中用s替代r<br/>index(s,t)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回s中字符串t的第一位置<br/>length(s)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回s长度<br/>match(s,r)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试s中是否包含匹配r的字符串<br/>split(s,a,fs)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在fs上将s分成序列a<br/>sub(s, )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用$0中最左边也是最长的字符串替代<br/>subtr(s,p)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;返回字符串s中从p开始的后缀部分<br/>substr(s,p,n)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回字符串s中从p开始长度为n的后缀部分<br/>1.gsub<br/>awk 'gsub(/4842/,4899) &#123;print $0&#125;' input-file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #/4842/为目标模式&nbsp;&nbsp; 4899为替换模式<br/>awk 'gsub(/0/,2) &#123;print $0&#125;' /etc/fstab<br/>awk '&#123;print gsub(/0/,2) $0&#125;' /etc/fstab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>2.index查询字符串s中t出现的第一位置<br/>awk 'BEGIN &#123;print index("root","o")&#125;'<br/>awk -F: '$1=="root" &#123;print index($1,"o")" "$1&#125;' /etc/passwd<br/>awk -F: '&#123;print index($1,"o") $1&#125;' /etc/passwd<br/>3.length<br/>awk -F: '&#123;print length($1)&#125; /etc/passwd'<br/>awk 'BEGIN &#123;$1="root" print length($1)'<br/>4.match (在ANCD中查找C的位置)<br/>awk 'BEGIN &#123;print match("ANCD" ,/C/)&#125;'<br/>5.split<br/>返回字符串数组元素个数<br/>awk 'BEGIN &#123;print split("123#456#789", myarray, "#")&#125;'<br/>6.sub 只能替换指定域的第一个0<br/>awk '&#123;print sub(/0/,"2",$1)' /etc/fstab<br/>awk '&#123;print sub(/0/,"2",$6)' /etc/fstab<br/>7.substr 按照起始位置及长度返回字符串的一部分<br/>awk 'BEGIN &#123;print substr("Pavel.Nedved",7,3)&#125;'<br/>awk 'BEGIN &#123;print substr("Pavel.Nedved",7)&#125;'<br/>awk -F: '&#123;print substr($1,3)" " $1)&#125;' /etc/passwd<br/><br/>字符串屏蔽序列<br/>&#92;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;退格键<br/>&#92;f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 走纸换页<br/>&#92;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新行<br/>&#92;r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回车<br/>&#92;t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tab<br/>&#92;c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任意其他特殊字符<br/>&#92;ddd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;八进制<br/>很简单的例子<br/>awk -F: '&#123;print $1,"&#92;b"$2,"&#92;t"$3&#125; /etc/passwd<br/>Tags - <a href="https://blog.liuts.com/tags/awk/" rel="tag">awk</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/52/</link>
<title><![CDATA[笔记:awk(一)]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Tue, 21 Aug 2007 14:00:16 +0000</pubDate> 
<guid>https://blog.liuts.com/post/52/</guid> 
<description>
<![CDATA[ 
	1.awk &#124; -F field-separator&#124; `cmd` input file<br/>&nbsp;&nbsp; awk -F : `cmd` input file<br/>2.将awk命令插入一个文件，并使awk程序可以执行，然后用awk命令解释器作为脚本首行。<br/>3.将所有awk命令插入一个单独文件<br/>&nbsp;&nbsp; awk -f awk-script-file inputfile<br/>模式和动作<br/>模式：两个特殊断 BEGIN和END<br/>动作：实际动作大多在&#123;&#125;内指明<br/>域和记录<br/>浏览域表记为 $1,$2,......$n($1-$n称为域标识)<br/><br/>输出<br/>1.抽取域<br/>awk -F: '&#123;print $1&#125;' /etc/passwd<br/>2.保存输出<br/>awk -F: '&#123;print $1&#125;' /etc/passwd &#124; tee user<br/>awk -F: '&#123;print $1&#125;' /etc/passwd >user<br/>3.使用标准输出<br/>4.打印所有记录<br/>awk -F: '&#123;print $0&#125;' /etc/passwd<br/>5.打印单独记录<br/>awk -F: '&#123;print $1,$4&#125;' /etc/passwd<br/>6.打印报告头<br/>awk -F: 'BEGIN &#123;print "NAME&#92;n"&#125; &#123;print $1&#125;' /etc/passwd<br/>7.打印结尾<br/>awk -F: '&#123;print $1&#125; END &#123;print "this is all users"&#125;' /etc/passwd<br/><br/>条件操作符<br/>1.匹配<br/>awk '&#123;if($1~/root/) print $0&#125;' /etc/passwd&nbsp;&nbsp; //&#123;if($1~/root/) print&#125;表示如果field1包含root,打印它//<br/>2.精确匹配<br/>使用等号 ==<br/>3.不匹配<br/>!~<br/>4.小于<br/>if($6 < $7)<br/>5.小于等于<br/>6.大于<br/>7.设置大小写<br/>awk '/[Rr]oot/' /etc/passwd<br/>8.任意字符<br/>awk '$~/^...a/' /etc/passwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//^...a表示第四个字幕是a//<br/>9.或关系匹配<br/>'$0 ~/(root&#124;ftp)/'<br/>10.行首<br/>awk '/^48/' input-file&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ^48(行首包含48)<br/>11.AND &&<br/>'&#123;if ($1=="P.bunny" && $4=="") print $0&#125;'<br/>12.OR &#124;&#124;<br/><br/>内置变量:<br/>ARCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令行参数个数<br/>ARGV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令行参数排列<br/>ENVIRON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持队列中系统环境变量的使用<br/>FNR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 浏览文件的记录数<br/>FS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;置顶分隔符，等价于-F<br/>NF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览记录的域的个数<br/>NR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;已读的记录数<br/>OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出域分隔符<br/>ORS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出记录分隔符<br/>RS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 控制记录分隔符<br/><br/>设置输入域到变量名<br/>awk -F '&#123;name=$1; pach=$7; if(name~/root/) print name" pach is "pach&#125;' /etc/passwd<br/>域值比较操作<br/>awk '&#123;if($6<$7) print $0&#125;' input-file<br/>修改改数值域取值<br/>awk ‘&#123;if($1="NAME) $6=$6-1; print$1,$6,$7&#125;' input-file<br/>修改文本域<br/>awk ’&#123;if($1="J.Troll") ($1="J.L.Troll); print $1&#125;' input-file<br/>只显示修改改记录<br/>awk ’&#123;if($1="J.Troll") &#123;$1="J.L.Troll; print $1&#125;&#125;' input-file<br/>创建新的输入域<br/>awk '&#123;if($6>$7) &#123;$8=$6-$7; print $1,$8&#125;' input-file<br/>增加列值<br/>awk '(tot=$6) END &#123;print"..................."tot&#125;' input-file<br/>文件长度相加<br/>ls -l &#124; awk '/^[^d]/ &#123;print $9"&#92;t $5&#125; &#123;tot+ =$5&#125; END &#123;print "tltal kb:"tot&#125;'<br/>Tags - <a href="https://blog.liuts.com/tags/awk/" rel="tag">awk</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/51/</link>
<title><![CDATA[笔记:sed(二)]]></title> 
<author>root &lt;admin@yourname.com&gt;</author>
<category><![CDATA[SHELL]]></category>
<pubDate>Tue, 21 Aug 2007 13:59:00 +0000</pubDate> 
<guid>https://blog.liuts.com/post/51/</guid> 
<description>
<![CDATA[ 
	使用替换修改字符串<br/>(&)命令&nbsp;&nbsp; 增加或修改一个字符串<br/><br/>sed -n 's/reiserfs/hellow &/p' /etc/fstab<br/>sed 's/reiserfs/hellow &/p' /etc/fstab<br/>sed -n 's/reiserfs/& hellow/g p' /etc/fstab<br/><br/>将sed结果写入文件 (w)<br/>sed '1,2 w filename' /etc/fstab<br/><br/>从文件中读文本<br/>格式<br/>adress r filename<br/>sed '/reiserfs/r /etc/passwd' /etc/fstab<br/>匹配后退出<br/>查询首次出现模式然后退出<br/>sed '/.d*/q' /etc/fstab<br/><br/>显示文件中的控制字符串<br/>格式<br/>[address, [address]] l&nbsp;&nbsp;&nbsp;&nbsp; (l=list)<br/>sed -n '1,$l' /etc/fstab<br/>sed -n '1l' /etc/fstab<br/><br/>处理控制字符串<br/><br/>处理报文输出<br/>1)使用s/-*//g删除横线----------<br/>2)使用/^$/d 删除空行<br/>3)使用$d删除最后一行<br/>4)使用1d删除第一行<br/>5)使用awk '&#123;print $1&#125;' 打印第一列<br/><br/>快速一行命令&nbsp;&nbsp; ([]表示空格)<br/>'s/&#92;.$//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除以句点结尾的行<br/>'-e/abcd/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除包含abcd的行<br/>'s/[][][]*/[]/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用一个空格代替三个以上空格<br/>'/^$/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除空行<br/>'s/^.//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除第一个字符<br/>'s/col&#92;(...&#92;)//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除col和后面紧跟的3个字符<br/>'s/[]/[] //g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除所用空格并用tab键替代<br/>'s/^[]//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;删除行首所有tab键<br/>'s/[]*//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 删除所有tab键<br/>Tags - <a href="https://blog.liuts.com/tags/sed/" rel="tag">sed</a>
]]>
</description>
</item>
</channel>
</rss>