刚才有网友来信询问我的vim配置,我在很久以前已经把我的所有vim配置上传到github了,有兴趣的朋友可以在Easwy的Github共享找到我最新的.vimrc和整个的.vim目录。
你可以点此下载Easwy的vimrc,如果你了解git,你也可以使用git命令下载整个版本历史:
git clone https://github.com/easwy/share.git
用这种方式,你可以随时跟踪我的最新修改,或者把你对vimrc的改变通知我。
Happy Vimming!
刚才有网友来信询问我的vim配置,我在很久以前已经把我的所有vim配置上传到github了,有兴趣的朋友可以在Easwy的Github共享找到我最新的.vimrc和整个的.vim目录。
你可以点此下载Easwy的vimrc,如果你了解git,你也可以使用git命令下载整个版本历史:
git clone https://github.com/easwy/share.git
用这种方式,你可以随时跟踪我的最新修改,或者把你对vimrc的改变通知我。
Happy Vimming!
Linux下免费的虚拟化技术主要有KVM和XEN两种。KVM已经合入了Linux标准内核,也获得了诸如RedHat RHEL、Ubuntu这样的Linux发行版的支持,可以预见在未来KVM应该会成为Linux虚拟化技术的主流。只是KVM需要硬件虚拟化技术的支持,如果你的CPU不支持硬件虚拟化技术,那么只能使用XEN。
本文记录了Easwy在CentOS 5.7上安装Ubuntu KVM虚拟机的过程。
首先需要检查一下你的CPU是否支持硬件虚拟化技术(Hardware Vitualization):
egrep '(vmx|svm)' --color=always /proc/cpuinfo
如果在你的计算机上没有任何输出,那么说明你的CPU不支持硬件虚拟化技术,也就无法使用KVM。
另外需要注意的是,在CentOS 5.4版本以后,只有64位的CentOS才支持KVM,具体原因不清楚,所以如果你是32位的CentOS,暂时也无法使用KVM。
检查完环境后,我们开始安装并激活KVM。
首先,将SELinux的配置更改为Permissive,因为virt-install不支持SELinux为disable:
[root@srv-easwy ~]# system-config-securitylevel
然后安装kvm及其它虚拟化相关的软件:
[root@srv-easwy ~]# yum install kvm kmod-kvm libvirt python-virtinst virt-manager
接下来需要重启系统,在启动完成后,你应该可以看到KVM内核模块已经被加载了:
[root@srv-easwy ~]# lsmod |grep kvm kvm_intel 85256 1 kvm 224800 2 ksm,kvm_intel
可以通过下面的命令看看KVM是不是真正运行了:
[root@srv-easwy ~]# virsh -c qemu:///system list Id Name State ---------------------------------- [root@srv-easwy ~]#
现在配置一个网桥,以便虚拟机可以访问网络。首先安装所需的工具:
[root@srv-easwy ~]# yum install bridge-utils
新创建一个文件/etc/sysconfig/network-scripts/ifcfg-br0,其内容为:
DEVICE=br0 TYPE=Bridge BOOTPROTO=dhcp ONBOOT=yes
上面的文件配置此网桥以DHCP方式获取IP地址。接下来修改原来的网卡配置/etc/sysconfig/network-scripts/ifcfg-eth0,修改为:
DEVICE=eth0 HWADDR=B8:AC:6F:89:10:76 ONBOOT=yes BRIDGE=br0
然后重启网络配置,查看一下:
[root@srv-easwy ~]# /etc/init.d/network restart
[root@srv-easwy ~]# ifconfig
br0 Link encap:Ethernet HWaddr B8:AC:6F:89:10:76
inet addr:172.23.5.50 Bcast:172.23.5.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3242738 errors:0 dropped:0 overruns:0 frame:0
TX packets:702638 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1057883287 (1008.8 MiB) TX bytes:448735998 (427.9 MiB)
eth0 Link encap:Ethernet HWaddr B8:AC:6F:89:10:76
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3445641 errors:0 dropped:0 overruns:0 frame:93
TX packets:670754 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1201230368 (1.1 GiB) TX bytes:239453000 (228.3 MiB)
Interrupt:177 Memory:f3de0000-f3df0000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:63582 errors:0 dropped:0 overruns:0 frame:0
TX packets:63582 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:154537675 (147.3 MiB) TX bytes:154537675 (147.3 MiB)
virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:1797 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:470443 (459.4 KiB)
基于磁盘逻辑卷管理(LVM)的虚拟机会拥有较好的磁盘I/O性能,所以在此处Easwy安装了基于LVM的虚拟机。如果你对LVM并不熟悉,可以参考我的Linux逻辑卷管理器(LVM)学习笔记。
Easwy在安装时已经在逻辑卷组中预留了部分未用空间,所以此处直接在卷组vg0中创建一个逻辑卷ubuntu,并分配了332G的空间:
[root@srv-easwy ~]# lvcreate -L32G -n ubuntu vg0
接下来使用virt-install安装Ubuntu虚拟机,在此处直接使用Ubuntu的ISO文件做为源,将其安装到新创建的逻辑卷/dev/vg0/ubuntu中:
[root@srv-easwy ~]# virt-install --connect qemu:///system -n ubuntu -r 1024 --vcpus=2 -f /dev/vg0/ubuntu -c ~/Download/ubuntu/ubuntu-10.04.3-desktop-amd64.iso --vnc --os-type linux --os-variant generic26 --accelerate --network=bridge:br0 --hvm --noautoconsole
执行完此命令后,KVM虚拟机会使用Ubuntu的ISO文件启动,我们需要启动virt-manager,连接到此虚拟机,继续完成安装过程。这和安装真正的Linux操作系统完全一样,不再赘述。
现在,基本KVM的Ubuntu虚拟机就完全运行起来了。如果你对此还有疑问,欢迎留言。另外,参考文档中的链接也许对你也很有帮助。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O操作的性能,以及提供冗余保护,它的快照功能允许用户对逻辑卷进行实时的备份。
对一般用户来讲,使用最多的是动态调整文件系统大小的功能。这样,你在分区时就不必为如何设置分区的大小而烦恼,只要在硬盘中预留出部分空闲空间,然后根据系统的使用情况,动态调整分区大小。
以下内容总结了Easwy对于LVM的理解。
在LVM中,主要有三个概念:
到这里我们可以看出,原本是直接在硬盘上创建分区,然后在分区上创建文件系统。使用了LVM后,在其中插入一个逻辑层,相当于是在一块逻辑硬盘上创建逻辑分区,然后在逻辑分区上创建文件系统。
新插入一个逻辑层,对单个硬盘的读写会有一定的性能损失,但其带来的好处是巨大的。首先,逻辑分区大小不再受硬盘实际大小的限制,它可以扩展到几块硬盘上;其次,逻辑分区可以很方便的做调整大小、备份等维护操作;而且,如果系统中存在多块硬盘,通过设置逻辑卷到物理卷的映射关系(采用LVM striped mapping),可以提高I/O的读写性能,因为此时的读写是在多块硬盘上并发进行的,比对单个硬盘的读写显然要快很多。
下面是一个LVM使用的例子:
在图中有两块硬盘,其中硬盘1分了两个分区,/dev/sda1和/dev/sda2,硬盘2没有创建分区。接下来在/dev/sda2和/dev/sdb上创建物理卷,然后把这两个物理卷加入到逻辑卷组vg0中,现在,逻辑卷组vg0看起来像一块很大的逻辑硬盘,然后在其中创建两个逻辑卷/dev/vg0/lv0和/dev/vg0/lv1。
最后,分别在/dev/sda1、/dev/vg0/lv0和/dev/vg0/lv1上创建文件系统,并分别把它们挂载到文件系统树中。这样看上去,逻辑卷是不是很像是一个逻辑的分区?
在逻辑卷组vg0中,还预留有一部分空间未用,如果在使用中发现某个逻辑卷空间不够用了,可以在不停机的情况下,直接调整逻辑卷及其上的文件系统的大小。对服务器来讲,这是简单但非常有用的功能。
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
在Thinkpad T400上安装完Ubuntu 10.04 LTS后,就开始搭建Android开发环境,第一步当然是编译vim。
目前最新的vim版本是7.3,因为从vim 7.3开始已经换用Mercurial做为版本管理工具,我们在下载vim 7.3源代码前,先要安装Mercurial:
sudo aptitude install mercurial cd ~ hg clone https://vim.googlecode.com/hg/ vim73
执行完上面的命令后,我们就取得了vim 7.3的最新代码,放在目录~/vim73中,接下来准备编译。在编译前,需要安装编译时需要的包,在Ubuntu上用如下命令:
sudo aptitude install xorg-dev libx11-dev libgtk2.0-dev libncurses5-dev
上面是Easwy在编译前所安装的依赖文件。后来在一篇帖子中看到另一种方法安装依赖文件,可能更方便(未测试):
sudo aptitude install build-essential sudo aptitude build-dep vim-gtk
接下来修改~/vim73/src/Makefile,打开自己所需要的功能,Easwy打开了下面这些特性:
接下来编译安装:
cd ~/vim73/src make && make install
执行完后编译好的vim以及gvim就安装在/usr/local/bin目录中了。将此目录加入PATH即可。
Easwy在编译后,每次运行gvim都会提示:
Warning: Missing charsets in String to FontSet conversion Warning: Unable to load any usable fontset Warning: Missing charsets in String to FontSet conversion Warning: Unable to load any usable fontset Error: Aborting: no fontset found
后来在网上查了一下,是因为没有安装libgtk2.0-dev包造成后,安装此包再重新编译后问题解决。
如果你在编译gvim时遇到了问题,可以参考我以前写的一篇文章:vi/vim使用进阶: vim编译中遇到的问题及解决方法。
最后,把我们编译的vim 7.3做为Ubuntu中的缺省编辑器,执行如下命令:
sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 50 --slave /usr/share/man/man1/editor.1.gz editor.1.gz /usr/local/man/man1/vim.1.gz sudo update-alternatives --install /usr/bin/vi vi /usr/local/bin/vim 50 --slave /usr/share/man/man1/vi.1.gz vi.1.gz /usr/local/man/man1/vim.1.gz
Happy viming!
更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
一直以来,Easwy所使用的Linux发行版都是Debian。因为Easwy喜欢Debian上丰富的软件、便捷的安装/升级方式,以及它所代表的自由精神。前些天,Easwy预定了一部魅9手机,为了充分体验DIY的乐趣,Easwy决定自己为魅9手机编译一个ROM。因为魅9基于Android系统,为了编译Android,Easwy利用周末的时间在自己的Thinkpad T400 AA1上安装了Ubuntu 10.04 LTS版本,这篇文章做为安装Ubuntu的一个小结。
首先在Ubuntu官网上下载了Ubuntu 10.04 LTS Desktop版,刻录后使用光盘启动,我的Ubuntu之旅就开始。整个的安装过程很顺利,不得不说Ubuntu在易用性和用户界面方面下了很大的工夫,它的安装过程以及界面已经可以和Windows相媲美了。感谢Ubuntu把Linux从专业人士的工具变成了普通大众能接受的操作系统,相信在不远的将来,Linux在桌面领域会有更长足的进步。
安装完后,登录Gnome,有一种眼前一亮的感觉,曾几何时,Linux的图形界面已经做的美观如斯。并且现在Linux也非常的易用,已经不再需要费心的去安装/配置各种驱动。对Thinkpad T400的硬件,Ubuntu都能正确的识别出来:显卡(集成)正常、声卡正常、网卡以及无线网卡都可以正常工作,电源管理工作正常(能够正常待机)……
因为Ubuntu以Debian Unstable版本为基础,所以对于拥有Debian使用经验的Easwy来说有一种天然的熟悉感。在接下来的篇幅中,Easwy将简要介绍一下自己所做的一些配置。
[ sudo不需要输入密码 ]
Ubuntu缺省禁止root用户登录。在需要root权限执行命令时,用户需要使用sudo来执行相应的命令。为了在sudo时不需要输入密码,我们首先执行命令sudo visudo,这条命令会用缺省编辑器打开一个文件,找到下面这一行内容:
%admin ALL=(ALL) ALL
将其改为:
%admin ALL=(ALL) NOPASSWD: ALL
保存退出后,以后再使用sudo就不需要再输入密码了。
[ 修改更新源 ]
在Debian/Ubuntu中安装或升级软件时,都会自动从你配置的服务器上下载相应的软件,因此选择一个下载速度较快的源就非常重要。
在Ubuntu中文Wiki上列出了国内用户常用的源,你可以为自己选择一个最快的源。使用文本编辑器打开文件/etc/apt/source.list,将你所用的源加进去就行了。在这里,Easwy所用的源是台湾的官方源:
$ sudo vi /etc/apt/source.list # Add your source here... deb http://tw.archive.ubuntu.com/ubuntu lucid main restricted universe multiverse deb http://tw.archive.ubuntu.com/ubuntu lucid-security main restricted universe multiverse deb http://tw.archive.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse deb http://tw.archive.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse deb http://tw.archive.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse deb-src http://tw.archive.ubuntu.com/ubuntu lucid main restricted universe multiverse deb-src http://tw.archive.ubuntu.com/ubuntu lucid-security main restricted universe multiverse deb-src http://tw.archive.ubuntu.com/ubuntu lucid-updates main restricted universe multiverse deb-src http://tw.archive.ubuntu.com/ubuntu lucid-backports main restricted universe multiverse deb-src http://tw.archive.ubuntu.com/ubuntu lucid-proposed main restricted universe multiverse
需要注意的是在添加源时,需要使用正确的版本名。上面源中的lucid就是Easwy所安装的10.04 LTS版本。可以在中文Wiki中找到你所用的版本名称。
配置Thinkpad的小红点
小红点是Thinkpad系列电脑的特色了,想让小红点在Ubuntu下正常工作,需要新建一个文件:
sudo vi /usr/lib/X11/xorg.conf.d/20-thinkpad.conf # Add following lines... Section "InputClass" Identifier "Trackpoint Wheel Emulation" MatchProduct "TPPS/2 IBM TrackPoint|DualPoint Stick|Synaptics Inc. Composite TouchPad / TrackPoint" MatchDevicePath "/dev/input/event*" Option "EmulateWheel" "true" Option "EmulateWheelButton" "2" Option "Emulate3Buttons" "false" Option "XAxisMapping" "6 7" Option "YAxisMapping" "4 5" EndSection
然后重启一下电脑,小红点就可以正常工作了。 在Ubuntu 10.10版本中需要把文件保存为/usr/share/X11/xorg.conf.d/20-thinkpad.conf。
至此,Easwy的Ubuntu环境就基本完成了。更多内容,请阅读易水博客上的其它文章。
[ 参考文档 ]
在使用Apache FOP将Docbook文档转换成PDF一文中,Easwy介绍了在Debian Linux上使用Apache FOP将Docbook文档转换成PDF文件。本来在那篇文章之后,Easwy想写一篇如何在Windows上配置Apache FOP的文章,不过一直没抽出时间。今天刚好有网友问这个问题,于是教她一步步做下来,把步骤列在下面。
按照文章一个简单的Docbook 5.0例子,安装Docbook样式表和xsltproc转换程序,并能够成功将Docbook文件转换成html格式。
到Apache Download Mirrors下载Apache FOP,Easwy下载的是FOP 1.0。下载后,将下载的文件解压,Easwy把它解压到C:\docbook\fop-1.0。
接下来,还要安装Java虚拟机,因为Apache FOP需要Java虚拟机才能运行。到Java网站下载安装即可。
我们需要配置Apache FOP进行PDF转换时所用到的字体信息。首先,用下面的命令把字体信息从Windows自带的系统字体中提取出来:
cd C:\docbook\fop-1.0 mkdir fonts java -cp build\fop.jar;lib\avalon-framework-4.2.0.jar;lib\commons-logging-1.0.4.jar;lib\commons-io-1.3.1.jar;lib\xmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimSun c:\windows\fonts\simsun.ttc fonts\simsun.xml java -cp build\fop.jar;lib\avalon-framework-4.2.0.jar;lib\commons-logging-1.0.4.jar;lib\commons-io-1.3.1.jar;lib\xmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname SimHei c:\windows\fonts\simhei.ttf fonts\simhei.xml
上面的命令,把C:\Windows\fonts\目录下的宋体和黑体这两种字体信息提取到fonts\simsun.xml和fonts\simhei.xml文件中。
接下来配置C:\docbook\fop-1.0\conf\fop.xconf,使Apache FOP能够找到这两种字体。首先在文件中找到<renderer mime=”application/pdf”>这一行,然后在此标签中加入关于字体的配置。
<fonts>
<font metrics-url="fonts/simsun.xml" kerning="yes" embed-url="file:///c:/windows/fonts/simsun.ttc">
<font-triplet name="SimSun" style="normal" weight="normal"/>
<font-triplet name="SimSun" style="normal" weight="bold"/>
<font-triplet name="SimSun" style="italic" weight="normal"/>
<font-triplet name="SimSun" style="italic" weight="bold"/>
</font>
<font metrics-url="fonts/simhei.xml" kerning="yes" embed-url="file:///c:/windows/fonts/simhei.ttf">
<font-triplet name="SimHei" style="normal" weight="normal"/>
<font-triplet name="SimHei" style="normal" weight="bold"/>
<font-triplet name="SimHei" style="italic" weight="normal"/>
<font-triplet name="SimHei" style="italic" weight="bold"/>
</font>
<directory recursive="true">file:///c:/windows/fonts/</directory>
<auto-detect/>
</fonts>
接下来,我们要配置XSL转换样式表,让xsltproc在转换Docbook文档时,使用我们指定的中文字体。在下面我给出了一个简单的样式表,假设存为docbook_fo.xsl:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:ng="http://docbook.org/docbook-ng"
xmlns:db="http://docbook.org/ns/docbook"
exclude-result-prefixes="db ng exsl"
version='1.0'>
<xsl:import href="C:/docbook/docbook-xsl-1.74.3/fo/docbook.xsl"/>
<xsl:param name="body.font.family">SimSun</xsl:param>
<xsl:param name="monospace.font.family">SimSun</xsl:param>
<xsl:param name="title.font.family">SimHei</xsl:param>
</xsl:stylesheet>
在这个转换样式表里,首先导入了Docbook的FO样式表,然后重新设置了其中的字体参数,改成我们所要的字体名称。需要注意的是,这里的字体名字需要和fop.xconf中设置的font-triplet中的名字完全一致。
完成上述配置后,就可以进行PDF文件的转换了。把下面的文件保存为example.xml:
<?xml version='1.0' encoding="utf-8"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="zh-CN"
xmlns:xlink='http://www.w3.org/1999/xlink'>
<articleinfo>
<title>我的第一篇Docbook 5.0文档</title>
<author>
<firstname>Easwy</firstname>
<surname>Yang</surname>
</author>
</articleinfo>
<section>
<title>文档介绍</title>
<para>
这是我的第一篇Docbook 5.0文档,欢迎你来到<link xlink:href='http://easwy.com/blog/'>Easwy的博客</link>。
</para>
</section>
</article>
然后输入下面的命令将其转换成PDF:
xsltproc -o example.fo c:\docbook\fop-1.0\conf\docbook_fo.xsl example.xml fop -c c:\docbook\fop-1.0\conf\fop.xconf example.fo -pdf example.pdf
更多内容,请阅读易水博客上的其它文章。
参考文档
当Easwy尝试telent一个远端设备时,遇到下面的提示(ssh也遇到同样的错误):
/usr/local/bin/cli: error while loading shared libraries: libAbc.so: cannot open shared object file: No such file or directory
在这个设备里,由xinetd来启动in.telnetd,而in.telnetd则调用/usr/local/bin/cli来做为登录程序。看上述提示,应该是in.telnetd在启动/usr/local/bin/cli时找不到动态链接库。
首先用ldd命令查看一下/usr/local/bin/cli所使用的动态链接库:
$ ldd /usr/local/bin/cli linux-vdso32.so.1 = (0x00100000) libAbc.so => /usr/local/lib/libAbc.so (0x0fdfc000) libreadline.so.5 => /lib/libreadline.so.5 (0x0f376000) libncurses.so.5 => /lib/libncurses.so.5 (0x0f337000) libstdc++.so.6 => /lib/libstdc++.so.6 (0x0f24e000) libm.so.6 => /lib/libm.so.6 (0x0f17a000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0f14a000) /lib/ld.so.1 (0x48000000) libtinfo.so.5 => /lib/libtinfo.so.5 (0x0efaa000)>
从上面的命令输出可以看到,cli程序的确会调用libAbc.so这个库,不过上面的输出中,这个库已经被找到了,它对应着文件/usr/local/lib/libAbc.so。考虑到在shell中已经设置了LD_LIBRARY_PATH环境变量,在此环境变量中增加了/usr/local/lib目录,那么是不是xinetd在启动in.telnetd时没有传递此环境变量呢?
于是修改/etc/xinetd.d/telnet,在里面增加一行:
env = LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib
再次telnet,还是显示上述错误。似乎是in.telnetd在启动cli时没有传递上述环境变量。
幸好还有一个方法来指定动态链接库的位置。
Easwy在目录/etc/ld.so.conf.d中新增加一个文件cli.conf,内容是:
$ cat cli.conf /usr/local/lib
然后再以root身份执行一下ldconfig命令。现在再telnet或ssh,就不会出现上述错误提示了。
/usr/ldconfig命令会读取命令行参数、/etc/ld.so.conf配置文件以及/lib和/usr/lib目录,为动态链接器ld.so和ld-linux.so生成所需的链接和缓存信息。也就是说,如果不修改任何配置,只有位于/lib和/usr/lib目录的库才能被动态链接器使用。Easwy上面的修改新增了/usr/local/lib目录,并且使用/sbin/ldconfig命令重新生成了缓存,使动态链接器可以引用上述目录的库。这样就解决了此问题。
因此,在你也遇到类似的错误时,如果有root权限,就可以用这种方法来解决;如果没有root权限,那就只能设置一下LD_LIBRARY_PATH环境变量了。
更多内容,请阅读易水博客上的其它文章。
以前曾有网友留言,在windows下使用cscope时,使用-q选项出现如下提示:
D:\Temp> cscope -Rbkq Input file specified two times. cscope: cannot create inverted index; ignoring -q option cscope: removed files ncscope.in.out and ncscope.po.out
当时Easwy以为是windows版本的cscope不支持-q选项。
不过网友Liang Feng昨天留言说:
Windows版本的cscope是支持-q选项的,出现以上错误是因为没找到合适的sort命令。所以只要cscope进程的工作目录下有GNU版本的sort就可以了。注意是进程的工作目录,不是可执行程序的目录。具体原因看一下cscope的代码片段。 build.c #ifdef WIN32 snprintf(sortcommand, sizeof(sortcommand), “set LC_ALL=C && sort -T %s %s”, tmpdir, temp1); #else snprintf(sortcommand, sizeof(sortcommand), “env LC_ALL=C sort -T %s %s”, tmpdir, temp1); #endif
于是重新做了一下试验。在安装了Cygwin后,在cygwin的shell界面中使用cscope,没有出现上面的错误提示。但如果打开windows的命令行窗口cmd.exe,在里面执行cscope,则会出现上面的错误。
在仔细比较了cygwin和cmd.exe的环境后发现,原来是Windows自带的sort.exe搞的鬼。
在cygwin的shell窗口中,PATH环境变量的设置会使其先找到GNU版的sort.exe,所以上述cscope命令执行可以成功。但在cmd.exe窗口中,PATH环境变量会使其先找到windows自带的sort.exe而不是GNU sort.exe,所以会出现上面的错误提示。
知道了问题的原因,解决方法就很简单了,我们可以写一个批处理程序,在此程序中重设PATH环境变量,使cscope使用GNU版的sort.exe。示例程序如下:
D:\Temp> type cs.bat @echo off set path=c:\cygwin\bin; cscope -Rbkq
在这个批处理里,首先把path环境变量指向c:\cygwin\bin;,我的cscope.exe和GNU版的sort.exe都在此目录中。接下来现执行cscope命令,现在它使用的就是GNU版的sort.exe了。
在此感谢网友Liang Feng,谢谢他的提醒。
更多内容,请阅读易水博客上的其它文章。
本文所用命令的帮助入口:
:help q :help @ :help :let-@
再请教一下:我想在.vimrc中设置一个宏,请vi启动的时候就有这个宏,应该怎么办?
其实在vim中所谓的宏就是把一串命令放到了指定的寄存器里。所以要实现Karl的需求,可以这样做:先录制好宏后,然后在vimrc里把这个宏中的命令放到指定寄存器里,这样vim启动后就可以直接使用这个宏了。
具体的做法如下:
第一步:首先录制宏,Easwy以插入三行文字做为一个简单的例子。这三行文字是:
================================ I love vim. Happy vimming! ================================
按qu开始录制,录制完成后再按一个q命令结束,这样就把宏录制到寄存器u中了。
现在我们可以查看一下u寄存器的内容,用命令“up,把u寄存器的内容粘贴出来:
32i=^[oI love vim. Happy vimming!^M^[32i=^[
注意,上面的^[实际上是<ESC>键的键码,同样,^M是换行键<CR>的键码,在vim中它们以特殊的颜色被显示出来,如果你把光标在它们上面移过,你会发现它们虽被显示成两个字符,但实际上只是一个。
第二步:现在我们用下面的命令在.vimrc中输入一行:
<ESC>olet @m = "<ESC>"upa"<ESC>
这行命令实际上在.vimrc加入了这行话:
let @m = “32i=^[oI love vim. Happy vimming!^M^[32i=^[”
第三步:现在你重启vi,然后直接输出下面的命令:
@m
怎么样,宏是不是生效了?!
要想了解更多细节,请阅读文章开始处给出的帮助手册。
更多关于vi/vim的内容,请阅读易水博客上的其它文章。
Linux下有很多程序都只有命令行接口,对于这类程序,它们通过代理服务器(proxy)访问网络的方式也不尽相同。在本文中Easwy总结了一些常用Linux程序配置代理服务器的方法。
[ 通用代理服务器配置 ]
对于大多数Linux控制台程序,例如Debian或Ubuntu中的apt-get和aptitude命令、git命令、wget命令,这些程序都使用http_proxy和ftp_proxy环境变量来获取代理服务的配置。
方法是在你的~/.bashrc里加上类似下面的话:
export http_proxy=http://username:password@proxyserver:port/ export ftp_proxy=http://username:password@proxyserver:port/
如果你的代理服务器需要用户名和密码才能访问,需要填写上面的username和passwd部分,否则的话,省略这两部分。
例如,假设你的代理服务器为192.168.1.1,端口是8080,用户名为easwy,密码是123456,那么应该这样设置这两个环境变量:
export http_proxy=http://easwy:123456@192.168.1.1:8080 export ftp_proxy=http://easwy:123456@192.168.1.1:8080
这样配置之后,退出再登录一次,或者直接使用下面的命令source一下.bashrc:
source ~/.bashrc
现在,上述程序就可以通过代理服务器访问网络了。
[ subversion的代理服务器配置 ]
要配置subversion的代理服务器,需要修改$HOME/.subversion/servers文件,在此文件的[global]段加上:
http-proxy-host = 192.168.1.1 http-proxy-port = 8080 http-proxy-username = easwy http-proxy-password = 123456
现在svn就可以使用代理服务器访问版本库了。
[ yum的代理服务器配置 ]
如果想让CentOS中的yum可以通过代理服务器更新程序,则需要修改文件/etc/yum.conf,在此文件中加上:
proxy=http://easwy:123456@192.168.1.1:8080
现在使用yum就可以更新你的软件了。