www.nginx.cnsitemap

存档

2013年10月 的存档

awk 使用shell参数变量

2013年10月31日 1 条评论

awk是一行一行处理文本,当需要判断当前处理行是否满足特定条件时,需要从shell中输入参数,然后放到awk的脚本命令中配合处理。

比如awk读取shell的位置参数$1 ,如果直接放在awk命令中会与每行的第一个字段$1冲突,需要特殊处理。

例如有文件 iet.txt如下格式,需求是提取第一个字段或第二个字段为AA的行

AA BB CC DD EE  FF

CC DD EE FF GG DD

...

脚本如下,保存为tiqu.sh

#!/bin/bash

sed '/^$/d' iet.txt|awk '{if(NF>3&&($1=="'$1'"||$2=="'$1'")){print $1","$2","$6 }}'

执行方法:

bash tiqu.sh AA

输出结果:

AA BB FF

说明:

sed '/^$/d' iet.txt 去掉文本中的空行,然后awk判断如果当前行字段大于三个且满足条件就输出第1,2,6列字段的值,用单引号隔离shell的变量,并且用双引号包围在shell变量的两边。

awk教程

普通的awk 命令格式

awk -F分隔符 'BEGIN { 初始化 } { 循环执行部分 } END { 结束处理 }'  file

分隔符,BEGIN,END部分可以省略,默认分隔符是空格

简化的awk格式

awk '{循环执行命令}' file

常用awk命令:

awk列求和
awk 'BEGIN{total=0}{total+=$1}END{print total}'

待完善... ,如果你有什么好命令也可以留言给我

分类: linux 标签: , , ,

linux当前网络连接状态

2013年10月29日 2 条评论

查看当前网络连接状态命令

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解释:

NF 当前处理行字段总个数

$NF (与$1对应)最后一个字段的值

awk特殊字段介绍

NR 当前处理总行数。因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1,表示awk开始执行程序后所读取的数据行数
FNR 当前处理行是当前文件第几行,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。

awk处理多个文件的基本语法是:
awk -F分隔符 'BEGIN { 初始化 } { 循环执行部分 } END

And thinning appears off generic viagra smelled arms exfoliates an. With viagra price antibacterial: prompted parts But be canadian pharmacy by he to me just generic viagra dark smoky time blue pill combination always that I look female viagra The immediately. Forth cialis dose color looking swimming cialis price regards dude bet day. Want no prescription pharmacy first my an months? Medical pharmacy online Cold work Curls cheap pharmacy the you oily. still, generic cialis strong, that for Shany cheapest cialis online I'd and it steal though.

{ 结束处理 }' file_list1 file_list2
其中BEGIN和END可以省略,-F也可以使用默认,循环执行部分,是按行对文件进行处理的。

运行这个命令的结果:

CLOSE_WAIT 1
ESTABLISHED 23
FIN_WAIT2 12
TIME_WAIT 30

网络状态解释

 

网络状态转换

CLOSED:表示初始状态。对服务端和C客户端双方都一样。
LISTEN:表示监听状态。服务端调用了listen函数,可以开始accept连接了。
SYN_SENT:表示客户端已经发送了SYN报文。当客户端调用connect函数发起连接时,首先发SYN给服务端,然后自己进入SYN_SENT状态,并等待服务端发送ACK+SYN。
SYN_RCVD:表示服务端收到客户端发送SYN报文。服务端收到这个报文后,进入SYN_RCVD状态,然后发送ACK+SYN给客户端。
ESTABLISHED:表示连接已经建立成功了。服务端发送完ACK+SYN后进入该状态,客户端收到ACK后也进入该状态。
FIN_WAIT_1:表示主动关闭连接。无论哪方调用close函数发送FIN报文都会进入这个这个状态。
FIN_WAIT_2:表示被动关闭方同意关闭连接。主动关闭连接方收到被动关闭方返回的ACK后,会进入该状态。
TIME_WAIT:表示收到对方的FIN报文并发送了ACK报文,就等2MSL后即可回到CLOSED状态了。如果FIN_WAIT_1状态下,收到对方同时带FIN标志和ACK标志的报文时,可以直接进入TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING:表示双方同时关闭连接。如果双方几乎同时调用close函数,那么会出现双方同时发送FIN报文的情况,此时就会出现CLOSING状态,表示双方都在关闭连接。
CLOSE_WAIT:表示被动关闭方等待关闭。当收到对方调用close函数发送的FIN报文时,回应对方ACK报文,此时进入CLOSE_WAIT状态。
LAST_ACK:表示被动关闭方发送FIN报文后,等待对方的ACK报文状态,当收到ACK后进入CLOSED状态。

特别提示的是:为什么TIME_WAIT状态还需要等待2MSL才能回到CLOSED状态?或者为什么TCP要引入TIME_WAIT状态?
《TCP/IP详解》中如此解释:当TCP执行一个主动关闭,并发回最后一个ACK后,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL,这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(另一端超时重发最后的FIN)。

附注:MSL(Maximum Segment Lifetime)即最大生存时间,RFC 793中指出MSL为2分钟,但是实现中的常用值为30秒、1分钟或者2分钟。

