Linux用户必知之节省工作时间的技巧(下)

来源:互联网 发布:excel两列相同数据筛选 编辑:程序博客网 时间:2024/04/29 19:28

翻译完了,相信稍微有点经验的程序员,肯定会发现作者总结的很多工具还是很实用的,翻译过来,只想和大家分享。当然,译者英文水平有限,翻译不妥之处在所难免,还望大家批评指正。后续,我会结合自己的工作实践,将其中实用的工具,以示例的方式再总结,好好学习,天天向上!

希望大家多多支持血蝙蝠

前章地址:Linux用户必知之节省工作时间的技巧(上) 

数据处理:

  • 掌握sort和uniq(包括uniq命令的-u和-d选项)
  • 掌握操作文本文件的cut,paste和join命令。很多人用过cut但忘记了join
  • 通过sort和uniq对文本文件做集合的交、并、差等操作是很有用的。假设a和b是两个已经去重的文本文件。以下情况快速高效,可以作用于任何大小的文件。(sort命令不受内存限制,如果/tmp挂在在一个很小的root分区上,你可以使用-T选项来解决问题)

cat a b | sort | uniq > c    # c 是 a 和 b 的并集

cat a b | sort | uniq -d > c # c 是 a 和b的交集

cat a b b | sort | uniq -u > c # c 是a-b差集

  • 要知道locale命令影响很多命令行工具,包括sort的顺序和性能。大多说Linux发行版都会设置LANG或者其他本地变量为本地语言设置,比如US ENGLISH。这可能会使sort或者其他命令运行速度降低好几倍。(注意,使用utf-8可以安全地以ASCII码序进行排序)。关闭i18n的支持,采用传统的按字节序排序的方式,可以加快排序。使用方法是LC_ALL=C(通常考虑将这个设置放在.bashrc文件中).
  • 掌握用于数据处理的基本awk和sed命令。举例来说,求取第三个字段值得累加和:awk '{ x += $3 } END {print x}'. 这条命领可能比等价的python指令快3倍,而代码量却可能是python的1/3.
  • 替换一个文件中某个字符串的所有出现:

perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt

  • 使用shuf命令来打乱一个文件内的所有行和随机选取文件中的任意行
  • 掌握sort的选项。掌握怎么按关键字查询(比如-t和-k选项)。特别地,sort -k1,1是按第一个字段排序所有行,而sort -k1是按一整行排序。
  • 稳定排序可以使用sort -s。举例来说,先使用第一个字段排序,第一个字段相同则按第二个字段排序,可以使用如下命令:sort -k1,1 | sort -s -k2,2
  • 如果想在命令行输入制表符tab(比如使用sort的-t参数),可以使用ctrl-v或者直接键入$'\t'。
  • 对于二进制文件,可以使用hd进行16进制显示其内容,或者使用bvi来编辑二进制文件。
  • 同样是对于二进制文件,strings命令(结合grep命令等)可以用来查找二进制中的文本段。
  • 转换文本文件的编码,可以使用iconv命令。或者使用uconv命令来处理更为高级的转码任务。比如,下面的命令将大写转为小写,并去掉重音符号:

uconv -f utf-8 -t utf-8 -x ’::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt output.txt

  • 切分文件可以使用split和csplit命令。前者按文件大小(size)切分,后者按模式规则(pattern)切分。
系统调试

  • 通过以下命令可以快速了解磁盘,cpu和网络的状态:iostat,netstat,top/htop,dstat。
  • 要了解内存的状态,可以使用free和vmstat命令。特别地,cached的值是Linux内核为文件缓存保留的内存部分,有效的内存值是free的值。
  • java系统调试是件截然不同的事情,但是一个简单的技巧是,在sun公司或者其他的JVM上,你可以使用kill -3来打印栈追踪和堆的摘要信息(包括垃圾收集器的细节信息)到标准错误或者日志文件。
  • mtr命令比traceroute还要强大,可以用来识别网络中出现的问题。
  • 查找磁盘为什么满了,ncdu命令比“du -sk *”要节省时间。
  • 查看哪个套接字或者进程占着带宽,可以使用iftop或者nethogs命令。
  • ab工具是Apache附带的web服务器性能应急工具,要进行更复杂的负载测试,可以使用siege命令。
  • 针对更为棘手的网络调试,可以使用wireshark或者tshark。
  • 掌握strace和ltrace命令。如果一个程序挂掉了,你却不知道原因,后者你想了解程序的性能,这两个工具非常有用。配置选项-c,和绑定一个运行中的进程的能力-p。
  • 掌握ldd检查动态链接库。
  • 掌握如何用gdb调试一个运行中的进程,以及获取进程的栈信息。
  • 使用/proc,在调试在线问题时很有用。比如,/proc/cpuinfo,/proc/xxx/cwd,/proc/xxx/exe,/proc/xxx/fd/,/proc/xxx/smaps.
  • 在调试过去为什么会出问题的内容是,sar命令很有用。该命令可以显示cpu、内存、网络等的历史统计信息。
  • 对于进一步的系统或性能分析,请查看stap(systemtap)和perf命令。
  • 如果出现硬件或驱动的某些奇妙问题,可以尝试使用dmesg命令。

英文原文PDF下载地址:http://download.csdn.net/detail/challenge_c_plusplus/6542415

其它类似内容: 《掌握Sed命令》

                                《掌握Awk命令》