首页 > 其他分享 >CS_Education 学习笔记——第一讲

CS_Education 学习笔记——第一讲

时间:2023-12-20 21:58:41浏览次数:37  
标签:.. missing -- semester 笔记 PC aaron CS Education

第1讲 课程概览与shell

课堂笔记

shell通过空格分隔参数

shell,特别是Bash(Bourne Again Shell) 是本身类似于一种编程语言。

路径是描述计算机上文件位置的方式。

在Linux下所用空间都挂载在一个命名空间下。

pwd(print working directory)打印当前所在路径

cd(change directory)表示更改目录

...为特殊目录,分别表示为当前目录和父目录

ls列出当前目录中文件

~,特殊字符,表示扩展到主目录,cd ~回到主目录

-,特殊字符,表示返回之前目录,cd -将会回到上一个目录

大多数的程序都会采用所谓的参数,如标志(flags)或选项(options)。通常,称单个破折号(‘-’)和单个字符小写的组合为标志(flag),不带任何值的内容也是标志,带有值的成为选项。

drwxr-xr-x  2 aaron aaron  4096 12月 7日 19:37  MATLAB/

其中第一参数中,第一个字符表示是否是目录(含有d),第一组三个字符表示文件所有者设置的权限列表,第二组三个字符表示拥有该文件的组设置的权限列表,最后一组三个字符表示其他人的权限列表

每组的三个字符分别表示:read(读取)、write(写入)和execute(执行)

对于目录来说:

  • 读取
    • 转换为“你是否被允许看到这个目录中的文件?”,将读取权限视为是否能查看目录的文件列表。
  • 写入
    • 你是否被允许在该目录中重命名、创建或删除文件。对于没有某目录(或文件)写入权限来说,无法删除它,但是可以清空它。
  • 执行
    • 目录上的执行权限是所谓的搜索权限,例如如果你想要cd某目录,你必须用用该目录及其所有父目录的执行权限。

mv(move)表示重命名文件、移动文件、移动目录

cp(copy)表示复制文件(或目录)

上述二者均需要两个参数,一个需要修改文件路径,一个目标路径。

rm(remove)表示删除文件(或目录)

需要注意:

在Linux下,默认情况下,删除不会递归进行,通过使用-r标志进行递归删除。

rmdir(remove a directory)表示删除一个目录(但是其只能删除空目录)

mkdir(make a directory)表示创建一个目录

man(manual page)表示手册页

cat(prints the content of a file)

shell的流概念:每个程序都有两个主要的流:输入流输出流,shell提供重定向二者流的方式以改变程序的输入/输出方向。最简单的方式是使用尖括号符号(‘< >’)。“<”表示将这个程序的输入重定向为指定文件的内容,“>”表示将前面程序的输出重定向到指定文件中。

存在一种双向箭头(“>>”),它表示追加而不是覆盖。

|(pipelines)管道符。将左边程序的输出作为右边程序的输入。

tail,打印输入的最后n行

root用户,类似于windows中管理员,其用户ID为0。root用户是特殊的,其可以在系统上随意做任何事情。

sudo(do as su),其中su指的是超级用户(super user)

tee表示将输入内容写入一个文件,同时它输出到标准输出

讲义笔记

shell的核心功能:它允许你执行程序,输入并获取某种半结构化的输出。

使用shell

笔者使用的shell:fish shell:

aaron@aaron-PC ~> 

shell基于空格分割命令并进行解析。如果希望传递的参数中包含空格,则需要对空格进行转义。

witch程序可以打印指定程序的程序路径。

课后练习

第一道题

题目:本课程需要使用类Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用Windows Subsystem for Linux或者是 Linux 虚拟机。使用echo $SHELL命令可以查看您的 shell 是否满足要求。如果打印结果为/bin/bash

笔者使用的是fish shell,

aaron@aaron-PC ~> echo $SHELL
/usr/bin/fish

第二道题

题目:在/tmp下新建一个名为missing的文件夹。

aaron@aaron-PC ~> cd /tmp/
aaron@aaron-PC /tmp> mkdir missing
aaron@aaron-PC /tmp> find -L /tmp -name 'missing'
/tmp/missing

第三道题

题目:用man查看程序touch的使用手册。

aaron@aaron-PC ~> man touch

截图:

man touch

第四道题

题目:用touchmissing文件夹中新建一个叫semester的文件。

aaron@aaron-PC ~> cd /tmp/
aaron@aaron-PC /tmp> cd missing/
aaron@aaron-PC /t/missing> touch semester

第五道题

题目:将以下内容一行一行地写入semester文件:

