《计算机系统基础》理论课中遗失的实践细节
习题课 (和课程网站) 会布置所有作业
它很难,的确很难 ←
往年一些同学都因为不诚信的举动获得了成绩
你总是可以耍一些小聪明,从别人那里得到帮助
联系/求助:使用邮件
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 重定向到 file
cmd1 | 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/hosts
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.baidu.com
静下心来,从头开始
你不会感到学习这门课很舒适
但请不要放弃/躺倒