楼主: 瓜瓜爱家
18 0

MIT-Missing-Semester Lcture1整理和习题答案 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

71%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
60 点
帖子
5
精华
0
在线时间
0 小时
注册时间
2018-11-15
最后登录
2018-11-15

楼主
瓜瓜爱家 发表于 2025-12-4 07:02:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

以下所有操作均在 WSL 的 PowerShell 环境中执行。

课程内容整理

1. date —— 获取系统时间

使用 date 命令可以获取当前系统的日期和时间信息。

memo@Troic16:/$ date
Tue Dec  2 09:40:47 CST 2025

2. echo —— 输出参数内容

echo 可用于打印字符串、变量值等信息。虽然像 "Hello World" 这样的简单字符串不加引号也能正常输出,但为了防止特殊字符或空格造成解析错误,建议始终使用引号包裹。

通过转义字符可确保空格被正确识别并参与输出处理。后续会进一步说明单引号与双引号之间的差异。

memo@Troic16:/$ echo hello
hello
memo@Troic16:/$ echo Hello World
Hello World
memo@Troic16:/$ echo "Hello World"
Hello World
memo@Troic16:/$ echo Hello\ World
Hello World
memo@Troic16:/$ echo 'Hello World'
Hello World

3. 搜索程序路径(环境变量 $PATH)

环境变量本质上也是变量,因此可以通过 echo $PATH 查看系统查找内置命令(如 echodate)时所使用的目录路径。

命令 which echo 能返回 echo 程序的绝对路径。

memo@Troic16:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/d/mingw64/bin:/mnt/c/Program Files (x86)/Windows Kits/10/Windows Performance Toolkit/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/TortoiseGit/bin:/mnt/c/Users/zzj06/.cargo/bin:/mnt/d/Scripts/:/mnt/d/:/mnt/c/Users/zzj06/AppData/Local/Programs/Python/Launcher/:/mnt/c/Users/zzj06/AppData/Local/Microsoft/WindowsApps:/mnt/d/Microsoft VS Code/bin:/mnt/c/msys64/ucrt64/bin:/snap/bin
memo@Troic16:~$ which echo
/usr/bin/echo
memo@Troic16:~$ /usr/bin/echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/d/mingw64/bin:/mnt/c/Program Files (x86)/Windows Kits/10/Windows Performance Toolkit/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/TortoiseGit/bin:/mnt/c/Users/zzj06/.cargo/bin:/mnt/d/Scripts/:/mnt/d/:/mnt/c/Users/zzj06/AppData/Local/Programs/Python/Launcher/:/mnt/c/Users/zzj06/AppData/Local/Microsoft/WindowsApps:/mnt/d/Microsoft VS Code/bin:/mnt/c/msys64/ucrt64/bin:/snap/bin

例如,/usr/bin/echo 就是该命令的实际路径,其功能等同于直接调用 echo 并结合 $PATH 查找。

memo@Troic16:~$ /usr/bin/echo hello
hello

若使用相对路径,则必须保证当前工作目录准确无误,因为不同位置下的相对路径指向可能完全不同。

memo@Troic16:/$ ./usr/bin/echo hello
hello
memo@Troic16:/$ cd usr
memo@Troic16:/usr$ ./usr/bin/echo hello
-bash: ./usr/bin/echo: No such file or directory

4. Shell 中的目录导航

常用命令包括:

  • cd:切换当前工作目录
  • pwd:显示当前所在目录的完整路径

常见路径表示方式:

  • 根目录:/
  • 主目录:~
  • 当前目录:.
  • 父级目录:..
  • 返回上一个工作目录:-

使用 cd + 绝对路径 可直接跳转至目标位置;而 cd + 相对路径 则基于当前目录进行移动。

memo@Troic16:/usr$ cd ./bin
memo@Troic16:/usr/bin$ cd ..
memo@Troic16:/usr$ cd -
/usr/bin
memo@Troic16:/usr/bin$ cd ~
memo@Troic16:~$ pwd
/home/memo
memo@Troic16:~$ cd /home/memo/graph_projects
memo@Troic16:~/graph_projects$ cd ../../../usr/bin
memo@Troic16:/usr/bin$ ./echo hello
hello
memo@Troic16:/usr/bin$ pwd
/usr/bin

5. ls —— 显示文件与目录信息

执行 ls 命令可列出当前目录下的文件和子目录。

