2008年12月30日星期二
emacs outline
一般major-mode,很少应用.通常我们用c-mode,lisp 等作为主模式, outline作为 minor-mode 来使用
默认的minor-mode 下的命令前缀 C-c @ ,比较傻,可做如下设置
(setq outline-minor-mode-prefix [(control o)])
(global-set-key [(meta o)] 'open-line)
可以挂到其他主模式下使用
(add-hook 'php-mode-hook
'(lambda ()
(c-set-style "Stroustrup")
(outline-minor-mode "t")))
sublevels ( C-c @ C-q.
This collapses the whole tree, showing only the topmost heading lines. Given a numeric prefix, this command shows deeply nested sublevels. M-3 C-c @ C-q thus shows the top most heading lines and two more levels of heading lines.
body ( C-c @ C-t.
This hides all the body lines of the document--that is, showing only the heading lines. This is a very convenient way to get an overview of the whole document.
other ( C-c @ C-o.
This hides everything except the body lines in which point is located and the branches above it. The body lines of the branches above the line with point are also hidden. Note this does not seem to work in GNU Emacs 20.
Hide--Subtree
entry ( C-c @ C-c.
This hides the body lines of the given headline, but not its subbranches.
leaves ( C-c @ C-l.
This hides all the body lines of the subtree rooted in the given headline, but not the branches. This is equivalent to hide body described previously, but only for the given subtree.
subtree ( C-c @ C-d.
This hides all body lines and branches in the subtree located at the given headline.
Show--Whole Document
all ( C-c @ C-a.
This shows the whole tree. That is, it unfolds anything hidden by any of the outline functions.
Show--Subtree
entry ( C-c @ C-e.
This shows the body lines of the given headline. That is, neither the branches nor any of their content.
children ( C-c @ C-i.
This shows the immediate branches of this headline. Section heading lines will be shown for a chapter, but subsections, subsubsections, and body lines are not shown.
branches ( C-c @ C-k.
This shows all branches in the subtree for the given headline.
subtree ( C-c @ C-s.
This shows the whole subtree for the given headline. That is, all heading lines and body lines below the given headline.
emacs 配置编写顺序问题
(cons "~/Configurations"
(cons "~/Extensions" load-path)))
(load "macros") ;;宏定义文件
(load "modes")
(load "extensions");; 扩展配置
(load "emacs-std") ;; 标准配置
(load "bindings") ;; 绑定键
(setq outline-minor-mode-prefix [(control o)])
扩展配置放到了标准配置之前, 可今天遇到一个灵异问题 (setq outline-minor-mode-prefix [(control o)]),怎么都无效. 无奈之下 采用分段测试发, 一段段执行 找到问题...
在配置中有调用 org-mode(放在extensions.el中), (setq outline-minor-mode-prefix [(control o)]) 放在加载org-mode 之前有效而置后无效. 究其原因是因为 org-mode 是以outline-mode 为基础扩展的. 具体细节不得而知
需要重新思考 配置的加载顺序 是否要将 emacs-std 加载 拉到前边去
2008年12月29日星期一
基于Sphinx+MySQL全文检索架构设计(转)
参考:http://blog.s135.com/post/385.htm
前言:
本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。
在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、RedHat AS4 Linux操作系统、MySQL 5.1.26、MyISAM存储引擎、key_buffer=1024M环境下实测,单表1000万条记录的数据量(这张MySQL表拥有int、datetime、varchar、text等类型的10多个字段,只有主键,无其它索引),用主键(PRIMARY KEY)作为WHERE条件进行SQL查询,速度非常之快,只耗费0.01秒。
出自俄罗斯的开源全文搜索引擎软件 Sphinx ,单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。
基于以上几点,我设计出了这套搜索引擎架构。在生产环境运行了一周,效果非常不错。有时间我会专为配合Sphinx搜索引擎,开发一个逻辑简单、速度快、占用内存低、非表锁的MySQL存储引擎插件,用来代替MyISAM引擎,以解决MyISAM存储引擎在频繁更新操作时的锁表延迟问题。另外,分布式搜索技术上已无任何问题。
一、搜索引擎架构设计:
1、搜索引擎架构图:
2、搜索引擎架构设计思路:
(1)、调用方式最简化:
-----------------------------
补充:
亿级数据的高并发通用搜索引擎架构设计[原创] http://blog.s135.com/post/385.htm
尽量方便前端Web工程师,只需要一条简单的SQL语句“SELECT ... FROM myisam_table JOIN sphinx_table ON (sphinx_table.sphinx_id=myisam_table.id) WHERE query='...';”即可实现高效搜索。
(2)、创建索引、查询速度快:
①、Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
Sphinx的特征:
Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
支持分布式检索
支持基于短语和基于统计的复合结果排序机制
支持任意数量的文件字段(数值属性或全文检索属性)
支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
支持作为Mysql的存储引擎
②、通过国外《High Performance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM ... WHERE id = ...”的SQL语句(其中id为PRIMARY KEY),每秒钟能够处理10000次以上的查询,而普通的SELECT查询每秒只能处理几十次到几百次:
③、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段,用sphinx建立搜索索引。根据关键字、时间、类别、范围等信息查询一下sphinx,sphinx只会将查询结果的ID号等非文本信息告诉我们。要显示title、body等信息,还需要根据此ID号去查询MySQL数据库,或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎,将MySQL与Sphinx结合起来,是一种便捷的方法。
创建一张Sphinx类型表,将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样,对于MyISAM表来所,只相当于一个WHERE id=...的主键查询,WHERE后的条件都交给Sphinx去处理,可以充分发挥两者的优势,实现高速搜索查询。
(3)、按服务类型进行分离:
为了保证数据的一致性,我在配置Sphinx读取索引源的MySQL数据库时,进行了锁表。Sphinx读取索引源的过程会耗费一定时间,由于MyISAM存储引擎的读锁和写锁是互斥的,为了避免写操作被长时间阻塞,导致数据库同步落后跟不上,我将提供“搜索查询服务”的和提供“索引源服务”的MySQL数据库进行了分开。监听3306端口的MySQL提供“搜索查询服务”,监听3406端口的MySQL提供“索引源服务”。
(4)、“主索引+增量索引”更新方式:
一般网站的特征:信息发布较为频繁;刚发布完的信息被编辑、修改的可能性大;两天以前的老帖变动性较小。
基于这个特征,我设计了Sphinx主索引和增量索引。对于前天17:00之前的记录建立主索引,每天凌晨自动重建一次主索引;对于前天17:00之后到当前最新的记录,间隔3分钟自动重建一次增量索引。
(5)、“Ext3文件系统+tmpfs内存文件系统”相结合:
为了避免每3分钟重建增量索引导致磁盘IO较重,从而引起系统负载上升,我将主索引文件创建在磁盘,增量索引文件创建在tmpfs内存文件系统“/dev/shm/”内。“/dev/shm/”内的文件全部驻留在内存中,读写速度非常快。但是,重启服务器会导致“/dev/shm/”内的文件丢失,针对这个问题,我会在服务器开机时自动创建“/dev/shm/”内目录结构和Sphinx增量索引。
(6)、中文分词词库:
我根据“百度早期中文分词库”+“搜狗拼音输入法细胞词库”+“LibMMSeg高频字库”+... 综合整理成一份中文分词词库,出于某些考虑暂不提供。你可以使用LibMMSeg自带的中文分词词库。
2008年12月28日星期日
2008年12月25日星期四
smarty 调试方法
对于smarty 调试有三种方法
1.$smarty->debugging=true
2.$smarty->debugging_ctrl = 'URL'; URL表示当关键词SMARTY_DEBUG出现在QUERY_STRING(查询字符串)中时,针对此脚本的调用,调试被启动 例如 http://127.0.0.1/test.php?SMARTY_DEBUG
3.第二种的扩展
$smarty->debugging_ctrl = 'URL'; 在QUERY_STRING 里加入 SMARTY_DEBUG=on 调试开启,加入SMARTY_DEBUG=off. 它的实现方法为 在cookie 做个标记
2008年12月23日星期二
emacs 下tab 变空格
The following turns off Indent Tabs mode:
;;; Prevent Extraneous Tabs
(setq-default indent-tabs-mode nil)
Note that this line uses setq-default rather than the setq command that we have seen before. The setq-default command sets values only in buffers that do not have their own local values for the variable.
在php下我想按此进行设置..
照方抓药,通常来讲 (setq-default indent-tabs-mode nil), 这样设置就ok.
按此方法,依然无效. 仔细看过以前的配置, 原来是以前 抄来的配置中的问题
(defun my-c-common-hook()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
;; (setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq compile-command "make"))
(add-hook 'c-mode-common-hook 'my-c-common-hook)
php-mode 是依赖c-mode-common-hook 的, 在上段配置中的设置如下 (setq tab-width 4),按照默认 tab是生效的,把 (setq-default indent-tabs-mode nil) 给覆盖了. 因此在php-mode 下依然失效. 改为 (setq tab-width 4 indent-tabs-mode nil) 一切ok
2008年12月18日星期四
转载:科学家证实,巧妙加入第3个选项可左右人们决定
印度网站昨天刊出一篇由印度裔科学家在美国所做的研究成果,引用一篇在《Journal of Marketing Research》行销专业期刊的报导。行销的一个基本范例称为「吸引力效应」(attraction effect,注意,和「吸引力法则」并无关连),只是从前从未以实验来证明过。
科学家找来一群志愿者,给他们几样东西做选择,并同时用fMRI脑部扫描,看看他们脑部的状况。在第一阶段的实验里,科学家先给他们看A物、B物两个东西,两个都差不多好,难以决定,科学家硬就要他们二者选一,这时候,科学家发现这些人的脑部出现异常活动,有一个叫「amygdala」的部位呈现出「受惊扰」 (irritation)的模样,这个区块是脑部掌管负面情绪的部位,也就是说,当这两个「差不多」的物品到了实验者面前,叫他作一个选择,这位实验者在考虑的过程中,会感到焦躁、不安,在好多个因素中层层抽丝剥茧,试图揪抽出A、B之中较佳的那个选择。发布帖子
有趣的是,这个困境远比想像中还要容易解决。到了第二阶段实验,科学家只要再给他们「第三样东西」,暂且称为「C物」。这个C物和刚刚的B物很相似,但明显的比B还「烂」。这时候,这位实验者一次要在A、B、C中选一,应该「更烦躁」才对不是吗?两个都选不完了,更何况多了第三个!奇妙的是,在C出现后,有如「拯救」了大脑,他们脑中同区块的那些惊扰的运动竟然就无缘无故的消失了。实验者也在这时候表情自在的,做出了他们的决定。
那个决定,正是B物!
刚刚的A物竟被无缘无故的丢弃了。
科学家将这奇妙的「第三个选项」C物,直接称为「诱饵」(decoy),它存在的目的,只是要诱发这个人对先前两个选项的其中一个。换句话说,若善用这个「C物」,就能巧秒的左右别人的决定!
行销最厉害的,就是改变人的动作,这也是最好玩的地方。我们平常不见得要卖产品才要改变人的动作,许多时候,我们或许想改变自己,或者想改变朋友、改变老板、改变同事…都可以用这个可怕的招术。其实,像这样有趣的「选择」境况,在行销学中,共有三种已知的效应:
一种叫「相似效应」(Similarity Effect),当你有两双鞋,一双尖头,一双平头,难以选择,这时候,若再给你一双也还不错的平头鞋,大脑会将两双平头鞋混成「同一个选项」,突然间,你选早先那双平头鞋的机率会「减半」,由新的平头鞋来瓜分。
第二种叫「妥协效应」(compromise effect),当你眼前有两双鞋,一双尖头,一双平头,难以选择。这时候突然出现一双材质和刚刚两双差不多的新鞋,不过它的头是介于尖头和平头之间,假设也蛮好看的,那你的大脑会自动将尖头与平头全部归类成「极端」,你的大脑会自动叫你尽量选一个不极端,也就是新的。
第三种则正是现在刚介绍的、经过科学实验证明的「吸引效应」(attraction effect)。
你比较这三种效应,就知道为何「吸引效应」会这么的有意思!因为,它是这三种效应中唯一能改变你现在的两个选项的,所以可以导入一些策略。现在科学家更证实吸引力效应的威力,的确让大脑「立刻决定」,这是人类大脑难得的一个「大漏洞」,大家可以好好的思考,如何在适当时机运用!
举个例子,你想帮一个女性朋友牵红线,介绍某位男士认识一下,这位朋友有学问、有涵养,是个很不错的家伙,但这女生呢,听说目前同时也刚认识一位「听说」是帅帅、高高、壮壮的超级型男,两位男士都在追求这位热门美女,怎么办?这时候,你约这名女生出来,再介绍另外一名同样是有点学问、有点涵养,但就显然比A君还更逊一点的家伙。这个动作,很有可能马上让这名女生转而选择你这个眼镜男!
再举个比较邪恶的例子,今天你在和某一个同事抢升迁,你是女生,他是男生;你的学经历尚资浅但能言善道、工作能力强,那个男生经验丰富、业界人脉广。好,现在你可以想办法「推荐」一个和自己同质性很高,同样是能言善道、工作能力强,但比你更资浅了五年,且说话与工作都没有你强,这样工作了半年后,很有可能下一个拿到升迁机会的!
人性的漏洞除了这些外还有很多,适度的科学研究,让某些人有如得到强大武器。多知道一点,永远比少知道的好。
2008年12月17日星期三
smarty 插件
就可以这样用了 <{if getconf("fdf")==1}>
2008年12月15日星期一
js sort 问题
divs.sort(function($1,$2){
var _$1=$E('input[name^=num[]',$1).value.toInt(),
_$2=$E('input[name^=num[]',$2).value.toInt();
if(_$1>_$2)return 1;
if(_$1<_$2)return -1
if(_$1==_$2)return 0;
});
2008年12月13日星期六
emacs 文件对比 合并
M-x ediff-files
M-x ediff-windows-linewise
比对模式
? 帮助
n 跳到下一处不同
p 跳到上一处不同
4j 跳到第4处不同
a/b copy A/B's region to B/A
ra/rb 如果你觉得之前的修改有问题可以 restore 一下 A/B
! 重新刷新
## You might often want to skip the diffs that contain only differences in the number of white spaces. To do this, press ## (two hash marks). Emacs then simply skips these regions
v 向下翻页
V 向上翻页
有一个很强大的应用,是在使用svn时, 你修改了一个文件. 突然发现有点问题, 想与修改改的代码做一个本地的比对.
这个时候可以应用 ediff-files A文件对应 有问题的文件, B文件对应 A文件所在目录下./svn/text-base/[A文件名].svn-base
------------------------------------------------
ediff-buffers3 and ediff-files3 同时比对3文件
ca 拷贝c处的变更到A处
------------------------------------------------
Merging Files
M-x ediff-merge-buffers
M-x ediff-merge-files
用法跟 文件比较差不多,
+ 将两边差异合并
r 恢复
------------------------------------------------
多文件merge
M-x ediff-directories
M-x ediff-directories3
M-x ediff-merge-directories
会将所有文件的异同做个列表
M 回到列表上去
这个功能可以用在 公司和家里边的 configure 文件的同步上
------------------------------------------------
M-x eregistry This brings you to a buffer called *Ediff Registry* 查看当前所有的 Ediff
session
2008年12月11日星期四
sed 替换tab
emacs下实用搜索命令
第二阶段 工作重点
elisp 学习入门 http://learn.tsinghua.edu.cn:8080/2005211356/elispintro/HelloWorld.html
还需要一本好书 暂订 elisp manul http://www.gnu.org/software/emacs/manual/elisp.html
之后语言如下, 具体时间另行计划
1. c++
2. python
3.lisp
4.erlang Erlang 程序设计
2008年12月10日星期三
清华的emacs 氛围
2008年12月9日星期二
2008.12.10 需整理学习item
emacs ibuffer
抓图工具 hyperSnap
hyperSnap 貌似比较强 比较傻, 先用起来
2008年12月8日星期一
emacs hi-lock-mode
1. 使用方法:
M-x hi-lock-mode 就可以启动这个mode,随后呢, C-x w h REGEXP
emacs macro
C-x ( (start-kbd-macro) to tell Emacs to start recording your macro.
C-x ) (end-kbd-macro) to tell Emacs to stop recording the macro.
C-x e (call-last-kbd-macro).
1. 记录宏开始用 c-x ( 记录结束用 c-x ) . 执行用c-x e ,执行一遍 c-u 10 c-x e 执行10遍.
2. 在一个范围内应用宏用 M-x sams-apply-macro-on-region .
3. 为宏起名 用 M-x name-last-kbd-macro
4. 将宏插入到一个地方用 M-x insert-kbd-macro. 通常可以专门建立一个 macros.el 专门存放 宏. 在.emacs中 (load "macros") 就成了
sams-apply-macro-on-region 在 sams-lib.el 中
可以绑定在适合自己的快捷上
(global-set-key [(shift f9)] 'sams-apply-macro-on-region)
(global-set-key [(shift f1)] 'call-last-kbd-macro)
(global-set-key [(shift f2)] 'name-last-kbd-macro)
(global-set-key [(control f2)] 'insert-kbd-macro)
进阶:
C-x q (kbd-macro-query) 使macro暂停,在当前位置提示确认是否继续
C-u C-x q. 直接中断macro ,如要继续按 C-M-c.... 录制完宏后 使用时也是这般...
M-x edit-kbd-macro 编辑特定的宏
1. c-x e 编辑最近设定的宏
2. M-x 按照为宏所设置的名称查找, 并编辑
3. C-h-l This lets you use the latest 100 keystrokes as the macro. When you save your editing, it is saved as the macro available through C-x e. (按照字面理解没有啥意思 未深究)
Mysql配置的优化方法
Mysql建表和索引使用规范
Mysql建表和索引使用规范
一、 MySQL建表,字段需设置为非空,需设置字段默认值。
二、 MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL。
三、 MySQL建表,如果字段等价于外键,应在该字段加索引。
四、 MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比。
五、 MySQL使用时,一条SQL语句只能使用一个表的一个索引。所有的字段类型都可以索引,多列索引的属性最多15个。
六、 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。
七、 建立索引index(part1,part2,part3),相当于建立了 index(part1),index(part1,part2)和index(part1,part2,part3)三个索引。
八、 MySQL针对like语法必须如下格式才使用索引:
SELECT * FROM t1 WHERE key_col LIKE 'ab%' ;
九、 SELECT COUNT(*) 语法在没有where条件的语句中执行效率没有SELECT COUNT(col_name)快,但是在有where条件的语句中执行效率要快。
十、 在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。各自单一索引的话,只使用遍历最少行的那个索引。
十一、 在where条件中多个or的条件中,每一个条件,都必须是一个有效索引。
十二、 ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序)。
十三、 所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的。
十四、 JOIN 索引,所有匹配ON和where的字段应建立合适的索引。
十五、 对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。
十六、 定期ANALYZE TABLE tbl_name为扫描的表更新关键字分布 。
十七、 定期使用慢日志检查语句,执行explain,分析可能改进的索引。
十八、 条件允许的话,设置较大的key_buffer_size和query_cache_size的值(全局参数),和sort_buffer_size的值(session变量,建议不要超过4M)。
备注
主键的命名采用如下规则:
主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。
外键的命名采用如下规则:
外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。子表名和父表名自己用下划线(_)分隔。外键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。外键名用小写的英文单词来表示。
索引的命名采用如下规则:
1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符。
2)主键对应的索引和主键同名。
3)唯一性索引用uni_开头,后面跟表名。一般性索引用ind_开头,后面跟表名。
4)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则
emacs 学习计划 加入新站(IDE)
emacs abbrev 献给懒人的利器
(read-abbrev-file)
When this line is in the .emacs file, abbreviations are loaded during startup of Emacs; when Emacs exits they are written. If you want the abbreviations to be saved as soon as they are defined, insert the following into your .emacs file:
(sams-write-abbrev-at-once)
emacs info
其实它的自帮助系统已足够强大.
2008年12月7日星期日
register
bookmarks
2008年12月5日星期五
Linux中find命令-path -prune用法详解
Linux中find命令-path -prune用法详解
在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能。
假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0、dir1和dir2 ...等目录及dir00、dir01...dir10、dir11...等子目录。
1. 在当前目录下查找所有txt后缀文件
find ./ -name *.txt
2.在当前目录下的dir0目录及子目录下查找txt后缀文件
find ./ -path './dir0*' -name *.txt
3.在当前目录下的dir0目录下的子目录dir00及其子目录下查找txt后缀文件
find ./ -path '*dir00*' -name *.txt
4.在除dir0及子目录以外的目录下查找txt后缀文件
find ./ -path './dir0*' -a -prune -o -name *.txt -print
说明:-a 应该是and的缩写,意思是逻辑运算符‘或’(&&); -o应该是or的缩写,意思是逻辑运算符‘与’(||), -not 表示非.
命令行的意思是:如果目录dir0存在(即-a左边为真),则求-prune的值,-prune 返回真,‘与’逻辑表达式为真(即-path './dir0*' -a -prune 为真),find命令将在除这个目录以外的目录下查找txt后缀文件并打印出来;如果目录dir0不存在(即-a左边为假),则不求值-prune ,‘与’逻辑表达式为假,则在当前目录下查找所有txt后缀文件。
5.在除dir0、dir1及子目录以外的目录下查找txt后缀文件
find ./ \( -path './dir0*' -o -path './dir1*' \) -a -prune -o -name *.txt -print
注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,所以需要用反斜杠'\'进行转意(即'\'转意字符使命令行认识圆括号)。同时注意'\(','\)'两边都需空格。
6.在dir0、dir1及子目录下查找txt后缀文件
find ./ \( -path './dir0*' -o -path './dir1*' \) -a -name *.txt -print
-----------------------
另附一篇 转载自:http://www.liamdelahunty.com/tips/linux_find_exclude_multiple_directories.php
Linux Find Exclude Multiple Directories
find . -type d \( -name media -o -name images -o -name backups \) -prune -o -print
find . - Find all files in this directory (.)
-type d - directory or folder
-prune - ignore the proceding path of ...
\( -name media -o -name images -o -name backups \) - The -o simply means OR
-o -print - Then if no match print the results, (prune the directories and print the remaining results)
As always in Linux there are many ways to achieve the same result, and the patient may prefer to build up the find command using the path attribute. Please note that you may need to specify the path with a prefix of "./" and no trailing slash.
find . -path './media' -prune -o -path './images' -prune -o -path './backups' -prune -o -print
An important difference here is that the first command will prune ANY directory in the path that matches the name, such as './media' and './public/media', where as the second format will only prune the explict path './media'.
------
http://www.linuxsir.org/main/?q=node/137Linux文件查找命令find,xargs详述
1.重温 emacs 24 hours . 把有用的东西重拾一下
2.重点学习一下这个blog 上的所有 emacs 技巧
迷惑中的 Kyle M. Lee http://kyle.bloghome.cn
http://infolab.stanford.edu/~manku/dotemacs.html
http://learn.tsinghua.edu.cn:8080/2005211356/stdlib/Ibuffer.html http://www.0-dong.com/blog/rewrite.php/read-473.html
http://docs.huihoo.com/homepage/shredderyin/emacs_elisp.html
http://learn.tsinghua.edu.cn:8080/2002315162/emacs_coding.html
http://blog.chinaunix.net/u1/50920/showart_410997.html
http://learn.tsinghua.edu.cn:8080/2005211356/emacs/wikisource/PerlProg.muse
3.使org 模式试用 与gtd...
emacs 文件搜索
当偶厌倦了各个tag搜索工具的时候,发现grep才是偶的最爱。每每M-x grep RET输入一堆东西,才可以搜索到自己心仪的东东,确实麻烦。下面介绍下,在emacs中,各种grep相关的设置。如何可以让一位C++程序员比较方便的使用。
- 基础命令设置
首先进入 Customize Group Grep 分组中,
名称 | 数值 | 说明 |
Grep Window Height | 14 | 可以调整grep结果窗口的大小 |
Grep Command | grep -rinH -e ../* | 设置grep的默认命令,使其默认从上一层目录开始递归搜索 |
Grep Find Command | find ../* -iname "*.cpp" -type f -print0 | xargs -0 -e grep -nH -e | 从上一层目录开始递归搜索,所有cpp文件的内容,常用于搜索代码中被引用的变量或者函数 |
- 高级命令用法
上面的只是一些雕虫小技。其实更好用的grep命令有如下几个。
命令 | 使用简介 | 特色说明 |
rgrep | M-x rgrep RET后,首先输入的是需要搜索的内容,回车后,提示目标文件的类型,此时可以输入各个别名,比如ch,搜索所有的C++源码文件,随后输入的是搜索开始的目录。 | 递归搜索目录中的内容,支持一些预定义的别名,比如ch表示所有的c++代码文件,hh表示所有的c++头文件等等。这个估计是写程序时,最好用的grep命令。 |
lgrep | M-x lgrep RET后,提示内容与rgrep的都一样,唯一不同的是,lgrep只搜索当前指定目录中的内容,不会对子目录进行递归搜索。 | lgrep中的l应该是表示本层目录的(local)。对于在很大的,有很多子目录的文件夹中,只想搜索限定目录中,限定文件类型的时候,这个命令很方便。 |
igrep | M-x igrep后,会自动根据当前所在文件的扩展名作为文件过滤条件(也可以修改),随后,会弹出UI提示选择目录(貌似在win32上,没有什么作用),一路回车,就可以搜索了。 |
emacs 专注模式
"*compilation*" "*grep*" "*igrep*"))
sams-find-file-dedicated-frame, which asks for a filename, loads this file into a buffer, and shows this buffer in a dedicated frame.
sams-switch-buffer-dedicated-frame, which asks for a buffer name and loads this buffer into a dedicated frame.
自动调整 minibuffer大小
第五项修炼
| ||||
|
2008年12月4日星期四
LANG,LC_ALL,local详解(转)
例如zh_CN.GB2312、zh_CN.GB18030或者zh_CN.UTF-8。很多人都不明白这些古里古怪的表达方式。这个外星表达式规定了什么东西呢?这个问题稍后详述,现在只需要知道,这是locale的表达方式就可以了。 locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。 [oracle@game ~]$ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=en_US.UTF-8 [oracle@game ~]$ locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是: 1、语言符号及其分类(LC_CTYPE) 2、数字(LC_NUMERIC) 3、比较和排序习惯(LC_COLLATE) 4、时间显示格式(LC_TIME) 5、货币单位(LC_MONETARY) 6、信息主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等(LC_MESSAGES) 7、姓名书写方式(LC_NAME) 8、地址书写方式(LC_ADDRESS) 9、电话号码书写方式(LC_TELEPHONE) 10、度量衡表达方式 (LC_MEASUREMENT) 11、默认纸张尺寸大小(LC_PAPER) 12、对locale自身包含信息的概述(LC_IDENTIFICATION)。 所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US, zh_CN and de_DE@euro都是locale的定义文件,这些文件都是用文本格式书写的,你可以用写字板打开,看看里边的内容,当然出了有限的注释以外,大部分东西可能你都看不懂,因为是用的Unicode的字符索引方式。 [oracle@game ~]$ cd /usr/share/i18n/locales [oracle@game locales]$ ls aa_DJ ar_YE el_GR es_ES fr_CH iso14651_t1 ne_NP so_ET translit_hangul aa_ER az_AZ el_GR@euro es_ES@euro fr_FR it_CH nl_BE so_KE translit_narrow aa_ER@saaho be_BY en_AU es_GT fr_FR@euro it_IT nl_BE@euro so_SO translit_neutral aa_ET bg_BG en_BW es_HN fr_LU it_IT@euro nl_NL sq_AL translit_small af_ZA bn_BD en_CA es_MX fr_LU@euro iw_IL nl_NL@euro sr_CS translit_wide am_ET bn_IN en_DK es_NI ga_IE ja_JP nn_NO st_ZA tr_TR an_ES br_FR en_GB es_PA ga_IE@euro ka_GE no_NO sv_FI tt_RU ar_AE br_FR@euro en_HK es_PE gd_GB kk_KZ oc_FR sv_FI@euro uk_UA ar_BH bs_BA en_IE es_PR gez_ER kl_GL om_ET sv_SE ur_PK ar_DZ byn_ER en_IE@euro es_PY gez_ER@abegede kn_IN om_KE ta_IN uz_UZ ar_EG ca_ES en_IN es_SV gez_ET ko_KR pa_IN te_IN uz_UZ@cyrillic ar_IN ca_ES@euro en_NZ es_US gez_ET@abegede kw_GB pl_PL tg_TJ vi_VN ar_IQ cs_CZ en_PH es_UY gl_ES lg_UG POSIX th_TH wa_BE ar_JO cy_GB en_SG es_VE gl_ES@euro lo_LA pt_BR ti_ER wa_BE@euro ar_KW da_DK en_US et_EE gu_IN lt_LT pt_PT ti_ET wal_ET ar_LB de_AT en_ZA eu_ES gv_GB lv_LV pt_PT@euro tig_ER xh_ZA ar_LY de_AT@euro en_ZW eu_ES@euro he_IL mi_NZ ro_RO tl_PH yi_US ar_MA de_BE es_AR fa_IR hi_IN mk_MK ru_RU translit_circle zh_CN ar_OM de_BE@euro es_BO fi_FI hr_HR ml_IN ru_UA translit_cjk_compat zh_HK ar_QA de_CH es_CL fi_FI@euro hu_HU mn_MN se_NO translit_cjk_variants zh_SG ar_SA de_DE es_CO fo_FO hy_AM mr_IN sid_ET translit_combining zh_TW ar_SD de_DE@euro es_CR fr_BE i18n ms_MY sk_SK translit_compat zu_ZA ar_SY de_LU es_DO fr_BE@euro id_ID mt_MT sl_SI translit_font ar_TN de_LU@euro es_EC fr_CA is_IS nb_NO so_DJ translit_fraction [oracle@game locales]$ 对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:/usr/share/i18n/locales/de_DE@euro和/usr/share/i18n/locales/de_DE。打开这两个locale定义,你就会知道它们的差别在于de_DE@euro使用的是欧洲的排序、比较和缩进习惯,而de_DE用的是德国的标准习惯。 上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。 zh_CN.GB2312到底是在说什么? Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]。所以说呢,locale总是和一定的字符集相联系的。下面举几个例子: 1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。 2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。zh_CN.GB18030=中文_中华人民共和国+国标18030字符集。 3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。zh_TW.BIG5=中文_台湾.大五码字符集 4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。 en_GB.ISO-8859-1=英文_大不列颠.ISO-8859-1字符集 5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。de_DE.UTF-8@euro=德语_德国.UTF-8字符集@按照欧洲习惯加以修正,注意不是de_DE@euro.UTF-8,所以完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。 其中,与中文输入关系最密切的就是LC_CTYPE,LC_CTYPE规定了系统内有效的字符以及这些字符的分类,诸如什么是大写字母,小写字母,大小写转换,标点符号、可打印字符和其他的字符属性等方面。而locale定 义zh_CN中最最重要的一项就是定义了汉字(Class“hanzi”)这一个大类,当然也是用Unicode描述的,这就让中文字符在Linux系统中成为合法的有效字符,而且不论它们是用什么字符集编码的。 怎样设定locale呢? 设定locale就是设定12大类的locale分类属性,即12个LC_*。除了这12个变量可以设定以外,为了简便起见,还有两个变量:LC_ALL和LANG。它们之间有一个优先级的关系:LC_ALL > LC_* >LANG。可以这么说,LC_ALL是最上级设定或者强制设定,而LANG是默认设定值。 1、如果你设定了LC_ALL=zh_CN.UTF-8,那么不管LC_*和LANG设定成什么值,它们都会被强制服从LC_ALL的设定,成为 zh_CN.UTF-8。 2、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*=en_US.UTF-8,并且没有设定LC_ALL的话,那么系统的locale设定以LC_*=en_US.UTF-8。 3、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_*,和LC_ALL均未设定的话,系统会将LC_*设定成默认值,也就是LANG的值zh_CN.UTF-8。 4、假如你设定了LANG=zh_CN.UTF-8,而其他的LC_CTYPE=en_US.UTF-8,其他的LC_*,和LC_ALL均未设定的话,那么系统的locale设定将是:LC_CTYPE=en_US.UTF-8,其余的 LC_COLLATE,LC_MESSAGES等等均会采用默认值,也就是 LANG的值,也就是LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=zh_CN.UTF-8。 所以,locale是这样设定的: 1、如果你需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以,当然你可以两个都设定,但正如上面所讲,LC_ALL的值将覆盖所有其他的locale设定,不要作无用功。 2、如果你只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。这样LC_CTYPE=zh_CN.XXXX,而LC_COLLATE=LC_MESSAGES=……= LC_PAPER=LANG=en_US.XXXX。 3、假如你高兴的话,可以把12个LC_*一一设定成你需要的值,打造一个古灵精怪的系统: LC_CTYPE=zh_CN.GBK/GBK(使用中文编码内码GBK字符集); LC_NUMERIC=en_GB.ISO-8859-1(使用大不列颠的数字系统) LC_MEASUREMEN=de_DE@euro.ISO-8859-15(德国的度量衡使用ISO-8859-15字符集) 罗马的地址书写方式,美国的纸张设定……。估计没人这么干吧。 4、假如你什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。 另外LANG和LANGUAGE有什么区别呢? LANG - Specifies the default locale for all unset locale variables LANGUAGE - Most programs use this for the language of its interface LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值, refer:http://blog.chinaunix.net/u2/60913/showart_1161340.html |
2008年12月3日星期三
转:sambap配置
实验一:配置带用户验证的共享目录 ****************************************************************************************************************************** 实验三:smbclient的使用 实验四:smbmount的使用 ############################################################################################################## Samba 服务器配置 |
2008年12月2日星期二
jfs 小略
|
级别: 初级 Steve Best (sbest@us.ibm.com)IBM 2000 年 1 月 01 日 如果发生系统崩溃,JFS 提供了快速文件系统重启。通过使用数据库日志技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态,而非日志文件系统却要花上几小时甚至几天才能完成。本白皮书对 JFS 体系结构作了概述,并且描述了可在 developerWorks 网站上找到的 JFS 技术的设计特性、潜在限制以及管理实用程序。 日志文件系统 (JFS) 提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。它具有可伸缩性和健壮性,与非日志文件系统相比,它的优点是其快速重启能力:JFS 能够在几秒或几分钟内就把文件系统恢复到一致状态。 虽然 JFS 主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计的,JFS 还可用于想得到高性能和可靠性的客户机配置。 JFS 体系结构可从磁盘布局特性的角度进行说明。 逻辑卷 聚集和文件集 文件、目录、inode 与寻址结构 目录将用户特定的名称映射到为文件和目录所分配的 inode 上,并且形成传统的命名层次。文件包含用户数据,用户数据中没有隐含任何限制或格式。也就是说,JFS 将用户数据看成是未解释的字节流。根植于 inode 基于盘区的寻址结构用来将文件数据映射到磁盘。聚集超级块和磁盘分配映射表、文件描述符和 inode 映射表、inode、目录以及寻址结构一起表示了 JFS 控制结构或元数据。 日志
JFS 从一开始就设计成完全集成了日志记录,而不是在现有文件系统上添加日志记录。JFS 的许多特性使之区别于其它文件系统。 日志处理 相反,JFS 使用原来为数据库开发的技术,记录了文件系统元数据上执行的操作(即原子事务)信息。如果发生系统故障,可通过重放日志并对适当的事务应用日志记录,来使文件系统恢复到一致状态。由于重放实用程序只需检查文件系统最近活动所产生的运行记录,而不是检查所有文件系统的元数据,因此,与这种基于日志的方法相关的文件系统恢复时间要快得多。 基于日志恢复的其它几个方面也值得注意。首先,JFS 只记录元数据上的操作,因此,重放这些日志只能恢复文件系统中结构关系和资源分配状态的一致性。它没有记录文件数据,也没有将这些数据恢复到一致状态。因此,恢复后某些文件数据可能丢失或失效,对数据一致性有关键性需求的用户应该使用同步 I/O。 面对媒体出错,日志记录不是特别有效。特别地,在将日志或元数据写入磁盘的期间发生的 I/O 错误,意味着在系统崩溃后,要将文件系统恢复到一致状态,需要耗时并且有可能强加的全面完整性检查。这暗示着,坏块重定位是任何驻留在 JFS 下的存储管理器或设备的一个关键特性。 JFS 日志记录的语义如下:当涉及元数据更改的文件系统操作--例如,unlink()--返回成功执行的返回码时,操作的结果已经提交到文件系统,即使系统崩溃了也可以发现。例如,一旦成功删除了文件,即使系统崩溃然后重启,它仍然是删除的并且不会再重新出现。 日志记录风格将同步写入日志磁盘引入每个修改元数据的 inode 或 vfs 操作。(对数据库专家而言,这是一种使用非剥夺缓冲区策略的仅重做的、物理残留映象、提前写的日志记录协议。)在性能方面,与依赖(多个)谨慎的同步元数据写操作以获得一致性的许多非日志文件系统相比,这种方法较好。但是,与其它日志文件系统相比,它在性能上处于劣势。其它日志文件系统,如 Veritas VxFS 和 Transarc Episode,使用不同的日志风格并且缓慢地将日志数据写入磁盘。在执行多个并行操作的服务器环境中,通过将多个同步写操作组合成单一写操作的组提交来减少这种性能损失。JFS 日志记录风格随着时间推移而得到不断改进,现在提供了异步日志记录,异步日志记录提高了文件系统的性能。 基于盘区的寻址结构 可变的块尺寸 动态磁盘 inode 分配 目录组织 第二种组织用于较大的目录,用按名字键控的 B+ 树表示每个目录。与传统无序的目录组织比较,它提供更快的目录查找、插入和删除能力。 稀疏和密集文件 稀疏文件允许把数据写到一个文件的任意位置,而不要将以前未写的中间文件块实例化。所报告的文件大小是已经写入的最高块位处,但是,在文件中任何给定块的实际分配,只有在该块进行写操作时才发生。例如,假设在一个指定为稀疏文件的文件系统中创建一个新文件。应用程序将数据块写到文件中第 100 块。尽管磁盘空间只分配了 1 块给它,JFS 将报告该文件的大小为 100 块。如果应用程序下一步读取文件的第 50 块,JFS 将返回填充了 0 的一个字节块。假设应用程序然后将一块数据写到该文件的第 50 块,JFS 仍然报告文件的大小为 100 块,而现在已经为它分配了两块磁盘空间。稀疏文件适合需要大的逻辑空间但只使用这个空间的一个(少量)子集的应用程序。 对于密集文件,将分配相当于文件大小的磁盘资源。在上例中,第一个写操作(将一块数据写到文件的第 100 块)将导致把 100 个块的磁盘空间分配给该文件。在任何已经隐式写入的块上进行读操作,JFS 将返回填充了 0 的字节块,正如稀疏文件的情况一样。
JFS 是完全 64 位的文件系统。所有 JFS 文件系统结构化字段都是 64 位大小。这允许 JFS 同时支持大文件和大分区。 文件系统大小 文件长度 可移动媒体
JFS 提供创建和维护文件系统的标准管理实用程序。 创建文件系统 检查/修复文件系统 当执行全部完整性检查时,检查/修复实用程序首要目的是要达到可靠的文件系统状态,以防止将来文件系统崩溃或故障,第二个目的就是面对崩溃时保存数据。这意味着为了达到文件系统的一致性,实用程序可能丢弃数据。具体而言,当实用程序在不做假设的情况下,无法获得所需信息以将结构上不一致的文件或目录恢复到一致状态时,就会废弃数据。当遇到不一致的文件或目录时,就废弃整个文件或目录,而不再试图保存任何部分。任何由删除受损目录所孤立起来的文件或子目录,都放在文件系统根下的 lost+found 目录中。 文件系统检查/修复实用程序重点考虑的因素之一是所需虚存数量。通常,这些实用程序所需的虚存数量由文件系统的大小决定,这是由于所需虚存主要用于跟踪文件系统中个别块的分配状态。随着文件系统增大,块的数量增多,用来跟踪这些块所需的虚存数量也随之增加。 JFS 检查/修复实用程序的设计区别在于其虚存需求由文件系统中文件和目录的数量(而不是由块的数量)所决定。对 JFS 检查/修复实用程序而言,每个文件或目录的虚存大约为每个文件或目录 32 字节,或者对于包含百万个文件和目录的文件系统而言,不论其文件系统大小,虚存需求都是大约 32 兆字节。如同所有其它的文件系统,JFS 实用程序需要跟踪块分配状态,但避免使用虚存方法,而是使用位于实际文件系统中的一小块保留工作区来实现。
因为在系统崩溃时,JFS 能提供快速文件系统重启时间,所以它是因特网文件服务器的关键技术。使用数据库日志处理技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态。而在非日志文件系统中,文件恢复可能花费几小时或几天。大部分文件服务器用户不能容忍与非日志文件系统相关的停机时间。只有通过转移到日志技术,这些文件系统才能避免需要检查文件系统的所有元数据才能验证文件系统或将其恢复到一致状态这一耗时的过程。
|