https://www.cnblogs.com/jiangzhaowei/p/3568226.html

Unix系统永远只会越来越多,开发人员就没必要特意学习它们的安装、配置和管理了,就全部交给集成人员吧。 
    但开发人员行走于Unix之间,依然有四样东西要熟练。

一、VI 
    虽然Unix上的文本编辑器已经越来越好用,但不在Console前面,网速也不够连XWindows的时候,还是要依赖VI。 
    回想VI的时代背景,发现VI对开发人员已经周到得离谱了,热键多到你双手不离键盘就能完成大半编辑工作。 
    建议自己制作一张自己认为有用,但又经常忘记的命令的sheet--参见附录A,拿出考试的力气把它背熟。

二、文本处理 
       开发人员在Unix下干得最多的除了Make和除Bug外,大概就是处理日志文件、业务文件的查错和统计了。 
       只会more和grep是不够的,开发老手会把awk,sed,grep,sort,uniq,wc,head,tail这些文本处理命令,通过管道玩具 式的拆卸拼装,最后完成一件原本以为非编写大段代码不可的工作。周到的参数设定,让人再一次感叹那个简单的年代,这样复杂到极致的设计.......怪不 得《Unix 编程艺术》的作者有那么骄傲的自觉。 
    
     比如车东的每月访问TOP10 统计脚本:

awk -F '\ t' '{ print   $ 4 }' 2004_2 . txt| grep chedong . com / tech / | uniq -c| sort  -rn|head - 10   
      以上命令的具体用法--参见附录B:文本处理命令小结,大概说明如下:

awk -F '\t' 将2004_2.txt访问纪录文件,用TAB分割,打印第4列 
grep chedong.com/tech 只列出chedong.com/tech笔记目录下的文档 
uniq -c 汇总计数 
sort -rn 按数值排序 
head -10 TOP 10 
         补充:这些命令几乎都支持正则表达式,学正则比较好的书是OReilly的《Mastering.Regular.Expressions.3rd 2006》

三、Bash Shell 编程 
    上面的纯粹命令管道拼装完成不了所有的事情,有时需要用Shell编程来配合调度。

编程是开发人员的天赋本能,不论什么语言,看看参考手册应该就能上手。

见《Bash新手指南中文版》 ,一份快速的Bash Shell编程指南。 
     
     更进一步,可以学习perl。

四、Make or AutoMake 
    用过Java的Ant后,想起Make就觉得很烦,很厌倦。总归还是会的,见《GNU Make 3.8.0 中文手册》

不过即使make已经精通到变态,每个人写出来的MakeFile还是千奇百怪,再看看开源项目们个个都是automake+autoconf了,我们自 己也长进一点吧。手工编写MakeFile.am,让auotomake变成MakeFile.in,再让用户./configure 生成最终的MakeFile。 
    
    autotools既能跨越平台,又是标准的写法,最重要的是,编写MakeFile.am的工作量比MakeFile少多了,只要简单的定义目标文件,先要处理的子目录,需要的源文件,头文件与库文件就可以了。 
    
    入门文章 
    使用AutoMake轻松生成Makefile 
    IBM DW:例解 autoconf 和 automake 生成 Makefile 文件

上面两文只作入门了解,实际的操作步骤--参见附录C:我的automake1.9步骤小结。

完整的免费电子书: 
《GNU Autoconf, Automake and Libtool》

另外,ACE里还贡献了一个更厉害的MPC(Makefile, Project, and Workspace Creator ),  自动的生成MakeFile.am或者VC的项目文件。

附录A:我的VI易忘命令手册 
    上下左右: 
    ctrl+u/d 上下半屏,ctrl+f/b,上下一屏 
    H/G屏幕头/文章末 ,0/$ 行首行末 
    
    增删改: 
    yy/dd 复制/删除 一行,p/P:将yy/dd的内容paste出来 
    I/A 在行首/末添加, o/O 开新行,d0/d$ 删除到行首,行末 
    u:undo

查: 
    ? 向前查找, n/N 重复上一次查找

