Linux Mint 20 gnome-terminal 使用等距更纱黑体 SC字体

最近在使用Linux Mint 20 Cinnamon桌面,默认的终端为 gnome terminal,一直无法修改为我想要的等宽字体,比如最近喜欢上的 等距更纱黑体 SC,英文名为:Sarasa Mono SC

原因是gnome terminal只认Monospace系列家族字体,所以想办法让系统认为等距更纱黑体 SC就是monospace字体就能解决这个问题。

还是先记录一下怎么安装等距更纱黑体 SC字体吧,从github下载最新压缩包,然后使用7z解压,只要复制sarasa-mono-sc-regular.ttf到/usr/share/fonts/目录下的其中一个目录即可。

# https://github.com/be5invis/Sarasa-Gothic/releases

sudo mkdir /usr/share/fonts/sarasa_mono_sc
sudo cp sarasa-gothic-ttf-0.15.3/sarasa-mono-sc-regular.ttf /usr/share/fonts/sarasa_mono_sc/
# 刷新字体缓存
sudo fc-cache  -fv

# 使用如下命令可查看字体
fc-match "Sarasa Mono SC"
# 或者使用 fonts 工具也可以查看到安装好的字体。

下面是修改字体配置文件,替换字体,我是从ArchLinux Wiki中查找到的方法,网上使用alias的方法没有效果。

vim ~/.config/fontconfig/fonts.conf

在<fontconfig></fontconfig>里面增加下面一段:

<match target="pattern">
    <test qual="any" name="family"><string>Monospace</string></test>
    <edit name="family" mode="assign" binding="same"><string>Sarasa Mono SC</string></edit>
</match>


保存文件,重新打开 gnome-terminal 即可看到字体变化为等距更纱黑体 SC的效果了。

ArchLinux Wiki上的描述为:

关键点在于使用“binding”属性可以有更好的效果,例如在Firefox你可能只想替换字体但并不想改变被替换字体的属性。

可以使用一下命令检查是否生效:

# 查看 Monospace 目前使用的是哪个字体
fc-match "Monospace"
# 排序,这里可以看到排在第一行的为 等距更纱黑体 SC
fc-match --sort "Monospace"

sarasa-mono-sc-regular.ttf: "等距更纱黑体 SC" "Regular"


注意:在gnome-terminal的首选项设置中 需要钩选自定义字体,选择Monospace Regular 字体。

CentOS 6.10 yum 报PyUnicodeUCS4_AsUTF8String解决过程

近日朋友向我求助说是在CentOS6中编译安装了python2.7后面不知怎么搞的yum也用不了的,本以为很简单的事情,把yum里的头替换一下就好了,结果事情不是那个简单。

参考这篇文章重装 https://www.lizenghai.com/archives/17330.html,所使用的包如下:

libxml2-python-2.7.6-21.el6_8.1.x86_64.rpm
python-2.6.6-66.el6_8.x86_64.rpm
python-backports-1.0-5.el6.x86_64.rpm
python-backports-ssl_match_hostname-3.4.0.2-5.el6.noarch.rpm
python-chardet-2.2.1-1.el6.noarch.rpm
python-devel-2.6.6-66.el6_8.x86_64.rpm
python-iniparse-0.3.1-2.1.el6.noarch.rpm
python-libs-2.6.6-66.el6_8.x86_64.rpm
python-pycurl-7.19.0-9.el6.x86_64.rpm
python-setuptools-0.6.10-4.el6_9.noarch.rpm
python-urlgrabber-3.9.1-11.el6.noarch.rpm
rpm-build-4.8.0-59.el6.x86_64.rpm
rpm-libs-4.8.0-59.el6.x86_64.rpm
rpm-python-4.8.0-59.el6.x86_64.rpm
yum-3.2.29-81.el6.centos.noarch.rpm
yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
yum-plugin-aliases-1.1.30-41.el6.noarch.rpm
yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
yum-utils-1.1.30-41.el6.noarch.rpm

下面这些是一些记录,看不懂可忽略这一段
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps        ##强制清除已安装的程序及其关联
 whereis python |xargs rm -frv ##删除所有残余文件 ##xargs,允许你对输出执行其他某些命令
 whereis python ##验证删除,返回无结果说明清除干净
 删除现有的yum
 [root@localhost rx]# rpm -qa|grep yum
 yum-metadata-parser-1.1.2-16.el6.x86_64
 yum-plugin-aliases-1.1.30-41.el6.noarch
 yum-plugin-fastestmirror-1.1.30-41.el6.noarch
 yum-plugin-protectbase-1.1.30-41.el6.noarch
 yum-3.2.29-81.el6.centos.noarch
 yum-utils-1.1.30-41.el6.noarch
 rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps    
 创建一个目录:python-need-pkg,将这些包下载下来,我是用centos6.10  DVD1 ios 镜像中提取的包。下载响应的包(注意:根据自己的系统下载,源中版本会更新,具体查看URL中的版本再下载!)
 5.执行命令安装
 1>执行这一步的时候没有依赖问题
 rpm -Uvh --replacepkgs python*.rpm
 行这一步的时候报依赖问题,有两个,
 rpm -Uvh --replacepkgs rpm-python.rpm yum.rpm
 error: Failed dependencies:
         libxml2-python is needed by yum-utils-1.1.30-41.el6.noarch
 rpm -ivh --force yum-utils-1.1.30-41.el6.noarch.rpm
 find /usr/lib64/  -type f -name "*.so" | xargs nm -AD | grep PyUnicodeUCS4_AsUTF8String 
 /usr/lib64/python2.6/lib-dynload/_sqlite3.so:                 U PyUnicodeUCS4_AsUTF8String
 /usr/lib64/python2.6/lib-dynload/cPickle.so:                 U PyUnicodeUCS4_AsUTF8String
 /usr/lib64/python2.6/site-packages/rpm/_rpmmodule.so:                 U PyUnicodeUCS4_AsUTF8String
 rpm -qf /usr/lib64/python2.6/lib-dynload/_sqlite3.so
 python-libs-2.6.6-66.el6_8.x86_64
 rpm -qf /usr/lib64/python2.6/lib-dynload/cPickle.so
 python-libs-2.6.6-66.el6_8.x86_64
 rpm -qf /usr/lib64/python2.6/site-packages/rpm/_rpmmodule.so
 rpm-python-4.8.0-59.el6.x86_64
 nm -AD /lib/libpython2.6.so.1.0 | grep PyUnicodeUCS4_AsUTF8String 
 libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00007f139db99000)
 libpython2.6.so.1.0 => /lib/libpython2.6.so.1.0 (0x00007f6be9933000)
 libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007f139cb90000)
 libnssutil3.so => /usr/lib/libnssutil3.so (0x00007f6be892a000)

