每个Linux用户都应该了解的命令行省时技巧

时间:2014-08-02 23:20:34   收藏:0   阅读:329

伯乐在线导读:有网友在问答网站Quora上提问:“有哪些省时小技巧,是每个Linux用户都应该知道的?” Joshua Levy 平常就在 Linux 平台工作,并且他积累了不少实用命令行技巧,他在回复中精选出一部分。对技术用户来说,这些技巧挺重要或实用,但知道的人并不多。下文略有点长,一般来 说,用户也不需要对全部内容都了解,但为了达到省时方便的目的,Joshua Levy  仍不遗余力做了校对,以保证列出的每一条都值得一读,前提是你是一位Linux重度用户。

为了获取文中提到的一个命令的更多信息,先试下“man <命令名称>”,在一些情况下,为了让这条命令可以正常执行,你必须安装相应的包,可以用aptitude 或者 yum。如果失败了,求助Google。

基础篇

日常使用篇

1
2
find . -name \*.py | xargs grep some_function
cat hosts | xargs -l{} ssh root@{} hostname
1
2
3
#在当前目录下做一些事情
cd /一些/另外的/目录;执行别的操作)
#继续在原来的目录下执行
1
2
3
4
5
6
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
StrictHostKeyChecking=no
Compression=yes
ForwardAgent=yes

数据处理篇

  • 把HTML转成文本:lynx -dump 标准输入
  • 如果要处理XML,xmlstarlet会很棒。
  • 对于Amazon S3,s3cmd 很方便(虽然还不太成熟,可能会有一些不太好的特性)。
  • 了解sort 以及 uniq(包括uniq的 -u 以及 -d 选项)。
  • 了解cut,paste,join 来操作文本文件。许多人使用cut但却忘了还有join。
  • 当你要在文件之间做集合的加,减,以及差运算时,用sort/uniq是非常方便的。假如a和b是两个已经去重的文本文件,那么运算起来会很快, 而且可以在任意大小的文件之间执行操作,甚至可以到GB字节大小。(sort不受内存限制,不过如果/tmp 在一个很小的root分区的话,你可能需要使用-T选项)
1
2
3
cat a b | sort | uniq > c   # c is a union b
cat a b | sort | uniq -d > c   # c is a intersect b
cat a b b | sort | uniq -u > c   # c is set difference a - b
  • 了解本地化会影响到许多命令行的工作,包括排序的顺序和性能。多数的linux安装包会把LANG或者其他一些本地化的变量设置为类似美国英语的 一个本地设置。这会让sort和其他一些命令运行起来慢很多。(注意即使你使用UTF-8编码的文本,你仍然可以放心的通过ASCII码的顺序来排序,这 一点用处很多)为避免i18n拖慢日常的工作,使用传统的基于字节的排序顺序,使用export LC_ALL=C(实际上,考虑在你的.bashrc里加进去)。
  • 了解基本的AWK和sed命令来做简单的数据处理。例如:对一个文本文件的第三列的数字求和:awk ‘{x += $3} END {print x}’。 这大概比同等的python速度要快三倍并且代码长度也会简短3倍。
  • 就地替换一个字符串在所有文件里所有出现的地方。
1
perl -pi.bak -e ‘s/old-string/new-string/g‘ my-files-*.txt
  • 使用shuf来随机打乱一个文件中的行或者选择一个随机的行。
  • 了解sort的各个选项。知道键值是如何工作的。特别是,当你要使用 -k1时,要格外注意:1只对第一个字段排序,-k1则意味着根据整个行排序。
  • 稳定排序(sort  -s)可能会有用。例如,先根据第二个字段排序,再根据第一个字段排序时,你可以使用sort -k1,1 | sort -s -k2,2
  • 如果你需要在bash里的命令行里写入一个tab键的字面值的话,按Ctrl+V, <tab> 或者$‘\t’ (后者更好,因为你可以复制、粘贴)。
  • 对于二进制文件,使用hd来进行简单的导出16进制表示或者用bvi进行二进制的编辑。
  • 对于二进制文件,strings(还有grep等等)可以让你发现文件的字节位(0101).要对文件转编,可以试下iconv,或者如果要使用 更高级的用法,试试uconv,它可以支持一些高级的Unicode方面的事情。比如,这条命令可以将重音都小写,并且去掉(通过扩展并且丢掉):
1
uconv -f utf-8 -t utf-8 -x ‘::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ‘ < input.txt > output.txt
  • 要将文件切片,可以试试split(根据大小切分)或者csplit(根据模式切分)。

系统调试篇

  • 对于web调试来说,curl和curl -l会有用,以及和wget相同的那部分功能。
  • 如果想了解磁盘/cpu/网络的状态,可以使用iostat,netstat,top(更好一些的话,用htop),以及(尤其是)dstat, 对于想快速了解系统当前正在发生的事情,非常的方便。如果想了解内存当前的状态,可以使用free以及vmstat,还要了解各项输出的含义。特别值得一 提的是,你要知道“cached”的数值是linux内核保留用来做文件缓存的空间的大小,所以真正可用的有效内存是“free”项的对应值。
  • java的系统调试则完全是另外一回事,但在Sun以及其他的JVM上有一个简单的技巧,就是你可以运行kill -3 <pid> ,得到一个完整的栈调用轨迹以及堆使用的总体情况(包括产生的垃圾回收细节,这里面包含有很多的信息),会被定向到标准错误或者日志。
  • 使用mtr作为更好的网络追踪,识别网络存在的问题。
  • 要查看一个磁盘是否是满的,ncdu要比一般用的“du -sk *”要快。
  • 要查看哪些socket或者进程在占用带宽,试试iftop或者netlogs。
  • ab 工具(随apache的安装包一起发布)对于检测网络服务器的性能很有帮助,对于更加复杂的压力测试,可以试下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(比如硬件或者驱动的问题)。

每个Linux用户都应该了解的命令行省时技巧,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!