Linux命令行的日常使用技术

有人说Linux的命令行就是一种艺术,由命令行形成的Linux系统的架构呈现丰富多变的样貌,这就才是Linux的魅力所在 。本文就来介绍一下Linux命令行的日常使用技术 。

Linux命令行的日常使用技术


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 。)
必读
范围:
本文是针对初学者和专业人员的,选题目标是覆盖面广(全都很重要)、有针对性(大多数情况下都给出具体实例)而简洁(避免不必要内容以及你能在其它地方轻松找到的离题的内容) 。每个小窍门在某种情形下都很必需的,或者能比替代品大大节省时间 。
这是为 Linux 写的 。绝大部分条目都可以同样应用到 MacOS(或者甚至 Cygwin) 。
主要针对交互式 Bash,尽管大多数小窍门也可以应用到其它 shell,以及常规 Bash 脚本 。
包括了“标准的”UNIX 命令以及那些需要安装的软件包(它们很重要,值得安装) 。
注意:
为了能在一篇文章内展示尽量多的东西,一些具体的信息会被放到引用页里 。你可以使用 Google 来获得进一步的内容 。(如果需要的话,)你可以使用 apt-get/yum/dnf/pacman/pip/brew 来安装这些新的程序 。
使用 Explainshell 来获取命令、参数、管道等内容的解释 。
基础
学习基本 Bash 技能 。实际上,键入man bash,然后至少浏览一遍所有内容;它很容易理解,没那么长 。其它 shell 也不错,但是 Bash 很强大,而且到处都可以找到(如果在你自己的笔记本上只学习 zsh、fish 之类,会在很多情形下受到限制,比如使用现存的服务器时) 。
至少学好一种基于文本的编辑器 。理想的一个是 Vim(vi),因为在终端中编辑时随时都能找到它(即使大多数时候你在使用 Emacs、一个大型的 IDE、或一个现代的时髦编辑器) 。
学习怎样使用 man 来阅读文档(好奇的话,用 man man 来列出分区号,比如 1 是常规命令,5 是文件描述,8 用于管理员) 。用 apropos 找到帮助页 。了解哪些命令不是可执行程序,而是 Bash 内置的,你可以用 help 和 help -d 得到帮助 。
学习使用 》 和 《 来进行输出和输入重定向,以及使用 | 来管道重定向,学习关于 stdout 和 stderr 的东西 。
学习 *(也许还有 ? 和 { 。..} )文件通配扩展和应用,以及双引号 “ 和单引号 ‘ 之间的区别 。(更多内容请参看下面关于变量扩展部分) 。
熟悉 Bash 作业管理:&,ctrl-z,ctrl-c,jobs,fg,bg,kill 等等 。
掌握ssh,以及通过 ssh-agent,ssh-add 等进行无密码验证的基础技能 。
基本的文件管理:ls 和 ls -l(特别是,知道ls -l各个列的意义),less,head,tail 和 tail -f(或者更好的less +F),ln 和 ln -s(知道硬链接和软链接的区别,以及硬链接相对于软链接的优势),chown,chmod,du(用于查看磁盘使用率的快速摘要:du -sk *) 。文件系统管理:df,mount,fdisk,mkfs,lsblk 。

推荐阅读