附录B: 文本处理命令小结 
   awk:处理结构化的文本(每行以固定符号分成若干列),提取打印某些字段,如: 
    ls -l|awk '{print $1}'  --将ls-l结果的第一列打印出来 
    awk -F":" '{print $1"  "$6}' /etc/passwd ,将以:分割的/etc/passwd文件的第1,6列打印出来,中间以空格分开 
    详见IBM DW中国的AWK实例(共3篇) 或 Bash新手指南中文版第6章。

grep:过滤,大家用得最多的命令,支持正则表达式。参数有: 
    -i忽略大小写,-n显示line number,-c 统计在每个文件的出现次数,-l只显示符合的文件的名字。

sed:流编辑器,主要用于替换,如: 
    sed -e '1,10s/foo/bar/g' myfile2.txt 将1到10行的文本中的foo 替换成bar,s代表替换,g代表全局替换 
    支持正则的替换字符串,可以只替换某个范围内的内容。 
    用法不算简单,详见IBM DW中国的Sed实例(共3篇)或 Bash新手指南中文版第5章。 
    
    sort:排序,参数有: 
    -r逆序, -n 数字比较 , -M 日历比较 Feb,Dec, -f 忽略大小写 
    同样支持结构化文件,如 
    sort -t : -k 1,1 /etc/passwd,以: 分割,只按第1列排序 
    sort -t : -k 1,1 -k2.2,3.4 /etc/passwd ,以:分割,先按第1列排序,再按第2列的第二个字符到第3列的第4个字符排序。

uniq:去除重复行。 
    除了正常用法外,还有-c统计重复次数,和-u (唯一)和 -d (重复)两个参数,只显示唯一的和重复的行。

wc: 统计。 
    -l 行,-m 字符,-w 单词

附录C: 我的automake1.9步骤小结 
先编写MakeFile.am 
运行autoscan,生成configure.scan 
修改configure.scan,同时把文件改名为configure.in : 
去除AC_CONFIG_HEADER([config.h])那行 
加入AM_INIT_AUTOMAKE([1.9 foreign])  (其中1.9是automake的版本号) 
加入AC_PROG_LIBTOOL  (如果用libtool的话) 
检查AC_CONFIG_FILES,如果之前没有先写齐所有MakeFile.am,autoscan就不会帮你加入,需要自己手工补充。 
libtoolize (如果用libtool的话) 
aclocal 
autoconf 
automake --add-missing 
./configure 
make

大家需要编写的文件从Makefile转为了Makefile.am 和configure.in, ACE的Examples是很好的参考。

 
好文要顶 关注我 收藏该文  

最新文章

  1. 【转】HTML5 jQuery图片上传前预览
  2. Docker change directory
  3. python_way ,day25 wmi
  4. jQuery MD5加密实现代码
  5. PHP文件包含漏洞剖析
  6. 用PyInstaller把Python代码打包成单个独立的exe可执行文件
  7. CSS之后代选择器与多类选择器
  8. JavaScript 数组中查找符合条件的值
  9. Hadoop学习之HBase
  10. Codeforces 1082B Vova and Trophies(前缀+后缀)
  11. 遍历tr通过name获取对应值用作判断或者赋值
  12. python中的内置函数getattr()介绍及示例
  13. Oracle SQL调优记录
  14. 水晶报表Crystal 无效索引
  15. Ngnix 配置文件
  16. sql语句修改字段约束为不为空 并为其设置主键
  17. AES算法在Python中的使用
  18. 微信小程序——选中状态的切换
  19. kotlin使用anko在Android中实现Activity跳转,超优雅!
  20. nexus使用方法

热门文章

  1. 学习笔记之Web
  2. swagger页面详细讲解
  3. java修饰符在含义以及在eclipse下的显示
  4. Linux服务之DNS介绍
  5. Python 的版本控制
  6. 十七、Python面向对象之继承
  7. angularjs中设置select的选中项
  8. 201671030103 实验十四 团队项目评审&课程学习总结
  9. AQS 抽象队列同步器(Abstract Queued Synchronizer) 知识点
  10. Educational Codeforces Round 78 (Rated for Div. 2) A. Shuffle Hashing