#!/bin/sh
curl --head --silent https://missing.csail.mit.edu

第一行可能有点棘手,#在Bash中表示注释,而!即使被双引号(")包裹也具有特殊的含义。 单引号(')则不一样,此处利用这一点解决输入问题。更多信息请参考Bash quoting手册

aaron@aaron-PC /t/missing> echo "#!/bin/sh" > semester 
aaron@aaron-PC /t/missing> echo "curl --head --silent https://missing.csail.mit.edu" >>semester 
aaron@aaron-PC /t/missing> cat semester
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu

第六道题

题目:尝试执行这个文件。例如,将该脚本的路径(./semester)输入到您的shell中并回车。如果程序无法执行,请使用ls命令来获取信息并理解其不能执行的原因。

aaron@aaron-PC /t/missing> ./semester
fish: Unknown command. './semester' exists but is not an executable file.
aaron@aaron-PC /t/missing [126]> ls -l
总计 4
-rw-r--r-- 1 aaron aaron 61 12月20日 19:55 semester

由于semester程序不具备可执行权限,无法执行。

第七道题

题目:查看chmod的手册(例如,使用man chmod命令)

截图:

man chmod

第八道题

题目:使用chmod命令改变权限,使./semester能够成功执行,不要使用sh semester来执行该程序。您的shell是如何知晓这个文件需要使用sh来解析呢?更多信息请参考:shebang

aaron@aaron-PC /t/missing> chmod +744 semester 
aaron@aaron-PC /t/missing> ls -l
总计 4
-rwxr--r-- 1 aaron aaron 61 12月20日 19:55 semester*
aaron@aaron-PC /t/missing> ./semester 
HTTP/2 200 
server: GitHub.com
content-type: text/html; charset=utf-8
last-modified: Wed, 29 Nov 2023 09:35:41 GMT
access-control-allow-origin: *
etag: "656705ed-2015"
expires: Wed, 20 Dec 2023 12:19:11 GMT
cache-control: max-age=600
x-proxy-cache: MISS
x-github-request-id: 5346:2ABD8A:8B4A13:9013C4:6582D965
accept-ranges: bytes
date: Wed, 20 Dec 2023 12:09:11 GMT
via: 1.1 varnish
age: 0
x-served-by: cache-tyo11974-TYO
x-cache: MISS
x-cache-hits: 0
x-timer: S1703074151.037085,VS0,VE163
vary: Accept-Encoding
x-fastly-request-id: 96720c0dfe4e373311a9464c0e36931606e723eb
content-length: 8213

第九道题

题目:使用|>,将semester文件输出的最后更改日期信息,写入主目录下的 last-modified.txt的文件中

aaron@aaron-PC /t/missing> ./semester | grep --ignore-case last-modified | cut --delimiter=' ' -f2- | tee /home/aaron/last-modified.txt
Wed, 29 Nov 2023 09:35:41 GMT
aaron@aaron-PC /t/missing> cat /home/aaron/last-modified.txt
Wed, 29 Nov 2023 09:35:41 GMT

地十道题

题目:写一段命令来从 /sys 中获取笔记本的电量信息,或者台式机 CPU 的温度。注意:macOS 并没有 sysfs,所以 Mac 用户可以跳过这一题。

在下面描述的目录中capacity文件存放着笔记本电量信息

aaron@aaron-PC /s/c/p/BAT1> cat /sys/class/power_supply/BAT1/capacity
57

通过阅读Linux内核文档sysfs-interface可以发现,/sys/class/hwmon/存放CPU状态信息。

笔者主机CPU为AMD,所以首先需要确定那个文件是用来监测CPU温度的。

aaron@aaron-PC /s/c/h/hwmon3> cd 
aaron@aaron-PC ~> cd /sys/class/hwmon/
aaron@aaron-PC /s/c/hwmon> tree ./
./
├── hwmon0 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:29/ACPI0003:00/power_supply/ACAD/hwmon0
├── hwmon1 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:29/PNP0C0A:00/power_supply/BAT1/hwmon1
├── hwmon2 -> ../../devices/pci0000:00/0000:00:08.1/0000:06:00.0/hwmon/hwmon2
└── hwmon3 -> ../../devices/pci0000:00/0000:00:18.3/hwmon/hwmon3

4 directories, 0 files

首先进入/sys/class/hwmon目录,在此目录下发现hwmon2hwmon3目录下存在监测温度的文件temp1_input

