vim 分屏操作

2013年1月14日 没有评论

启动vim打开多个文件并分屏显示:

vim -on file1 file2
o为小写字母,上下分,n是分屏的个数,后面是待打开的文件

vim -On file1 file2
O为大写字母,左右分,n是分屏的个数,后面是待打开的文件

在已经打开的vim中对文件进行分屏

对光标所在的窗口进行上下分屏
:sp
ctrl + w s

对光标所在的窗口进行左右分屏
:vsp
ctrl + w v

不同窗口间的移动

移动到光标左边的窗口
ctrl + w h
ctrl + w 

移动到光标上边的窗口
ctrl + w k
ctrl + w ↑

移动到光标下边的窗口
ctrl + w j
ctrl + w ↓

关闭当前窗口

ctrl + w c
ctrl + w q
:q
分类: Linux 标签:

vim recording功能介绍

2013年1月13日 没有评论

使用vim时无意间触碰到q键,左下角出现“recording”这个标识,觉得好奇,遂在网上查了一下,然后这是vim的一个强大功能。他可以录制一个宏(Macro),在开始记录后,会记录你所有的键盘输入,包括在insert模式下的输入、正常模式下使用的各种命令等。

具体使用:

第一步:在正常模式下(非insert模式、非visual模式)按下q键盘

第二步:选择a-z或0-9中任意一个作为缓冲器的名字,准备开始录制宏

第三步:正常的操作,此次所有的操作都会被记录在上一步中定义的缓冲器中

第四步:在非insert模式下输入q停止宏的录制

第五步:使用@ + 第二步中定义的缓冲器的名字即可。

例如想把下面的文字

line1
line-2
line3-1
l4

变成如下的文字

System.out.println(line1);
System.out.println(line1);
System.out.println(line-2);
System.out.println(line3-1);
System.out.println(L4);

观察可以发现他们的规律,在每行文字的开头添加“System.out.println(”,结尾添加“);”就变成下面的信息了。下面简单介绍一下如何使用recording来完成这样的操作。
首先把光标移动line1上,输入qt,准备开始录制,缓冲器的名字为t,录制的动作为:shift + ^ 回到行首、按下i键进入insert模式、输入“System.out.println(”、按下esc键回到正常模式、shift + $ 回到行尾部、按下i键进入insert模式、输入“);”按下esc键回到正常模式,按下q停止录制。然后把光标移动到下面一行的任意位置输入 @ + t 即可。

recording还可以和查询结合起来使用,例如想把一个文件中含有特定字符串的行注释,可以通过这样的宏来实现。在正常模式下输入/search string + enter、shift + ^、i、#、esc、shift + $。

让定制的宏自动执行多次的方法是先输入一个数字,然后在输入@ + 缓冲器的名字。 例如 100@t,表示执行100次。

分类: Linux 标签:

linux 终端下的常用快捷键

2013年1月13日 没有评论

使用linux的少不了玩命令行,掌握一下快捷键可以让你做事达到事半功倍的效果。用的最多的应该是属于Tab键,功能是自动补齐。主要用在命令本身名字和进入目录查看文件,有了它就不需要一字一字的输出命令的完整名字,只要输入前面几个字符,然后Tab一下就可以了,如果存在多个它会全部提示出来;进入一个很深的目录时候,使用Tab也能快速进入。下面列举一些我常用的组合快捷键。

  • ctrl + a  回到命令行的行首
  • ctrl + e  回到命令行的行尾
  • ctrl + c  取消当前行输入的命令,并重新到下一行
  • ctrl + r  出现命令历史记录搜索提示,输入字符后会自动匹配命令
  • ctrl + b  向后退一个字符,相当于向左方向键
  • ctrl + f  向前进一个字符,相当于向右方向键
  • alt  + b  向后跳一个字
  • alt +  f  向前进一个字
  • ctrl + p  向上翻以前的输入命令,相当于向上方向键
  • ctrl + n  向下翻以前的输入命令,相当于向下方向键
  • ctrl + w  从光标位置向后删除一个字
  • ctrl + y  粘贴最后一个删除的字
  • ctrl + d  删除当前光标位置的一个字符
  • ctrl + u  从光标当前位置删除所有字符至行首
  • ctrl + k  从光标当前位置删除所有字符至行尾,相当于长按ctrl + d
分类: Linux 标签:

linux nohup用途

2013年1月12日 没有评论

玩过Linux的人应该都知道,如果想让一个程序在后台运行,只要在执行命令的末尾加上一个&符号就可以了。但是这种方式不是很保险,有些程序当你登出终端后它就会停止。那么如何让一个程序真正永远在后台执行呢。答案就是使用 nohub 命令,格式为:

nohup 执行程序的命令 &

如果程序有输出,它会试着把输出写入执行上述命令的当前文件夹下的 nohup.out 文件中,当写入失败,就会写当前用户的$HOME目录下的nohup.out 中。

分类: Linux 标签:

crontab 指定执行用户

2013年1月8日 没有评论

