实验0:介绍,设置
截止日期:1月27日星期二晚上11:59:59 PT
你好!欢迎来到CS61C!很高兴你能加入我们:D 请注意,我们将演示本机的安全功能。 这个实验可能有点长,但请仔细阅读;它涵盖了许多重要内容,将为你完成本课程的其余部分做好准备!
信息: 如果你在完成本作业时遇到问题,可以在Ed上提出私人问题。这是对正常政策的例外,因为本实验主要是设置工作。
我们还有一份常见错误列表。在Ed上发帖或前往办公时间之前,请先查看!
练习1:访问服务
不幸的是,本课程的作业确实需要一些(有时很无聊的)设置。让我们在学期开始前把这些搞定。以下是检查清单:
-
- 如果你无法观看,请前往https://youtube.com/channel_switcher并点击你伯克利账户的YouTube频道(你可能有多个频道)。
访问Gradar
- 前往 Gradar 并用你的伯克利Google账户登录。
- 在主屏幕上,确认你可以看到
CS 61C Spring 2026课程。 - 在右上角,点击你的名字,然后点击
个人资料。 - 在"GitHub: 登录"下,点击
链接账户并用你想用于61C的GitHub账户登录。
注意:校园VPN
不幸的是,某些地区和组织会阻止访问我们的教育材料和工具。如果你由于互联网访问限制而无法访问任何服务或资源,可以使用伯克利校园VPN(你将在本实验稍后安装)。
练习2:安装软件
以下子部分包含特定操作系统的说明。请使用适合你特定操作系统的说明;错误操作系统的命令可能会破坏你的系统!
Ubuntu Linux
Ubuntu 18.04+在默认APT仓库中包含所需程序。以下命令将自动安装它们:
任何终端和任何现代Web浏览器都足以用于61C。
macOS
-
- 我们建议使用
.pkginstaller. - 如果您有Apple Silicon CPU,您需要
aarch64版本。否则,您可能有Intel/AMD CPU,所以您需要x64版本。
- 我们建议使用
- 如果没有打印任何内容,您的安装应该是正常的
- 如果抛出证书错误(例如
certificate verify failed: unable to get local issuer certificate):- 在Finder中,打开您的系统应用程序文件夹
- 打开Python安装文件夹(例如
Python 3.11) - 运行其中的
Install Certificates.command程序(右键单击 => 打开) - 关闭您现有的终端窗口并打开一个新的终端
- 再次运行
python3SSL检查命令
Windows
-
- 如果安装程序询问,请选择
"Use Windows' default console window"选项而不是"Use MinTTY"
- 如果安装程序询问,请选择
-
- 对于61C,请使用Git Bash而不是
cmd.exe或Powershell
- 对于61C,请使用Git Bash而不是
-
- 我们建议使用
.msiinstaller.
- 我们建议使用
如果它打开Microsoft商店,则可能未安装Python。
其他操作系统(Other OSes)
如果您使用的是其他Linux发行版(Alpine/Arch/Asahi/Debian/Fedora/NixOS/etc.),我们的大多数程序在存在依赖项的情况下应该可以正常运行,但我们没有资源在其他发行版上进行测试。如果您遇到困难,可以尝试在Ed上发帖或访问OH,但请注意工作人员对这些系统的经验有限。
如果您使用*BSD、HaikuOS、TempleOS、ToaruOS或其他系统,我们不幸没有资源来支持这些平台。如果程序无法运行,您可以使用教学计算机(或其他支持的平台)。
练习3:教学账户和服务器(Hive机器!)
Hive机器是您将用于课程作业的教学服务器。您可以使用SSH(安全外壳协议(Secure SHell Protocol))连接到这些机器。让我们进行设置!
您可以使用Hivemind检查每台hive机器是否繁忙或离线。请注意,Hivemind显示不以hive开头的机器,例如ashby或cedar;这些机器不适用于61C课程。
警告(Warning): 校园内的CalVisitor WiFi网络会阻止SSH连接。在处理61C相关事务时,请确保您不在CalVisitor网络上。
校园VPN设置
按照此处的说明安装和设置bSecure Remote Access VPN。请确保在安装过程中没有错误。从现在开始,我们将此VPN称为"校园VPN"。
在此实验的其余部分,请保持连接到校园VPN。
这是我们第一次使用它,所以如果您遇到任何问题,请在Lab 0 Ed帖子中跟进或在Ed上提出私人问题。
教学账户设置(Instructional Account Setup)
-
- 您将需要密码来完成此练习的其余部分。
- 在您注册/候补之后可能需要一两天才能创建账户。
- 如果您是待处理的并行注册学生,或填写了"稍后注册计划"表格,我们正在为您请求账户,您应该在提交申请或表格后5天内能够创建账户。
-
请记住将
cs61c-???替换为您的教学账户用户名。输入密码时,什么都不会显示;这在许多终端程序中是正常的。- 如果您收到
Permission denied, please try again,请检查您是否输入了正确的用户名/密码。如果您是复制粘贴密码,请尝试手动输入。 - 如果您收到"
Connection timeout"或其他连接错误,请确保您不在CalVisitor或其他阻止SSH的网络上,并确保您已连接到校园VPN。 - 如果您收到"
Connection refused"或"Connection timeout"或其他连接错误,该机器可能暂时关闭或拒绝连接。尝试使用另一台hive机器(例如将hive2替换为hive3)。
- 如果您收到
-
- 请输入您的伯克利(Berkeley)电子邮件。 请仔细检查您的电子邮件、SID和姓名的拼写。
-
如果信息不正确,请运行:
-

