终端

更新时间:January 8, 2018

作者:Windson Yang

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处 (www.enginego.org)。

使用终端是我们开始编程的第一步,无论是运行程序,或者了解计算机的基本信息都需要用到。让我们愉快地和它玩耍把。

have_fun

基础版

什么是终端

图形界面

我们平时习惯了使用图形界面,当我们双击图标打开文件,计算机会先通过后续去猜测用什么程序运行文件,如果是图片(.jpg, .png)的话,计算机就会用图片浏览器打开,如果是可执行文件(macOS下的dmg后缀文件,Windows下的exe后缀文件),计算机会先找到该应用的在硬盘中的位置,然后根据可执行文件里面包含的信息(需要加载什么资源)来运行程序。

命令行界面

在计算机刚开始发展的时候,并没有那么容易上手的操作界面,大家都是通过一个黑乎乎的程序输入命令,然后等待计算机执行。

terminal

这时候运行程序或者打开文件,则需要使用不同的命令。例如打开当前路径下一个名为normal.txt的文本文件,可以用cat命令:

cat normal.txt

要打开图片的话,需要安装额外的软件来打开。要运行一个名为hello.py的python程序,在安装了python软件之后,在终端直接输入

python hello.py

回车之后就可以看到程序的输出结果了。其实图形界面与命令行界面运行的本质是一样的,运行程序或者打开文件:

  1. 安装对应的软件
  2. 指定程序运行(图形界面会根据后缀名帮你选择用什么程序来打开。)

亲自试试吧

你可以尝试先打开自己计算机的终端:

macOS: 同时按住”control”+“space”键,在搜索框输入termianl,”回车”

Windows 7:打开”开始”菜单,在搜索框里输入cmd,”回车”

Windows 8+:同时按住”win”+“Q”键,然后在弹出的搜索框里输入cmd,”回车”

成功打开之后,光标会停留在某一行。类似:

WindsondeMacBook-Air:~ windson$ |

因为和计算机交互需要遵守一定的指令规则,终端默认会运行一个程序,常见的是Bash(Bourne Again SHell)或者sh,你可以尝试输入一个命令,然后让终端执行。

macOS: “ls”+“回车”

Windows: “dir”+“回车”

输入回车之后,你会发现终端显示出了一些文字,仔细观察的话你会发现其实是你电脑中某个目录下的文件。ls/dir这个命令就是列出当前目录的文件。 当然这个命令还有很多参数,也就是你可以告诉计算机显示什么文件(隐藏/非隐藏),显示文件的详细内容(创建日期,大小),ls/dir只会调用一个常用的默认配置,假如你想把隐藏文件也显示的话,在终端输入

macOS: “ls -a”+“回车”

Windows: “dir -a”+“回车”

终端还有很多其他命令,例如输出当前路径

macOS: “pwd”+“回车”

Windows: “cc”+“回车”

或者ping命令可以用作网络诊断。

ping www.apple.com
64 bytes from 27.148.139.136: icmp_seq=0 ttl=54 time=21.056 ms
64 bytes from 27.148.139.136: icmp_seq=1 ttl=54 time=21.575 ms
64 bytes from 27.148.139.136: icmp_seq=2 ttl=54 time=20.989 ms

为什么要用终端

以前的计算机根本没有图形界面,只能对着这样黑乎乎的界面一行行输入指令,然后祈祷它不会出错。既然现在已经有图形界面了,为什么我们还需要学习用终端呢?

  1. 多功能,一般一个软件只会专注于一个功能,例如Word进行文字编辑,PowerPoint进行幻灯片编辑。你可以通过终端让计算机调用不同的程序完成多种多样的功能。

  2. 方便,对,一开始可能难以置信,但是使用终端确实比图形界面方便。你可能也会曾经遇过某一款软件更新,你找不到原本功能的按钮在哪里了。(例如某段时间Windows系统就把把“开始”菜单隐藏了。)使用命令(例如上面的ls/dir)的话即使系统如何更新都能显示当前目录的文件。

  3. 速度快,效率高。当你要连接远程的服务器的时候,如果连接的是图形界面,那么由于网络原因以及机器性能的影响,通常都会卡得一塌糊涂。不过如果只连接命令行界面的话,那么对于网络以及机器的性能要求就非常低,能够极大地提高工作效率。

  4. 高效,跨平台,跨机器,假如今天你要清理电脑,要删除一个大型文件夹中(可能包含子文件夹)超过90天之前创建的所有文件,一般来说的话你需要一个个文件夹找,然后对每个文件夹里的文件进行时间排序,再手动删除超过90天的,如果里面包含了100个文件夹那么会费很多时间,同时也容易出错。使用终端的话可以直接运行

    find /path/to/base/dir/* -type f -ctime +90 -delete
    

    而且只要跑同一个系统就不用担心命令会执行出错。

  5. 容易定制,使用指令的好处是很容易根据需求来修改,加入想删除的是所有超过90天之前创建的文件夹,只需要修改’-type f’为’-type d’即可,这里type代表的是指令针对什么类型操作,f是files,d这是directory。

programing

当然,要学会基本的指令也要花时间,例如一个find指令就有超过50个参数(这个命令比较特殊,参数比较多,我也常不记得,想用的时候搜索一下就好)。

如果你使用对的是Windows系统请注意,Windows有自己的一套特殊指令, 我不建议大家使用Windows来学习编程,相对来说macOX与Linux系统对开发者(也就是你)更加友好,使用他们会节约你很多时间。 不过这不代表你需要额外买一台电脑才能学习编程,只需要安装双系统或者虚拟系统就好,如果你没有接触过,没关系。我们会一步步介绍,你可以先在Windows中安装Docker,然后就可以在Windows系统中使用Linux了。

进阶版

Bash是如何实现的