Skip to content

Commit

Permalink
feature: 首次上传所有文件
Browse files Browse the repository at this point in the history
  • Loading branch information
yeximing committed Jul 21, 2024
1 parent 0970025 commit b3c8519
Show file tree
Hide file tree
Showing 4 changed files with 266 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
在阅读《提问的智慧》和《别像弱智一样提问》后,我对“好的提问”和“独立解决问题”有了新的感悟。

在大学以前,经常像《提问的智慧》中的反面例子一样提问。很多触手可及的答案都会提问:在刚开始学习装机的时候,如何插电源,内存条插那些插槽。现在看来,这些问题只需要看一下自带的说明书或者百度一下就能解决问题。与此对应的,也被问过一些比较“简单”的问题。像是桌面卡住了,如何查看配置,如何安装某某软件之类的。大多数的提问和回答都是没有必要的。

在我看来,在提出好的提问之前,先翻阅手册的faq ,若是得不到解决,再通过互联网搜索是否有相似的问题被解决,要是身边有相关方面的朋友,同学,也可以向他们求助。以上都不能解决问题之后,再在网上提问。我的想法是,每个人的时间都是独立的,而我提问的时候,能回答问题的人不一定在线,就算在线也不一定能看到我的问题。解决问题的效率很低下。最好是能自己独立解决,之后是求助线下的朋友,最次是网上提问。

因为本身网上提问效率就已经低下了,所以需要在提问方式上尽可能的高效,不拖后腿。这就需要好的提问。

好的提问,首先要将问题表达清楚。表达清楚的意思是,将什么环境,做了什么事情,因此发生了什么,而我又想达到什么目的完整的表达出来。其次,也要加入自己的思考和附上为此做过的努力,比如搜索了相关论坛,查阅了相关的手册,分析得出可能是某方面出问题了,在此基础上尝试解决问题无果。再者,必要的礼仪也是需要的,毕竟是找人求助,此刻就是装孙子的感觉。

然后,将问题发到和其领域相关的论坛或者提问页面上。最后,隔一段时间关注它时候被回答,不管是否被回答,都更新一下问题的后续。有始有终,对于问题的解决和其他遇到相同问题的人都很有帮助。

在提问前,肯定是先尝试自己独立解决问题的,比如STFW和RTFM。

我个人比较喜欢独立解决问题。因为虽然被问题困扰让人心烦,但是让人心烦的程度越高,独自解决后的成就感越大。“太阳底下没有新鲜事”,我认为这句话对大多数问题都一样。一般情况下我喜欢搜索网页来寻找答案,因为这真的很便捷,并且很多问题都是重复的,解决方法也很简单。当然,如果是一些计算机科学相关的问题,阅读手册也能解决很多问题。

大多数时间,搜网页和读手册能解决百分之八十的问题,问同学也能解决百分之十五的问题,只有百分之五才需要上网提问。
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
```
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 同上
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
(高阶)用 Vim 宏将 XML 转换到 JSON 。 尝试着先完全自己做,但是在你卡住的时候可以查看上面宏 章节。

修改前:
![[example-data.xml]]

修改后:
![[example-data.json]]

0 comments on commit b3c8519

Please sign in to comment.