使用 ssh 代理

1. ssh 代理的好处

若用户有一台服务器,该服务器网络速度快,或是可以正常访问国外网站的国外主机。则可以以此服务器为跳板,通过 ssh 代理来快速访问网络内容,或翻墙访问国外网页。

2. ssh 代理设置

此方法是在使用 linux 系统下的设置,在本地机器运行命令:

$ ssh -qTfnN -D 4241 chenlianfu@122.205.95.116

表示可以通过 IP 为 122.205.95.116 的服务器为跳板,访问网络。

3. firefox 设置

设置代理服务器为 localhost, 端口 4241, socks5 类型,即可使用代理了。

3. sshd 设置保持 ssh 持续连接

修改 /etc/ssh/sshd_config 文件内容:

ClientAliveInterval 60

Apache 和 Tomcat 整合

1. Apache 和 Tomcat 的联系

Apache 主要用于支持静态网页, 而 Tomcat 主要用于支持动态网页。 比如运行 WortPress 使用 apahce, 运行 WebApollo 这样的 java 网页则使用 Tomcat。Apache 是 web 服务器, Tomcat 是应用(java)服务器。 Tomcat 可以认为是 apache 的扩展,但是可以独立于 apache 运行。
由于学校只开放了 80 端口,而 Tomcat 运行在 8080 端口。为了能让 WebApollo 在 80 端口被访问,因此需要将 java 请求通过 apache 转发给 tomcat 处理。

2. 安装 Apache 和 Tomcat

整合 Apache 和 Tomcat 需要安装 jakarta-tomcat-connectors

使用 yum 安装 Apache
$ sudo yum install httpd httpd-devel

安装  jakarta-tomcat-connectors
$ wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
$ tar zxf tomcat-connectors-1.2.40-src.tar.gz 
$ cd tomcat-connectors-1.2.40-src/native/
$ ./configure --with-apxs=/usr/sbin/apxs
$ make

安装 Tomcat,直接下载二进制包解压缩即可使用

3. 配置 JK 以整合 Apache 和 Tomcat

首先,在 /etc/http/conf.d/ 目录下建立文件 mod_jk.conf,内容如下:

