命令行的艺术

570阅读 0评论2015-11-20 sync_1521
分类:LINUX

熟练使用命令行是一种常常被忽视或被认为难以掌握的技能,但实际上,它可以提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时发现的一些关于命令行的使用的小技巧的摘要。有些小技巧是非常基础的,而另外一些则是相当复杂的甚至晦涩难懂的。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。

这里的大部分内容   于 ,但考虑到这里的人们都具有学习的天赋且乐于接受别人的建议,使用 Github 来做这件事是更佳的选择。如果你在本文中发现了错误或者存在可以改善的地方,请果断提交 Issue 或 Pull Request!(当然在提交前请看一下必读节和已有的 PR/issue)。

必读

涵盖范围:

注意事项:

基础

日常使用

      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
      set -euo pipefail trap "echo 'error: Script failed: see failed command above'" ERR
      # do something in current dir (cd /some/other/dir && other-command) # continue in original dir
      diff /etc/hosts <(ssh somehost cat /etc/hosts)
 TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes 
      stat -c '%A %a %n' /etc/timezone

文件及数据处理

      perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
      # Recover backup files foo.bak -> foo: rename 's/\.bak$//' *.bak # Full rename of filenames,directories,and contents foo -> bar: repren --full --preserve-case --from foo --to bar .
      uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt

系统调试

一行代码

一些命令组合的例子:

      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
      awk '{ x += $3 } END { print x }' myfile
      find . -type f -ls
      cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
      function taocl() {
        curl -s  | pandoc -f markdown -t html | xmlstarlet fo --html --dropdtd | xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" | xmlstarlet unesc | fmt -80
      }

冷门但有用

仅限 MacOS X 系统

以下是仅限于 MacOS 系统的技巧

更多资源

免责声明

除去特别微小的任务,记录下这些代码以便他人查看。责任往往伴随着能力,可以做并不意味着应该做。

上一篇:用GDB 调试Java程序
下一篇:ip排序