这节课来自MIT的The Missing Semester of Your CS Education (2020),旨在教会学生如何更有效地使用计算机工具,以改善开发工作流程。

课程亮点

本课程将涵盖广泛的工具和技术,帮助学生更高效地工作。重点不仅仅是软件开发,还包括如何将计算机作为学习和研究的工具。关键点包括:

  • Shell 和终端基础:课程将介绍如何使用Shell和终端与计算机交互,逐步掌握更高级的工具和技术。
  • 命令行的重要性:命令行工具和基于文本的界面能够提供极大的灵活性和效率,课程对此进行了重点强调。

Shell 概述

Shell提供了一个基于文本的接口,用户可以通过输入命令来执行程序。以下是一些简单的命令示例:

1
2
3
4
# 输出文本
echo "Hello, World!"
# 显示日期
date

命令参数与参数传递

命令可以接受参数和选项来改变其行为,例如:

1
echo "这是一个测试"

对于包含空格的参数,可以使用引号确保参数作为一个整体被传递:

1
echo "This is a string with spaces"

环境变量和 PATH

Shell具有内置的环境变量,其中最重要的是PATH变量。PATH定义了Shell查找可执行程序的路径。例如,当你输入命令时,Shell会在PATH中定义的目录中寻找该命令的可执行文件。

要查看当前的PATH变量,可以使用以下命令:

1
echo $PATH

文件路径

在命令行操作中,理解文件路径非常重要。路径可以是绝对路径或相对路径:

1
pwd

目录浏览与管理

使用cd命令可以更改当前工作目录:

1
cd /home/user/documents

查看当前目录的文件:

1
ls

一些特殊符号可以简化目录导航:

  • ~ 表示用户的主目录,例如:/home/user
  • - 表示上一个目录

文件与目录权限

理解文件和目录权限是非常重要的,这关系到文件的访问权限以及系统安全。Linux中的权限分为三种用户组:

  1. 文件拥有者
  2. 文件所属组
  3. 其他用户

权限分为读、写、执行三种类型。例如,要查看文件的权限,可以使用以下命令:

1
ls -l

移动与复制文件

使用mvcp命令可以分别移动和复制文件。例如:

  • 移动文件:

    1
    mv file.txt /new/directory/
  • 复制文件:

    1
    cp file.txt /new/directory/

文件和目录的创建与删除

创建新目录使用mkdir命令:

1
mkdir new_directory

删除文件和目录使用rm命令:

  • 删除文件:

    1
    rm file.txt
  • 递归删除目录及其内容:

    1
    rm -r directory_name

输入和输出重定向

Shell支持输入和输出流的重定向。例如,使用>将命令输出保存到文件中:

1
echo "Hello, World!" > output.txt

使用<从文件中读取输入:

1
wc -l < input.txt

管道操作

管道符号(|)可以将一个命令的输出作为另一个命令的输入。例如:

1
ls -l | grep ".txt"

这个例子会列出当前目录中所有以.txt结尾的文件。

超级用户权限 (sudo)

有时普通用户没有权限执行某些系统级别的操作,这时可以使用sudo命令获得超级用户权限。例如:

1
sudo apt-get update

tee 命令

tee命令可以同时将输出写入文件和终端:

1
echo "Hello, World!" | tee output.txt

这种方式非常有用,尤其是在需要记录命令输出的同时保持在终端中可见。