memo@Troic16:/$ ls
bin                boot  etc   init  lib.usr-is-merged  lost+found  mnt  proc  run   sbin.usr-is-merged  srv  tmp  var
bin.usr-is-merged  dev   home  lib   lib64              media       opt  root  sbin  snap                sys  usr
memo@Troic16:/$ ls -l
total 2740
lrwxrwxrwx   1 root root       7 Apr 22  2024 bin -> usr/bin
drwxr-xr-x   2 root root    4096 Feb 26  2024 bin.usr-is-merged
drwxr-xr-x   2 root root    4096 Apr 22  2024 boot

当输出内容较多时,仅展示部分内容即可。

添加参数 -l 可以查看更详细的文件属性信息,其中权限字段中的 rwx 分别代表读(read)、写(write)、执行(execute)权限。每组 rwx 对应三类用户身份:

  • 文件所有者
  • 所属用户组(users)
  • 其他所有用户

若某位权限为 -,则表示对应用户不具备该项操作权限。从下图可以看出,只有文件所有者拥有修改文件夹内容的写权限(w),其他用户无法增删其中文件。

可通过 chmod 命令调整权限设置。

-

更多选项可通过 man lsls --help 查阅。

6. 数据流重定向与管道操作

主要符号包括:<|>,它们用于控制输入输出的数据流向。

cat 命令常用来显示文件内容。这些重定向符号的作用是为数据流指定方向,实现输入输出的传递。

memo@Troic16:~$ echo hello > hello.txt
memo@Troic16:~$ cat hello.txt
hello
memo@Troic16:~$ cat < hello.txt > hello2.txt
memo@Troic16:~$ cat hello2.txt
hello
memo@Troic16:~$ echo "world" >> hello2.txt
memo@Troic16:~$ cat hello2.txt
hello
world

注意:echo 'world' > hello2.txt 会覆盖原文件内容,而使用 >> 则是在文件末尾追加新内容。

管道符 | 的作用是将前一个命令的输出作为后一个命令的输入。

memo@Troic16:~$ cat hello2.txt | head -1 > hello1.txt
memo@Troic16:~$ cat hello1.txt
hello
memo@Troic16:~$ cat hello2.txt | tail -1 >> hello1.txt
memo@Troic16:~$ cat hello1.txt
hello
world

例如,cat 输出的 "hello\nworld" 被传给 head,提取第一行 "hello" 并保存到 hello1.txt;再通过 tail 提取最后一行 "world",并追加至同一文件中。

需要强调的是,重定向操作中,右侧程序并不知晓左侧发生了什么,它只接收到来自左侧的数据流。

这一点在使用 sudo 时尤为重要。比如尝试修改 /sys/class/backlight 下的文件时,由于权限不足会提示拒绝访问。有人可能会尝试如下写法:

sudo echo 1 > brightness

但这实际上是错误的。根据 > 的优先级划分,该语句等价于:(sudo echo 1) > brightness,即管理员权限仅作用于 echo 命令本身,而非整个重定向过程。

正确的理解是:重定向符号仅负责传输数据,不传递权限上下文。

因此,应采用如下方式,将权限赋予能处理输入输出的工具:

echo 3 | sudo tee brightness

使用 tee 接收输入并写入目标文件,配合 sudo 即可成功完成写入操作。

7. mkdir —— 创建目录

使用 mkdir + 目录名 可创建新的文件夹。

memo@Troic16:~$ mkdir missing
memo@Troic16:~$ ls
graph_projects  hello.txt  hello1.txt  hello2.txt  last-modified.txt  missing  my  photos  projects  serverexample

如果目录名称包含空格,务必使用引号包裹,例如:mkdir "my photos"。否则系统会将其视为两个独立名称,从而创建出名为 "my" 和 "photos" 的两个文件夹。

课后习题说明

参考链接:Solution - 课程概览与 shell · The Missing Semester of Your CS Education

  • 第5题运行时可能出现 “Permission denied” 错误,原因是当前用户缺乏编辑权限。可通过执行 chmod 777 文件名 开放全部权限来解决。
  • 第9题可通过组合使用 headtail 实现单行内容提取。
  • 关于第10题,在 WSL 环境中部分用户反映相关电量文件夹为空。实际上,此前提到的 brightness 文件以及本题涉及的电源管理目录在某些配置下也可能为空,属正常现象。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:missing 习题答案 Miss SSIN ING

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-29 02:45