-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
266 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
在阅读《提问的智慧》和《别像弱智一样提问》后,我对“好的提问”和“独立解决问题”有了新的感悟。 | ||
|
||
在大学以前,经常像《提问的智慧》中的反面例子一样提问。很多触手可及的答案都会提问:在刚开始学习装机的时候,如何插电源,内存条插那些插槽。现在看来,这些问题只需要看一下自带的说明书或者百度一下就能解决问题。与此对应的,也被问过一些比较“简单”的问题。像是桌面卡住了,如何查看配置,如何安装某某软件之类的。大多数的提问和回答都是没有必要的。 | ||
|
||
在我看来,在提出好的提问之前,先翻阅手册的faq ,若是得不到解决,再通过互联网搜索是否有相似的问题被解决,要是身边有相关方面的朋友,同学,也可以向他们求助。以上都不能解决问题之后,再在网上提问。我的想法是,每个人的时间都是独立的,而我提问的时候,能回答问题的人不一定在线,就算在线也不一定能看到我的问题。解决问题的效率很低下。最好是能自己独立解决,之后是求助线下的朋友,最次是网上提问。 | ||
|
||
因为本身网上提问效率就已经低下了,所以需要在提问方式上尽可能的高效,不拖后腿。这就需要好的提问。 | ||
|
||
好的提问,首先要将问题表达清楚。表达清楚的意思是,将什么环境,做了什么事情,因此发生了什么,而我又想达到什么目的完整的表达出来。其次,也要加入自己的思考和附上为此做过的努力,比如搜索了相关论坛,查阅了相关的手册,分析得出可能是某方面出问题了,在此基础上尝试解决问题无果。再者,必要的礼仪也是需要的,毕竟是找人求助,此刻就是装孙子的感觉。 | ||
|
||
然后,将问题发到和其领域相关的论坛或者提问页面上。最后,隔一段时间关注它时候被回答,不管是否被回答,都更新一下问题的后续。有始有终,对于问题的解决和其他遇到相同问题的人都很有帮助。 | ||
|
||
在提问前,肯定是先尝试自己独立解决问题的,比如STFW和RTFM。 | ||
|
||
我个人比较喜欢独立解决问题。因为虽然被问题困扰让人心烦,但是让人心烦的程度越高,独自解决后的成就感越大。“太阳底下没有新鲜事”,我认为这句话对大多数问题都一样。一般情况下我喜欢搜索网页来寻找答案,因为这真的很便捷,并且很多问题都是重复的,解决方法也很简单。当然,如果是一些计算机科学相关的问题,阅读手册也能解决很多问题。 | ||
|
||
大多数时间,搜网页和读手册能解决百分之八十的问题,问同学也能解决百分之十五的问题,只有百分之五才需要上网提问。 |
115 changes: 115 additions & 0 deletions
115
1.预学习阶段/1.2Linux系统安装和基本使用/The Missing Semester of CS Education/- 1 课程概览与shell.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
# 1 | ||
使用`echo $SHELL`命令可以查看您的 shell 是否满足要求。如果打印结果为`/bin/bash`或`/usr/bin/zsh`则是可以的。 | ||
|
||
``` | ||
$ echo $SHELL | ||
/bin/bash | ||
``` | ||
|
||
# 2 | ||
在 `/tmp` 下新建一个名为 `missing` 的文件夹。 | ||
``` | ||
$ cd /tmp | ||
$ mkdir missing | ||
``` | ||
|
||
# 3 | ||
用 `man` 查看程序 `touch` 的使用手册。 | ||
``` | ||
$ man touch | ||
``` | ||
|
||
# 4 | ||
用 `touch` 在 `missing` 文件夹中新建一个叫 `semester` 的文件。 | ||
``` | ||
$ cd ./missing/ | ||
$ touch semester | ||
``` | ||
|
||
# 5 | ||
将以下内容一行一行地写入 `semester` 文件: | ||
|
||
``` | ||
#!/bin/sh | ||
curl --head --silent https://missing.csail.mit.edu | ||
``` | ||
|
||
第一行可能有点棘手, `#` 在Bash中表示注释,而 `!` 即使被双引号(`"`)包裹也具有特殊的含义。 单引号(`'`)则不一样,此处利用这一点解决输入问题。 | ||
|
||
``` | ||
$ vim semester | ||
##写入制定内容 | ||
``` | ||
``` | ||
#!/bin/sh | ||
curl --head --silent https://missing.csail.mit.edu | ||
##请求头信息并且静默模式 | ||
``` | ||
# 6 | ||
尝试执行这个文件。例如,将该脚本的路径(`./semester`)输入到您的shell中并回车。如果程序无法执行,请使用 `ls` 命令来获取信息并理解其不能执行的原因。 | ||
``` | ||
$ ./semester | ||
bash: ./semester: Permission denied | ||
$ ls -l semester | ||
-rw-rw-r-- 1 yeximing yeximing 63 Oct 4 21:18 semester | ||
``` | ||
|
||
# 7 | ||
查看 `chmod` 的手册(例如,使用 `man chmod` 命令) | ||
``` | ||
$ man chod | ||
``` | ||
|
||
# 8 | ||
使用 `chmod` 命令改变权限,使 `./semester` 能够成功执行,不要使用 `sh semester` 来执行该程序。您的 shell 是如何知晓这个文件需要使用 `sh` 来解析呢? | ||
``` | ||
$ chmod 764 semester | ||
$ ls -l | ||
total 4 | ||
-rwxrw-r-- 1 yeximing yeximing 63 Oct 4 21:18 semester | ||
$ ./semester | ||
HTTP/1.1 200 Connection established | ||
HTTP/2 200 | ||
server: GitHub.com | ||
content-type: text/html; charset=utf-8 | ||
last-modified: Tue, 03 Oct 2023 13:58:35 GMT | ||
access-control-allow-origin: * | ||
etag: "651c1e0b-1fce" | ||
expires: Wed, 04 Oct 2023 13:34:50 GMT | ||
cache-control: max-age=600 | ||
x-proxy-cache: MISS | ||
x-github-request-id: B7B4:3A5B:459AE:57B7D:651D67A2 | ||
accept-ranges: bytes | ||
date: Wed, 04 Oct 2023 13:24:50 GMT | ||
via: 1.1 varnish | ||
age: 0 | ||
x-served-by: cache-sjc1000096-SJC | ||
x-cache: MISS | ||
x-cache-hits: 0 | ||
x-timer: S1696425891.831371,VS0,VE103 | ||
vary: Accept-Encoding | ||
x-fastly-request-id: eae1ff0755eb1f190750fa536df3c14ff677d204 | ||
content-length: 8142 | ||
``` | ||
# 9 | ||
使用 `|` 和 `>` ,将 `semester` 文件输出的最后更改日期信息,写入主目录下的 `last-modified.txt` 的文件中 | ||
``` | ||
yeximing@yeximing-laptop:/tmp/missing$ ./semester |grep 'last-modified' > last-modified.txt | ||
yeximing@yeximing-laptop:/tmp/missing$ cat last-modified.txt | ||
last-modified: Tue, 03 Oct 2023 13:58:35 GMT | ||
``` | ||
|
||
# 10 | ||
写一段命令来从 `/sys` 中获取笔记本的电量信息,或者台式机 CPU 的温度。 | ||
``` | ||
yeximing@yeximing-laptop:/sys/class/power_supply/BAT0$ cat /sys/class/power_supply/BAT0/capacity | ||
100 | ||
``` |
127 changes: 127 additions & 0 deletions
127
1.预学习阶段/1.2Linux系统安装和基本使用/The Missing Semester of CS Education/- 2 Shell工具和脚本.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# 1 | ||
- 阅读 man ls,然后使用`ls` 命令进行如下操作: | ||
|
||
- 所有文件(包括隐藏文件) | ||
- 文件打印以人类可以理解的格式输出 (例如,使用454M 而不是 454279954) | ||
- 文件以最近访问顺序排序 | ||
- 以彩色文本显示输出结果 | ||
|
||
典型输出如下: | ||
|
||
``` | ||
-rw-r--r-- 1 user group 1.1M Jan 14 09:53 baz | ||
drwxr-xr-x 5 user group 160 Jan 14 09:53 . | ||
-rw-r--r-- 1 user group 514 Jan 14 06:42 bar | ||
-rw-r--r-- 1 user group 106M Jan 13 12:12 foo | ||
drwx------+ 47 user group 1.5K Jan 12 18:08 .. | ||
``` | ||
解答: | ||
``` | ||
yeximing@yeximing-laptop:/tmp/missing$ ls -alth --color=yes | ||
total 20K | ||
drwxrwxr-x 2 yeximing yeximing 4.0K Oct 4 23:27 . | ||
-rwxrw-r-- 1 yeximing yeximing 2.0K Oct 4 23:27 tms | ||
drwxrwxrwt 23 root root 4.0K Oct 4 22:47 .. | ||
-rw-rw-r-- 1 yeximing yeximing 46 Oct 4 22:19 last-modified.txt | ||
-rwxrw-r-- 1 yeximing yeximing 63 Oct 4 21:18 semester | ||
|
||
``` | ||
# 2 | ||
编写两个bash函数 `marco` 和 `polo` 执行下面的操作。 每当你执行 `marco` 时,当前的工作目录应当以某种形式保存,当执行 `polo` 时,无论现在处在什么目录下,都应当 `cd` 回到当时执行 `marco` 的目录。 为了方便debug,你可以把代码写在单独的文件 `marco.sh` 中,并通过 `source marco.sh`命令,(重新)加载函数。 | ||
解答: | ||
``` | ||
1 #!/bin/bash | ||
2 marco(){ | ||
3 echo "$(pwd)" > $HOME/savelocation | ||
4 echo "perfome sucessfully" | ||
5 } | ||
6 polo(){ | ||
7 cd "$(cat "$HOME/savelocation")" | ||
8 } | ||
|
||
``` | ||
``` | ||
yeximing@yeximing-laptop:/tmp/missing$ vim marco.sh | ||
yeximing@yeximing-laptop:/tmp/missing$ source marco.sh | ||
yeximing@yeximing-laptop:/tmp/missing$ marco | ||
perfome sucessfully | ||
yeximing@yeximing-laptop:/tmp/missing$ cd | ||
yeximing@yeximing-laptop:~$ polo | ||
yeximing@yeximing-laptop:/tmp/missing$ | ||
``` | ||
# 3 | ||
- 假设您有一个命令,它很少出错。因此为了在出错时能够对其进行调试,需要花费大量的时间重现错误并捕获输出。 编写一段bash脚本,运行如下的脚本直到它出错,将它的标准输出和标准错误流记录到文件,并在最后输出所有内容。 加分项:报告脚本在失败前共运行了多少次。 | ||
``` | ||
#!/usr/bin/env bash | ||
n=$(( RANDOM % 100 )) | ||
if [[ n -eq 42 ]]; then | ||
echo "Something went wrong" | ||
>&2 echo "The error was using magic numbers" | ||
exit 1 | ||
fi | ||
echo "Everything went according to plan" | ||
``` | ||
解答: | ||
``` | ||
1 #!/bin/bash | ||
2 | ||
3 counts=0 | ||
4 ./testerr &>> ctrlscp | ||
5 | ||
6 while true | ||
7 do | ||
8 ./testerr &>> ctrlscp | ||
9 if [ $? -ne 0 ] | ||
10 then | ||
11 echo "script was performed $counts before failed" | ||
12 break | ||
13 fi | ||
14 ((counts++)) | ||
15 done | ||
``` | ||
# 4 | ||
您的任务是编写一个命令,它可以递归地查找文件夹中所有的HTML文件,并将它们压缩成zip文件。注意,即使文件名中包含空格,您的命令也应该能够正确执行(提示:查看 `xargs`的参数`-d`) | ||
解答: | ||
``` | ||
yeximing@yeximing-laptop:~/test$ find . -name "*.html" | xargs -d"\n" tar cvf html.zip | ||
``` | ||
# 5 | ||
(进阶)编写一个命令或脚本递归的查找文件夹中最近使用的文件。更通用的做法,你可以按照最近的使用时间列出文件吗? | ||
``` | ||
yeximing@yeximing-laptop:~/test$ find . -type f -print0 | xargs -0 ls -lt | head -10 | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 12 22:50 ./newst | ||
-rw-rw-r-- 1 yeximing yeximing 20480 Oct 9 23:59 ./html.zip | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 9 23:49 ./new/new.html | ||
-rw-rw-r-- 1 yeximing yeximing 10240 Oct 9 23:43 ./pp.html | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 9 23:30 ./i i.html | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 9 23:20 ./u u.html | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 9 23:18 ./ww.html | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 9 23:17 ./tt.html | ||
|
||
|
||
|
||
yeximing@yeximing-laptop:~/test$ find . -type f -mmin -60 -print0 | xargs -0 ls -lt | head -10 | ||
-rw-rw-r-- 1 yeximing yeximing 0 Oct 12 22:50 ./newst | ||
|
||
``` | ||
``` | ||
-mmin 匹配最近修改时间(分钟),—60,六十分钟前 | ||
|
||
print0 以空格分隔输出 | ||
|
||
xargs -0 同上 | ||
``` |
7 changes: 7 additions & 0 deletions
7
1.预学习阶段/1.2Linux系统安装和基本使用/The Missing Semester of CS Education/- 3 编辑器 (Vim).md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
(高阶)用 Vim 宏将 XML 转换到 JSON 。 尝试着先完全自己做,但是在你卡住的时候可以查看上面宏 章节。 | ||
|
||
修改前: | ||
![[example-data.xml]] | ||
|
||
修改后: | ||
![[example-data.json]] |