linux下可以通过配置crontab来定时执行任务,执行体可以是一条系统命令或自己写的一个脚本,同时可以指派用户来执行。配置crontab有两种方法。
方法1、使用crontab命令,例如添加一个新的或编辑已有的,使用:

crontab -e

就可以进入配置文件。此时配置crontab的执行者是当前登入用户,如果当前用户是root,需要为其他用户配置,可以使用

crontab -e -u 用户名

或
su 用户名
crontab -e

这种方法有一个缺点,就是当前系统中配置的crontab不在一个配置文件中,让管理员不方便查询系统到底有多少个crontab。

方法2、直接在/etc/crontab文件中添加,不过需要是root身份。打开文件,应该会看到类似下面的信息


SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

要添加新的crontab,只需要在文件最后增加即可。注意这里面需要指定用户名;而方法1中则不需要,如果指定了,它会认为是命令的一部分,从而可能导致crontab执行失败。

如果服务器都是有root来管理,建议添加crontab使用方法2,这样系统中的所有计划任务都在一起,一目了然。

分类: Linux 标签: ,

vim粘贴代码格式变乱

2012年12月18日 没有评论

有时候从编辑器里面复制粘贴代码到vim中,代码格式会完全乱套。其原因是vim开启了smartindent(智能缩减)或autoindent(自动对齐)模式。为了保持代码的格式,在粘贴前可以先停止上面的两种模式,命令为:

set nosmartindent

set noautoindent

上述命令是在vim的阅读模式先输入冒号(:),然后分别执行即可。为了一个粘贴搞出这么多事来,确实是麻烦。不过还有一个更加简单的方法,用命令开始粘贴模式,即:

开启
set paste

关闭
set nopaste
或
set paste!

由于粘贴模式和上面的smartindent、autoindent模式是互斥的,而smartindent是不可少的,所以粘贴完后使用上面的两条命令之一来关闭粘贴模式。

另外还可以通过绑定自定义快捷键的方式来快速切换,例如将下属配置加入到.vimrc中

方式1:
set pastetoggle=<F4>

方式2:
:map <F8> :set paste
:map <F9> :set nopaste

注意:方式1在阅读和编辑模式下都可以使用,对粘贴模式开启和关闭进行切换;方式2是在阅读模式下使用,按下相应的快捷键就相当于执行后面定义的命令。

分类: Linux 标签: , ,

window rsync server 安装使用

2012年12月15日 1 条评论

rsync是linux下一款用于同步文件的优秀软件,window下也可以使用它,不过名字为cwRsync。本文主要介绍的是使用window作为rsync的服务端,linux为客户端的使用方法。

cwRsync也分为客户端很服务端,下载地址:http://sourceforge.net/projects/sereds/files/cwRsync/4.0.5/,window是作为服务端,所以下载名为cwRsyncServer_4.0.5_Installer.zip的文件。下载后解压安装,按照向导一步一步下去即可,安装最后需要输入一个系统账号和密码,这个账号是用于运行cwRsync服务的,必须有管理员权限。

安装完成后,在安装的根目录下有一个名为rsyncd.conf文件,即是配置文件。修改后的内容如下:

use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
# 如果没有uid,gid 的设置linux客户端会提示
# invalid uid nobody 错误
uid = 0
gid = 0
# 指定tcp 端口,默认是873
# port = 1122

# 定义模块,可以定义多个
[test]
# 模块对应系统目录,需要使用/cygdrive + 盘符
path = /cygdrive/c/work
# 用于认证模块的用户名
auth users = testuser
# 存放认证密码文件,存放于etc下的testuser.pas中
# 文件名可以随便取,内容为用户名:密码,例如“testuser:123”
secrets file = etc/testuser.pas
read only = false
transfer logging = yes

启动服务:运行 — services.msc,在打开的“服务”管理器中找到RsyncServer并启动,也可以使用在命令行的方式来启动和关闭。

启动服务
net start RsyncServer

停止服务
net stop RsyncServer

在linux下使用如下命名即可进行同步了

同步linux下文件夹到window中,
rsync -vzrtp  --progress --delete \
--password-file=/xxx/rsyncd.secrets  \
/home/linuxdir/ rsync://testuser@10.211.55.3:/test/

同步window下文件夹到linux中
rsync -vzrtp  --progress --delete \
--password-file=/xxx/rsyncd.secrets  \
rsync://testuser@10.211.55.3:/test/ /home/linuxdir/

注意需要在用户名前使用“rsync://”,否则会提示“connect to host xxx port 22: Connection refused”;密码文件的内容只有密码,不需要用户名,且文件的owner为root,权限为600;如果使用非默认端口需要在ip的冒号后指定端口;端口后是服务配置中定义的模块名字。

当出现rsync: chown “” failed: Invalid argument (22)错误时,是因为参数中有o,即保留文件的owner信息,而window服务端无法完成chown操作,解决办法是去掉参数o。另外有些可能还会出现rsync: chgrp “” failed: Invalid argument (22),原因类似,只要去掉参数中的g即可。

相关资源链接:

http://blog.csdn.net/gguxxing008/article/details/7018924