aaron@aaron-PC /s/c/hwmon> cd hwmon3
aaron@aaron-PC /s/c/h/hwmon3> ls -l
总计 0
lrwxrwxrwx 1 root root    0 12月20日 19:16 device -> ../../../0000:00:18.3/
-r--r--r-- 1 root root 4096 12月20日 19:16 name
drwxr-xr-x 2 root root    0 12月20日 20:52 power/
lrwxrwxrwx 1 root root    0 12月20日 19:16 subsystem -> ../../../../../class/hwmon/
-r--r--r-- 1 root root 4096 12月20日 19:16 temp1_input
-r--r--r-- 1 root root 4096 12月20日 19:16 temp1_label
-rw-r--r-- 1 root root 4096 12月20日 19:16 uevent

得到CPU温度:

aaron@aaron-PC /s/c/h/hwmon3> cat temp1_input 
46125

但是其单位为毫摄氏度,编写脚本可得:

aaron@aaron-PC /s/c/h/hwmon3> cat /sys/class/hwmon/hwmon3/temp1_input 
46625

标签:..,missing,--,semester,笔记,PC,aaron,CS,Education
From: https://www.cnblogs.com/aaroncoding/p/17917661.html

相关文章

  • CS_Education 学习笔记——首页
    LearningCSEducationCSEducation全称为:TheMissingSemesterofYourCSEducation,其来自于麻省理工学院近几年开设的课程。主要讲述在学习计算机科学中会用到的一些自动化工具,如ssh、vim、git等。在学习该课程的过程中,记录了一些听课笔记与讲义重点,同时完成讲义留下的练习......
  • The Missing Semester of Your CS Education----shell工具和脚本
    一.shell脚本1.$的关键字$0-脚本名$1到$9-脚本的参数。$1是第一个参数,依此类推。$@-所有参数$#-参数个数$?-前一个命令的返回值$$-当前脚本的进程识别码!!-完整的上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用sudo!!再尝试一......
  • openGauss学习笔记-166 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-166openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-从MY向openGauss数据库进行数据迁移166.1示例2:从MY向openGauss数据库进行数据迁移下面示例演示如何通过CopyManager从MY向openGauss数据库进行数据迁移的过程。importjava.io.St......
  • openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导
    openGauss学习笔记-167openGauss数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据gsql工具提供了元命令\copy进行数据导入。167.1\copy命令\copy命令格式以及说明参见表1\copy元命令说明。表1\copy元命令说明语法说明\copy{table[(column_list)......
  • 阅读笔记:《代码大全》阅读笔记十一
    当谈到软件开发的艺术和科学时,SteveMcConnell的《代码大全》是无可争议的经典之作。它是一本旨在为软件工程师和程序员提供深入洞察的指南,旨在帮助他们提升编程技能、编写高质量代码以及有效管理整个软件开发周期。这本书不仅提供了广泛的理论知识,还结合了大量实用的案例和建议,下......
  • nginx下的return的使用笔记
    nginx下return的功能是重定向,下面是具体用法和注意事项状态码 说明请求方式参数代码结果200正常请求,正常返回GET、POST-301永久重定向GET、POST-301永久重定向GETa=1&b=2参数可以继续传递到新地址301永久重定向POSTaa=11bb=22变成......
  • An Introduction to Bioinformatics Algorithms, Neil C. Jones and Pavel Pevzner, t
    AnIntroductiontoBioinformaticsAlgorithms,NeilC.JonesandPavelPevzner,theMITPress,2004. Thisintroductorytextoffersaclearexpositionofthealgorithmicprinciplesdrivingadvancesinbioinformatics.Accessibletostudentsinbothbiology......
  • MongoDB、Elasticsearch、Redis、HBase应用场景分析
    1.MongoDB一个基于分布式文件存储的数据库系统,由C++编写,旨在为Web应用提供高速、可扩展、高性能的数据存储解决方案。MongoDB采用了文档型数据库模型,即数据以文档的形式存储,而文档是由键值对组成的。MongoDB的名称来自Hadoop创始人DougCutting的宠物狗Mongo。  应用场景......
  • <学习笔记> 四边形不等式
    四边形不等式对于任意的\(l_1\lel_2\ler_1\ler_2\),满足\(w(l_1,r_1)+w(l_2,r_2)\lew(l_1,r_2)+w(l_2,r_1)\)。若等号恒成立,则称函数\(w\)为四边形恒等式。如何证明若满足\(w(l,r-1)+w(l+1,r)\leqw(l,r)+w(l+1,r-1)\),则\(w\)满足四边形不等式。决策单调......
  • vue3学习笔记(四)
    表单输入绑定<!--文本(Text)--><inputv-model="message"placeholder="editme"/><p>Messageis:{{message}}</p><!--多行文本(Textarea)--><textareav-model="message"placeholder="addmultipl......