admin 发布的文章

Linux下如何查找某个目录下包含指定字符串的文件

本来我是记得这个查找某个目录下包含指定字符串的文件这个命令的,但是今天在使用的时候出现了一个严重的问题。这个问题以前也出现过,但是没什么影响就没有关注。但是这次我得解决这个问题!
我记得的命令是这样的:
find /path/to/directory -type f | xargs grep 'xxx'
但是一直会出现这种类型错误提示:.config/google-chrome/Default/Local:No such file or directory
怎么会这样呢?我仔细一看,沿着目录去找提示的文件,发现该名称的路径不存在,但是存在"Local XXX"这样的目录。
问题很明显了,是pipe(管道)传递时空格惹的祸,那么怎么解决这个问题呢?
我只能求助于搜索引擎了,使用关键词“Linux find xargs grep space”搜索,结果中有个stackoverflow的链接,标题是“How can I make xargs handle filenames that contain spaces?”。果然stackoverflow不愧是程序员的圣地之一,连这个都有。
排在前面的有几种方案,我试了
find /path/to/directory -type f -print0 | xargs -0 grep 'xxx'
这条命令搜索成功并且没有报错。
接下来,我该想想办法怎么把这个常用的搜索语句写成脚本方便以后使用了。

servlet项目如何添加和使用第三方jar

在Java Web中,我们用到第三方类库的机会很多,那么当我们手动管理依赖的时候,我们该如何添加和使用第三方jar文件。

在此,我们用于举例的第三方jar是普及程度极高的slf4j。

1、前往slf4j官网下载slf4j的zip压缩包,这边下载的是slf4j-1.7.21.zip。解压缩文件夹,待用。

2、在已有的servlet代码里面加上以下几句:
import org.slf4j.LoggerFactory;

`LoggerFactory.getLogger({className}.class).info("Hello World");
注:{className}需要替换成你的servlet类的名称

3、编译servlet文件,需要在-classpath参数里面加上slf4j-api.1.7.21.jar。
比如原来的-classpath参数是"/path/to/servlet-api.jar",现在需要改成"/path/to/servlet-api.jar:/path/to/slf4j-api.1.7.21.jar"。
注:/path/to/需要替换成具体的路径

4、tomcat之类的容器不会像java这个命令一样可以方便的加上-classpath参数,所以有个专门用来放jar文件的路径:WEB-INF/lib/。当tomcat启动的时候,类似于java命令自动添加了-classpath参数。
你需要复制slf4j-api-1.7.21.jar和slf4j-simple-1.7.21.jar两个jar文件到该路径。

5、添加了jar文件之后,不要忘记重启tomcat,此时添加了第三方的servlet就可以正常运行了。

关于ORM的一点思考

1 一开始,大家用数据库,只和数据打交道。
传统的使用JDBC开发就是如此。此时,耦合在控制器层。
2 后来,大家发现和对象打交道更方便。
我们就假定操作的是数据对象。此时,耦合在对象层。
3 再后来,大家用发现换平台的话耦合还是很深。
大家就用管理对象进行对象的管理。此时,耦合在管理对象层。

企业应用架构模式中提到的表记录在1和2之间的位置,现在流行的Active Record在2和3之间的位置。

归根结底,开发者需要做到感觉不出来有持久化层的存在,就像对象一直存在内存中一样,这样才是合理的。

操作系统启动必经的几个过程

1、启动BIOS,BIOS是从一个ROM(只读存储)中启动的,里面是BIOS这个系统的机器码。
另外还有个可写的硬盘,叫做COMS,用来保存配置信息。
2、BIOS把控制权转交给MBR中的Bootloader,这里以GRUB为例子,会先启动MBR中的GRUB stage1程序。
为什么会分stage1和stage2,因为虽然它们都是GRUB的一部分,但是其实是两个程序。MBR中保存的是446Byte大小的Stage1程序,Stage1程序会调用/boot/grub/目录下的Stage2程序。
为什么会这么设计呢?还不是因为MBR中给Bootloader的空间太小,要想塞进一个完整功能的多重引导程序,是不可能的事情。
3、stage1程序把控制权交给stage2程序,stage2程序将会进行引导管理工作。
其实stage1只是个过渡,真正的工作还是看stage2的。
4、stage2程序开始载入kernel内核,并且载入initrd文件。

vim多文本编辑

vim中可以在一个vim session里面同时编辑多个文件,这个功能是基于ex行编辑器实现的,其中的核心命令是:buffers。

如何实现一个session里面编辑多个文件:
1、在编辑的时候在vim命令后面同时输入多个文件的名称
2、在vim的命令界面输入:e filename的方式添加一个文件

如何查看一个session里面的所有文件:
使用:buffers命令查看同一个session里面同时打开哪些文件。

如何在一个session不同文件之间进行切换:
切换到某个文件,使用:buffer(注意不带s)后面加上文件id(使用:buffers命令查得到)。
如果当前文件进行了修改,会提示你当前文件未保存,使用:buffer!后面加文件id就可以强制切换,vim会帮你保留当前修改的缓存。

当然,或许有些教程里面会教你使用:n和:N切换到下一个和上一个文件。
但是这些教程里面没有告诉你的是,当使用这两个命令的时候:
1)切换的范围只有编辑是位于vim命令后的几个文件名,不包括:e命令添加的新文件
2)切换的时候会重新读取一遍该文件,不会像:buffer 一样会自动保存缓存。