http://bbs.ywlm.net/thread-915-1-1.html

分类: Linux 标签:

mac下同步文件到虚拟机中

2012年12月11日 没有评论

mac下通过软件parallels desktop虚拟安装了一个win xp。parallels desktop就是和vmware,virtualbox类似的虚拟机软件,在mac下parallels desktop功能超强大。在虚拟机中通过共享的方式很容易访问到mac下的硬盘,但我遇到的问题是需要把mac下的某个程序文件夹复制到win xp下,而且程序修改都是在mac下进行的,最开始的做法是修改程序后去win下面手动拷贝,程序还是在增加修改中,所以这真不是一个好办法。后来发现在finder中也可以看到win xp的硬盘,当然也可以访问,方法是打开finder后,使用command+向上方向键一直到最顶层目录就可以看到。进一步发现win xp的硬盘是挂载在/private/tmp目录下的,通过命令mount可以看到类型下面的信息:

vfstool@prlufs0 on /private/tmp/96967/C (prlufs, nodev, noexec, nosuid, synchronous, mounted by yangyz)

上述数字96967是不固定,重启虚拟机后就变化了,那到底代表是什么呢?观察任务管理器,发现原来它就是进程“prl_vm_app”的pid号。知道了其中的奥秘,那事情就好办了,写一个shell脚本,使用rsync来让它同步文件夹的内容,这样就可以做到自动处理了。简单代码如下:

#/bin/bash

pid=$(ps aux | grep prl_vm_app | grep -v "grep" | awk -F" "  '{print $2}')
src=/Users/xxxx/macdir/
dest=/tmp/${pid}/C/windir/

while true
do
    if [ -d "$dest" ]
    then
        rsync -vzrtopg --progress --exclude-from=exclude.list $src $dest
    fi

    sleep 3
done

nginx proxy 配置不当导致500错误

2012年12月6日 没有评论

访问网站提示500错误,通过查看日志,获得错误信息为:

2012/12/06 16:10:52 [alert] 11679#0: *9189 1024 
worker_connections are not enough while connecting to upstream, 
client: 127.0.0.1, server: xxx.netingcn.com, 
request: "GET / HTTP/1.0", upstream: "http://127.0.0.1:80/", host: "xxx.netingcn.com"

对于上述错误网上很多人提到,大部分情况是在生产环境中由于并发太多造成的。解决办法就是修改配置文件中的worker_connections值,将其调大。但是今天在本机的nginx中配置一个proxy,完全没有外界的访问的情况也提示上述错误,试着修改worker_connections也没有解决问题。proxy配置大致如下:

server {
    listen       80;
    server_name  yyy.netingcn.com;

    location / {
        root   /var/www/netingcn.com;
        index  index.html index.php;
    }
}

server {
    listen       80;
    server_name  xxx.netingcn.com;

    location / {
        proxy_pass              http://yyy.netingcn.com/;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        Host $http_host;
    }
}

原本的目的是想把所有请求xxx.netingcn.com代理到yyy.netingcn.com,也许你会纳闷,干嘛要这么麻烦,直接在第一个的server_name中添加xxx.netingcn.com不就完事。这里只是一个举例,由于正式环境下有特殊情况,不能那么配置,所有才会想到用proxy的方式。

上述配置造成的500错误可以肯定排除是worker_connections太小的原因,仔细配置,发现“proxy_set_header Host $http_host;”这个才是罪魁祸首,因为它造成死循环了,当请求xxx时,由于proxy到yyy,本来nginx是交给server yyy,来处理的,但是header里面的host还是xxx,nginx根据配置里面的server_name,找到 xxx,因此就显示了死循环,也就会报前面提到的那个错了。问题已经定位到了,解决就很简单,直接去掉proxy_set_header Host $http_host;这行配置就行了。

分类: nginx 标签:

编译安装libmemcached 1.0.14 出错

2012年12月5日 没有评论

最近升级php memcached扩展到2.1.0,由于依赖libmemcached库,先前安装的版本是1.0.2,编译时候出错,需要更高版本的libmemcached,所以重新下载最新版本的libmemcached编译安装。不幸的时编译libmemcached 1.0.14时候保存,大致错误信息为:

libmemcached/auto.cc: In function 'memcached_return_t text_incr_decr(memcached_server_st*, bool, const char*, size_t, uint64_t, bool)':
libmemcached/auto.cc:73: error: expected `)' before 'PRIu64'
In file included from ./libmemcached/common.h:72,
                 from ./libmemcached/csl/common.h:40,
                 from libmemcached/csl/context.cc:38:

google查询了一下,原因是GCC的版本低了,所以只好升级GCC了,好在有yum,一条命令就搞定,命令如下:

yum install gcc44 gcc44-c++ libstdc++44-devel

把下面内容加入到/etc/bashrc中
export CC=/usr/bin/gcc44
export CXX=/usr/bin/g++44

退出终端然后重新登陆,编译、安装都通过了,同时也顺利升级memcached扩展。

分类: Linux 标签:

无觅相关文章插件,快速提升流量