《计算机系统基础》理论课中遗失的实践细节
习题课 (和课程网站) 会布置所有作业
它很难,的确很难 ←
往年一些同学都因为不诚信的举动获得了成绩
你总是可以耍一些小聪明,从别人那里得到帮助
联系/求助:使用邮件
Office Hour: 每周四 19:00-21:00 @ 计算机楼 809
Ask
Don't Ask
针对作业的独立完成
针对代码的独立完成
Individual work
Using external resources
PA0: 安装 Linux 系统,并提交空的文件。允许向互联网/同学求助。
遇到问题 (如安装错误) 找同学询问/解决
请别人安装好系统,或使用他人的虚拟机镜像
感到三观尽毁?
那些痛苦是对你的训练 (training)
就算回到 1980s,该干的事情还得干啊
例子

上面这些事情不是点点鼠标就能搞定的吗?
被迫接受
主动接受
这是啥玩意啊?让我用这个度过余生?
$ ▍
Unix is user friendly. It's just selective about who its friends are.
Read the f**king manual.
Search the f**king web.
1980s: 以 MHz 为单位的主频;80 x 24 的字符终端
不可避免,需要用户查阅
手册 记住一些系统里的约定 (下面是最重要的一些)。
查看文件
阅读手册
man man); apropos; info文本处理
g/re/p)命令行工具多到什么程度呢……
- unzip, strip, touch, finger, grep, mount, fsck, more, yes, fsck, fsck, fsck, umount, sleep....
Keep it simple, stupid. (KISS)
一个命令只做 “一件事”
printf)scanf)int main(int argc, char *argv[]);)命令的输入和输出都是人类 + 机器均可读的文本
find .wc -l a.txt b.txt把命令的输入/输出连接起来 (管道) 协作完成任务
find . | grep '\.cpp$' | xargs cat | wc -l祝贺!刚才其实是 Shell 执行了一段 Shell 语言编写的程序。
Shell 是一门基于
a=hello - 赋值 (注意 = 左右没有空格)$a - 将变量的值 “粘贴”$(cmd) - 将 cmd 运行的 stdout “粘贴”if cmd; then; ... ; fi - 根据 cmd 运行结果执行分支cmd > file - 把 cmd 的 stdout 重定向到 filecmd1 | cmd2 - 把 cmd1 的 stdout 作为 cmd2 的 stdin有趣的小问题
if 比较存储了整数字符串的大小?if 1 > 2 会发生什么?)输出当前用户是不是 root
[ $UID -eq 0 ] && echo "is root!"查看磁盘引导扇区 (Master Boot Record)
cat /dev/sdb | head -c 512 | ndisasm -b 16 -o 0x7c00 -统计所有 cpp 文件的行数
find . | grep '\.cpp$' | xargs cat | wc -l统计命令行命令的频率
history | tr -s ' ' | cut -d ' ' -f3 | sort | uniq -c | sort -nr以上都是命令行里的命令,但同时也是 bash script 的程序
重构福利
.cpp 文件执行同样的 vim 动作LaTeX 用户福利
fig-1.pdf, fig-2.pdf, ...视频制作福利
# 自动登陆 p.nju.edu.cn 不香吗?
curl -d "username=学号&password=密码" \
http://p.nju.edu.cn/portal_io/login
这有什么用?
一个有趣的问题
chmod -r很烦躁:一下就碰壁?
静下心来,从头开始
试图理解一切事情是如何发生的

例子:
/etc/hostsC:\Windows\System32\drivers\etc\hosts127.0.0.1 www.baidu.com静下心来,从头开始
你不会感到学习这门课很舒适
但请不要放弃/躺倒