├── Ep1.Shell作业.md ├── Ep2.Shell脚本与工具推荐作业.md ├── Ep3.Vim作业.md ├── LICENSE └── README.md /Ep1.Shell作业.md: -------------------------------------------------------------------------------- 1 | # Ep.1 shell 2 | 3 | 1. 在/tmp文件夹下创建一个叫做missing的文件夹 4 | 2. 查查touch命令是做什么用的,可以考虑使用man命令 5 | 3. 用touch在missing下创建一个叫做semester的文件 6 | 4. 在一个文件里写这么两行: 7 | ```sh 8 | #!/bin/sh 9 | curl --head --silent https://missing.csail.mit.edu 10 | ``` 11 | 第一行的意思出刊可能会比较费解,#开头在bash里表示注释。这个开头你可能在许多Python脚本里也见过。执行这个文件(./semester)思考为什么启动不了?可以考虑用ls -l看看文件属性 12 | 13 | 5. 通过手动指定解释器来启动这个脚本,比如sh semester为什么这样可以启动而直接./文件名却不行? 14 | 6. 查查看chmod程序(记得可以用man) 15 | 7. 用chmod使得刚刚的脚本可执行,思考为什么这样就能执行了?shell从哪里知道使用哪个解释器来运行的? -------------------------------------------------------------------------------- /Ep2.Shell脚本与工具推荐作业.md: -------------------------------------------------------------------------------- 1 | # Ep.2 Shell脚本与工具推荐作业 2 | 3 | 1. 读一读man的帮助文档(或者tldr文档),试着用ls加选项 4 | 执行以下任务: 5 | 6 | - 列出所有文件,包括以.开头的隐藏文件 7 | - 将文件大小以方便阅读的格式列出(如,对于454279954字节这种大小,使其显示为454M) 8 | - 以时间降序排列列出的文件 9 | 10 | 示例如下: 11 | ```sh 12 | -rw-r--r-- 1 user group 1.1M Jan 14 09:53 baz 13 | drwxr-xr-x 5 user group 160 Jan 14 09:53 . 14 | -rw-r--r-- 1 user group 514 Jan 14 06:42 bar 15 | -rw-r--r-- 1 user group 106M Jan 13 12:12 foo 16 | drwx------+ 47 user group 1.5K Jan 12 18:08 .. 17 | ``` 18 | 19 | 2. 写两个bash函数,marco和polo,执行如下功能:每当你执行marco的时候,将你当前shell所在的目录记录下来,以某种方式存储;在你执行polo的时候,无论你在哪里,回到运行marco时所在的目录。PS:为了debug方便,你可以将函数写在`marco.sh`里,然后通过`source marco.sh`启动或者重新加载写好的脚本。 20 | 21 | 3. 假设你有如下命令偶尔会出错,为了找出是什么问题,你需要在它出错的时候抓取它的输出。但是需要很长时间才能跑出一次错误的结果。写一个bash脚本运行它参数所指的命令直到它输出错误结果,并抓取它的标准输出和标准错误流(stdout,stderr)写入文件,同时打印出来。如果你能一并报告一下你一共跑了多少次这条命令才出错就更好了。 22 | 23 | ``` bash 24 | #!/usr/bin/env bash 25 | 26 | n=$(( RANDOM % 100 )) 27 | 28 | if [[ n -eq 42 ]]; then 29 | echo "出错啦" 30 | >&2 echo "错误是你算出了宇宙的终极答案" 31 | exit 1 32 | fi 33 | 34 | echo "计划通" 35 | ``` 36 | 4. 正如我们课程中介绍的那样,`find`命令的`-exec`参数对查找结果依次执行操作非常强大,但是如果我们想要对查找结果全部执行某个操作(比如压缩为一个zip压缩包)要怎么办呢?目前你见过所有的程序都接受参数和STDIN(标准输入)作为参数,当使用管道( `|` )的时候,我们把一个命令的STDOUT接入另一个程序的STDIN使得程序之间可以互相连接。但是使用类似于`tar`(类似WinRAR的一种压缩软件)命令的时候,它只接受参数列表作为输入,不接受STDIN作为输入。为了转换STDIN与参数列表,我们可以使用`xargs`,它会将STDIN转化为参数列表,比如`ls | xargs rm`会删除当初目录下的所有文件。 37 | 38 | 你的任务是写一条指令,递归的寻找你文件夹中的所有HTML文件,并且使用zip打包他们。(你可以通过范围的`touch`来创建一些随机的文件)注意你的命令应当在文件名中含有空格的时候也起作用。(提示:查查 `xargs`的-d选项) 39 | 5. (进阶)写一条指令或者脚本,递归的寻找你文件夹中最近被修改过的文件,更进一步的话,你能以降序列出文件吗? 40 | -------------------------------------------------------------------------------- /Ep3.Vim作业.md: -------------------------------------------------------------------------------- 1 | # Vim 2 | - 完成`vimtutor`教程 你可以通过vimtutor这个指令直接开始,或百度寻找中文版 3 | - 下载我们的基础.vimrc文件,将他保存为~/.vimrc. 仔细读读它有注释的部分(用vim读!),看看Vim在新配置文件下是如何表现得略微有点不一样的。 4 | - 安装并配置一个插件:ctrlp.vim 5 | - 创建插件文件夹`mkdir -p ~/.vim/pack/vendor/start` 6 | - 下载插件`cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim` 7 | - 读读插件的[文档](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md):,试着用Ctrl+P定位一个项目文件夹中的文件,打开Vim,用Vim命令模式启动:CtrlP 8 | - [修改`~/.vimrc`配置文件](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md#basic-options),使得通过按下Ctrl+P可以打开CtrlP 9 | - 在自己的电脑上重做[课上的demo](https://missing.csail.mit.edu/2020/editors/#demo) 10 | - 下个月试着用Vim来写代码,如果觉得哪里不方便或者不好用,可以试着自己百度一下解决看看,或者加群讨论。 11 | 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 YuiTH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Missing 2 | 3 | 计算机系老师不会教给你的东西,老码农工具学 4 | 5 | 中文版The Missing Semester of Your CS Education 6 | 7 | 原项目地址:https://missing.csail.mit.edu/ 8 | 9 | B站视频连接:https://space.bilibili.com/469337/channel/detail?cid=123014 10 | 11 | Youtube链接:https://www.youtube.com/playlist?list=PLCBUIuCuY-Ki4b81RkEPaIMiWaDLYTkBL 12 | 13 | telegram群:https://t.me/joinchat/AAAAAFk4Nyu_CipuQfT-sg 14 | 15 | QQ群:1080635581 16 | 17 | ## 关于作业 18 | 作业基本参照了MIT的原始课程,针对我删掉或者增加的部分进行了一些修改。如果大家做不上来请务必不要气馁(毕竟是MIT的课程),可以在Issue中讨论,也可以PR自己的答案给大家参考。我会在视频更新后一个月放出参考答案。 19 | 20 | 1. [EP1.Shell作业](./Ep1.Shell作业.md) 21 | 2. [EP2.Shell脚本与工具推荐作业](./Ep2.Shell脚本与工具推荐作业.md) 22 | 3. [EP3.Vim作业](./Ep3.Vim作业.md) 23 | - [MIT基础配置文件](https://missing.csail.mit.edu/2020/files/vimrc) 24 | - [MIT教授Anish](https://github.com/anishathalye/dotfiles/blob/master/vimrc) 25 | - [MIT教授Jon(neovim)](https://github.com/jonhoo/configs/blob/master/editor/.config/nvim/init.vim) 26 | - [MIT教授Jose](https://github.com/JJGO/dotfiles/blob/master/vim/.vimrc) 27 | ## 联系我 28 | Email:yaobl002@gmail.com 29 | 30 | bilibili:@YuiTH --------------------------------------------------------------------------------