< Return to Video

Lecture 1: Course Overview + The Shell (2020)

  • 0:02 - 0:05
    好的,感谢大家的到来
  • 0:05 - 0:08
    这门课叫做《计算机科学教育中缺失的一课》
  • 0:08 - 0:11
    至少,我们选择这么叫这门课
  • 0:11 - 0:13
    如果你不是为了这门课坐在这, 那你是走错教室了。
  • 0:14 - 0:18
    我们将在这里待大约一个小时,来和大家谈谈这门课的内容
  • 0:18 - 0:23
    而且我想首先和你讲讲为什么我们开展这门课
  • 0:23 - 0:31
    这门课源于Anish和Jose和我在MIT的许多课程担任助教时所做的观察
  • 0:31 - 0:35
    我们作为计算机科学家都知道
  • 0:35 - 0:39
    计算机在处理重复任务和自动化方面非常出色
  • 0:39 - 0:41
    但我们经常没能意识到
  • 0:41 - 0:45
    其实有大量的工具可以让我们自己的学习过程更好
  • 0:46 - 0:48
    我们可以更高效地使用我们的电脑
  • 0:48 - 0:52
    因为我们可以让电脑成为我们的工具
  • 0:52 - 0:55
    而不只是用来开发网页或是软件那些
  • 0:57 - 0:59
    这门课就是试图解决这个问题,
  • 0:59 - 1:03
    试着向大家展示一些工具
  • 1:03 - 1:08
    这些工具可以在日常工作、研究和学习中发挥重要的作用
  • 1:09 - 1:15
    这门课程将教授大家
  • 1:15 - 1:18
    如何充分利用你已经了解的工具
  • 1:18 - 1:22
    同时也会介绍一些以前你不知道的工具
  • 1:22 - 1:24
    以及如何结合那些工具
  • 1:24 - 1:29
    使你变得更强大
  • 1:30 - 1:35
    这门课将分为11节1小时的讲座,
  • 1:35 - 1:38
    每个讲座都将讲一个特定的主题
  • 1:38 - 1:41
    我们的网站上把课程的主题都列出来了
  • 1:41 - 1:45
    以及每个讲座的日期
  • 1:45 - 1:47
    他们大多数是彼此独立的
  • 1:47 - 1:50
    所以你可以选择参加你感兴趣的讲座
  • 1:50 - 1:55
    但我们会假定你一直在跟进,这样当我们到后面的讲座时
  • 1:55 - 1:59
    我将不会从头到尾再教你bash了
  • 2:01 - 2:07
    我们也将把每一节课程的笔记和视频发布到网上
  • 2:07 - 2:11
    我们还没确定发布时间,但这将会在讲座结束之后
  • 2:12 - 2:14
    很明显视频只能在讲座结束之后上传了
  • 2:14 - 2:19
    这门课由本人John、坐在那边的Annesh来负责
  • 2:19 - 2:21
    还有Jose,他虽然现在不在这
  • 2:21 - 2:23
    但是会主讲明天的课程
  • 2:24 - 2:29
    请注意,我们将在这11个讲座中讲很多内容
  • 2:29 - 2:32
    所以我们会相对讲的快一些
  • 2:32 - 2:37
    如果有如何地方跟不上,请一定要打断我们
  • 2:37 - 2:40
    或者你希望我们可以多花点时间讲解某些东西
  • 2:40 - 2:43
    尽管提问打断我们,让我们知道
  • 2:43 - 2:51
    每一节课之后我们将在30号楼(计算机学院的中心)9楼有答疑时间
  • 2:51 - 2:55
    如果你来9楼的等候室,那个门楼那里
  • 2:55 - 3:00
    你可以来试试我们准备的每节课后的练习
  • 3:00 - 3:03
    或者问问课上我们讲的内容
  • 3:03 - 3:07
    或者其他关于高效利用你的电脑的方面
  • 3:09 - 3:13
    由于我们时间有限
  • 3:13 - 3:16
    我们不会讲所有的工具和细节
  • 3:16 - 3:21
    我们只会聚焦于那些有趣的工具,以及使用他们的有趣方法
  • 3:21 - 3:25
    我们不一定非要深入探讨关于它们是如何运作的细节
  • 3:25 - 3:27
    或者更精巧的用例
  • 3:27 - 3:30
    但如果你对这些有疑问,也请来问问我们
  • 3:30 - 3:33
    这里面许多工具我们都使用了很多年
  • 3:34 - 3:37
    我们也许能教你怎么用这些工具做一些有趣的东西
  • 3:37 - 3:40
    总之,充分利用这次上课的机会
  • 3:41 - 3:45
    这节课我不想讲得特别快
  • 3:45 - 3:50
    这节课上, 我会讲一些基础知识
  • 3:50 - 3:53
    在后面的课程中,我们会假定你都掌握
  • 3:54 - 3:56
    比如如何使用shell和终端
  • 3:56 - 3:59
    对于那些不熟悉这些工具的人,我将在讲座中进行解释
  • 3:59 - 4:03
    然后之后我们会很快讲到更高级的工具,以及如何使用它们
  • 4:03 - 4:07
    你可以从课堂笔记中看到我们将要讲的主题
  • 4:08 - 4:10
    那么,现在开始今天的讲座
  • 4:10 - 4:12
    我们今天讲到shell
  • 4:13 - 4:18
    当你熟悉的图形界面无法实现你想要的功能时
  • 4:18 - 4:23
    shell将成为你和电脑交互的主要方式之一
  • 4:24 - 4:28
    图形界面的功能是十分局限的
  • 4:28 - 4:32
    因为你只能使用图形界面上的按钮、滑块和输入框
  • 4:33 - 4:37
    而这些文本工具通常可以可以互相组合起来
  • 4:37 - 4:42
    可以使用许多不同的组合或编程方式实现自动化
  • 4:42 - 4:47
    我们将专注于这些基于命令行或者文本的工具
  • 4:47 - 4:51
    shell就是实现这些工作的主要工具之一
  • 4:51 - 4:53
    对于那些不熟悉shell的人
  • 4:53 - 4:57
    大多数平台都提供了某种形式的shell
  • 4:57 - 4:59
    在Windows上,通常是PowerShell
  • 4:59 - 5:02
    但也有其它Shell可用
  • 5:02 - 5:05
    在Linux上,你可以找到许多终端(Terminal)
  • 5:05 - 5:08
    终端是能显示Shell的窗口
  • 5:08 - 5:10
    你也能找到许多不同类型的Shell
  • 5:10 - 5:14
    其中最常见的Shell是BASH(the Bourne Again SHell)
  • 5:15 - 5:16
    因为BASH是最常见的Shell
  • 5:16 - 5:20
    所以它将会在我们的讲座中重点讲解
  • 5:20 - 5:22
    如果你使用Mac os,你可能也有BASH
  • 5:22 - 5:25
    但是打开终端的时候可能出现一个较旧的版本
  • 5:25 - 5:29
    如果你想跟随我们的课程学习,请随意选择平台
  • 5:29 - 5:33
    但是我们的教学是基于Linux的
  • 5:33 - 5:36
    尽管这些工具在所有平台都能使用
  • 5:37 - 5:41
    如果你不知道怎么安装终端和Shell
  • 5:42 - 5:45
    我们很乐意在办公时间为你展示
  • 5:45 - 5:48
    或者简单地在Google上搜索
  • 5:48 - 5:52
    “你的平台+终端”。 你就能找到教程
  • 5:55 - 5:58
    现在,当你打开终端
  • 5:58 - 6:00
    你会看到一个类似这个的界面
  • 6:00 - 6:04
    通常只有一行在顶部
  • 6:04 - 6:06
    这就是所谓的Shell提示符
  • 6:06 - 6:08
    你可以看到我的Shell提示符是这样的
  • 6:08 - 6:11
    上面有我的用户名,机器的名称
  • 6:11 - 6:15
    当前的路径(我们稍后会讨论路径)
  • 6:16 - 6:19
    还有闪烁的光标等待我的输入
  • 6:20 - 6:23
    这就是Shell提示符,你可以告诉Shell你想让它做什么
  • 6:25 - 6:27
    你也可以配置Shell提示符
  • 6:27 - 6:30
    当你在机器上打开它时,它可能不会完全像这样
  • 6:30 - 6:34
    如果你配置了一些东西,它可能会像这样
  • 6:34 - 6:36
    或者呈现出各种不同的样子
  • 6:37 - 6:41
    我们不会在这个讲座上太多地讨论自定义你的Shell
  • 6:41 - 6:45
    在这里我们只会讲怎么使用Shell做有用的事情
  • 6:47 - 6:51
    这是你与计算机进行文本界面交互的主要方式
  • 6:51 - 6:54
    在Shell提示符后面,你可以输入命令
  • 6:54 - 6:57
    命令通常是相对简单的东西
  • 6:58 - 7:01
    通常是像使用参数启动程序之类的事情
  • 7:01 - 7:03
    这是什么样子的呢?
  • 7:03 - 7:05
    我们可以执行一个date程序
  • 7:05 - 7:07
    输入date,然后按下回车键
  • 7:07 - 7:09
    然后它就会显示日期与时间
  • 7:10 - 7:12
    你也可以在运行程序的时候加上参数
  • 7:12 - 7:16
    这是改变程序行为的一种方式
  • 7:17 - 7:19
    例如,有一个程序叫“echo”
  • 7:19 - 7:22
    echo会直接输出你给它的参数
  • 7:22 - 7:27
    参数就是附加在命令后面以空格分割的东西
  • 7:27 - 7:29
    那么,我们输入 Hello
  • 7:29 - 7:31
    程序就会把hello输出
  • 7:31 - 7:32
    这也许并不令人意外
  • 7:33 - 7:35
    这就是参数的基础使用
  • 7:35 - 7:39
    你可能注意到参数是由空格分隔的
  • 7:40 - 7:43
    你可能会想,那我该怎么输入由多个单词组成的参数呢?
  • 7:43 - 7:44
    你可以用引号把参数包起来
  • 7:44 - 7:48
    这样你就可以做 echo "Hello World" 这样的事情
  • 7:49 - 7:51
    现在echo接收到一个字符串参数
  • 7:51 - 7:54
    包含空格的 "Hello World"
  • 7:55 - 7:57
    你也可以用单引号做这件事
  • 7:57 - 7:59
    单引号和双引号的区别
  • 7:59 - 8:02
    我们会在讲到Bash脚本的时候再讨论
  • 8:03 - 8:05
    你也可以转义单个字符
  • 8:06 - 8:11
    例如 Hello\ World,这样也是可以的
  • 8:11 - 8:14
    后面我们会讲到如何转义
  • 8:14 - 8:19
    和解析各种参数和变量的规则
  • 8:20 - 8:22
    希望你不会遇到太多问题
  • 8:22 - 8:26
    至少要记住空格分隔参数就好
  • 8:26 - 8:29
    例如,如果你想创建一个名为 my photos 的目录
  • 8:29 - 8:33
    你不能只输入 "mkdir my photos"
  • 8:33 - 8:36
    这样会创建两个目录,一个叫 my 另一个叫 photos
  • 8:36 - 8:37
    这可能不是你想要的
  • 8:39 - 8:43
    现在你可能会问的一个问题是
  • 8:43 - 8:45
    当我输入 date 或者 echo 的时候
  • 8:45 - 8:48
    Shell如何知道这些程序是什么
  • 8:48 - 8:51
    Shell怎么知道这些程序要做什么呢?
  • 8:52 - 8:57
    答案是,有一些内置程序,是你的计算机中自带的
  • 8:57 - 9:02
    你的机器可能自带终端
  • 9:02 - 9:05
    或者可能自带Windows资源管理器
  • 9:05 - 9:07
    或者可能自带某种浏览器
  • 9:07 - 9:11
    它还会附带一系列面向命令行的程序
  • 9:11 - 9:13
    这些程序存储在你的文件系统中
  • 9:14 - 9:18
    并且Shell有确定程序存储位置的方法
  • 9:18 - 9:21
    简而言之,搜索程序的方法
  • 9:21 - 9:27
    它通过一种名为环境变量的东西来实现这一点
  • 9:27 - 9:31
    环境变量是一种变量,就像编程语言中的变量一样
  • 9:32 - 9:35
    事实证明,Shell,特别是Bash(the Bourne Again SHell)
  • 9:35 - 9:37
    真的是一种编程语言
  • 9:37 - 9:42
    这里的提示符不仅能运行带有参数的程序
  • 9:42 - 9:47
    你还可以做 while循环、for循环、条件判断……
  • 9:47 - 9:51
    不仅如此,你甚至可以在Shell中定义函数、变量
  • 9:51 - 9:55
    我们将在下一节课中讲解这些内容,也就是Shell 脚本
  • 9:57 - 10:00
    现在,我们只看看这个特定的环境变量
  • 10:00 - 10:04
    环境变量是在启动Shell时设置的
  • 10:04 - 10:06
    不需要每次启动Shell都要设置的东西
  • 10:06 - 10:08
    有一堆这样的变量已经设置好了
  • 10:08 - 10:09
    例如你的主目录在哪里
  • 10:09 - 10:11
    你的用户名是什么
  • 10:11 - 10:16
    要查看搜索路径,有一个重要的变量,即路径变量
  • 10:16 - 10:19
    如果我输入 echo $PATH
  • 10:19 - 10:23
    它会显示路径变量的列表
  • 10:23 - 10:26
    Shell就是在这些路径里搜索程序的
  • 10:26 - 10:30
    你可能会注意到这是一个由冒号 : 分隔的列表
  • 10:30 - 10:32
    它可能有点长并且难以阅读
  • 10:32 - 10:37
    但是本质是,每当你输入程序名时
  • 10:37 - 10:41
    Bash就会在这个路径列表中搜索
  • 10:41 - 10:44
    并在每个目录中查找
  • 10:44 - 10:48
    与你输入的名称相同的程序或文件
  • 10:49 - 10:51
    因此,当我尝试运行 date 或者 echo 时
  • 10:51 - 10:53
    它将逐个遍历路径列表
  • 10:53 - 10:56
    直到在某个路径找到叫 date 或者 echo 的程序
  • 10:56 - 10:58
    然后运行对应的程序
  • 10:58 - 11:00
    如果我们想知道实际运行的是哪个程序
  • 11:00 - 11:02
    可以通过一个叫 which 的命令
  • 11:02 - 11:04
    我输入 which echo
  • 11:05 - 11:08
    它会告诉我,如果我想运行一个叫 echo 的程序
  • 11:08 - 11:10
    我会运行这一个
  • 11:10 - 11:14
    现在我们停下来来谈谈路径是什么
  • 11:14 - 11:19
    路径是一种描述计算机上文件位置的方式
  • 11:19 - 11:24
    在 Linux 和 Mac OS上,路径是由斜杠分隔的,正斜杠 /
  • 11:25 - 11:30
    你会看到这是根目录
  • 11:30 - 11:35
    斜杠在路径的开头,表示这是文件系统的顶部
  • 11:35 - 11:39
    然后进入到名为 usr 的目录
  • 11:39 - 11:42
    然后进入到名为 bin 的目录
  • 11:42 - 11:44
    然后查找名为 echo 的文件
  • 11:44 - 11:48
    在 Windows上,路径是由反斜杠 \ 分隔的
  • 11:49 - 11:54
    在 Linux 和 Mac OS 中,所有内容都属于根命名空间
  • 11:54 - 11:57
    所有的绝对路径都以斜杠开头
  • 11:58 - 12:01
    在 Windows 下,每个分区都有一个根目录
  • 12:02 - 12:06
    你可能会看到类似于 C:\ D:\
  • 12:06 - 12:14
    所以在Windows中,每个驱动器都有独立的文件系统路径层次结构。
  • 12:14 - 12:17
    在 Linux 和 Mac OS 中,它们都挂载到了同一个命名空间下
  • 12:18 - 12:21
    你可能已经注意到我说了绝对路径这个词
  • 12:21 - 12:23
    你可能不知道这是什么意思
  • 12:24 - 12:30
    绝对路径是能完全确定文件位置的路径
  • 12:30 - 12:34
    在这种情况下,这个路径能完全确定 echo 程序的位置
  • 12:34 - 12:38
    它提供了指向该文件的完整路径
  • 12:38 - 12:41
    但也存在相对路径的概念
  • 12:42 - 12:46
    相对路径是相对于当前位置的路径
  • 12:48 - 12:54
    确定当前位置的方法是输入pwd(print working directory)
Title:
Lecture 1: Course Overview + The Shell (2020)
Description:

more » « less
Video Language:
English
Duration:
48:17

Chinese, Simplified subtitles

Incomplete

Revisions