Linux命令行的艺术

jopen 9年前

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

 

必读

涵盖范围:

  • 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到覆盖面广(尽量包括一切重要的内容),具体(给出最常见的具体的例子)以及简洁(避免一些不必要的东西以及一些偏题的可以在其他地方翻阅到文献的东西)。 每个小技巧在某个特定情境下都是基本的或能够显著地节约时间。
  • 本文为 Linux 所写,除了仅限 MacOS X 系统节。其它节中的大部分内容都适用于其它 Unix 系统或 MacOS 系统,甚至 Cygwin。
  • 本文关注于交互式 Bash,尽管很多技巧也适用于其他 shell 或 Bash 脚本。
  • 本文包括了“标准的”Unix 命令和需要安装特定包的命令,只要它们足够重要。

注意事项:

  • 为了能在一页内展示尽量多的东西,一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 apt-getyumdnfpacmanpipbrew(以及其它合适的包管理器)来安装新程序。
  • 使用 Explainshell 去获取相关命令、参数、管道等内容的解释。

基础

  • 学习 Bash 的基础知识。具体来说,输入 man bash 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用,但 Bash 功能强大且几乎所有情况下都是可用的 ( 学习 zsh,fish 或其他的 shell 的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时)。
  • 学习并掌握至少一个基于文本的编辑器。通常 Vim (vi) 会是你最好的选择,因为在终端里进行随机编辑 Vim 真的毫无敌手,哪怕是 Emacs、某大型 IDE 甚至时下非常流行的编辑器。
  • 学会如何使用 man 命令去阅读文档。学会使用 apropos 去查找文档。了解有些命令并不对应可执行文件,而是Bash内置的,可以使用 help 和 help -d 命令获取帮助信息。
  • 学会使用 > 和 < 来重定向输出和输入,学会使用 | 来重定向管道。明白 > 会覆盖了输出文件而 >> 是在文件未添加。了解标准输出 stdout 和标准错误 stderr。
  • 学会使用通配符 * (或许再算上 ? 和 []) 和引用以及引用中 ' 和 " 的区别。
  • 熟悉 Bash 任务管理工具:&ctrl-zctrl-cjobsfgbgkill 等。
  • 了解 ssh,以及学会通过使用 ssh-agentssh-add 等命令来实现基本的无密码认证。
  • 学会基本的文件管理:ls 和 ls -l (了解 ls -l 中每一列代表的意义),lessheadtail 和 tail -f (甚至 less +F),ln 和 ln -s (了解硬链接与软链接的区别),chownchmoddu (硬盘使用情况概述:du -hk *)。 关于文件系统的管理,学习 dfmountfdiskmkfslsblk。知道 inode 是什么(与 ls -i 和 df -i等命令相关)。
  • 学习基本的网络管理:ip 或 ifconfigdig
  • 熟悉正则表达式,以及 grepegrep 里不同参数的作用,例如 -i-o-v-A-B 和 -C,这些参数是值得学习并掌握的。
  • 学会使用 apt-getyumdnf 或 pacman (取决于你使用的 Linux 发行版)来查找或安装软件包。并确保你的环境中有 pip 来安装基于 Python 的命令行工具 (接下来提到的部分程序使用 pip 来安装会很方便)。

日常使用

  • 在 Bash 中,可以使用 Tab 自动补全参数,使用 ctrl-r 搜索命令行历史。
  • 在 Bash 中,可以使用 ctrl-w 删除你键入的最后一个单词,使用 ctrl-u 删除整行,使用 alt-b 和 alt-f 以单词为单位移动光标,使用 ctrl-a 将光标移至行首,使用 ctrl-e 将光标移至行尾,使用 ctrl-k 删除光标至行尾的所有内容,使用ctrl-l 清屏。键入 man readline 查看 Bash 中的默认快捷键,内容很多。例如 alt-. 循环地移向前一个参数,以及 alt-* 展开通配符。
  • 你喜欢的话,可以键入 set -o vi 来使用 vi 风格的快捷键,而 set -o emacs 可以把它改回来。
  • 为了方便地键入长命令,在设置你的编辑器后(例如 export EDITOR=vim),键入 ctrl-x ctrl-e 会打开一个编辑器来编辑当前命令。在 vi 模式下则键入 escape-v 实现相同的功能。
  • 键入 history 查看命令行历史记录。其中有许多缩写,例如 !$(最后键入的参数)和 !!(最后键入的命令),尽管通常被 ctrl-r 和 alt-. 取代。
  • 回到上一个工作路径:cd -
  • 如果你输入命令的时候改变了主意,按下 alt-# 来在行首添加 #,或者依次按下 ctrl-a, #, enter。这样做的话,之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。
  • 使用 xargs ( 或 parallel)。他们非常给力。注意到你可以控制每行参数个数(-L)和最大并行数(-P)。如果你不确定它们是否会按你想的那样工作,先使用 xargs echo 查看一下。此外,使用 -I{} 会很方便。例如: