使用vimdiff比较两个文件并合并文件(转)

如果你工作在linux,如果你没有svn乌龟(那个可视化svn工具)来进行文件比较,如果你想进行两个文件的合并,请使用vimdiff。linux自带工具,比什么meld之类好多了。

本文转自 http://www.ibm.com/developerworks/cn/linux/l-vimdiff/,原文作者为 高 延斌

各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff。希望能对在 Unix/Linux 系统上进行开发的朋友有所帮助。

源程序文件(通常是纯文本文件)比较和合并工具一直是软件开发过程中比较重要的组成部分。现在市场上很多功能很强大的专用比较和合并工具,比如 BeyondCompare;很多IDE 或者软件配置管理系统,比如Eclipse, Rational ClearCase都提供了内建的功能来支持文件的比较和合并。

当远程工作在Unix/Linux平台上的时候,恐怕最简单而且到处存在的就是命令行工具,比如diff。可惜diff的功能有限,使用起来也不是很方便。作为命令行的比较工具,我们仍然希望能拥有简单明了的界面,可以使我们能够对比较结果一目了然;我们还希望能够在比较出来的多处差异之间快速定位,希望能够很容易的进行文件合并……。而Vim提供的diff模式,通常称作vimdiff,就是这样一个能满足所有这些需求,甚至能够提供更多的强力工具。在最近的工作中,因为需要做很多的文件比较和合并的工作,因此对Vimdiff的使用做了一个简单的总结。我们先来看看vimdiff的基本使用。

继续阅读“使用vimdiff比较两个文件并合并文件(转)”

centos升级之后不能启动vmware的问题解决

前段时间centos增加了一个cr仓库,直接使用yum install centos-release-cr 就可以安装了。此仓库包括了centos自centos6.0以来的一系列更新。安装之后,使用yum update就可以更新系统了。更新之后,相对应的kernel从kernel-2.6.32-71升级到2.6.32-131.17.1.el6.i686。

重新启动之后,发现vmware启动不了,运行vmware之后,提示重新install,没问题,在界面上安装之后,能够启动vmware了。但不能启动monitor,即不能启动vmware player。显示错误信息如下所示:

May 19 13:45:41 xxx kernel: vmmon: disagrees about version of symbol smp_ops
May 19 13:45:41 xxx kernel: vmmon: Unknown symbol smp_ops

网上搜索之后,提示执行以下代码:

vmware-modconfig --console --install-all

仍不能解决,最后在redhat官方bug反馈区找到答案 https://bugzilla.redhat.com/show_bug.cgi?id=706216。在centos目录/usr/lib/vmware/modules/binary下删除有关于redhat的驱动包,在那个目录有很多已经编译好的二进制包。笔者直接执行删除全部,然后再执行重新配置,最后OK。整个执行代码为:

cd /usr/lib/vmware/modules/binary
rm -rf *
vmware-modconfig --console --install-all

至此,配置之后,vmware即能够重新正常启动了。以上代码当然要在root用户下执行了。笔者centos版本为centos6.0,vmware版本为vmware7.0。

在批处理脚本中读取配置文件并设置命令参数

本文要实现以下功能
在一个启动脚本中,需要读取指定的配置文件(properties格式),读取指定的值后,传递给相应的命令来执行,以实现可配置参数和参数统一配置的目的(避免在不同的文件中修改参数)

以下为关键的读取配置文件的批处理代码,其中使用了for循环命令:

rem 读取指定文件下的指定参数的值,并将值设制到参数中
//传入的参数 %1:哪个配置文件 %2:读取的key值
//付出 将对应key的值绑定在key上,即set key=value
set b=-

setlocal EnableDelayedExpansion 
set a=-
for /f "delims== tokens=1,2" %%i in (%1) do (
set a=%%i
call :trim a

if !a!==%2 (
set b=%%j
call :trim b
break
)
)
endlocal & set b=%b%

set %2=%b%
goto :eof

    在以上批处理命令中,用到了trim函数,即一个去除一个字符串两端空格的函数。值得注意的是,由于使用了setlocal,使得要将里面的b值传递到外层的b值,在endlocal处使用了 & 符号。即endlocal & set b=%b%,这一句代码,必须连在一行,无论是将endlocal提上一行或者提下一行,均不能实现指定的效果。具体原因尚未得知。

继续阅读“在批处理脚本中读取配置文件并设置命令参数”

在linux下使用java(jni)读取硬盘序列号

    在linux下读取硬盘序列号相比在windows下简单一些,主要还是打开系统文件并获取相对应的序列号即可。
    以下代码为linux读取硬盘序列号的c++代码:

int get_hd_sn(const char* szDevName, char* szSN, int limit) {
	struct hd_driveid id;
	int fd = open(szDevName, O_RDONLY);
	if (fd < 0) {
		perror("打开失败:");
		return -1;
	}
	//这句话是关键
	if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) {
		strncpy(szSN, (const char*) id.serial_no, limit);
		return 0;
	}
	return -1;
}

    有了以上代码,那么我们的jni方法就很好写了,只要定义一下相对应的方法,并返回代码值即可。如下所示的定义:

	public native int readSn(String s, char[] cs);

    其中 s表示传递的硬盘标识,一般为/dev/sda,cs为填充的硬盘序列号,在传递时只需要new一个传递过去即可。而返回值,表示了读取是否成功,当为0时,读取成功。否则失败。

继续阅读“在linux下使用java(jni)读取硬盘序列号”

centos 6.0中耳麦没有声音的解决办法

    安装完centos6.0之后,下一步要解决的问题就是声音问题,使用笔记本的外放直接播放音乐,是没有一点问题的。但如果使用耳麦时,耳麦里就没有声音了。网上找了半天的方法,都没有找到一个合适的方法。现在的症状是,在声音配置中,并没有headphone一项。

    先说下,笔者的笔记本,是asus的a40j。最终的解决问题在于,升级alsa并修改相应的conf文件。
    首先是升级alsa,在centos源中,最新的稳定版为alsa-1.0.21版本,我们要将其升级到1.0.23版本,从alsa-project中分别下载以下版本:
alsa-driver-1.0.23
alsa-lib-1.0.23
alsa-utils-1.0.23
    然后,分别在每个包中,执行以下命令:

./configure
make
make install

    安装完之后,相应的耳麦还是不能使用,现在需要增加一行配置,就是让alsa能够识别当前的声卡驱动,即根据具体的声音来配置相应的声音mod,就是加入以下一行话:

options snd-hda-intel model=声卡所对应电脑型号

    这其中,最麻烦的就是这个model,如果配置错误,或者使用默认的auto,耳麦是不能正常的工作的。网上也有相应的解决方法,但都是针对特定的笔记本型号。在笔者这里,配置时也针对笔者所使用的asus a40j型号的笔记本。首先找到自己的声卡,使用以下命令可以查询出系统所认出的声卡

more /proc/asound/card0/codec#0 | grep Codec

    如笔者的被认出为Realtek ALC269,现在要根据这个声卡型号找到一个model,可以从官方的一份HD-Audio-Models.txt中进行查找(点击这里下载)。如笔者查询的信息如下:

ALC269
======
  basic		Basic preset
  quanta	Quanta FL1
  eeepc-p703	ASUS Eeepc P703 P900A
  eeepc-p901	ASUS Eeepc P901 S101
  fujitsu	FSC Amilo
  lifebook	Fujitsu Lifebook S6420
  auto		auto-config reading BIOS (default)

    所以,这里我就直接使用了lifebook,即配置成model=lifebook。这句话,需要加入到/etc/modprobe.d/dist.conf文件当中,直接加到最后面。网上说的是该下面的alias.conf配置文件,由于笔者在指定目录下并没有此文件,故直接加入到dist.conf文件当中。加入之后,重新启动linux,再次试用耳麦,熟悉的声音即出来了。
    最后,声音没出来主要就是这两个地方,一是alsa驱动太老,识别不了驱动,二就是需要加入相应的识别信息,即model信息,这两个解决了,耳麦的问题就OK了。

centos6.0下使用fcitx作为默认输入法

    安装了centos 6.0,首先解决的就是输入法问题。在centos下,默认的输入法是ibus,于是准备安装经常使用的fcitx。将相应的repo加上之后,使用yum search,结果并没有找到想要的fcitx,当然在fedora 15的源中还是有的。

    没办法,就只有从源码安装fcitx了。直接从官方下载相应的源,执行configure以及make && make install。安装过程可以参考以下文章:
http://www.ha97.com/2680.html
    安装完成之后,并不能直接使用。首先将原来的ibus删除,使用yum remove ibus*删除原来的。

    但删除之后,还是不能出现fcitx,虽然在终端使用fcitx & 能够调出相应的fcitx,但使用快捷键ctrl+space还是不能激活fcitx。再删除,将默认所带的im-setting删除。在bash_profile中加入以下配置信息:

export XMODIFIERS=@im=fcitx
export XIM=fcitx
export XIM_PROGRAM=fcitx

    重新注销,并启动之后,即可使用fcitx将相应的fcitx调出来。如果要对fcitx进行配置,如快捷键配置等,可以从相应fcitx安装目录下的data目录,直接copy一份config文件,放到~/.config/fcitx目录下,并进行编辑,保存之后,注解重新启动fcitx,即可加载新的配置了。