1.5 命令行界面
命令行界面(Command-line interface),经常缩写为 CLI,亦即用户输入命令的地方。一旦用户将命令输入完毕并加以提交后,后续对命令的解析以及执行的任务都由 Shell 来完成。
与 CLI 相对的是 GUI,即 Graphical user interface,意为图形用户界面,它采用图形化的方式让用户与计算机进行交互。因其具有容易使用的优点,包括 Linux、macOS、Windows 等在内的现代操作系统无一例外都提供了图形用户界面。
既然图形用户界面要比命令行界面更加易用,那么是否说明可以完全抛弃命令行界面呢?答案是并非如此。事实上,有经验的用户尤其擅长使用命令行界面,其理由至少包括以下几个方面。
1.5.1 功能强大
让我们先来看一个例子:
xiaodong@codeland:~$ history |
awk '{CMD[$2]++;count++;}END \
{ for (a in CMD)print CMD[a] " " \
CMD[a]/count*100 "% " a;}' |
grep -v "./" |
column -c3 -s " " -t |
sort -nr |
nl |
head -n10
在作者的 macOS 系统上执行这条命令后,其输出结果如下:
1 1348 14.3771% cd
2 1034 11.0282% l
3 838 8.93771% git
4 569 6.06869% ssh
5 513 5.47142% cat
6 405 4.31954% vim
7 372 3.96758% brew
8 360 3.83959% scp
9 265 2.82637% rm
10 264 2.8157% grep
这条命令虽然看起来似乎有些“吓人”,因为它由 history、awk、grep、column、sort、nl、head 等 7 个命令组成,并通过管道符(|)串接在一起;然而其结果却颇为有趣。它将作者平时在命令行中执行的所有命令都进行了统计,最终展示出 10 个最常用的命令,并相应列出每个命令的使用次数和所占百分比。
管道符将前一命令的输出作为后一命令的输入,使这些表面上不相干的命令进行协同工作,犹如搭积木一般。这是命令行的真正威力所在。
1.5.2 灵活高效
再看另一个例子,假如我们打算从 photos 目录中找出今年三月份拍摄的照片,并将其文件名称保存到 mar_photos.txt 这个文本文件中。在图形用户界面中,首先,我们可能会打开一个文件管理器(在 Linux 下也许是 GNOME Files,macOS 中则是 Finder)。接着,导航到 photos 这个目录,同时切换成详细视图模式。然后,我们睁大双眼逐一找出符合要求的照片。可是,现在怎么把照片的文件名称写到文本文件中呢?我们当然可以直接输入,或者想省点力使用复制和粘贴也行。要是找出的文件数量比较多,那可绝对是体力活。
但是,如果在命令行下,那么我们只需通过执行一条命令即可达到目的: