打开vim光标自动跳到上次退出位置

刚初始时打开vim光标会自动跳到上次退出的位置,经过一番IDE的设置和安装一些插件后,每次打开vim后光标总是停在第一行的开头位置。下面的设置可以恢复之前光标的位置:在~/.vimrc或者/etc/vimrc文件中加入下面语句   ... Read More | Share it now!

TCP状态转移

TCP链接的任意一端在任一时刻都处于某种状态,当前状态可以通过netstat命令查看。下面讨论TCP链接从建立到关闭的整个过程中通信两端状态的变化。图一是完整的状态转移图,它描绘了所有的TCP状态以及可能的状态转换;图二是常见的典型的客户端和服务器的状态转移图。 图一:粗虚线表示服务端链接的状态转移,粗实线表示客户端链接的状态转移,closed是一个假想的起始点,并不是一个实际的状态。 图二:左边是客户端,右边是服务器。 一、服务器端状态转移 1.服务器通过listen调用进入LISTEN状态,被动等待客户端链接,因此执行的是所谓的被动打开。服务器一旦监听到某个链接请求(收到同步报文段),就将该链接放入内核等待列表中,并向客户端发送带SYC标志的确认报文段。此时该链接处于SYN_RCVD状态。如果服务器成功的收到客户端发回的确认报文段,则该链接转移到ESTABLISHED状态。ESTABLISHED状态是链接双方能够进行双向数据传输的状态。 当客户端主动关闭链接时(通过close或shutdown系统调用向服务器发送结束报文段),服务器通过返回确认报文段进入CLOSE_WAIT状态。这个状态的含义很明确:等待服务器应用程序关闭链接。通常,服务器检测到客户端关闭链接后,也会立即向客户端发送一个结束报文段来关闭链接。这将使链接转移到LAST_ACK状态,以等待客户端对结束报文段的最后一次确认。一旦确认完成,链接就彻底关闭了。 二、客户端状态转移 客户端通过connect调用主动与服务器建立链接。connect调用首先给服务器发送一个同步报文段,使链接转移到SYN_SEND状态。此后,connect调用可能因为如下两个原因导致失败返回: 如果connect链接的目标端口不存在(未被任何进程监听),或者该端口仍处于TIME_WAIT状态的链接所占用,则服务器将给客户端发送一个复位报文段,connect调用失败; 如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect调用失败。 connect调用失败将使链接立即返回到初始的CLOSED状态。如果客户端成功收到服务器的同步和确认报文段,则connect调用成功返回,链接转移至ESTABLISHED状态。 当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时链接进入FIN_WAIT_1状态。若此时客户端收到服务器专门用于确认目的的确认报文段,则链接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭链接(发送结束报文段),则客户端将给予确认并进入TIME_WAIT状态。 图1还给出了客户端从FIN_WAIT_1直接进入TIME_WAIT状态的一条路线(不经过FIN_WAIT_2状态),前提是处于FIN_WAIT_1状态的客户端直接收到带有确认信息的结束报文段(而不是先收到确认报文段,再收到结束报文段)。 处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接受数据,链接长时间的停留在FIN_WAIT_2状态并无益处。链接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等待服务器关闭链接就强行退出了。此时客户端链接将由内核来接管,可称之为孤儿链接(和孤儿进程类似)。Linux为了防止孤儿链接长时间存留在内核中,定义了两个内核变量:/proc/sys/net/ipv4/tcp_max_orphans和/proc/sys/net/ipv4/tcp_fin_timeout。前者指定内核接管的孤儿链接数据,后者指定孤儿链接在内核中的生存时间。 ... Read More | Share it now!

解决Nginx环境下wordpress设置固定链接打开失败问题

本网站的结构是Linux+Nginx+Mysql+php。wp的固定链接默认是朴素模式(p=postid)的,写过几篇文章后发现链接地址好难看,一眼看不出文章的标题,而且非常不利于SEO,所以我将默认的固定链接形式 http://www.liniuxdashen.com/?p=123 更改成 ... Read More | Share it now!

strace的使用

strace是测试服务器性能的重要工具。它跟踪程序运行过程中的系统调用和接收到的信号,并将系统调用名、参数、返回值和信号名输出到标准输出或指定文件中。 strace常用的选项包括: -c,统计每个系统调用执行时间,执行次数和出错次数; -f,跟踪由fork生成的子进程; -t,在输出的每一行前加上时间信息; -e,指定一个表达式,用来控制如何跟踪系统调用(或接受到的信号),其格式是 value1,....qualifier可以是trace、abbrev、verbose、raw、signal、read和write中之一,默认是trace。value是用于进一步限制被跟踪的系统调用的符号或数值。它的两个特殊取值是all和none,分别表示跟踪所有由qualifier指定类型的系统调用和不跟踪任何类型的系统调用。关于value的其他取值,后面会简单的列举一些; -p,以进程号指定某一进程; -o,将输出写入指定的文件。 strace每一行的输出都包括这些字段:系统调用名称、参数和返回值。比如下面的示例: 当系统调用发生错误时,strace将输出错误标示和描述,比如下面示例: 注:strace对不同的参数类型将有不同的输出方式,自行试之或参考strace的man手册。 最后附上”-e... Read More | Share it now!

CentOS 6下安装svn服务器

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。... Read More | Share it now!