后面重装了系统自己带的python2.6.6及yum也还是报 /usr/lib64/python2.6/site-packages/rpm/_rpmmodule.so undefined symbol:PyUnicodeUCS4_AsUTF8String

后面自己在虚拟机中安装了一个干净的CentOS6.10对比才发现问题所在。下面这个是干净系统的 ldd

[root@localhost ~]# ldd /usr/lib64/python2.6/site-packages/rpm/_rpmmodule.so
         linux-vdso.so.1 =&gt;  (0x00007fff9c3e9000)
         librpm.so.1 =&gt; /usr/lib64/librpm.so.1 (0x00007f6a00ddf000)
         libselinux.so.1 =&gt; /lib64/libselinux.so.1 (0x00007f6a00bc0000)
         libcap.so.2 =&gt; /lib64/libcap.so.2 (0x00007f6a009bb000)
         libacl.so.1 =&gt; /lib64/libacl.so.1 (0x00007f6a007b3000)
         libdb-4.7.so =&gt; /lib64/libdb-4.7.so (0x00007f6a0043e000)
         librpmio.so.1 =&gt; /usr/lib64/librpmio.so.1 (0x00007f6a0020e000)
         libnss3.so =&gt; /usr/lib64/libnss3.so (0x00007f69ffec6000)
         libbz2.so.1 =&gt; /lib64/libbz2.so.1 (0x00007f69ffcb5000)
         libz.so.1 =&gt; /lib64/libz.so.1 (0x00007f69ffa9e000)
         libelf.so.1 =&gt; /usr/lib64/libelf.so.1 (0x00007f69ff888000)
         libpopt.so.0 =&gt; /lib64/libpopt.so.0 (0x00007f69ff67f000)
         liblzma.so.0 =&gt; /usr/lib64/liblzma.so.0 (0x00007f69ff45d000)
         liblua-5.1.so =&gt; /usr/lib64/liblua-5.1.so (0x00007f69ff230000)
         libm.so.6 =&gt; /lib64/libm.so.6 (0x00007f69fefac000)
         libpython2.6.so.1.0 =&gt; /usr/lib64/libpython2.6.so.1.0 (0x00007f69fec05000)
         librt.so.1 =&gt; /lib64/librt.so.1 (0x00007f69fe9fd000)
         libpthread.so.0 =&gt; /lib64/libpthread.so.0 (0x00007f69fe7e0000)
         libc.so.6 =&gt; /lib64/libc.so.6 (0x00007f69fe44b000)
         libdl.so.2 =&gt; /lib64/libdl.so.2 (0x00007f69fe247000)
         /lib64/ld-linux-x86-64.so.2 (0x00005617d7672000)
         libattr.so.1 =&gt; /lib64/libattr.so.1 (0x00007f69fe042000)
         libgcc_s.so.1 =&gt; /lib64/libgcc_s.so.1 (0x00007f69fde2b000)
         libnssutil3.so =&gt; /usr/lib64/libnssutil3.so (0x00007f69fdbfc000)
         libplc4.so =&gt; /lib64/libplc4.so (0x00007f69fd9f7000)
         libplds4.so =&gt; /lib64/libplds4.so (0x00007f69fd7f2000)
         libnspr4.so =&gt; /lib64/libnspr4.so (0x00007f69fd5b3000)
         libutil.so.1 =&gt; /lib64/libutil.so.1 (0x00007f69fd3af000)

对比发现这两处不一样:

libpython2.6.so.1.0 => /usr/lib64/libpython2.6.so.1.0 (0x00007f139db99000)
libpython2.6.so.1.0 => /lib/libpython2.6.so.1.0 (0x00007f6be9933000)
libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007f139cb90000)
libnssutil3.so => /usr/lib/libnssutil3.so (0x00007f6be892a000)

解决它:

cd /etc/ld.so.conf.d/
echo “/usr/lib64/” > libnssutil3.conf
echo “/usr/lib64/” > libpython2.6.conf
echo “/lib64/” > libdb-4.7.conf

又遇到 无法 import time 的问题,解决方法:

vim /etc/profile.d/python.sh export PYTHONPATH=$PYTHONPATH:/usr/lib64/python2.6:/usr/lib64/python2.6/lib-dynload/

Linux下utf-8 BOM 文件的检查与删除

当源程序是 gbk 格式,你转换为 utf8 的时候,很多情况是头部会出现 bom,如果是 php 代码,这样会出现很多意想不到的事情,那怎么办呢,你可以用 linux 命令来查找,然后对文件的 bom 进行删除。

grep -r $'\xef\xbb\xbf' * |grep .php

bom:UTF-8签名(UTF-8 signature)也叫做BOM(Byte Order Mark)

查询BOM:

:set bomb?

用 vim 去掉 utf-8 BOM

:set nobomb

保留 utf-8 BOM

:set bomb

vim 转换文件为 unix 格式

:set ff=unix

