实验0:介绍,设置

截止日期:1月27日星期二晚上11:59:59 PT

你好!欢迎来到CS61C!很高兴你能加入我们:D 请注意,我们将演示本机的安全功能。 这个实验可能有点长,但请仔细阅读;它涵盖了许多重要内容,将为你完成本课程的其余部分做好准备!

信息: 如果你在完成本作业时遇到问题,可以在Ed上提出私人问题。这是对正常政策的例外,因为本实验主要是设置工作。

我们还有一份常见错误列表。在Ed上发帖或前往办公时间之前,请先查看!


练习1:访问服务

不幸的是,本课程的作业确实需要一些(有时很无聊的)设置。让我们在学期开始前把这些搞定。以下是检查清单:

访问Gradar

  1. 前往 Gradar 并用你的伯克利Google账户登录
  2. 在主屏幕上,确认你可以看到CS 61C Spring 2026课程。
  3. 在右上角,点击你的名字,然后点击个人资料
  4. 在"GitHub: 登录"下,点击链接账户并用你想用于61C的GitHub账户登录

注意:校园VPN

不幸的是,某些地区和组织会阻止访问我们的教育材料和工具。如果你由于互联网访问限制而无法访问任何服务或资源,可以使用伯克利校园VPN(你将在本实验稍后安装)。


练习2:安装软件

以下子部分包含特定操作系统的说明。请使用适合你特定操作系统的说明;错误操作系统的命令可能会破坏你的系统!

Ubuntu Linux

Ubuntu 18.04+在默认APT仓库中包含所需程序。以下命令将自动安装它们:

sudo apt update
sudo apt install curl git openjdk-17-jre openssh-client python3 python3-pip

任何终端和任何现代Web浏览器都足以用于61C。

