vmdiff的基本用法(转)

vmdiff的基本用法就是:
# vimdiff FILE_LEFT FILE_RIGHT
或者
# vim -d FILE_LEFT FILE_RIGHT

如果希望交换两个窗口的位置,或者希望改变窗口的分割方式,可以使用下列命令:
1. Ctrl-w K(把当前窗口移到最上边)
2. Ctrl-w H(把当前窗口移到最左边)
3. Ctrl-w J(把当前窗口移到最下边)
4. Ctrl-w L(把当前窗口移到最右边)
其中1和3两个操作会把窗口改成水平分割方式

光标移动
接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为”scrollbind”选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:
:set noscrollbind
可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:
]c
反向跳转是:
[c
如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入”2]c”,将越过下一个差异点,跳转到第三个差异点。
回页首
文件合并
文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令
dp (diff “put”)
如果希望把另一个文件的内容复制到当前行中,可以使用命令
do (diff “get”,之所以不用dg,是因为dg已经被另一个命令占用了)
如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:
Ctrl-w, w
在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:
:diffupdate
如果希望撤销修改,可以和平常用vim编辑一样,直接
, u
但是要注意一定要将光标移动到需要撤销修改的文件窗口中。

同时操作两个文件
在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:
:qa (quit all)
如果希望保存全部文件:
:wa (write all)
或者是两者的合并命令,保存全部文件,然后退出:
:wqa (write, then quit all)
如果在退出的时候不希望保存任何操作的结果:
:qa! (force to quit all)

https://www.ibm.com/developerworks/cn/linux/l-vimdiff/

apache,[warn] _default_ VirtualHost overlap on port 80, the first has precedence

[root@us www]# /etc/init.d/httpd restart
停止 httpd: [确定]
正在启动 httpd:[Tue Apr 28 15:01:02 2015] [warn] _default_ VirtualHost overlap on port 80, the first has precedence

[warn] _default_ VirtualHost overlap on port 80, the first has precedence
是因为第一个虚拟主机配置已经占用了80端口,所以将会沿用第一虚拟主机的配置。所以不管你第二个,或者第n个虚拟主机怎么配置,都会沿用第一个虚拟主机的配置,即出现的都是第一个站点的内容。

解决的办法就是将#NameVirtualHost *:80前的注释去掉。 变成

NameVirtualHost *:80

这样子,再重启apache就能解决问题了。。

rsync详解之exclude排除文件(转)

#20161011
[root@web1 evan]# rsync –help | grep exclude
–delete-excluded also delete excluded files from destination dirs
-C, –cvs-exclude auto-ignore files the same way CVS does
–exclude=PATTERN exclude files matching PATTERN
–exclude-from=FILE read exclude patterns from FILE
–include=PATTERN don’t exclude files matching PATTERN

1.排除单独的文件夹和文件
–exclude=PATTERN

例如要排除logs 目录
#记得要相对路径哦
[root@web1 evan]# cat /data/mon/rsy
#!/bin/bash
cd /data/www/
rsync -avz --exclude=logs -e "ssh -i /key " /data/www/ www@10.45.244.231:/data/www/

2.排除多个目录 ‘–exclude-from’ 排除多个文件夹和文件

建立文件:
/home/backup/exclude.txt

