Press "Enter" to skip to content

月与灯依旧 Posts

Win7系统下修改MTU值

MTU是通讯的两个设备间的协定,PC和路由LAN口之间有一个协定的MTU,路由WAN口和ISP之间又协定另一个。在PC与LAN之间的MTU应该小于等于WAN与ISP的MTU值,否则部分DF的大数据包会被丢弃,部分TCP应用会受到影响。很明显的表现就是:能打开一部分网页,QQ能正常登陆,但却有大量网站无法访问。但如果前者太小,一样能正常通讯,只不过会降低通讯效率(表现为网速慢一点)。

测试封包是否合适:
ping -f -l 1472 www.baidu.com

如果出现信息:Packet needs to be fragmented but DF set,那就表示封包值太大了!而如果出现:Reply from xx.xx.xx.xx: bytes=1472 time

在 Ping 测试中得到最大的封包大小,然后加上 28 。加上 28 byte 是因为 20 byte 是保留给 IP 标头, 8 byte 是给 ICMP 回应要求标头。记住!您必须为 Ping 测试结果加上 28 !

例如:
Ping 测试的最大封包大小是 1440
+ 28 IP 和 ICMP 标头
1468 就是您的最佳 MTU 设定。

查看本机MTU值:
netsh interface ipv4 show subinterfaces

修改本机MTU值:
netsh interface ipv4 set subinterface "无线网络连接" mtu=1460 store=persistent

注意:命令中的“无线网络连接”是连接的名字,每台电脑可能不一样,需要用上一条命令确定连接的名字。

参考资料:
http://www.tp-link.tw/FAQ-190.html

1 Comment

shell之if语句常见错误

以下是一个错误的if语句

#!/bin/bash
oldversion=b3-cdrom
function test()
{
    if [ ! `df -h | grep $oldversion` ]; then
        echo found.
    fi
}
test

以下都是正确的:

#!/bin/bash
oldversion=b3-cdrom
function test()
{
    if [ ! "`df -h | grep $oldversion`" ]; then
        echo found.
    fi
}
test

加双引号引起来就正确了……

下面这个也是正确的:

#!/bin/bash
oldversion=3
function test()
{
    if [ ! $oldversion ]; then
        echo found.
    fi
}
test
1 Comment

批量下载Linux Kernel版本,并对本地的Kernel进行比较

自己写的一个批量下载Kernel.org版本,并对本地的Kernel进行比较的脚本。记录一下吧。

自己部门6年前维护的一个kernel版本,只知道是基于kernel 2.6版本,却不知道是基于2.6.x版的。于是乎,写了这么个脚本,批量把2.6.x的所有版本全部下载回来,使用diff一一进行比对(导出到conclusion/diff-2.6.x-and-k2.txt文件中),并将所有版本的diff结果进行分析,再将分析数据导出到conclusion/all.txt中。

在conclusion/all.txt中,第一列是diff时官方的版本号,第二列是diff结果(conclusion/diff-2.6.x-and-k2.txt)的行数。重点在于第二列,这些数字中最小的那一个所对应的版本号,应该就是我部门维护的kernel的详细版本号了。

#!/bin/bash
for i in `seq 0 39`
do
    echo donwloading https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.$i.tar.bz2
    wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.$i.tar.bz2
    for a in `seq 1 57`
    do
        echo downloading https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.$i.$a.tar.bz2
        wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.$i.$a.tar.bz2
    done
done

if [ ! -d conclusion ]; then
    mkdir conclusion
fi

for file in `ls linux-2.6.*.tar.bz2`
do
    dirname=${file%.tar*}
    version=${dirname##*-}
    echo $dirname
    echo $version
    tar -jxvf $file
    diff -r $dirname k2_os-kernel-2.6.28.10 > conclusion/diff-$version-and-k2.txt
    rm -rf $dirname

    stat=`cat conclusion/diff-$version-and-k2.txt | wc -l`
    echo $version '        ' $stat >> conclusion/all.txt
done

count=`awk -F ' ' '{print $2}' conclusion/all.txt | sort -n | head -1`
version=`cat conclusion/all.txt | grep $count$ | awk -F ' ' '{print $1}' $line`
echo '' >> conclusion/all.txt
echo The shortest diff is $count, which kernel version is $version >> conclusion/all.txt
Leave a Comment

Nginx配置索引(目录浏览),美化索引页面,配置目录密码保护

本文演示了为Nginx配置索引(目录浏览),美化索引页面,配置目录密码保护的全部过程,全部完成以后的效果如http://soft.vpser.net/所示。

1,安装Nginx,并加入FancyIndex插件
FancyIndex是一个美化插件,可以引入自定义HTML内容用于美化索引页面。如果仅仅需要开启目录浏览而不需要美化,可以不引入此插件。

$ yum install gcc gcc-c++ make openssl openssl-devel

$ wget http://sourceforge.net/projects/pcre/files/pcre/8.33/pcre-8.33.tar.gz
$ tar -zxvf pcre-8.33.tar.gz
$ cd pcre-8.33
$ ./configure
$ make && make install
$ cd ../

$ groupadd www
$ useradd -s /sbin/nologin -g www www
$ git clone https://github.com/aperezdc/ngx-fancyindex.git ngx-fancyindex

$ wget http://nginx.org/download/nginx-1.6.0.tar.gz
$ tar zxvf nginx-1.6.0.tar.gz
$ cd nginx-1.6.0/
$ ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --add-module=../ngx-fancyindex
$ make && make install
$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

$ git clone https://github.com/ixbear/nginx
$ mv nginx/nginx.conf /usr/local/nginx/conf/
$ mv nginx/init.d.nginx /etc/init.d/nginx
$ chmod +x /etc/init.d/nginx
$ chkconfig --level 345 nginx on
$ /etc/init.d/nginx start
1 Comment

CentOS6配置rsync服务

rsync是linux下的文件同步服务,本文演示了在CentOS 6系统上配置rsync的过程。

1,服务端配置

网上有很多教程在配置rsync服务端的时候,都先配置了xinetd服务,事实上这是不必要的,rsync也能脱离xinetd以独立进程的方式运行,所以本文未配置xinetd。

$ yum install rsync -y

$ mkdir /etc/rsyncd
$ touch /etc/rsyncd/rsyncd.conf    #主配置文件
$ touch /etc/rsyncd/rsyncd.secrets #客户端连接时使用的用户和密码
$ touch /etc/rsyncd/rsyncd.motd    #服务端提示信息文件
$ chmod 600 /etc/rsyncd/rsyncd.secrets
$ chown root:root /etc/rsyncd/rsyncd.secrets
Leave a Comment

pip, easy_install使用方式

easy_install 跟 pip 都是 Python 的套件管理程序,有了它们,在使用 Python 开发程序的时候会带來不少方便。
easy_install 和 pip 有什么不一样?据 pip 官网的说法,pip 改善了不少 easy_install 的缺点,如此说來 pip 应该是略胜一筹,不过它还不能够完全取代对方,因为目前有很多套件还是得用 easy_install 安裝。

安装使用easy_install

安装:
$ wget -q http://peak.telecommunity.com/dist/ez_setup.py
$ python ./ez_setup.py

使用:
$ easy_install PackageName     #安装套件
$ easy_install -U PackageName  #更新套件
$ easy_install -m PackageName  #卸载套件
$ easy_install --showhelp      #显示说明
Leave a Comment