macOS

  1. xcode-select --install
    
  2. java -version
    
    • 我们建议使用 .pkg installer.
    • 如果您有Apple Silicon CPU,您需要aarch64版本。否则,您可能有Intel/AMD CPU,所以您需要x64版本。
  3. python3 --version
    
  4. python3 -c 'import urllib.request; urllib.request.urlopen("https://inst.eecs.berkeley.edu")'
    
    • 如果没有打印任何内容,您的安装应该是正常的
    • 如果抛出证书错误(例如certificate verify failed: unable to get local issuer certificate):
      1. 在Finder中,打开您的系统应用程序文件夹
      2. 打开Python安装文件夹(例如Python 3.11
      3. 运行其中的Install Certificates.command程序(右键单击 => 打开)
      4. 关闭您现有的终端窗口并打开一个新的终端
      5. 再次运行python3 SSL检查命令

Windows

    • 如果安装程序询问,请选择"Use Windows' default console window"选项而不是"Use MinTTY"
    • 对于61C,请使用Git Bash而不是cmd.exe或Powershell
  1. java -version
    
    • 我们建议使用 .msi installer.
  2. python3 --version
    
    如果它打开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开头的机器,例如ashbycedar;这些机器不适用于61C课程。

警告(Warning): 校园内的CalVisitor WiFi网络会阻止SSH连接。在处理61C相关事务时,请确保您不在CalVisitor网络上。

校园VPN设置

按照此处的说明安装和设置bSecure Remote Access VPN。请确保在安装过程中没有错误。从现在开始,我们将此VPN称为"校园VPN"。

在此实验的其余部分,请保持连接到校园VPN。

这是我们第一次使用它,所以如果您遇到任何问题,请在Lab 0 Ed帖子中跟进或在Ed上提出私人问题。

教学账户设置(Instructional Account Setup)

    • 您将需要密码来完成此练习的其余部分。
    • 在您注册/候补之后可能需要一两天才能创建账户。
    • 如果您是待处理的并行注册学生,或填写了"稍后注册计划"表格,我们正在为您请求账户,您应该在提交申请或表格后5天内能够创建账户。
  1. ssh cs61c-???@hive2.cs.berkeley.edu
    

    请记住将cs61c-???替换为您的教学账户用户名。输入密码时,什么都不会显示;这在许多终端程序中是正常的。

    • 如果您收到Permission denied, please try again,请检查您是否输入了正确的用户名/密码。如果您是复制粘贴密码,请尝试手动输入。
    • 如果您收到"Connection timeout"或其他连接错误,请确保您不在CalVisitor或其他阻止SSH的网络上,并确保您已连接到校园VPN。
    • 如果您收到"Connection refused"或"Connection timeout"或其他连接错误,该机器可能暂时关闭或拒绝连接。尝试使用另一台hive机器(例如将hive2替换为hive3)。
    • 请输入您的伯克利(Berkeley)电子邮件。 请仔细检查您的电子邮件、SID和姓名的拼写。
  2. check-register
    

    如果信息不正确,请运行:

    re-register
    
  3. 如果您的提示符是白色的,请运行:

    /home/ff/cs61c/bin/fix-dotfiles && exit
    

    然后,从步骤2重新开始。

使用快捷方式连接Hive机器

我们可以配置SSH主机别名,这将允许我们使用ssh hive#而不是ssh cs61c-???@hive#.cs.berkeley.edu

本节还将向您介绍Vim,这是一个基于终端的文本编辑器。

  1. mkdir -p ~/.ssh
    
  2. vim ~/.ssh/config
    
  3. # 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.3
    
    请记住将cs61c-???替换为您的教学账户用户名。将Host s330-? s330-?? hive? hive??中的问号保留不变。
  4. ssh hive7
    

将来(完成本练习后),您可以运行ssh hive#连接到hive机器。共有30台hive机器,从hive1hive30;使用哪一台都没关系,因为它们共享相同的文件。

无密码连接Hive机器(Connecting to Hive Machines Without a Password)

  1. curl -sS https://raw.githubusercontent.com/61c-teach/sp26-lab-starter/main/lab00/get-ssh-key.sh | bash
    
    记下您的SSH密钥的位置,稍后在实验中会用到。
  2. ssh-copy-id hive3
    
  3. ssh hive5
    
    您应该看到那个红黄提示符,而无需输入您的教学账户密码。

如果您读累了,可以休息一下;有人想玩贪吃蛇吗?


练习4:GitHub设置(GitHub Setup)

配置本地机器(Configuring Your Local Machine)

让我们配置您的本地用户账户,使用SSH密钥认证到GitHub。

  1. cat path_to_ssh_key.pub
    
    它应该类似于以下内容(长度可能不同):
    ssh-ed25519 AAAAC3NzaC1lZDI1N6jpH3Bnbebi7Xz7wMr20LxZCKi3U8UQTE5AAAAIBTc2HwlbOi8T some_comment_here
    
    • 将标题设置为有助于您记住密钥所在设备的内容(例如CS61C Laptop)。
  2. ssh -T git@github.com
    
    如果一切顺利,您应该看到类似以下内容:
    Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
    
    (翻译:您好用户名!您已成功通过身份验证,但GitHub不提供shell访问权限。)

将来,当克隆需要认证的仓库(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进行身份验证。

  1. ssh hive11
    
    再次提醒,您应该能看到红黄色提示符。
  2. curl -sS https://raw.githubusercontent.com/61c-teach/sp26-lab-starter/main/lab00/get-ssh-key.sh | bash
    
    记下您的SSH密钥的位置,稍后在实验中会用到。
  3. cat path_to_ssh_key.pub
    
    它应该类似于以下内容(长度可能不同):
    ssh-ed25519 AAAAC3NzaC1lZDI1N6jpH3Bnbebi7Xz7wMr20LxZCKi3U8UQTE5AAAAIBTc2HwlbOi8T your_email@example.com
    
    • 将标题设置为有助于您记住此密钥在您的教学账户上的内容(例如CS61C Hive)。
  4. ssh -T git@github.com
    
    如果一切顺利,您应该看到类似以下内容:
    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您的姓名和电子邮件:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

SSH连接到hive机器,并在您的教学账户上运行相同的命令。

克隆您的仓库

Git有"本地"和"远程"仓库的概念。本地仓库位于您的终端会话所在的位置;如果您在SSH会话中,本地仓库是hive机器上的一个文件夹;如果您的终端会话在本地机器上,本地仓库位于本地机器的文件系统上。远程仓库(例如GitHub仓库)通常托管在互联网上。

您在GitHub上有一个实验室仓库,但本地没有(如果网站能自动访问您的本地文件,那会有点令人担忧)。要获取此仓库的本地副本,您可以使用git clone,它将根据远程仓库的信息创建本地仓库。

SSH连接到hive机器。在hive机器上,将仓库克隆到名为labs的文件夹中:

git clone git@github.com:61c-student/sp26-lab-USERNAME.git labs

请记住将sp26-lab-USERNAME替换为您的实际仓库名称!

探索您的仓库:Git

进入这个新文件夹(cd)。列出所有隐藏文件(ls -a)。您看到一个隐藏的文件/文件夹了吗?

确实有一个名为.git的文件夹。它的存在表明当前文件夹(包含.git的文件夹)持有Git仓库。

查看您仓库当前的远程仓库和状态:

git remote -v
git status

git clone已经发挥了一些神奇的作用——有一个名为origin的远程仓库,其URL指向您在GitHub上的实验室仓库!您在一个名为main的本地分支上,它"跟踪"origin/mainorigin远程仓库上的main分支)。

注意:GitHub现在使用main作为默认分支名称,而不是master

在整个学期中,课程工作人员可能会更新起始代码以修复错误或发布新实验。要接收这些更新,您需要添加另一个远程仓库。

git remote add starter https://github.com/61c-teach/sp26-lab-starter.git

注意:我们的起始仓库是公开的,您没有写访问权限,因此在这种情况下您实际上应该使用未经身份验证的HTTPS克隆URL!

如果您想拉取更新后的起始代码,您需要执行以下命令:

git pull starter main

现在就试试吧!由于您刚刚开始实验,可能还没有更新可以拉取。

探索您的仓库:文件(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

如果您开始做其他实验室,请确保在开始此练习之前将您的工作复制到其他地方,因为在此练习中您的工作可能会被覆盖。

  1. cd到您仓库中的lab00文件夹,并查看存在的文件(ls)。然后,运行以下命令初始化实验室:

    bash init.sh
    

    确保没有打印错误。

  2. 使用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 addgit commit添加和提交您的工作。

    在许多环境中,git commit会打开Vim来编辑提交消息。如果您对如何使用它感到困惑,请参阅附录中的Vim基础部分

  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中打开有冲突的文件。您应该看到类似以下内容:

    def fizzbuzz(num):
    <<< HEAD
      "your code"
    ===
      "not your code"
    >>> remote-commit-hash
    
    for i in range(0, 20):
    

    看起来您的虚拟伙伴Oski也尝试修复了这个bug,但没有告诉您。该死的Oski!Oski的代码似乎相当...低效,所以您想保留您的修复。但是,Oski确实做了一些有用的事情:还有另一个if情况,所以15的倍数将打印一行"fizzbuzz",而不是两行"fizz"和"buzz"。换句话说,Oski和您都做出了您希望保留的更改!

    现在,考虑到这一点,通过将两个版本整合为一个来修复fizzbuzz(num)函数,然后删除额外的合并冲突标记(<<< HEAD===>>> commit-hash)。修复后的函数应该类似于以下伪代码:

    def fizzbuzz(num):
      if multiple of 15:
        #打印 num: fizzbuzz
      elif multiple of 3:
        #打印 num: fizz
      elif multiple of 5:
        #打印 num: buzz
    

    完成后,保存、添加并提交您的工作。现在,如果您推送,应该不会再有冲突了。一个合并冲突被解决了!

  4. 在您的本地计算机上(而不是通过SSH在教学账户上),克隆您的实验室仓库(请记住像上面演示的那样通过SSH克隆,而不是HTTPS),然后进入lab00文件夹(cd)。然后,运行以下命令:

    bash gen-debug.sh
    

    这会创建一个名为debug.txt的文件,记录一些自动评分器的调试信息。添加、提交并推送此文件。

  5. 仍在您的本地计算机上,进入实验室仓库中的tools文件夹(cd)。然后,运行以下命令:

    bash download_tools.sh
    

    如果看到关于Illegal date format for -zDisabling time condition的警告,这是预期行为。

    这会下载Logisim Evolution和Venus(我们稍后会需要)。检查Logisim是否运行:

    java -jar logisim-evolution.jar
    

    如果弹出一个窗口,说明它可以运行!您可以关闭它;您暂时不需要它。


练习6:欢迎调查(Welcome Survey)

最后,请填写这份欢迎调查(welcome survey)


提交

您做到了!这需要大量的阅读和思考,但现在您对将在本学期剩余时间使用的工具更加熟悉了。值得!

每个实验都将有自动评分的练习(exercise)。要提交到自动评分器(autograder),您需要将您的工作推送到GitHub上的实验仓库(repository)。然后转到Gradescope上的相应作业(本实验为Lab 0),选择您的实验仓库并提交。短暂等待后,页面应该会显示您的实验自动评分分数。

请记住,要获得实验学分,请确保在截止日期前完成所有练习并通过所有自动评分测试!


Appendix

这些是您可能会觉得有用的一些命令和工具:)

Vim Basics

vim是一个包含在hive机器和许多基于UNIX的发行版中的文本编辑器。

注意:我们将在大多数示例和文档中使用Vim,但我们对您使用的文本编辑器没有硬性要求;您可以随意选择您熟悉的任何编辑器,但您应该知道如何使用至少一种基于终端的文本编辑器。

要打开当前目录中的文件,请将文件名传递给Vim:

vim filename

要打开另一个目录中的文件,请使用相对路径或绝对路径:

vim ../other-folder/filename

Here is a quick graphic to navigate vim:

一些有用的Vim命令:

Vim有不同的模式:NormalInsertVisual

  • Normal:默认情况下,Vim以"正常"模式启动。正常模式可以通过按Esc从其他模式进入——下面的表格中的命令假设您处于正常模式。
  • Insert:在此模式下键入会像常规文本编辑器一样插入字符。
  • Visual:可视模式用于选择文本,类似于单击和拖动鼠标的行为。

这里有一些好的Vim速查表:

  1. 更简单:https://levelup.gitconnected.com/how-to-vim-like-a-pro-a-how-to-guide-for-maximum-productivity-c01773ee346a
  2. 更高级:https://teaching.jimfang.dev/workflow-tips-tricks

注意:下面的表格假设您处于Normal(正常)模式——如果您不知道这意味着什么,请阅读上面的部分。

命令说明
k向上移动光标一行
j向下移动光标一行
h向左移动光标一行
lMove cursor right one line
:qCloses (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不启用鼠标支持或行号。如果您想要这些功能:

  1. 打开~/.vimrc (vim ~/.vimrc)
  2. 要启用鼠标,请添加包含set mouse=a的新行
  3. 要启用行号,请添加包含set number的新行
  4. 保存并退出。再次尝试打开您的vimrc文件

Vim还有许多其他配置选项可供使用——随意尝试您在网上找到的Vim资源!

我们还有一份Vim for CS61C指南可供您参考。谢谢Yijie!

命令行基础

如果您学过CS61A和CS61B,您可能对命令行界面(CLI)和终端命令有一些经验。在本课程中,我们将经常使用CLI,所以让我们花点时间回顾一些基础知识。

Example commands will be formatted like:

echo Hello world

在这个例子中,echo是命令,Helloworld是参数。在终端中输入该行将运行该命令。在这种情况下,它只是在终端中打印Hello world

标志通常用于指定程序选项或更改行为。它们通常以一个或两个破折号开头,可以选择带参数。

git --version | cat
python3 -c 'print("Hello world")'

通常建议将应该作为单个参数字符串用单引号括起来(例如'longer string with *&)_@#(&$! symbols'),否则您可能会遇到意外行为——许多符号如果不加引号/不转义实际上会起作用!

您可能会发现查阅61B的常见CLI命令列表很有帮助。

CLI键盘快捷键

输入命令或文件路径时:

  • Tab将尝试根据您目前所写的内容自动补全当前术语
    • 如果当前目录有filename1.txtfilename2.txtf Tab 1 Tab将在第一个Tab后产生filename,在您输入1和第二个Tab后产生filename1.txt
  • 上箭头下箭头将允许您在之前使用过的命令中移动,这样您就不需要再次输入它们了。
  • Ctrl + a将把光标移动到当前行的开头(有助于修复错误)
  • Ctrl + e将把光标移动到当前行的末尾(也有助于修复错误)
  • Ctrl + r将允许您搜索最近使用过的命令

Hello World

echo repeats whatever arguments you give it:

echo Hello World

If your string has special characters, surrounding it in single/double-quotes avoids triggering unintended shell features:

echo "It's morbin time!"

处理文件

touch将创建一个包含您提供的文件名的空白文件。

touch example.txt

This will create a file named example.txt with nothing inside.

如果您想一步创建文件并添加文本,可以使用:

echo 'Your contents here' > example.txt

这将在当前目录中创建一个名为example.txt的文件。如果文件已存在,将被覆盖。该文件将包含Your contents here,不带引号。>符号接受一个参数,用于重定向打印到stdout的数据发送位置。在这里,我们将echo的输出重定向到名为example.txt的文件。

您可以使用catless命令查看文件内容。

cat example.txt
less example.txt

catexample.txt的内容打印到您的终端。less打开一个基本查看器,允许您滚动和搜索。

scp - "Secure Copy"

The scp program is used for copying files between computers using the SSH protocol.

有时,您可能希望将单个文件或整个文件夹从hive机器获取到本地系统,反之亦然。您可以使用scp来做到这一点:

scp <source> <destination>

要指定远程源或目标,请使用username@host:path。要指定本地目标,只需使用path。例如:

scp hive1:~/some-folder/example.txt ~/Downloads/

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 ~/Downloads/example.txt hive1:~/some-folder/

scp默认只对文件有效。要复制文件夹,您需要告诉scp"递归"复制文件夹及其所有内容,可以使用-r标志:

scp -r hive1:~/some-folder ~/Downloads/

注意斜杠:写some-folder将复制文件夹本身及其内部文件,而some-folder/将只复制内部文件。

警告:在hive机器上运行scp(例如当您在SSH会话中时)通常不是预期行为。在hive机器上运行scp example.txt hive4:~/example.txt会将example.txt复制到...同一位置。您可能希望在本地终端会话中运行它!

tmux - "终端复用器(Terminal Multiplexer)"

tmux是一个终端程序,允许您在单个终端窗口中运行多个终端实例。您可以生成多个终端窗口并平铺它们(左右或上下分割)。

tmuxssh结合使用时,即使您关闭笔记本电脑或SSH会话意外断开,您也可以保持工作状态。

Let's try that now!

    SSH进入任何hive机器。

  1. 运行tmux new - 这将创建一个新的tmux会话。
  2. In this terminal window, try opening htop
  3. 关闭计算机上的终端窗口/应用程序——这模拟您关闭笔记本电脑或SSH会话突然断开。
  4. 在笔记本电脑上打开另一个终端窗口,重新SSH进入hive。
  5. 输入tmux attach -t 0 - 您应该会看到htop再次弹出,而无需重新启动htop——Tmux使您之前的终端会话保持活跃!
  6. 要退出tmux,请按ctrl + b,然后按x,然后按y
  • 要"分离"并将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