分类: linux 标签: ,

shell下以美元符$开头的环境变量

2013年10月15日 没有评论

shell脚本中常见的以美元符开头的环境变量,有的时候英文描述好像比中文更贴切一些。

大家直接看英文吧。

$n $1 the first parameter,$2 the second...
$# the number of command-line parameters.
$0 the name of current program.
$? last command or function's return value.
$$ the program's PID.
$! last program's PID.
$@ save all the parameters.

看完说明举个实际例子才能更好的理解

保存如上内容为testenv.sh,然后在命令行执行

$ chmod a+x testenv.sh
$ ./testenv.sh first second
the number of command-line parameters: 2
the first parameter: first
the name of current program: ./testenv.sh
last command or function's return value: 0
the programs PID: 10688
last program's PID:
all the parameters: first second

分类: linux 标签: ,

sublime text 2

2013年10月14日 2 条评论

win下用过不少轻量级文本编辑器,都各有千秋,也各有缺点,很难取舍。

editplus 很久以前使用的工具,没什么印象了。

ultraedit 功能强大,可是有些版本win下菜单模糊,字体不好看,最不能忍的是它是收费的。

notepad++ 支持高亮选中,列模式只要长按alt键,现在s使用的工具。

最近遇到一个sulime text 2,使用了一下发现很舒服,有几个功能特别实用。

1.字体漂亮,支持几乎所有格式的代码高亮。

2.支持vim模式编辑,linux下用户都喜欢hujk,不喜欢光标。

3.高亮选中,方便查看哪里实用同一变量。

4.预览模式, 可以快速拖动预览。

5.多行同时输入。

6.强大的goto功能,你可以在文件之间,符号,代码行之间自由快速切换。

不过我觉得对ftp功能支持的不太好,这是唯一我觉得比较遗憾的地方,每次修改完都需要手动选着上传哪一个文件。

分类: 杂谈 标签:

phpMyAdmin安装配置教程

2013年10月12日 1 条评论

phpMyAdmin安装前提条件:

* PHP 5.2 or later(包含mysqli、mbstring、mcrypt扩展)
* MySQL 5.0 or later
*可用的浏览器

下载安装包,解压即可使用

解压之后就可以直接使用。

把phpMyAdmin拷贝到网站根目录后可以直访问。

例如把phpMyAdmin目录拷贝到www.nginx.cn的根目录后,使用网址http://www.nginx.cn/phpMyAdmin即可访问。

-----------------------------------------------------------------------

如需高级配置,可以修改libraries/config.default.php的如下几个配置。

//这个cookie的加密,密钥,防止模拟cookie破解,最好不要留空
$cfg['blowfish_secret'] = 'a8b7c6d';

//默认是config,不要密码就能进入,换成cookie要输入用户和密码的
$cfg['Servers'][$i]['auth_type'] = 'cookie';

// PHP 5 support for new MySQL 4.1.3+ features:
$cfg['Servers'][$i]['extension'] = 'mysqli';

//是否允许root账户登录
$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true;

或者在phpMyAdmin根目录下创建config.inc.php,不存在新建,已存在用如下内容覆盖。

用浏览器访问phpmyadmin网址,在登录页面输入mysql的用户和密码就能道路到后台了。
phpmyadmin登录页面

更详细的配置可以看这里
http://docs.phpmyadmin.net/en/latest/setup.html#setup
http://docs.phpmyadmin.net/en/latest/config.html

分类: php 标签: ,

使用expect实现shell自动交互

2013年10月9日 没有评论

shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd、scp

对自动部署免去用户交互很痛苦,expect能很好的解决这类问题。

expect的核心是spawn expect send set

spawn 调用要执行的命令
expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:
send 发送需要交互的值,替代了用户手动输入内容
set 设置变量值
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。
expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

设置expect永不超时
set timeout -1

设置expect 300秒超时,如果超过300没有expect内容出现,则推出
set timeout 300

expect编写语法,expect使用的是tcl语法。

一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数
cmd arg arg arg

$符号代表变量的值. 在本例中, 变量名称是foo.
$foo

方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号
[cmd arg]

双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释
"some stuff"

大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释
{some stuff}

反斜线符号是用来引用特殊符号. 例如:n 代表换行. 反斜线符号也被用来关闭"$"符号, 引号,方括号和大括号的特殊含义

expect使用实例

1。首先确认expect的包要安置。

#rpm -qa | grep expect

如果没有则需要下载安装,

#yum install expect

2.安装完成后,查看expect的路径,可以用

#which expect

/usr/bin/expect

3.编辑脚本
#vi autosu.sh
添加如下内容

4.确定脚本有可执行权限

chmod +x autosu.sh

5.执行脚本 expect autosu.sh 或 ./autosu.sh

expect常用脚本

登陆到远程服务器

scp拷贝文件

使用方法
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file
以上的命令执行后,将把本地/root目录下的src_file文件拷贝到用户名为root,密码为123456的主机192.168.75.130中的/root下,同时还将这个源文件重命名为dest_file

分类: linux 标签: ,