Course Shell of Missing Semester(一)

〇、前言

本文是 The Missing Semester of Your CS Education 课程的课后题答案,课程网站点击这里,以后系列文章不再描述前言

本文实验环境:阿里云Ubuntu 22.04

Course shell

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

echo $SHELL
/bin/bash

2、在 /tmp 下新建一个名为 missing 的文件夹

mkdir /tmp/missing

3、用 man 查看程序 touch 的使用手册

man touch

4、用 touch 在 missing 文件夹中新建一个叫 semester 的文件

touch /tmp/missing/semester

5、将以下内容一行一行地写入 semester 文件:

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

直接运行:

echo '#!/bin/shcurl --head --silent https://missing.csail.mit.edu' > /tmp/missing/semester

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

./semester
bash: ./semester: No such file or directory

这肯定不能运行的,因为当前目录是 home ~,应该首先切换到目标文件得目录或者输入完整目录:

/tmp/missing/semester
bash: /tmp/missing/semester: Permission denied

没有权限,这很正常。

7、查看 chmod 的手册(例如,使用 man chmod 命令)

8、使用 chmod 命令改变权限,使 ./semester 能够成功执行,不要使用 sh semester 来执行该程序。您的 shell 是如何知晓这个文件需要使用 sh 来解析呢?

加执行权限执行:

chmod +x /tmp/missing/semester/tmp/missing/semesterHTTP/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"
...

执行成功。

这个脚本:

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

第一行表明脚本解释器为:/bin/sh,看看 bin

ls /bin | grep sh
sh
sha1sum
sha224sum
sha256sum
...

其中,sh 就是指定的脚本解释器。

这里需要注意的是,有多种方式执行这个脚本,但是归根结底分为两类:

. /tmp/missing/semester
/tmp/missing/semester

前一种,指明在当前 shell 中执行,后一种会打开一个子 shell,然后在子 shell 中执行这个脚本。这意味着,如果我们在当前 shell 中执行脚本,无需用 shebang

touch /tmp/missing/semester1
echo 'curl --head --silent https://missing.csail.mit.edu' > /tmp/missing/semester1
. /tmp/missing/semester1
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: Fri, 22 Dec 2023 13:19:52 GMT
cache-control: max-age=600
...

它为什么能运行成功?它没有执行权限:

ls -l /tmp/missing/
total 8
-rwxr-xr-x 1 root root 62 Dec 22 21:04 semester
-rw-r--r-- 1 root root 53 Dec 22 21:18 semester1

如果使用 . 命令(或 source 命令)来执行脚本,即使脚本没有执行权限,也可以成功执行。

这是因为 . 命令是在当前shell中执行脚本,而不是通过创建子shell来执行。当使用 . 命令执行脚本时,脚本中的命令将直接在当前shell中运行,而不需要执行权限。

相比之下,如果您直接运行脚本(例如 ./semester1),则需要确保脚本具有执行权限,否则会出现权限错误。因此,如果您希望在没有执行权限的情况下执行脚本,可以使用 . 命令或 source 命令来运行它。换句话说,当用 shebang 指定解释器后,我们希望这个脚本像一个命令那样自然得运行;不用 shebang 指定解释器时,它完全就是一段文本,当然不需要什么执行权限了。当然,本质依然是,子shell 执行需要执行权限。

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

获取最后修改时间:

stat -c %y /tmp/missing/semester
2023-12-22 21:04:37.621639025 +0800

用重定向符追加到 /tmp/missing/last-modified.txt

stat -c %y /tmp/missing/semester >> /tmp/missing/last-modified.txt

确实增加进去了:

cat /tmp/missing/last-modified.txt
2023-12-22 21:04:37.621639025 +0800

总结(大模型总结)

这个实验是一个很好的 Unix shell 基础练习,涉及文件操作、权限管理和 shell脚本的执行。主要涵盖了以下内容:

  1. 创建文件夹及文件,查看文件的使用手册,修改文件权限以及文件执行。
  2. 使用chmod命令改变文件权限,使其具有执行权限。
  3. 使用shebang指定脚本解释器,理解不同方式执行脚本的区别。
  4. 了解子shell执行脚本时的权限要求,以及如何使用.命令或source命令执行没有执行权限的脚本。
  5. 使用|>操作符将文件输出结果追加到另一个文件中,实现信息提取和写入文件。

这些操作涵盖了 Unix shell 常见的文件操作和权限管理知识点,对于熟悉 Unix/Linux 系统的基本操作和 shell 脚本的编写都有很好的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【三维生成与重建】ZeroRF:Zero Pretraining的快速稀疏视图360°重建

系列文章目录 题目:ZeroRF: Fast Sparse View 360◦ Reconstruction with Zero Pretraining 任务:稀疏重建;拓展:Image to 3D、文本到3D 作者:Ruoxi Shi* Xinyue Wei* Cheng Wang Hao Su ,来自UC San Dieg…

c语言link

下面2个编译命令有何不同: 1. gcc a.o -L./ -lmm -o run 2. gcc -L./ -lmm a.o -o run a.o 依赖于libmm.a, 也就是说a.o 调用了libmm.a中的函数,今天在编码时,发现用第2种方式,链接时会报错,提示符号A没有定义, 但…

鸿蒙OS4.0开发学习路线以及注意点

学习鸿蒙OS 4.0开发需要掌握一系列的技能和知识,以下是一个较为详细的学习路线以及注意点: 基础知识准备 了解鸿蒙OS:首先需要对鸿蒙OS有一个基本的了解,包括其特点、架构和应用领域。 掌握Java和C编程语言:这两种编…

layui监听复选框checkbox选中,分页选中处理