使用 grep 查找带 bom 的文件,并使用 perl 去掉 bom 头

grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'

eMule电骡使用OpenVPN获取HighID配置教程

以下是在 Windows7 虚拟机环境中做的试验,还需要有一台自己的 Openvpn 服务器,用于映射端口,打通 eMule 的连接,最终获得 HighID,使之可以连接 lowID 用户,提高下载速度或者资源。
PS:早些年就用过这个方案,拖延症托到现在才把这方案记录到博客中来让更多的 eMule 分享者使用。

下面这张图是配置好之后正常下载文件中的截图
eMule_XdP downloading
1、设置 eMule TCP、UDP 端口,我设置的是 TCP 3531,UDP 3531,并配置 Windows 防火墙,配置出、入方向的 TCP、UDP 的 3531 端口为允许连接,不然是获得不到 HighID 的。

eMule_port_setting

Windows 7_eMule_in

Windows 7_eMule_out

2、配置 OpenVPN 客户端静态 ip 地址,每次连接都分配同一个地址。
2.1 在 OpenVPN server.conf 配置文件中增加

vim /etc/openvpn/server.conf

# Client config directory
client-config-dir /etc/openvpn/ccd

2.2 创建 /etc/openvpn/ccd 目录

mkdir -p /etc/openvpn/ccd

2.3 查看你的 OpenVPN 分配给你的证书名:

openssl x509 -in /etc/easy-rsa/easyrsa3/pki/issued/windows.crt -noout -subject | sed -e 's/.*CN=\(.*\)\/.*/\1/'

windows

我这次的名字为 windows,这个看你 OpenVPN 创建证书分配给客户的时候你自己定的

2.4 在 ccd 目录创建名为 windows 的文件,内容如下:

cat /etc/openvpn/ccd/windows
ifconfig-push 10.8.0.14 10.8.0.13

前面一个是客户端,你电脑连接成功 OpenVPN 之后获取的地址,后面是服务器使用的地址,这两个地址分配也是有规律的,为什么要这样配置呢?

客户端占用两个 IP,因为根据 IP 掩码位 /30 得知可用的 IP 就是两个。对于为什么只有 64 个,下面是官方的解释。
解释:
分配静态 IP 的方式是通过 ipconfig-push 设置的,而 ifconfig-push 地址代表虚拟客户端和服务器 IP 端点。它们必须从连续/30个子网中取得,以便与 Windows 客户端和 TAP-Windows 驱动程序兼容。具体来说,每个端点对的 IP 地址中的最后一个八位字节必须从该集合中取出:

