命令行艺术 | LinuxCN Mirror
Skip to content
返回

命令行艺术

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '\w+' | tr -d '`' | cowsay -W50

流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹。有些小窍门是很基础的,而有些是相当地特别、复杂、或者晦涩难懂。这篇文章不长,但是如果你可以使用并记得这里的所有内容,那么你就懂得很多了。

其中大部分最初出现Quora上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议。如果你看到一个错误,或者更好的某种东西,请提交问题或 PR!(当然,提交前请看看必读小节和已有的 PR/Issue。)

必读

范围:

注意:

基础

日常使用

  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
  # 在当前目录做些事
  (cd /some/other/dir; other-command)
  # 继续回到原目录
  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
  # 恢复备份文件 foo.bak -> foo:
  rename 's/\.bak$//' *.bak
  # 完整的文件名、目录名 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

系统调试

单行程序

这是将命令连成一行的一些样例:

sh 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 的差集
  awk '{ x += $3 } END { print x }' myfile
  find . -type f -ls
  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
function taocl() {
    curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
      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
  }

晦涩难懂,但却有用

更多资源

免责声明

除了非常小的任务外,其它都写出了代码供大家阅读。伴随力量而来的是责任。事实是,你在Bash中做的,并不意味着是你所应该做的!;)


via: https://github.com/jlevy/the-art-of-command-line

作者:jlevy 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出



Previous Post
27 个 Linux 下软件包管理工具 DNF 命令例子
Next Post
如何在 Linux 上使用 x2go 设置远程桌面