具体实现代码如下&#xff08;需要关注三个位置&#xff1a;done表格加载完毕方法&#xff0c;cols中复选框栏定义&#xff0c;table.on中对复选框选中或取消的状态定义&#xff09;这三个地方的代码直接复制去用就行了 最终选中的数据id为&#xff1a;ids <script>layu…

为实体服务器配置Ubuntu

简介 我们在使用虚拟机时&#xff0c;直接在网上找到镜像然后下载到本地&#xff0c;在VMware创建实例时将该iso文件作为镜像源然后进行基础配置就可以轻松安装配置好Linux虚拟机。 在为实体服务器安装Linux系统&#xff0c;同样的&#xff0c;我们也需要镜像源&#xff08;即…

Jmeter多种定时器实现方法解析

1、固定定时器&#xff08;Constant Timer&#xff09; 用法(场景)&#xff1a;更真实的模拟用户场景&#xff0c;需要设置等待时间&#xff0c;或是等待上一个请求的时间才执行&#xff0c;给 sampler 之间的思考时间 备注&#xff1a;如果需要每个步骤均延迟&#xff0c;则…

Python实现AR协方差结构线性回归模型(GLSAR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 GLSAR是具有AR协方差结构的广义最小二乘法线性回归模型。 本项目通过GLSAR回归算法来构建AR协方差结构…

搭建 ElasticSearch 集群环境

安装基础环境 我们用虚拟机创建出3台机器&#xff0c;修改主机名为s1&#xff0c;s2和s3 # 打开如下文件&#xff0c;修改主机名 vim /etc/hostname # 重启机器 reboot查看centos版本为7.9 [roots1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (AltArch)下载…

常用的Makefile

文章目录 Makefile 单文件编译Makefile 多.c, .h文件编译 Makefile 单文件编译 # 定义变量 CC gcc CFLAGS -Wall -g# 默认目标 all: main# main 目标的依赖为 main.c main: main.o$(CC) $(CFLAGS) -o main main.o# 根据 main.c 文件生成 main.o 目标 main.o: main.c$(CC) $(…

【C语言】记录一次自己犯下的低级错误 o(╯□╰)o(局部数组与指针数组的传参、赋值)

在这里分享一下本人犯下的低级错误&#xff0c;希望大家别掉同样的坑 o(╥﹏╥)o 文章目录 事情原委错误分析及解救办法错误一&#xff1a; 使用局部数组arr并将其作为返回值解决方法&#xff1a;使用动态内存分配来创建数组&#xff0c;并在函数结束前手动释放内存。 错误二&…

在nodejs中使用讯飞星火大模型3.0的demo

需求&#xff1a; 在nodejs引入讯飞星火大模型的api接口, 思路 看了一下官方文档 api连接为一个WebSocket Secure&#xff08;WSS&#xff09;连接&#xff0c;具体思路如下&#xff1a; 引入 crypto 和 ws 模块&#xff0c;分别用于生成加密签名和创建 WebSocket 连接。&am…

力扣每日一题day37[113.路径总和ii]

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

Maven高级篇

Maven依赖管理原则; 可选依赖&#xff1a;隐藏当前项目中的指定的包&#xff0c;如此&#xff0c;别的包引用当前包时&#xff0c;当前包中的指定包就被隐藏了&#xff0c;在别的包中无法看到隐藏的包 排除依赖&#xff1a;指定排除引用包中所包含的依赖&#xff0c;防止与当…

基于Docker环境下的Jenkins搭建及使用

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

2023年12月21日开发正式版v1.2.3更新·本次更新30多个细节优化·完善丰富后台功能·加入演员关联机制

2023年12月21日开发正式版v1.2.3更新本次更新30多个细节优化完善丰富后台功能加入演员关联机制 产品简介 安卓苹果PCH5四端&#xff0c;蜻蜓z暗影版的衍生级版本&#xff0c;2023年优雅草蜻蜓z冬季雪花限定版&#xff0c;不仅继承了蜻蜓z的精良功能&#xff0c;还特色增加了弹…

Python生成器

一、Python生成器介绍 1.什么是生成器 在Python中&#xff0c;使用了 yield 的函数被称为生成器&#xff08;generator&#xff09;。 跟普通函数不同的是&#xff0c;生成器是一个返回迭代器的函数(一次一个值)&#xff0c;只能用于迭代操作&#xff0c;更简单点理解生成器…

飞天使-k8s知识点8-kubernetes资源对象-编写中

文章目录 资源对象是k8s核心概念 资源对象是k8s核心概念 查看防火墙规则 32002 端口的去向 [rootkubeadm-master1 ~]# iptables -t nat -vnL |grep 32000 0 KUBE-MARK-MASQ tcp -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes-dashboard/…

Win系统修改Nginx配置结合内网穿透实现远程访问多个Web站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

使用TypeScript范型提升代码复用性和安全性

什么是TypeScript范型 TypeScript 的范型&#xff08;Generics&#xff09;是一种创建可重复使用的组件的方式&#xff0c;这种组件可以对多种数据类型进行操作。 范型本质上是为参数化的类型系统提供了工具&#xff0c;它提供了一种方法&#xff0c;能让你在定义函数、接口或…

找不到msvcp120dll,无法继续执行代码的解决方法大全

当你尝试启动一个应用程序或游戏&#xff0c;并且遭遇到一个错误信息&#xff0c;告诉你“找不到msvcp120dll,无法继续执行代码”或者收到类似的提示&#xff0c;这说明你的操作系统中缺失了一个关键的动态链接库文件&#xff0c;即 msvcp120.dll。这种情况其实并不罕见&#x…