在里面定义要排除的文件夹和文件
sources
public_html/database.*
downloads/test/*

经过测试一般
文件夹
uploads
download/softs/

使用指令:
–exclude-from=’/home/backup/exclude.txt’

######
如何避开同步指定的文件夹? –exclude
rsync –exclude files and folders
http://articles.slicehost.com/2007/10/10/rsync-exclude-files-and-folders
很常见的情况:我想同步/下的 /usr /boot/ , 但是不想复制/proc /tmp 这些文件夹
如果想避开某个路径 直接添加–exclude 即可
比如–exclude “proc”
–exclude ‘sources’
Note: the directory path is relative to the folder you are backing up.
注意:这个路径必须是一个相对路径,不能是绝对路径

例子:源服务器/home/evan/bashshell有一个checkout文件夹
[root@CentOS5-4 bashshell]# ls -dl checkout
drwxr-xr-x 2 root root 4096 Aug 21 09:14 checkou
现在想要完全避开复制这个文件夹内容怎么办?
目标服务器执行
rsync -av –exclude “checkout” evan@1.16.251.241:/home/evan/bashshell /tmp
将不会复制这个文件夹
[root@free /tmp/bashshell]# ls -d /tmp/bashshell/checkout
ls: /tmp/bashshell/checkout: No such file or directory

注意:

1事实上,系统会把文件和文件夹一视同仁,如果checkout是一个文件,一样不会复制

2 如果想避开复制checkout里面的内容,可以这么写–exclude “checkout/123”

3 切记不可写为 –exclude “/checkout”这样绝对路径
这样写 将不会避免checkout被复制
比如
[root@free /tmp/bashshell]# rsync -av –exclude “/checkout” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp
receiving file list … done
bashshell/checkout/

4可以使用通配符 避开不想复制的内容
比如–exclude “fire*”
那么fire打头的文件或者文件夹全部不会被复制
5如果想要避开复制的文件过多,可以这么写
–exclude-from=/exclude.list

exclude.list 是一个文件,放置的位置是绝对路径的/exclude.list ,为了避免出问题,最好设置为绝对路径。

里面的内容一定要写为相对路径

比如 我想避开checkout文件夹和fire打头的文件

那么/exclude.list 写为
checkout
fire*
然后执行以下命令,注意写为–exclude-from或者–exclude-from=都可以
但是不能为–exclude
rsync -av –exclude-from=”/exclude.list” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp
检查结果:确实避开了checkout文件夹和fire打头的文件
问题:如何计算对比复制以后的文件数量是否正确呢?
1 查看错误日志,看是否复制时候出问题了
2在源服务器执行可知道具体文件和文件夹的总个数
ls –AlR|grep “^[-d]”|wc
然后目标服务器在计算一遍个数
看看数字是不是能对的上就ok了
对不上再研究怎么回事
3现在的问题是:如果我使用了–exclude参数就麻烦了
我怎么知道要复制几个文件?
首先,前面命令时候提到过一种写法,就是只有源地址,没有目标地址的写法,这种写法可以用来列出所有应该被复制的文件
那么用这个命令,可以计算出这个/root/bashshell下面文件和文件夹数量
在服务器端执行
[root@CentOS5-4 bashshell]# rsync -av /root/bashshell/ |grep “^[-d]” | wc
62 310 4249
和ls 得到的结果一致的
[root@CentOS5-4 bashshell]# ls -AlR |grep “^[-d]“|wc
62 558 3731
因此,比如说我不要fire 打头的文件,可以在服务器端先这样计算要复制的文件
[root@CentOS5-4 bashshell]# rsync -av –exclude “fire*” /root/bashshell/ |grep “^[-d]” | wc
44 220 2695
然后复制过去
看目标机器的文件和文件夹数量为
[root@free /tmp]# ls -AlR /tmp/bashshell/ |grep “^[-d]“|wc
44 396 2554
可以知道2者是同步的
问题:Rsync的其他几个常见参数
1
-z –compress compress file data during the transfer
–compress-level=NUM explicitly set compression level
–skip-compress=LIST skip compressing files with suffix in LIST
压缩传输,如果网络带宽不够,那么应该压缩以后传输,消耗的当然是机器资源,但是如果内网传输的话,文件数量不是很多的话,这个参数不必要的。
2
–password-file=FILE
前面说过了,只有远端机器是rsync服务器,才能用这个参数
如果你以为个FILE写的是ssh 登陆的密码,那就大错特错了,不少人犯了这个错误。
3
–stats: Adds a little more output regarding the file transfer status.
4
–progress: shows the progress of each file transfer. Can be useful to know if you have large files being backup up.
关于这个参数:
I frequently find myself adding the -P option for large transfers. It preserves partial transfers in case of interuption, and gives a progress report on each file as it’s being uploaded.
I move large media files back and forth on my servers, so knowing how long the transfer has remaining is very useful.
•Previous Entry: nginx 每天定时切割Nginx日志的脚本
•Next Entry: 如何开启MySQL的远程帐号

http://wanwentao.blog.51cto.com/2406488/582432

linux下查找包含utf8 BOM头的文件,并删除BOM头信息(FEEF)

找到哪些文件包含BOM头。
grep -rl $’\xEF\xBB\xBF’ .

通过hexdump可以看到bom头的存在。
[root@master ~]# hexdump 2.txtbak
0000000 bbef 47bf 7461 5365 7265 6576 2072 0a3d
0000010 0a7b 2d09 e92d bb80 bee8 e791 91bd 85e5
0000020 0ab3 7b09 090a 2d09 e72d 91bd 85e5 e6b3

删除BOM头信息

sed ‘1s/^\xEF\xBB\xBF//’ filename -i

查找并删除文件的BOM头信息:
find . -type f -exec sed ‘1s/^\xEF\xBB\xBF//’ -i.bak {} \; -exec rm {}.bak \;

http://fukun.org/archives/02072438.html

hexdump – ”十六“进制查看器
http://codingstandards.iteye.com/blog/805778

timeout, server not responding. ssh configuration to avoid connection timeouts / broken pipes

client :

vim /etc/ssh/ssh_config
# by evan
SendEnv LANG LC_*
HashKnownHosts yes
TCPKeepAlive no
ServerAliveInterval 5

client: in ~/.ssh/config
Host *
# prevent connection from hanging
ServerAliveInterval 15
# set connection sharing
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

server: in /etc/ssh/ssd_config:
TCPKeepAlive no
ClientAliveInterval 600
ClientAliveCountMax 3

(…)
Because I reuse connections I do not run against maximum session limits (set with MaxStartups in sshd_config).
I also disabled pam and all other authentication methods in sshd_config except public key authentication. PAM has some inactivity timeout as well. Then there is the timeout in the bash shell (‘TMOUT=‘ in /etc/profile.bash) that is disabled by default I think.

调试Linux shell脚本

最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间
shell也有一个真实的调试模式。如果在脚本”my.sh” 中有错误,您可以这样来进行调试:

sh -x my.sh
这将执行该脚本并显示所有变量的值。

shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n my.sh
这将返回所有语法错误。

linux/unix shell l脚本调试方法

Shell提供了一些用于调试脚本的选项,如下所示:

-n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误

-v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出

-x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

使用这些选项有三种方法,

一是在命令行提供参数

sh -x my.sh

二是在脚本开头提供参数

#! /bin/sh -x

第三种方法是在脚本中用set命令启用或禁用参数

#! /bin/sh
if [ -z “$1” ]; then
set -x
echo “ERROR: Insufficient Args.”
exit 1
set +x
fi

set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

linux终端的字符编码

终端等默认语言设置在/etc/environment之中,在linux下,如果terminal采用的是utf-8编码,那么如果我们的中文采用gbk编码,很有可能在输出到屏幕的时候产生乱码。
使用locale命令,可以查看与语言有关的环境变量:

evan@evankali:~/pytest$ locale
LANG=zh_CN.utf8
LANGUAGE=zh_CN:zh
LC_CTYPE=”zh_CN.utf8″
LC_NUMERIC=”zh_CN.utf8″
LC_TIME=”zh_CN.utf8″
LC_COLLATE=”zh_CN.utf8″
LC_MONETARY=”zh_CN.utf8″
LC_MESSAGES=”zh_CN.utf8″
LC_PAPER=”zh_CN.utf8″
LC_NAME=”zh_CN.utf8″
LC_ADDRESS=”zh_CN.utf8″
LC_TELEPHONE=”zh_CN.utf8″
LC_MEASUREMENT=”zh_CN.utf8″
LC_IDENTIFICATION=”zh_CN.utf8″
LC_ALL=

Filezilla用 key登录 sftp

1.打开Filezilla,点击“编辑”-“设置”菜单打开设置对话框,找到“连接”-“SFTP”设置项;
sftp
2.点击右面的“添加密钥文件(A)”按钮,找到已经生成的私钥文件,Filezilla会提示你
引用:
“文件‘’的格式不是被FileZilla所支持的。您想转换此文件到FileZilla所认可的格式吗?”
,当然回答“是”。FileZilla会接着让你选择转换后的文件名和保存位置,并且默认保存为putty的密钥文件格式(*.ppk);
3、保存完退出设置对话框,在站点管理器中添加站点,并选择连接类型为“询问口令”;(补:如果选择“一般”,则不需事先保存口令可直接登录,避免了明文保存口令。强烈推荐)
4、连接站点,弓单 出的口令对话框中可以随便给一个口令,不必是你在服务器上的真实口令,其有效期最长仅限本次会

详情请看
https://wiki.filezilla-project.org/Howto

debian 安装firefox

第一种,直接去官网下载,然后直接运行firefox 就可以了

第二种,类似chrome的,添加完整的path.这里我们讲第二种方法

首先添加源地址 ,在/etc/apt/sources.list 里面 最后添加

deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main
或者终端直接stdin

echo -e "\ndeb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main" | tee -a /etc/apt/sources.list > /dev/null

#添加key

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29

#更新源列表
apt-get update

#安装firefox
apt-get remove iceweasel
apt-get install firefox-mozilla-build

# 安装ThunderBird
sudo apt-get install thunderbird-mozilla-build

#安装Adobe Flash播放插件
sudo apt-get install flashplugin-nonfre

汉化中文界面
这时的Firefox是英文界面的,若要汉化,这样操作:
在Firefox浏览器中打开网址:http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest/win32/xpi/

下载zh-CN.xpi,Firefox会自动弹出一个提示,点击英文的”允许”。

在Firefox浏览器地址栏里输入 about:config
请直接点击I’ll be careful, I promise。找到general.useragent.locale选项,对en-US右击选择Modify。
然后改成zh-CN(注意大小写)

hunderBird也同理

http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.12/win32/xpi/zh-CN.xpi

菜单tools-> add-ons – >install -> install add-ons from file

其它参考
通过apt-get在Debian Linux下安装FireFox和ThunderBird
http://www.linuxidc.com/Linux/2012-07/66132.htm

debian下编译thunderbird-3.1
http://stesen.wikidot.com/debian-thunderbird

How to Install VIM in CentOS5.x

安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在vim 时会提示: vim command not found 。。。 这就是说明我们的Linux环境没有安装vim编辑器,下面我们来说一下如何安装这个编辑器:
网上很多人说要三个包 或者 yum install vim-* 我觉得两个包就够了
yum install vim-common vim-enhance

http://apetec.com/linux/InstallVIM.htm
http://blog.csdn.net/houqd2012/article/details/8111738