# 载入 jk 模块
LoadModule jk_module modules/mod_jk.so
# 指出mod_jk模块工作所需要的工作文件workers.properties的位置
JkWorkersFile /etc/httpd/conf/workers.properties
JkMountFile   /etc/httpd/conf/uriworkermap.properties
JkLogFile  /etc/httpd/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
# 将所有servlet 和jsp请求通过ajp13的协议送给Tomcat,让Tomcat来处理
JkMount /servlet/* worker1
JkMount /*.jsp worker1

将以下内容写入 /etc/http/conf/workers.properties :

# Defining a worker named worker1 and of type ajp13
# 创建名为 worker1 的 worker
worker.list=worker1

# Set properties for worker1
# work1 使用ajp13协议与tomcat 进程通讯
worker.worker1.type=ajp13
# 监听ajp13请求的的tomcat worker主机地址
worker.worker1.host=localhost
# 默认情况下tomcat在ajp13协议中使用的端口为8009
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

将以下内容写入 /etc/httpd/conf/uriworkermap.properties :

/*=worker1
!/*.jpg=worker1
!/*.gif=worker1
!/*.png=worker1
!/*.bmp=worker1
!/*.html=worker1
!/*.htm=worker1
!/*.swf=worker1
!/*.css= worker1
!/*.js= worker1

上述内容表示: ‘/’表示网页中的相对路径; /*=worker1 表示将‘/’目录下所有的请求都交给 worker1 (workers.properties 文件中指定的)来处理;模块会首先在‘/’目录过滤掉所有图片、flash、js文件、css文件和静态网页,将剩下的文件类型自己全部处理。

4. 配置 Apache 和 Tomcat 展示指定的目录

对 Tomcat 中的 webApp 目录进行展示。
首选修改 Apache 的 /etc/httpd/conf.d/httpd.conf 文件

Alias /tomcat "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps"
<Directory "/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps">
    Options Includes FollowSymLinks 
    AllowOverride None
    Order deny,allow
    Allow from all
</Directory>

再修改 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/conf/server.xml 文件

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      errorReportValveClass="org.bbop.apollo.web.ErrorReportValve">
      <Context path="/tomcat" docBase="/opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/" debug="0" reloadable="true" crossContext="true"/>
      ...
</Host>

以上修改都表示将目录 /opt/biosoft/WebApollo-2014-04-03/apache-tomcat-7.0.57/webapps/ 展示到网页中的 /tomcat 目录下。

5. 使用代理进行整合

此外,还有两种非常简易的方法进行整合。
默认情况下,Tomcat 对外开启了 8080 端口,以 HTTP/1.1 协议运行; 同时,也开启了 8009 端口,以 AJP/1.3 协议运行。这两种协议可以同时生效,也可以按需要仅保留一个即可。
因此,只需要使用 Apache 的 mod_proxy.so, mod_proxy_http.so, mod_proxy_ajp.so 等模块,即可使用代理的方法来整合 Apache 和 Tomcat。这些模块默认情况下都存在并是开启着的。
因此,配置如下设置即可:

ProxyPass /tomcat http://www.chenlianfu.com:8080
或
ProxyPass /tomcat ajp://www.chenlianfu.com:8009

Perl 模块使用心得

使用 Math::Random 获取随机数

当需要获取一组符合正太分布的随机数:

use Math::Random qw(random_normal);
my @aa = random_normal(10,5000,250);
my $bb = random_normal(1,5000,250);

以上结果得到@aa得到均值为5000,标准差为250的10个数据。
$bb得到一个均值为5000,标准差为250的数据。

Excel::Writer::XLSX

输出 Excel 结果文件。

Spreadsheet::Read

读取 Excel 文件。

CentOS 语音生成 TTS

TTS, 即 test to speech ,表示将文本转为为阅读的语音。

1. 中文 TTS

使用 ekho 是个不错的选择,其官网:http://www.eguidedog.net/ekho_cn.php
ekho 的下载与安装

$ wget http://downloads.sourceforge.net/e-guidedog/ekho-5.7.tar.xz
$ tar Jxf ekho-5.7.tar.xz
$ cd ekho-5.7
$ sudo yum install libsndfile*
$ ./configure && make && make install

上述安装的 ekho 紧能阅读中文

$ ekho "这次公务员涨工资,博士后也跟着涨吗?现在一个月才2000多,是2006年的标准,有点少啊。"

2. 英文 TTS

espeak 和 festival 都能进行英文 TTS

$ echo "It's such a beautiful day! Why are you in front of the computer?" | festival --tts
$ echo "It's such a beautiful day! Why are you in front of the computer?" | espeak

Centos 安装 HP Deskjet 1010 驱动

Linux 下安装 HP Deskjet 1010 驱动需要安装 HPLIP, 可以参考: HPLIP Manual Install.

$ sudo yum -y -d 10 -e 1 install cups cups-devel gcc-c++ ghostscript libjpeg-devel glibc-headers libtool libusb-devel make python python-devel PyXML openssl-devel net-snmp-devel policycoreutils-gui PyQt4 PyQt4-devel dbus-python notify-python sane-backends sane-backends-devel sane-frontends xsane python-imaging python-imaging-devel *crypto*
$ sudo ln -s /lib/libcrypt-2.12.so /lib/libcrypt.so

$ wget http://downloads.sourceforge.net/project/hplip/hplip/3.15.2/hplip-3.15.2.tar.gz
$ tar zxf hplip-3.15.2.tar.gz
$ cd hplip-3.15.2
$ ./configure --with-hpppddir=/usr/share/cups/model/HP --libdir=/usr/lib64 --prefix=/usr --enable-qt4 --disable-libusb01_build --enable-doc-build --enable-cups-ppd-install --disable-foomatic-drv-install --disable-foomatic-ppd-install --disable-hpijs-install --disable-udev_sysfs_rules --disable-policykit --disable-cups-drv-install --enable-hpcups-install --enable-network-build --enable-dbus-build --enable-scan-build --enable-fax-build
$ make -j 4 && sudo make install

$ sudo hp-setup
设置打印机

SSH 隧道

1. 反向隧道

学校关闭了对服务器所有外端口的访问。于是要想在校外登录实验室的服务器,则需要有一台有固定 IP 的外网机器。实验室的服务器能连接上该外网机器,同时来开启一个 ssh 反向隧道,以供外网机器连接到实验室服务器。于是本地机器可以先连接到外网机器,再连接到实验室服务器。
实验室的服务器不需要有固定的 IP,有个用户名为 chenlianfu ;外网服务器的 IP 为 123.123.123.123 ;外网服务器的用户名为 waiwang。

在内网服务器上输入命令,建立一个和外网机器的 ssh 隧道,来保证外网机器能和内网机器进行连接
$ autossh -M 4321 -N -f -R 2222:localhost:22 waiwang@123.123.123.123
输入 123.123.123.123 机器 waiwang 用户的密码来构建反向通道。

-M 推荐加上此参数,可能好些,貌似是发送和接受测试数据用。
-N -f 这两个参数配合使用,让隧道在后台运行。
-R 构建反向隧道,将本地机器的 22 号端口映射成为远程服务器的 2222 端口。

此外,若使用 ssh 也可以运行上述命令,但是容易断掉反向隧道。

在 IP 为 123.123.123.123 的机器上则通过下面命令来连接内网机器:
$ ssh -p 2222 chenlianfu@localhost
输入内网机器 chenlianfu 用户的密码通过反向隧道来连接内网机器。
这时,只需要连接有固定 IP 的外网机器,即可再连接内网服务器。

使用rsync进行数据同步

1. rsync 命令作用

rsync 主要用于同步 2 台机器的文件。这里,同步的意思是:

1. 若目的端文件的源端的文件内容不一致,则使目的端文件和源端的文件内容一致。默认下,程序会比较两端文件的时间戳和大小,如果一致,则不会同步。
2. 默认下,若两端都有的文件,不会修改rwx权限和modify time。
3. 源端的路径必须有读权限,目的端必须有写权限,才能正常同步。

2. rsync 常用命令和参数

常用命令示例:
$ rsync -vrP -e 'ssh -p 22' SRC USER@HOST:DEST
可以使用 rsync 替代 scp。因为 scp 不能断点续传。

常用参数:
-v
    输出日志信息,-vvv (多个v)则会输出更多的信息。
-r
    递归,传输文件夹需要加此参数。
-P
    相当同时使用 --partial(断点续传) --progress(显示传输进度)这2个参数。
-e  default: ssh
    设置传输方式。如果ssh端口是 1234,则需要使用参数 -e 'ssh -p 1234' 。
--delete
    删除在目的端删存在而源端不存在的文件,配合 -r 使用。
-z
    使用gzip压缩后传输。
-t
    将源端文件的modify time同步过去。
-p
    将源端文件的rwx权限同步过去。
-I
    程序会比较文件内容是否一致来进行同步,速度慢。

linux下测试磁盘的读写IO速度

转载于:http://blog.chinaunix.net/uid-24250828-id-3239100.html

有时候我们在做维护的时候,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策.

下面是两种测试方法:
(1)使用hdparm命令
这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord , the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的.

使用方法很简单
# hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/sec
Timing buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec

可以看到,2秒钟读取了6676MB的缓存,约合3340.18 MB/sec;
在3.11秒中读取了218MB磁盘(物理读),读取速度约合70.11 MB/sec

(2)使用dd命令
这不是一个专业的测试工具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使用来对磁盘的读写速度作一个简单的评估.
另外由于这是一个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd工具一般都是首选.

在使用前首先了解两个特殊设备
/dev/null 伪设备,回收站.写该文件不会产生IO
/dev/zero 伪设备,会产生空字符流,对它不会产生IO

测试方法:
a.测试磁盘的IO写速度
# time dd if=/dev/zero of=/test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
10.59s real 0.43s user 9.40s system
# du -sm /test.dbf
2347 /test.dbf

可以看到,在10.59秒的时间里,生成2347M的一个文件,IO写的速度约为221.6MB/sec;
当然这个速度可以多测试几遍取一个平均值,符合概率统计.

b.测试磁盘的IO读速度
# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
19214 9545 8693 53% /
/dev/sda1 99 13 82 14% /boot
none 506 0 506 0% /dev/shm

# time dd if=/dev/mapper/VolGroup00-LogVol00 of=/dev/null bs=8k
2498560+0 records in
2498560+0 records out
247.99s real 1.92s user 48.64s system

上面的试验在247.99秒的时间里读取了19214MB的文件,计算下来平均速度为77.48MB/sec

c.测试IO同时读和写的速度
# time dd if=/dev/sda1 of=test.dbf bs=8k
13048+1 records in
13048+1 records out
3.73s real 0.04s user 2.39s system
# du -sm test.dbf
103 test.dbf

上面测试的数据量比较小,仅作为参考.

相比两种方法:
前者是linux上专业的测试IDE/ATA磁盘的工具,但是使用范围有局限性;(此试验仅仅使用了测试磁盘IO的参数,对于其他参数及解释参考man手册)
后者可以通用,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威.