如果您的提示符是白色的,请运行:
&&然后,从步骤2重新开始。
使用快捷方式连接Hive机器
我们可以配置SSH主机别名,这将允许我们使用ssh hive#而不是ssh cs61c-???@hive#.cs.berkeley.edu。
本节还将向您介绍Vim,这是一个基于终端的文本编辑器。
请记住将# Begin CS61C hive machine config v2.0.3 Host s330-? s330-?? hive? hive?? HostName %h.cs.berkeley.edu Match Host *.cs.berkeley.edu,*.eecs.berkeley.edu Port 22 User cs61c-??? ServerAliveInterval 60 # End CS61C hive machine config v2.0.3cs61c-???替换为您的教学账户用户名。将Host s330-? s330-?? hive? hive??中的问号保留不变。
将来(完成本练习后),您可以运行ssh hive#连接到hive机器。共有30台hive机器,从hive1到hive30;使用哪一台都没关系,因为它们共享相同的文件。
无密码连接Hive机器(Connecting to Hive Machines Without a Password)
记下您的SSH密钥的位置,稍后在实验中会用到。|
您应该看到那个红黄提示符,而无需输入您的教学账户密码。
如果您读累了,可以休息一下;有人想玩贪吃蛇吗?
练习4:GitHub设置(GitHub Setup)
配置本地机器(Configuring Your Local Machine)
让我们配置您的本地用户账户,使用SSH密钥认证到GitHub。
它应该类似于以下内容(长度可能不同):ssh-ed25519 AAAAC3NzaC1lZDI1N6jpH3Bnbebi7Xz7wMr20LxZCKi3U8UQTE5AAAAIBTc2HwlbOi8T some_comment_here-
- 将标题设置为有助于您记住密钥所在设备的内容(例如
CS61C Laptop)。
- 将标题设置为有助于您记住密钥所在设备的内容(例如
如果一切顺利,您应该看到类似以下内容:
(翻译:您好用户名!您已成功通过身份验证,但GitHub不提供shell访问权限。)Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
将来,当克隆需要认证的仓库(repo)时(例如您接下来要创建的私有实验室仓库),您应该使用SSH仓库URL(如git@github.com:USERNAME/REPO_NAME.git)而不是HTTPS仓库URL(如https://github.com/USERNAME/REPO_NAME.git)。例如,在https://github.com/61c-student/sp26-lab-ghost.git中,名为sp26-lab-ghost的仓库位于61c-student用户/组织下,因此SSH克隆URL将是git@github.com:61c-student/sp26-lab-ghost.git。
配置您的教学账户
让我们配置您的教学账户,使用SSH密钥向GitHub进行身份验证。
再次提醒,您应该能看到红黄色提示符。
记下您的SSH密钥的位置,稍后在实验中会用到。|
它应该类似于以下内容(长度可能不同):ssh-ed25519 AAAAC3NzaC1lZDI1N6jpH3Bnbebi7Xz7wMr20LxZCKi3U8UQTE5AAAAIBTc2HwlbOi8T your_email@example.com-
- 将标题设置为有助于您记住此密钥在您的教学账户上的内容(例如
CS61C Hive)。
- 将标题设置为有助于您记住此密钥在您的教学账户上的内容(例如
如果一切顺利,您应该看到类似以下内容:Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
练习5:Git乐趣
在本练习中,您将获得实验室的Git仓库("repo")并使用各种Git命令。
本练习的说明假设您使用Vim编辑文本文件。有关vim的快速入门指南,请参阅附录中的Vim基础部分。
如果您想使用其他文本编辑器,请直接使用。但是,工作人员将无法为您提供vim以外的编辑器的支持。一些示例:
- Nano: simple and beginner-friendly compared to Vim. It provides a helpful list of commands at the bottom of the interface (the ^ means the Ctrl key). Ships with many UNIX distributions (e.g. macOS, Ubuntu Linux). Open with
nano file.txt. - Visual Studio Code (VSCode):精美的图形文本编辑器。它有一些非常有用的扩展,包括远程SSH扩展,允许您在VSCode本身中通过SSH编辑文件,而不是使用基于终端的编辑器。但是,过去一些学生遇到过复杂的设置问题。
在来实验室1之前,请确保您熟练使用所选文本编辑器在hive上编辑文件。
获取您的实验室仓库
访问Gradar,启动名为Labs的作业,并创建一个仓库。这将是您在整个学期中进行任何实验室工作的个人仓库。
配置Git(Configuring Git)
在我们开始之前,让我们告诉Git您是谁。这些信息将用于签名和记录您的提交。如果您以前设置过Git,您可能不需要在本地机器上执行此操作,但您需要在您的教学账户上执行此操作。
在您的本地机器上,告诉Git您的姓名和电子邮件:
SSH连接到hive机器,并在您的教学账户上运行相同的命令。
克隆您的仓库
Git有"本地"和"远程"仓库的概念。本地仓库位于您的终端会话所在的位置;如果您在SSH会话中,本地仓库是hive机器上的一个文件夹;如果您的终端会话在本地机器上,本地仓库位于本地机器的文件系统上。远程仓库(例如GitHub仓库)通常托管在互联网上。
您在GitHub上有一个实验室仓库,但本地没有(如果网站能自动访问您的本地文件,那会有点令人担忧)。要获取此仓库的本地副本,您可以使用git clone,它将根据远程仓库的信息创建本地仓库。
SSH连接到hive机器。在hive机器上,将仓库克隆到名为labs的文件夹中:
请记住将sp26-lab-USERNAME替换为您的实际仓库名称!
探索您的仓库:Git
进入这个新文件夹(cd)。列出所有隐藏文件(ls -a)。您看到一个隐藏的文件/文件夹了吗?
确实有一个名为.git的文件夹。它的存在表明当前文件夹(包含.git的文件夹)持有Git仓库。
查看您仓库当前的远程仓库和状态:
git clone已经发挥了一些神奇的作用——有一个名为origin的远程仓库,其URL指向您在GitHub上的实验室仓库!您在一个名为main的本地分支上,它"跟踪"origin/main(origin远程仓库上的main分支)。
注意:GitHub现在使用main作为默认分支名称,而不是master
在整个学期中,课程工作人员可能会更新起始代码以修复错误或发布新实验。要接收这些更新,您需要添加另一个远程仓库。
注意:我们的起始仓库是公开的,您没有写访问权限,因此在这种情况下您实际上应该使用未经身份验证的HTTPS克隆URL!
如果您想拉取更新后的起始代码,您需要执行以下命令:
现在就试试吧!由于您刚刚开始实验,可能还没有更新可以拉取。
探索您的仓库:文件(Exploring Your Repo: Files)
您的labs仓库结构如下:
labs/ (current directory)
lab00/
code.py
gen-debug.sh
get-ssh-key.sh
init.sh
tools/
download_tools.sh
README.md
从labs仓库开始,运行ls。输出应该类似于:
~/labs $ ls
lab00 README.md tools
现在,进入lab00文件夹(cd),然后列出其文件。输出现在应该如下所示:
~/labs/lab00 $ ls
code.py gen-debug.sh get-ssh-key.sh init.sh
在路径中,.本身指的是当前目录。以下命令将列出lab00文件夹中存在的文件:
~/labs/lab00 $ ls
~/labs/lab00 $ ls .
~/labs/lab00 $ ls ./././.
您如何返回到整体labs文件夹?在路径中,单独的..指的是父文件夹。
~/labs/lab00 $ ls ..
lab00 tools
~/labs/lab00 $ ls ../..
<whatever's in your home folder, probably many files>
~/labs/lab00 $ cd ..
~/labs $ ls
lab00 tools
The following sequences of commands will all list the files in lab00:
~/labs $ cd lab00
~/labs/lab00 $ ls
~/labs $ ls lab00
~/labs $ cd tools
~/labs/tools $ ls ../lab00
~/labs $ cd lab00
~/labs/lab00 $ ls ../lab00/../lab00/../lab00
尝试做一些实验!
Fizzing and Buzzing
如果您开始做其他实验室,请确保在开始此练习之前将您的工作复制到其他地方,因为在此练习中您的工作可能会被覆盖。
-
cd到您仓库中的lab00文件夹,并查看存在的文件(ls)。然后,运行以下命令初始化实验室:确保没有打印错误。
-
使用Vim打开
code.py并查看fizzbuzz(num)函数。它应该:- 如果num是3的倍数,打印
"num: fizz" - 如果num是5的倍数,打印
"num: buzz" - 如果num是3和5的倍数,打印
"num: fizzbuzz" - 如果num不是3或5的倍数,什么都不打印
但是,如果您运行程序(
python3 code.py),似乎没有发生这种情况!请仅通过编辑if语句来修复此错误。修复代码后,保存并使用git add和git commit添加和提交您的工作。在许多环境中,
git commit会打开Vim来编辑提交消息。如果您对如何使用它感到困惑,请参阅附录中的Vim基础部分。 - 如果num是3的倍数,打印
-
提交修复后,push您的工作。
或者至少,尝试推送您的工作。您应该会遇到一个错误:
! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 'github.com:61c-student/sp26-lab-username.git' 提示(hint): 更新被拒绝,因为当前分支的尖端落后于远程分支 提示(hint): 其远程对应分支。请先合并远程更改(例如 提示(hint): 'git pull ...'),然后再推送 提示(hint): 有关详细信息,请参阅 'git push --help' 中的 'Note about fast-forwards'(快进说明)如果您没有遇到错误,请从步骤1重新开始,或者如果持续发生这种情况,请联系课程工作人员。
在整个学期中,您可能会遇到许多奇怪的错误。将它们分解成更小的部分会有所帮助,看看您能否找出每个部分在说什么。例如,让我们来分解这个错误:
"failed to push some refs to REPO_URL": 推送(push)失败"the tip of your current branch is behind its remote counterpart": 远程仓库(repo)(在GitHub上)有您本地仓库(repo)没有的提交(commit)"Integrate the remote changes (e.g. 'git pull ...') before pushing again": 我们需要告诉Git如何整合这些神秘的提交(commit)
尝试使用
git pull拉取远程更改。- 如果您收到
"fatal: Need to specify how to reconcile divergent branches.",请运行git config --global pull.rebase false,然后再试一次拉取 - 如果您收到
"fatal: Not possible to fast-forward, aborting",请尝试git pull --ff - 如果您收到
"fatal: Need to specify how to reconcile diverent branches",请尝试git pull --ff
如果一切顺利,您应该会遇到另一个错误!这是预期的行为。
Auto-merging lab00/code.py CONFLICT (content): Merge conflict in lab00/code.py Automatic merge failed; fix conflicts and then commit the result.哎呀,合并冲突:
"Merge conflict in lab00/code.py":远程仓库和本地仓库都对lab00/code.py进行了提交"Automatic merge failed":Git尝试弄清楚如何整合提交,但无法做到"fix conflicts and then commit the result":看起来我们需要手动解决合并冲突!
您可以检查
git status:在分支(branch) main 上 您的分支(branch)和 'origin/main' 已经分叉(diverged) 并且分别有 1 个和 1 个不同的提交(commit) (使用 "git pull" 将远程分支(branch)合并到您的分支中) 您有未合并的路径(path)。 (修复冲突并运行 "git commit") (使用 "git merge --abort" 中止合并) 未合并的路径(path): (使用 "git add..." 标记解决) 双方都修改了(both modified): code.py 在Vim中打开有冲突的文件。您应该看到类似以下内容:
<<< === >>> --看起来您的虚拟伙伴Oski也尝试修复了这个bug,但没有告诉您。该死的Oski!Oski的代码似乎相当...低效,所以您想保留您的修复。但是,Oski确实做了一些有用的事情:还有另一个
if情况,所以15的倍数将打印一行"fizzbuzz",而不是两行"fizz"和"buzz"。换句话说,Oski和您都做出了您希望保留的更改!现在,考虑到这一点,通过将两个版本整合为一个来修复
fizzbuzz(num)函数,然后删除额外的合并冲突标记(<<< HEAD、===、>>> commit-hash)。修复后的函数应该类似于以下伪代码:#打印 num: fizzbuzz #打印 num: fizz #打印 num: buzz完成后,保存、添加并提交您的工作。现在,如果您推送,应该不会再有冲突了。一个合并冲突被解决了!
-
在您的本地计算机上(而不是通过SSH在教学账户上),克隆您的实验室仓库(请记住像上面演示的那样通过SSH克隆,而不是HTTPS),然后进入
lab00文件夹(cd)。然后,运行以下命令:这会创建一个名为
debug.txt的文件,记录一些自动评分器的调试信息。添加、提交并推送此文件。 -
仍在您的本地计算机上,进入实验室仓库中的
tools文件夹(cd)。然后,运行以下命令:如果看到关于
Illegal date format for -z或Disabling time condition的警告,这是预期行为。这会下载Logisim Evolution和Venus(我们稍后会需要)。检查Logisim是否运行:
如果弹出一个窗口,说明它可以运行!您可以关闭它;您暂时不需要它。
练习6:欢迎调查(Welcome Survey)
最后,请填写这份欢迎调查(welcome survey)。
提交
您做到了!这需要大量的阅读和思考,但现在您对将在本学期剩余时间使用的工具更加熟悉了。值得!
每个实验都将有自动评分的练习(exercise)。要提交到自动评分器(autograder),您需要将您的工作推送到GitHub上的实验仓库(repository)。然后转到Gradescope上的相应作业(本实验为Lab 0),选择您的实验仓库并提交。短暂等待后,页面应该会显示您的实验自动评分分数。
请记住,要获得实验学分,请确保在截止日期前完成所有练习并通过所有自动评分测试!
Appendix
这些是您可能会觉得有用的一些命令和工具:)
Vim Basics
vim是一个包含在hive机器和许多基于UNIX的发行版中的文本编辑器。
注意:我们将在大多数示例和文档中使用Vim,但我们对您使用的文本编辑器没有硬性要求;您可以随意选择您熟悉的任何编辑器,但您应该知道如何使用至少一种基于终端的文本编辑器。
要打开当前目录中的文件,请将文件名传递给Vim:
要打开另一个目录中的文件,请使用相对路径或绝对路径:
Here is a quick graphic to navigate vim:
一些有用的Vim命令:
Vim有不同的模式:Normal、Insert、Visual:
Normal:默认情况下,Vim以"正常"模式启动。正常模式可以通过按Esc从其他模式进入——下面的表格中的命令假设您处于正常模式。Insert:在此模式下键入会像常规文本编辑器一样插入字符。Visual:可视模式用于选择文本,类似于单击和拖动鼠标的行为。
这里有一些好的Vim速查表:
- 更简单:https://levelup.gitconnected.com/how-to-vim-like-a-pro-a-how-to-guide-for-maximum-productivity-c01773ee346a
- 更高级:https://teaching.jimfang.dev/workflow-tips-tricks
注意:下面的表格假设您处于Normal(正常)模式——如果您不知道这意味着什么,请阅读上面的部分。
| 命令 | 说明 |
|---|---|
k | 向上移动光标一行 |
j | 向下移动光标一行 |
h | 向左移动光标一行 |
l | Move cursor right one line |
:q | Closes (quits) Vim without saving |
:wq | 保存后关闭Vim |
:w | 保存您的文件 |
:q! | 强制退出Vim(当您已做出更改但不希望保存时使用) |
i | 插入模式,允许您输入文件内容 |
/cats | 在文件中搜索字符串"cats"的最近出现位置。按n转到下一个出现位置或按N转到上一个出现位置 |
:set nu | 在文件中显示行号 |
:tabe <filepath> | 在新标签页中打开filepath处的文件。您可以使用Tab键自动补全 |
:tabn | 转到标签栏中的下一个标签页 |
:tabp | 转到标签栏中的上一个标签页 |
注意:这些命令前面都有Esc,因为您需要按键盘上的Escape键退出当前模式。例如,如果我在向文件插入(打字)内容时想要保存,我需要按Esc退出插入模式,然后输入:w来保存文件。如果您不在任何模式中(即您刚刚打开文件),您不需要先按Escape,但这也不会有什么影响:)
默认情况下,Vim不启用鼠标支持或行号。如果您想要这些功能:
- 打开
~/.vimrc(vim ~/.vimrc) - 要启用鼠标,请添加包含
set mouse=a的新行 - 要启用行号,请添加包含
set number的新行 - 保存并退出。再次尝试打开您的vimrc文件
Vim还有许多其他配置选项可供使用——随意尝试您在网上找到的Vim资源!
我们还有一份Vim for CS61C指南可供您参考。谢谢Yijie!
命令行基础
如果您学过CS61A和CS61B,您可能对命令行界面(CLI)和终端命令有一些经验。在本课程中,我们将经常使用CLI,所以让我们花点时间回顾一些基础知识。
Example commands will be formatted like:
在这个例子中,echo是命令,Hello和world是参数。在终端中输入该行将运行该命令。在这种情况下,它只是在终端中打印Hello world。
标志通常用于指定程序选项或更改行为。它们通常以一个或两个破折号开头,可以选择带参数。
|
通常建议将应该作为单个参数字符串用单引号括起来(例如'longer string with *&)_@#(&$! symbols'),否则您可能会遇到意外行为——许多符号如果不加引号/不转义实际上会起作用!
您可能会发现查阅61B的常见CLI命令列表很有帮助。
CLI键盘快捷键
输入命令或文件路径时:
- Tab将尝试根据您目前所写的内容自动补全当前术语
- 如果当前目录有
filename1.txt和filename2.txt,f Tab 1 Tab将在第一个Tab后产生filename,在您输入1和第二个Tab后产生filename1.txt
- 如果当前目录有
- 上箭头和下箭头将允许您在之前使用过的命令中移动,这样您就不需要再次输入它们了。
- Ctrl + a将把光标移动到当前行的开头(有助于修复错误)
- Ctrl + e将把光标移动到当前行的末尾(也有助于修复错误)
- Ctrl + r将允许您搜索最近使用过的命令
Hello World
echo repeats whatever arguments you give it:
If your string has special characters, surrounding it in single/double-quotes avoids triggering unintended shell features:
处理文件
touch将创建一个包含您提供的文件名的空白文件。
This will create a file named example.txt with nothing inside.
如果您想一步创建文件并添加文本,可以使用:
这将在当前目录中创建一个名为example.txt的文件。如果文件已存在,将被覆盖。该文件将包含Your contents here,不带引号。>符号接受一个参数,用于重定向打印到stdout的数据发送位置。在这里,我们将echo的输出重定向到名为example.txt的文件。
您可以使用cat或less命令查看文件内容。
cat将example.txt的内容打印到您的终端。less打开一个基本查看器,允许您滚动和搜索。
scp - "Secure Copy"
The scp program is used for copying files between computers using the SSH protocol.
有时,您可能希望将单个文件或整个文件夹从hive机器获取到本地系统,反之亦然。您可以使用scp来做到这一点:
要指定远程源或目标,请使用username@host:path。要指定本地目标,只需使用path。例如:
Assuming my username is cs61c-???, the above command would connect to hive1 and copy
~/some-folder/example.txt on my instructional account to ~/Downloads/example.txt on my local
machine.
If I wanted to copy the other direction (from my local machine to a hive machine) I would use:
scp默认只对文件有效。要复制文件夹,您需要告诉scp"递归"复制文件夹及其所有内容,可以使用-r标志:
注意斜杠:写some-folder将复制文件夹本身及其内部文件,而some-folder/将只复制内部文件。
警告:在hive机器上运行scp(例如当您在SSH会话中时)通常不是预期行为。在hive机器上运行scp example.txt hive4:~/example.txt会将example.txt复制到...同一位置。您可能希望在本地终端会话中运行它!
tmux - "终端复用器(Terminal Multiplexer)"
tmux是一个终端程序,允许您在单个终端窗口中运行多个终端实例。您可以生成多个终端窗口并平铺它们(左右或上下分割)。
当tmux与ssh结合使用时,即使您关闭笔记本电脑或SSH会话意外断开,您也可以保持工作状态。
Let's try that now!
- 运行
tmux new- 这将创建一个新的tmux会话。 - In this terminal window, try opening
htop - 关闭计算机上的终端窗口/应用程序——这模拟您关闭笔记本电脑或SSH会话突然断开。
- 在笔记本电脑上打开另一个终端窗口,重新SSH进入hive。
- 输入
tmux attach -t 0- 您应该会看到htop再次弹出,而无需重新启动htop——Tmux使您之前的终端会话保持活跃! - 要退出tmux,请按ctrl +
b,然后按x,然后按y。
SSH进入任何hive机器。
- 要"分离"并将tmux隐藏到后台,但仍保持该终端会话活跃,请按ctrl +
b,然后按d。
Tmux有一个键(称为"前缀键"),允许您输入命令与Tmux交互。默认情况下,这是ctrl + b,但命令行工具的好处是您可以更改所有这些设置!——这里是一位工作人员用来起步的良好配置。但您应该自定义这些工具以最适合您的工作!所以不要犹豫,可以在网上搜索技巧、现有配置和窍门。
lscpu - 我的CPU规格是什么?
这个命令实际上很容易记住——您已经知道ls的作用——它列出有关事物的信息(如果单独使用,它会列出有关文件的信息)。
ls+cpu——您正在列出有关CPU的信息!
这个页面有很多信息——其中很多您现在可能不理解,这没关系!在本课程结束时,您应该能够理解这个页面上的一半内容。当您进入高年级课程并开始在不同类型的机器上构建程序时,这是一个值得记住的好命令。
lsmem - How much memory do I have?
类似于上面的——但对于RAM——系统的随机存取存储器的总量列为"Total online memory"(总在线内存)。
htop - 交互式系统监控器
想知道您正在使用多少系统资源?试试htop!这是传统系统监控器top的改进版本。
在登录到hive服务器后,在终端中输入htop试试!
打开后,您将看到在线逻辑核心的数量——这可能不对应于CPU的实际核心数量。这是因为现代CPU的构建方式——您将在CS152中了解更多原因。如果您感兴趣,这里有一篇很好的维基百科文章。
要退出,按q。