流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 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
得到帮助。 - 学习使用
>
和0])[$RANDOM mod last()+1]" |
xmlstarlet unesc | fmt -80
}
晦涩难懂,但却有用
expr
:实施算术或布林操作,或者求正则表达式的值m4
:简单的宏处理器yes
:大量打印一个字符串cal
:漂亮的日历env
:(以特定的环境变量设置)运行一个命令(脚本中很有用)look
:查找以某个字符串开头的英文单词(或文件中的行)cut
和paste
以及join
:数据处理fmt
:格式化文本段落pr
:格式化文本为页/列fold
:文本折行column
:格式化文本为列或表expand
和unexpand
:在制表符和空格间转换nl
:添加行号seq
:打印数字bc
:计算器factor
:分解质因子gpg
:加密并为文件签名toe
:terminfo 条目表nc
:网络调试和数据传输socat
:套接字中继和 tcp 端口转发(类似netcat
)slurm
:网络流量可视化dd
:在文件或设备间移动数据file
:识别文件类型tree
:以树形显示目录及子目录;类似ls
,但是是递归的。stat
:文件信息tac
:逆序打印文件shuf
:从文件中随机选择行comm
:逐行对比分类排序的文件hd
和bvi
:转储或编辑二进制文件strings
:从二进制文件提取文本tr
:字符转译或处理iconv
或uconv
:文本编码转换split
和csplit
:分割文件units
:单位转换和计算;将每双周(fortnigh)一浪(浪,furlong,长度单位,约201米)转换为每瞬(blink)一缇(缇,twip,一种和屏幕无关的长度单位)(参见: /usr/share/units/definitions.units)(LCTT 译注:这都是神马单位啊!)7z
:高比率文件压缩ldd
:动态库信息nm
:目标文件的符号ab
:Web 服务器基准测试strace
:系统调用调试mtr
:用于网络调试的更好的路由追踪软件cssh
:可视化并发 shellrsync
:通过 SSH 同步文件和文件夹wireshark
和tshark
:抓包和网络调试ngrep
:从网络层摘取信息host
和dig
:DNS查询lsof
:处理文件描述符和套接字信息dstat
:有用的系统统计数据glances
:高级,多个子系统概览iostat
:CPU和磁盘使用率统计htop
:top的改进版last
:登录历史w
:谁登录进来了id
:用户/组身份信息sar
:历史系统统计数据iftop
或nethogs
:按套接口或进程的网络使用率ss
:套接口统计数据dmesg
:启动和系统错误信息hdparm
:SATA/ATA 磁盘操作/改善性能lsb_release
:Linux 发行版信息lsblk
:列出块设备,以树形展示你的磁盘和分区lshw
:硬件信息fortune
,ddate
和sl
:嗯,好吧,它取决于你是否认为蒸汽机车和 Zippy 引用“有用”
更多资源
- 超棒的shell: 一个shell工具和资源一览表。
- 严格模式 用于写出更佳的shell脚本。
免责声明
除了非常小的任务外,其它都写出了代码供大家阅读。伴随力量而来的是责任。事实是,你能在Bash中做的,并不意味着是你所应该做的!;)
via: https://github.com/jlevy/the-art-of-command-line
作者:jlevy 译者:GOLinux 校对:wxy
本文由 LCTT 原创翻译,Linux中国 荣誉推出