[1,2] [5,6] [9,10] [13,14] [17,18]
[21,22] [25,26] [29,30] [33,34] [37,38]
[41,42] [45,46] [49,50] [53,54] [57,58]
[61,62] [65,66] [69,70] [73,74] [77,78]
[81,82] [85,86] [89,90] [93,94] [97,98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [ 133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

2.5 修改配置权限

chown -R nobody:nogroup /etc/openvpn/ccd

2.6 重启 OpenVPN 服务

service openvpn restart

3、在 OpenVPN 服务器中设置端口转发
上面我的 eMule 的 TCP 和 UDP 端口分别为TCP 3531,UDP 3531,OpenVPN 公网 ip 为 233.233.233.233,客户端连接 vpn 后得到的 ip 为 10.8.0.14, 分别执行

# opvnevpn to emule Get HighID
iptables -t nat -A PREROUTING -p tcp -d 233.233.233.233 --dport 3531 -j DNAT --to 10.8.0.14:3531
iptables -t nat -A PREROUTING -p udp -d 233.233.233.233 --dport 3531 -j DNAT --to 10.8.0.14:3531

iptables-save > /etc/sysconfig/iptables

查看是否配置成功,命令如下:

iptables -t nat -vnL

iptables_NAT_PREROUTING_Chain

4、重新连接 OpenVPN,重启 eMule,连接服务器看看是不是 HightID 吧,

ovpn

eMule_My_info_HighID

还有一个检测方法:

telnet 233.233.233.233 3531

如果是通的,那表示端口映射成功,可以获得 HighID 了。

haprox external-check 健康检测

haprox external-check 健康检测可以自定义脚本来检测后端服务,这非常有利于那些经常出现假死,无法通过常规判断端口来检测后台是否正常的问题。
比如,RabbitMQ,业务程序自定义检查等。

HAProxy可以使用二进制或脚本运行外部命令来执行运行状况检查。 当这样做的时候,它需要将自己fork一个新进程。
如果您使用chroot,请确保该命令及其所有依赖项在chroot中可用。
以下指令可用:

In the global section:
external-check: Allows the use of the external check feature. It is disabled by default for security purposes.

In the defaults, backend, or listen section:

option external-check: Enables the use of an external command to perform health check
external-check command : Name of the command to run.
下面的参数被传递给命令:

写了一个bash脚本测试,发现在backend那里传了4个参数,如下,只有后面两个可用
Quoted Values: NOT_USED NOT_USED 172.20.2.71 5672
Total Number of Parameters : 4
继续阅读“haprox external-check 健康检测”

使用rsync定期同步windows系统文件到Linux系统

1 Windows 平台 cwRsync 安装配置成客户端,通过设置计划任务每 5 分钟推文件到 linux 的 rsync 服务端。
2 linux 配置成服务端。
3 记录同步详细日志,linux平台记录日志。
4 只同步新增或者修改过的不一样的文件,忽略时间、权限的同步。
示意图如下:

+----------------------+            |           +----------------------+
|   Windows IIS web    |10.10.100.2 |10.10.100.0|   Linux Nginx web    |
|                      +------------+-----------+                      |
|   /data/htdocs/*     |    --------------->    |     /data/htdocs/*   |
+----------------------+         copy           +----------------------+

一、Windows 客户端配置:
cwRsync是基于cygwin平台的rsync软件包,支持windows对windows、windows对Linux、Linux对windows高效文件同步。由于CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包。Cwrsync还集成了OpenSSH for windows,可以实现Linux 下Rsync一模一样的操作。使用 cwRsync 来同步文件后,只需要对一台主服务器进行文件修改,其他镜像服务器可以自动同步,包括文件的更新、删除、重命名等。

cwRsync分为付费版和免费版两种,我们只需要使用免费版即可,在官方网站上面下载 cwRsync Free Edition 版本。

https://www.itefix.net/content/cwrsync-free-edition
Name: cwRsync_5.5.0_x86_Free.zip
SHA256: 37e8ef21ac975d4ee86c9d3be40c8935e8b9d0ba84e9302fc106b9452296cb85

包含如下几个程序
Version information:
Rsync 3.1.2
Cygwin 2.3.1
OpenSSH 7.1p
OpenSSL 1.0.2e

1.2 解压 cwRsync_5.5.0_x86_Free.zip 到 D:\data\app\cwRsync_5.5.0_x86_Free 目录中
1.3 双击 cwrsync.cmd 运行,会在当前生成 home\%USERNAME%\.ssh 目录,供 ssh 认证方式使用。
1.4 为系统新建一个环境变量,目录为cwrsync的bin目录下,例:path:D:\data\app\cwRsync_5.5.0_x86_Free\bin。这样 cmd 命令行下可以直接运行 rsync 这个命令
C:\Users\Administrator>rsync –version
rsync version 3.1.2 protocol version 31

2.1 Ubunut 16.04 下安装 rsync

apt-get install rsync
# rsync  --version
rsync  version 3.1.1  protocol version 31

2.2 配置文件
vim /etc/rsyncd.conf

pid file = /var/run/rsync.pid
port = 873
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock 

# create new
# any name you like
[resources]
# destination directory to copy
path = /data/htdocs/
# hosts you allow to access
hosts allow = 10.10.100.2
hosts deny = *
secrets file = /etc/rsyncd.pass
# 表示该节点是否可被发现。
list = true
# 指定传输到这里文件所属的用户。
uid = www-data
# 指定传输到这里的文件所属的组。
gid = www-data
# rsync连接时的用户名,要和客户端rsync的命令一致
auth users = www-data
# 该目录是否只读
read only = no
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.  
timeout = 600

# 创建密码文件
touch /etc/rsyncd.pass
#权限修改
chown root:root /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass
vim /etc/rsyncd.pass
内容为:www-data:passwd # 用户名:密码

2.3 启动服务端

service rsync start

# 添加开机启动
update-rc.d rsync defaults

2.4 检查 rsync 端口,确认已启动

netstat -ntlpu | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      25753/rsync     
tcp6       0      0 :::873                  :::*                    LISTEN      25753/rsync     

3.1 客户端测试
新建立目录
D:\data\app\cwRsync_5.5.0_x86_Free\etc
创建 rsync.pass 文件
输入 rsync 服务端的密码

# -u 同步不覆盖(源到目的)目的产生的新文件内容,不修改覆盖目标目录下的新增类的文件
完整的同步命令:

rsync -acrtzv --password-file=/cygdrive/d/data/app/cwRsync_5.5.0_x86_Free/etc/rsync.pass /cygdrive/d/data/htdocs/ www-data@10.10.100.0::resources

日志:
2017/02/27 14:44:38 [25798] name lookup failed for 10.10.100.2: Name or service not known
解决这个 not known 的问题,把客户端的 hostname 写入服务端的系统 host 文件中

vim /etc/hosts

10.10.100.2 IISWEB01

3.2 创建同步脚本文件
D:\data\app\cwRsync_5.5.0_x86_Free\etc
dynamicres_sync.bat

@echo off
D:\data\app\cwRsync_5.5.0_x86_Free\bin\rsync -acrtzv --password-file=/cygdrive/d/data/app/cwRsync_5.5.0_x86_Free/etc/rsync.pass /cygdrive/d/data/htdocs/ www-data@10.10.100.0::resources

4.1 在Windows中创建任务计划:
每5分钟执行一次 dynamicres_sync.bat 这个同步脚本

5.1 Linux Rsync server 日志
发现日志中第二行和第三行时间是使用 UTC 时间。

# tail -100f /var/log/rsyncd.log 
2017/02/27 16:15:58 [26150] connect from IISWEB01 (10.10.100.2)
2017/02/27 08:15:58 [26150] rsync to resources/ from www-data@IISWEB01 (10.10.100.2)
2017/02/27 08:15:58 [26150] receiving file list
2017/02/27 08:15:59 [26150] sent 25 bytes  received 7441 bytes  total size 8515857
2017/02/27 16:20:58 [26156] connect from IISWEB01 (10.10.100.2)
2017/02/27 08:20:58 [26156] rsync to resources/ from www-data@IISWEB01 (10.10.100.2)
2017/02/27 08:20:58 [26156] receiving file list
2017/02/27 08:20:59 [26156] sent 25 bytes  received 7441 bytes  total size 8515857

update 20171028 15:05
解决 rsync 同步到 Linux 系统时,目录及文件权限不正常

-artzv

-a, ––archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)

-r, ––recursive 对子目录以递归模式处理
-l 保持符号链接文件
#-p 保持文件权限
-t 保持文件时间信息
#-g 保持文件归属组信息
#-o 保持文件归属用户信息
-D 保持设备文件和特殊文件

rltDzv 需要使用这条命令,把 -p -g -o权限都去掉

目录权限:755
文件:644
用户组: 为 rsyncd.conf 中指定的。
# 指定传输到这里文件所属的用户。
uid = www-data
# 指定传输到这里的文件所属的组。
gid = www-data

修改后的命令为:

D:\data\app\cwRsync_5.5.0_x86_Free\bin\rsync -rltDzv --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --password-file=/cygdrive/d/data/app/cwRsync_5.5.0_x86_Free/etc/rsync.pass /cygdrive/d/data/htdocs/ www-data@10.10.100.0::resources

update 2018/10/16
windows rsync 通过 ssh 端口及认证传送文件到 linux 服务器下
此方式远程服务器不需要运行rsync-demo,但必须安装 rsync 客户端
配置ssh key
创建 .ssh 目录,做好ssh-key免密码登录

C:\cwRsync\home\Administrator\.ssh

C:\cwRsync\bin\rsync.exe -rtv -e "/cygdrive/c/cwRsync/bin/ssh.exe -p 22" /cygdrive/d/data/ftp/* kye00@10.10.100.0:/data/ftp/
或者指定key
C:\cwRsync\bin\rsync.exe -rtv -e "/cygdrive/c/cwRsync/bin/ssh.exe -p 22 -i /cygdrive/c/xxx/id_rsa " /cygdrive/d/data/ftp/* kye00@10.10.100.0:/data/ftp/

windows 版免费 server 端
github 地址
https://github.com/backuppc/cygwin-rsyncd

一,先安装 脚本工具
nsis-3.01-setup.exe

2
右键 backuppc_rsync-server.nsi
会生成
cygwin-rsyncd-3.1.2.1_installer.exe 安装工具

3 运行 cygwin-rsyncd-3.1.2.1_installer.exe 安装工具
3.1 会自动复制各个程序到 C:\rsyncd 目录下
3.1 会自动把Rsyncd添加到服务里面启动。

4 修改配置
c:\rsyncd\rsyncd.conf and c:\rsyncd\rsyncd.secrets files to set your client-specific shares,
backup user name and password.
重启rsyncd 服务才会生效
restart the Windows RsyncServer service to get the new settings.

5 配置文件权限 rsyncd.secrets 去掉 user用户组,只保留administrator 和 system
rsyncd.conf 修改限制IP项目

To ensure initial security, the c:\rsyncd\rsyncd.secrets file initially has no users, and the c:\rsyncd\rsyncd.conf only allows connections from two specific IP addresses. So unless you edit those two files you won’t be able to connect to the rsyncd server.

6、开放 873 内网访问
If you have Windows firewall enabled then you will need to allow rsync to listen on TCP port 873. You can do that through the WinXX firewall menus. You can also make that rule specific to the BackupPC server IP addresses, so no other hosts can contact the rsyncd server on this client.

mutt 找不到 libtasn1.so.3 动态链接库文件的解决方法

系统为 CentOS 6.6,使用 yum 安装的 mutt,无法运行,提示 libtasn1.so.3 => not found,使用 ldd 命令来查看可执行文件依赖的动态链接库有哪些。

ldd /usr/bin/mutt

libtasn1.so.3 => not found

解决步骤一:在系统中查找这个文件

find /* -type f -name "libtasn1*"

/usr/lib/libtasn1.so.6.4.0
/usr/lib/pkgconfig/libtasn1.pc
/usr/lib/libtasn1.so.6.4.2

但是发现这个库文件比较新,mutt 没办法使用,决定编译对应的 libtasn1 版本,libtasn1.so.3 对应的版本可能是 libtasn1-0.3.x 这个系列。

解决步骤二:手动编译 libtasn1

wget http://ftp.gnu.org/gnu/libtasn1/libtasn1-0.3.10.tar.gz
tar zxf libtasn1-0.3.10.tar.gz
cd libtasn1-0.3.10
# 指定安装目录
./configure --prefix=/usr/local/libtasn1-0.3.10
make && sudo make install

ls -lrt /usr/local/libtasn1-0.3.10/lib
total 456
-rwxr-xr-x 1 root root 172275 Apr 28 18:18 libtasn1.so.3.0.10
lrwxrwxrwx 1 root root 18 Apr 28 18:18 libtasn1.so.3 -> libtasn1.so.3.0.10
lrwxrwxrwx 1 root root 18 Apr 28 18:18 libtasn1.so -> libtasn1.so.3.0.10
-rwxr-xr-x 1 root root 833 Apr 28 18:18 libtasn1.la
-rw-r--r-- 1 root root 282478 Apr 28 18:18 libtasn1.a
drwxr-xr-x 2 root root 4096 Apr 28 18:18 pkgconfig

cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
cd /etc/ld.so.conf.d/
echo "/usr/local/libtasn1-0.3.10/lib" > libtasn1-0.3.10.conf

/sbin/ldconfig
ldd /usr/bin/mutt

libtasn1.so.3 => /usr/local/libtasn1-0.3.10/lib/libtasn1.so.3 (0x00007fd6105b6000)

mutt -v
Mutt 1.5.20 (2009-12-10)

至此问题解决。

CentOS 6 编译 libnl-3.2.25

一、有一个软件编译的时候提示为:“libnl3: no”,解决方法是安装 libnl。这里选择编译安装最新版 libnl-3.2.25.tar.gz,编译过程如下:

wget http://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz
tar zxvf libnl-3.2.25.tar.gz
cd libnl-3.2.25
./configure --prefix=/usr/
make && make install

二、执行 ./configure 后有如下提示:

-------------------------------------------------------------------------------
                                  NOTE

 There have been some changes starting with 3.2 regarding where and how libnl
 is being installed on the system in order to allow multiple libnl versions
 to be installed in parallel:

    - Headers will be installed in ${prefix}/include/libnl3, therefore
      you will need to add "-I/usr/include/libnl3" to CFLAGS

    - The library basename was renamed to libnl-3, i.e. the SO names become
      libnl-3.so., libnl-route-3.so, etc.

    - libtool versioning was assumed, to ease detection of compatible library
      versions.

 If you are using pkg-config for detecting and linking against the library 
 things will continue magically as if nothing every happened. If you are 
 linking manually you need to adapt your Makefiles or switch to using 
 pkg-config files.

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

三、再次编译那个软件的时候需要先执行如下命令,让编译能找到对应的lib

export LIBGNUTLS_LIBS="-L/usr/lib/ -lgnutls"
export LIBGNUTLS_CFLAGS="-I/usr/include/"

export LIBNL3_CFLAGS="-I/usr/include/libnl3"
export LIBNL3_LIBS="-L/usr/lib/ -lnl-3 -lnl-route-3"

四、检查是否安装成功

# pkg-config --cflags --libs libnl-xfrm-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-xfrm-3 -lnl-3  
# pkg-config --cflags --libs libnl-nf-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-nf-3 -lnl-route-3 -lnl-3  
# pkg-config --cflags --libs libnl-route-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-route-3 -lnl-3  
# pkg-config --cflags --libs libnl-genl-3.0 
-I/usr/local/include/libnl3  -L/usr/local/lib -lnl-genl-3 -lnl-3

五、libnl3 是什么?
核心库(core library)提供了使用 netlink 套接字进行通信的基础功能。它处理套接字的连接建立和断开、发送和接收数据、构造和解析消息、提供可配置的接收状态机。除此之外它还提供了一套抽象数据类型的框架,这套框架使得基于对象的 netlink 协议实现起来更加的简单,在这种协议中,对象可以通过基于 netlink 的协议来添加、删除、或者修改。
具体请阅读如下链接: http://blog.guorongfei.com/netlink/2015/01/20/libnl-translation-part1.html

在 debian-7.7.0 编译 Realtek RTL8188CUS USB 无线网卡驱动

前几天因FreeBSD10.0在我的笔记本上接投影无法双屏,然后新安装了 Linux mint 17 一切的完美,非常不错的一个发行版。完美支持 X61s 的多功能键,休眠,我想要的双屏也支持。唯一就是我的网件(Netgear)WNA1000M 150M迷你USB无线网卡无法驱动,通过 lsusb 命令可查看到这块网卡所用芯片为 Realtek RTL8188CUS。说明内核可以认这块网卡,Google 之发现问题是内核自带的驱动不正常,原因是内核太新了,Realtek 官方的驱动源代码 (Version 4.0.2_9000) 只支持 Linux Kernel 2.6.18~3.9,而这个系统使用的内核如下:

3.13.0-42-generic
lsusb
Bus 004 Device 004: ID 0846:9041 NetGear, Inc. WNA1000M 802.11bgn [Realtek RTL8188CUS]

按照 http://blog.chinaunix.net/uid-22883023-id-4392914.html 这篇博文的方法编译也无效,系统启动的时候报:

dmesg | grep 8192

8192cu module verification failed signature and/or required key missing - tainting kernel

折腾几个小时后,决定装个 ubuntu-14.04.1 这个内核正好是上面博文中讲到的 3.13.0-32-generic。可是当我装好正常编译后,也同样遇到上面这个问题,不过这是我这么多年再次装 Ubuntu 字体显示效果比 xfce4 好太太妈多了,都不舍得换其它发行版系统鸟。

再次想找个内核版本旧一点的系统,这次必须拿出 Debian 这个号称最稳定的版本了。下载 debian-7.7.0-amd64-xfce-CD-1.iso ,量产 U 盘一气呵成。安装的过程中最好插上网线联上网,因为我是要安装 xfce 桌面环境,这样在安装的过程中会安装最新的软件,以及字体,还有一些驱动。

安装好之后首先查看内核版本是多少(其实下载 iso 镜像的时候我就查过了在 2.6.18~3.9 之内,就是怕安装的过程中更新了内核)。

javasboy:~$ uname -a
Linux javasboy 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u2 x86_64 GNU/Linux

很好,内核版本为 3.2.0-4-amd64,这次我是到 Realtek 官网下载的RTL8188CUS源代码驱动。
下载地址如下:
http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#2742
下载好的文件名为:
RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip

解压、进入 RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/driver 目录,再把这个目录下的 rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911.tar.gz 解压。
这份驱动默认是使能了网卡节能功能,并且打开了debug信息,我对比了关闭节能功能,传输速度从 2M/s 提升到了 2.8M/s,暂时还不清楚关掉这个节能功能对笔记本有啥影响,反正我这电池只能坚持30分钟的样子,到哪都带着电源线。

补丁如下:

diff -uNr rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911/include/rtw_debug.h rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911_patch2/include/rtw_debug.h
--- rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911/include/rtw_debug.h   2013-09-11 11:56:55.000000000 +0800
+++ rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911_patch2/include/rtw_debug.h    2014-12-21 17:32:12.457692312 +0800
@@ -310,6 +310,7 @@
 
 #define DBG_871X_LEVEL LOG_LEVEL
 
+#undef _dbgdump
 #if     defined (_dbgdump)
         #undef DBG_871X
 //      #define DBG_871X _dbgdump
diff -uNr rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911/Makefile rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911_patch2/Makefile
--- rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911/Makefile      2013-09-11 11:56:55.000000000 +0800
+++ rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911_patch2/Makefile       2014-12-21 17:30:52.749296924 +0800
@@ -29,7 +29,7 @@
 CONFIG_SDIO_HCI = n
 
 CONFIG_MP_INCLUDED = n
-CONFIG_POWER_SAVING = y
+CONFIG_POWER_SAVING = n
 CONFIG_USB_AUTOSUSPEND = n
 CONFIG_HW_PWRP_DETECTION = n
 CONFIG_WIFI_TEST = n

(1) 编译准备工作:
sudo apt-get install build-essential linux-headers-3.2.0-4-amd64

(2) 进入编译目录 driver/rtl8188C_8192C_usb_linux_v4.0.2_9000.20130911 (其实也可以使用官方提供的 install.sh 脚本)

sudo make modules
sudo make install

(3) 编译好的 8192cu.ko 文件将会自动安装到 /lib/modules/3.2.0-4-amd64/kernel/drivers/net/wireless/ 目录下。

(4) 禁止内核默认的rtl8192cu模块加载:

sudo echo "blacklist rtl8192cu" >> /etc/modprobe.d/blacklist.conf

(5) 最后重新加载 modules

sudo depmod -a 3.2.0-4-amd64

(6) 重启动系统,进入桌面后网络连接里已经可以看到无线网卡列出的可用网络,连接家里的无线,通过台式机传送了一个1G多的电影,速度达到了2.8M/s,这样的小网卡有这个速度已经不错了。就是ping 网关的延迟有6-8 ms。

(7)

  1. 测试 USB 网卡插拔也能正常工作。
  2. 系统挂起(睡眠)后 wifi 也能正常工作。
  3. 系统休眠启动后也能正常工作。
  4. 发热也不能高,在 FreeBSD 系统下巨热。

About字符编码

打开”记事本”程序Notepad.exe,新建一个文本文件,内容就是一个”严”字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的”十六进制功能”,观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节”D1 CF”,这正是”严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节”FF FE 25 4E”,其中”FF FE”表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节”FE FF 4E 25″,其中”FE FF”表明是大头方式存储。

4)UTF-8:编码是六个字节”EF BB BF E4 B8 A5″,前三个字节”EF BB BF”表示这是UTF-8编码,后三个”E4B8A5″就是”严”的具体编码,它的存储顺序与编码顺序是一致的。

UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。

PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。

由于必须在在Bo-Blog的wiki看到,同样使用PHP的Bo-Blog也一样受到BOM的困扰。其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效。

解决的办法嘛,如果只包含英文字符(或者说ASCII编码内的字符),就把文件存成ASCII码方式吧。用UE等编辑器的话,点文件->转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。

当然在Python程序中处理的时候遇到这种情况改怎么处理呢?

方法一:直接将源文件的格式修改一下,将其保存为UTF-8即可,但是很多时候传过来的源文件是没法修改的,这样就行不通了。

方法二:替换,就是将其中的\xef\xbb\xbf替换为空就可以了。

VIM 十六进制和文本模式切换

使用vim打开文件后,使用命令

:%!xxd 使用十六进制显示;
:%!xxd -r 返回文本显示。

只有十六进制部分的修改才会被采用。右边可打印文本部分的修改忽略不计。

vim以二进制打开文件

vim -b binfile

在 Vim 中将文件保为无 BOM 的 UTF-8 格式

查看文件格式

通常我们需要先查看文件格式是否与预期的一样,再根据结果决定是否需要修改(当然你也可以在不知道原格式的情况下直接修改),下面分别给出了查看文件编码和是否带有 BOM 的命令。

# 查看文件编码。
set fenc?
# 查看是否带 BOM。
set bomb?

修改文件格式

# 设置为 UTF-8 编码。
set fenc=utf-8
# 设置为无 BOM,如需设置为带 BOM 则使用 "set bomb"。
set nobomb
# 加上BOM标记
set bomb

使用linux命令删除UTF-8编码中的BOM

shell> grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'
or
shell> grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//g'
or
shell> tail -c +4 old_file > new_file

如果使用SVN提交代码的话,可以在pre-commit钩子里加上相关代码用以杜绝BOM。

#!/bin/bash

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook

for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}'); do
    if $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | grep -q $'^\xEF\xBB\xBF'; then
        echo "Byte Order Mark be found in $FILE" 1>&2
        exit 1
    fi
done

不含 BOM 的 UTF-8 才是标准形式!
带 BOM 的 UTF-8 就是赤裸裸的流氓!!!

 

不同编码的BOM表示

编码 十六进制表示
UTF-8 EF BB BF
UTF-16-BE FE FF
UTF-16-LE FF FE
UTF-32-BE 00 00 FE FF
UTF-32-LE FF FE 00 00
UTF-7 2B 2F 76和以下的一个字节:[ 38 39 2B 2F ]
en:UTF-1 F7 64 4C
en:UTF-EBCIC DD 73 66 73
en:Standard Compression Scheme for Unicode 0E FE FF
en:BOCU-1 FB EE 28及可能跟随着FF
GB-18030 84 31 95 33

vim 将文件从dos格式转换到unix格式

:set fileformat=unix
:w

vim 将文件从unix格式转换到dos格式

:set fileformat=dos
:w

VIM 状态栏显示 文件格式带bom
Show fileencoding and bomb in the status line
http://vim.wikia.com/wiki/Show_fileencoding_and_bomb_in_the_status_line
比如 [latin1], [iso-8859-15], [utf-8,B], etc.

if has("statusline")
 set statusline=%<%f\ %h%m%r%=%{\"[\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\").\"]\ \"}%k\ %-14.(%l,%c%V%)\ %P
endif

其实有用的就是这段:

%{\"[\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\").\"]\ \"}

记录 Linux Iptables 防火墙 Dropped Packets 日志

最近VPS深受垃圾评论所害,而且IP都是福建莆田的,而且是不停的访问一两个URL!

以下是屏蔽一个IP列表的脚本中的一段,完整的脚本Google一下就出来了。

IPT="/sbin/iptables"
SPAMLIST="blockedip"
SPAMDROPMSG="BLOCKED IP DROP: "

[ -f /root/scripts/blocked.ips.txt ] && BADIPS=$(egrep -v -E "^#|^$" /root/scripts/blocked.ips.txt)

PUB_IF="eth0"

if [ -f /root/scripts/blocked.ips.txt ];
then
# create a new iptables list
$IPT -N $SPAMLIST

for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
$IPT -A $SPAMLIST -s $ipblock -j DROP
done

$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
fi

This article is part of our ongoing Linux IPTables series of articles. When things are not working as expected with your IPTables rules, you might want to log the IPTables dropped packets for troubleshooting purpose. This article explains how to log both incoming and outgoing dropped firewal packets.

If you are new to IPTables, first get yourself comfortable with the IPTables fundamental concepts.

Log All Dropped Input Packets

First we need to understand how to log all the dropped input packets of iptables to syslog.

If you already have whole bunch of iptables firewall rules, add these at the bottom, which will log all the dropped input packets (incoming) to the /var/log/messages

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

In the above example, it does the following:

  • iptables -N LOGGING: Create a new chain called LOGGING
  • iptables -A INPUT -j LOGGING: All the remaining incoming packets will jump to the LOGGING chain
  • line#3: Log the incoming packets to syslog (/var/log/messages). This line is explained below in detail.
  • iptables -A LOGGING -j DROP: Finally, drop all the packets that came to the LOGGING chain. i.e now it really drops the incoming packets.

In the line#3 above, it has the following options for logging the dropped packets:

  • -m limit: This uses the limit matching module. Using this you can limit the logging using –limit option.
  • –limit 2/min: This indicates the maximum average matching rate for logging. In this example, for the similar packets it will limit logging to 2 per minute. You can also specify 2/second, 2/minute, 2/hour, 2/day. This is helpful when you don’t want to clutter your log messages with repeated messages of the same dropped packets.
  • -j LOG: This indicates that the target for this packet is LOG. i.e write to the log file.
  • –log-prefix “IPTables-Dropped: ” You can specify any log prefix, which will be appended to the log messages that will be written to the /var/log/messages file
  • –log-level 4 This is the standard syslog levels. 4 is warning. You can use number from the range 0 through 7. 0 is emergency and 7 is debug.

Log All Dropped Outgoing Packets

This is same as above, but the 2nd line below has OUTPUT instead of INPUT.

iptables -N LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

Log All Dropped Packets (both Incoming and Outgoing)

This is same as before, but we’ll be taking the line number 2 from the previous two examples, and adding it here. i.e We’ll have a separate line for INPUT and OUTPUT which will jump to LOGGING chain.

To log both the incoming and outgoing dropped packets, add the following lines at the bottom of your existing iptables firewall rules.

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

Also, as we explained earlier, by default, the iptables will use /var/log/messages to log all the message. If you want to change this to your own custom log file add the following line to /etc/syslog.conf

kern.warning /var/log/custom.log

How to read the IPTables Log

The following is a sample of the lines that was logged in the /var/log/messages when an incoming and outgoing packets was dropped.

Aug 4 13:22:40 centos kernel: IPTables-Dropped: IN= OUT=em1 SRC=192.168.1.23 DST=192.168.1.20 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=ICMP TYPE=8 CODE=0 ID=59228 SEQ=2
Aug 4 13:23:00 centos kernel: IPTables-Dropped: IN=em1 OUT= MAC=a2:be:d2:ab:11:af:e2:f2:00:00 SRC=192.168.2.115 DST=192.168.1.23 LEN=52 TOS=0x00 PREC=0x00 TTL=127 ID=9434 DF PROTO=TCP SPT=58428 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

In the above output:

  • IPTables-Dropped: This is the prefix that we used in our logging by specifying –log-prefix option
  • IN=em1 This indicates the interface that was used for this incoming packets. This will be empty for outgoing packets
  • OUT=em1 This indicates the interface that was used for outgoing packets. This will be empty for incoming packets.
  • SRC= The source ip-address from where the packet originated
  • DST= The destination ip-address where the packets was sent to
  • LEN= Length of the packet
  • PROTO= Indicates the protocol (as you see above, the 1st line is for outgoing ICMP protocol, the 2nd line is for incoming TCP protocol)
  • SPT= Indicates the source port
  • DPT= Indicates the destination port. In the 2nd line above, the destination port is 443. This indicates that the incoming HTTPS packets was dropped

From http://www.thegeekstuff.com/2012/08/iptables-log-packets/

Debian6 编译安装vim 7.4

一、安装VIM7.4之前的准备工作

apt-get update

遇到问题:
W: 以下 ID 的密钥没有可用的公钥:
8B48AD6246925553

解决方法:

gpg --keyserver subkeys.pgp.net --recv 8B48AD6246925553
gpg --export --armor 8B48AD6246925553 | sudo apt-key add -

继续执行 apt-get update
完成后安装VIM的依赖库环境

apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev libgtk2.0-dev \
libatk1.0-dev libbonoboui2-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev \
python-dev libperl-dev ruby-dev liblua5.1-0-dev

二、卸载老版本vim

apt-get remove vim vim-runtime gvim

三、编译新版本vim

cd /usr/src/
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
tar jxvf vim-7.4.tar.bz2
./configure --prefix=/usr/local/vim74 \
--with-features=huge \
--enable-pythoninterp --enable-perlinterp \
--enable-rubyinterp --enable-luainterp \
--enable-multibyte --enable-sniff --enable-fontset
--with-features=huge:支持最大特性
--enable-pythoninterp:启用Vim对python的支持
--enable-perlinterp:启用Vim对perl的支持
--enable-rubyinterp:启用Vim对ruby的支持
--enable-luainterp:启用Vim对lua的支持
--enable-multibyte:多字节支持 可以在Vim中输入中文
--enable-sniff:Vim状态提示 提示Vim当前处于INSERT、NORMAL、VISUAL哪种模式
--enable-cscope:Vim对cscope支持
 更多参数执行./configure --help查看

编译和安装

make && make instal

四、链接以便识别vim命令

ln -s /usr/local/vim74/bin/vim /usr/bin/vim
ln -s /usr/local/vim74/bin/gvim /usr/bin/gvim

五、把vim作为默认编辑器

sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 1
sudo update-alternatives --set editor /usr/bin/vim
sudo update-alternatives --install /usr/bin/vi vi /usr/bin/vim 1
sudo update-alternatives --set vi /usr/bin/vim