【missing-semester】The shell

news2025/1/21 15:44:12

文章目录

    • shell 是什么
    • shell 怎么用
      • 执行基本程序
    • Shell中的路径
    • 重定向输入输出
    • 管道pipe
    • root用户的使用
    • 课后练习
    • 参考资料

我的操作环境:Windows11下的WSL2(Ubuntu20.04),之后的所有操作都是基于这个前提的

shell 是什么

命令行操作语言,文本界面:The Shell
功能:以半结构化的方式运行程序(重定向输入、输出)
Bourne Again Shell,即bash

shell 怎么用

windows+rcmd,打开终端,wsl进入Linux子系统
image.png
当前用户(dy)在名为"DESKTOP-K1E7FOE"的计算机上,位于"~/classes/missing-semester"目录下
~指home目录,$表示当前用户不是root,root用户的提示符是#

执行基本程序

date:打印当前日期时间
echo:打印输入
image.png
注意
shell是通过空格来分割解析命令,将分割结果中第一个单词作为待运行的程序,将后续单词作为程序参数
如果提供的参数里包含空格或其他特殊字符,需要使用''""引用该参数,或者使用\将空格或特殊字符进行转义
image.png
说明:这里shell就将"Hello World"作为mkdir的两个参数,于是新建了两个文件夹
shell的环境变量
$PATH即shell接收命令后应该搜索程序的目录
which 程序名打印出给定程序名执行的文件
image.png

Shell中的路径

/表示文件系统中的根目录,以/开头的路径是绝对路径,其他的为相对路径
pwd:打印当前路径
cd:切换路径
.:表示当前目录
..:父级目录
image.png
image.png
ls:展示目录内容,默认展示当前目录
--help:当前命令的使用说明
image.png
image.png
ls-l打印结果说明:
第一个d说明当前行展示的为一目录
紧接着的三个字母组每个组由三个字母组成(rwx),分别指文件所有者,所属组(用户)和其他人对当前文件拥有的权限
-表示没有指定权限
w:写权限,修改该文件夹,添加或者删除其中的文件
x:执行权限,针对文件可执行,针对文件夹即是搜索。举个例子,当一个用户想要进入一个文件夹时,他必须拥有该文件夹及其父文件夹上的x搜索权限
r:读权限,针对文件夹即是使用ls命令等展示文件夹内容

mv:修改文件名/移动文件
image.png

cp:复制文件
image.png

mkdir:新建一个文件夹
image.png

man 程序名:查询程序的使用手册

重定向输入输出

shell中每个程序都有一个input stream和一个output stream,默认情况下input和output均为terminal,即从键盘获得input,在屏幕上打印output
使用重定向运算符
> file:将output重定向到file,>>表示追加内容
< file:将input重定向到file
image.png
cat:连结文件,接收文件名为参数,将文件内容打印到其output stream

管道pipe

|
pipe的亮点:使用一个程序链,将shell中一个program的output作为另一个program的input
image.png

说明:
第一个命令将根目录下ls -l的最后一行打印出来了
第二个命令将hitwh.edu.cnresponse的content-length字段内容打印出来了

root用户的使用

sudo su:输入密码切换为root用户进行操作
在这一部分的讲解中,the teacher使用root用户修改挂载在/sys下系统文件修改如屏幕亮度的硬件内核参数。但由于Windows子系统的Linux不提供此功能,这里将不进行操作演示
image.png
说明:这条命令不能执行的原因在于程序连接是由shell来做的,而非某个程序。这条命令在shell看来是将sudo echo 3的output写到brightness中,但在写入之前shell需要打开brightness文件,打开文件时,shell的权限是当前的user不是root因而无法打开
image.png
说明:tee:读取input显示在终端和写入指定的文件中,这里即是将echo的output打印在屏幕上并输出到brightness文件中

课后练习

  1. 查看当前使用的shell
    image.png
  2. /tmp文件夹下创建一个名为missing的新文件夹
    image.png
  3. 查看touch命令的使用
    image.png
  4. 使用 touchmissing文件夹下创建一个名为semeter的新文件
    image.png
  5. 将下面的内容写入该文件,一次写一行
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu

image.png
不知道用cat怎么处理第一行,直接vim
ps:自己开始的时候用错了命令,cat是将指定文件内容输出,echo才能将指定内容输出
正确的姿势:
image.png
说明
bash中的单引号(‘’)和双引号(“”)是不同的

单引号('):在单引号内的内容会被当作纯文本处理,不会对其中的变量、命令等进行解析
双引号("):在双引号内的内容会被当作命令或变量来解析、

举个例子:
image.png

  1. 输入semester脚本路径以执行该文件
    image.png
    通过ls -l查询发现其没有x权限
  2. 使用sh解释器执行该semester文件
    image.png
  3. 使用man查看chmod命令的使用
    image.png
  4. 使用chmod命令修改semester文件的模式位使得能够用./semester来执行
    这里采用的方案是chmod += rx semester即给所有用户添加读r和执行x的权限
    另外还可以使用 chmod 555 semester达到同样的效果

在Linux系统中,文件或目录的权限通常以三位八进制数表示,每一位数字分别代表所有者、所属组和其他用户的权限

image.png

Shebang: #!这个符号标识了当前文件应该用什么解释器执行,比如这里的Shebang标识#!bin/sh,则shell知道应该去找到sh执行此脚本,并将此脚本作为sh程序的input,而此Shebang行会被interpreter忽略,因为#表示注释

  1. 使用 |> ,将 semester 文件输出的最后更改日期信息,写入主目录下的 last-modified.txt 的文件中
    我的失败操作
    image.png
    别人的正确解法
    image.png
  2. 写一段命令来从 /sys 中获取笔记本的电量信息
    image.png

参考资料

  1. MIT-Missing-Semester chapter1讲义
  2. MIT-Missing-Semester chapter1学习视频
  3. Shebang
  4. MIT-Missing-Semester chapter1 exercise solution

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

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

相关文章

FastAdmin表格顶部增加toolbar按钮

效果入下图&#xff0c;在表格顶部增加一个自定义按钮&#xff0c;点击确认后请求服务器接口 表格对应的index.html中 <div class"panel-body"><div id"myTabContent" class"tab-content"><div class"tab-pane fade active …

使用 Gradle 命令了解项目构建信息

引言 首先&#xff0c;Gradle 作为使用 Android Studio 开发 Android 项目的默认构建工具&#xff0c;它里面的任何东西都基于两个概念&#xff1a; projects ( 项目 )tasks ( 任务 ) 每一个构建由一个或多个 projects 构成&#xff0c;每一个 project 由一个或多个 tasks 构…

基于象群算法优化概率神经网络PNN的分类预测 - 附代码

基于象群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于象群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于象群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

IDEA写mybatis程序,java.io.IOException:Could not find resource mybatis-config.xml

找不到mybatis-config.xml 尝试maven idea:module&#xff0c;不是模块构造问题 尝试检验pom.xml&#xff0c;在编译模块添加了解析resources内容依旧不行 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

微服务和Spring Cloud Alibaba介绍

1、微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构 —> 垂直应用架构 —> 分布 式架构—>…

springboot集成xxl-job详解

文章目录 springboot集成xxl-job详解1、springboot集成xxl-job&#xff1a;&#xff08;1&#xff09;pom文件里引入xxl-job依赖&#xff08;2&#xff09;application.properties配置文件&#xff1a;&#xff08;3&#xff09;在你的项目里新建文件结构如下&#xff1a;XxlJo…

Pinia 及其数据持久化 Vue新一代状态管理插件

黑马前端Vue新一代状态管理插件Pinia快速入门视频教程 Pinia主页 超级简单&#xff0c;不需要耐心 pinia &#xff1a;新一代的VueX 1. 安装 npm install pinia2. 在main.js中引入 import { createPinia } from pinia app.use(createPinia())3. 新建stores目录&#xff0c…

锐捷EG易网关login.php以及其后台cli.php/branch_passw.php RCE漏洞复现 [附POC]

文章目录 锐捷EG易网关login.php以及其后台cli.php/branch_passw.php远程代码执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷EG易网关login.php以及其后台cli.php/branch_passw.php远程代码执行漏洞复…

盘点一款制作电子杂志的网站,小白也能快速上手

随着科技的进步&#xff0c;电子宣传册已经成为了企业宣传和推广的重要工具之一。它们不仅易于制作和更新&#xff0c;而且可以轻松地在网络上传播&#xff0c;让更多的人了解您的品牌和产品。 现在&#xff0c;给大家推荐一款FLBOOK在线制作电子杂志平台。无需任何专业的设计技…

信创之路数据库人大金仓篇

概要 信创大势所趋&#xff0c;吾等上下求索 参考文档 Linux&#xff1a;人大金仓数据库-KingBaseES V8与 php7的连接配置 laravel9适配人大金仓&#xff08;kingbase&#xff09;数据库 thinkphp6适配人大金仓&#xff08;Kingbase&#xff09;数据库 数据库选型 目前比较…

解决网络编程中的EOF违反协议问题:requests库与SSL错误案例分析

1. 问题背景 近期&#xff0c;一个用户在使用requests库进行网络编程时遭遇到了一个不寻常的问题&#xff0c;涉及SSL错误&#xff0c;并提示错误消息为SSLError(SSLEOFError(8, uEOF occurred in violation of protocol (_ssl.c:661)),))。该用户表示已经采取了多种方法来解决…

防范Java多线程陷阱:探秘ABA问题的起因及解决之道!

一、概念 CAS&#xff08;Compare and Swap&#xff09;是一种乐观锁机制&#xff0c;它是一种基于硬件指令实现的原子操作&#xff0c;可以在不使用传统互斥锁的情况下&#xff0c;保证多线程对共享变量的安全访问。在Java中&#xff0c;我们可以使用Atomic类和AtomicReferenc…

微服务架构演进

系统架构演变 没有最好的架构&#xff0c;只有最合适的架构&#xff1b;架构发展过程&#xff1a;单体架构》垂直架构》SOA 面向服务架构》微服务架构&#xff1b;推荐看看《淘宝技术这十年》&#xff1b; 单体架构 互联网早期&#xff0c;一般的网站应用流量较小&#xff0…

PDF处理控件Aspose.PDF功能演示:使用C#查找和替换PDF文件中的文本

使用“查找并替换”选项可以一次性替换文档中的特定文本。这样&#xff0c;您不必手动定位和更新整个文档中每次出现的文本。本文甚至更进一步&#xff0c;介绍了如何在PDF文档中自动查找和替换文本功能。特别是&#xff0c;将学习如何使用C&#xff03;在整个PDF&#xff0c;特…

此芯科技加入绿色计算产业联盟,参编绿色计算产业发展白皮书

近日&#xff0c;此芯科技正式加入绿色计算产业联盟&#xff08;Green Computing Consortium&#xff0c;简称GCC&#xff09;&#xff0c;以Arm架构通用智能CPU芯片及高能效的Arm PC计算解决方案加速构建软硬协同的绿色计算生态体系&#xff0c;推动绿色计算产业加速发展。 继…

Ubuntu 20.04 LTS ffmpeg gif mp4 互转 许编译安装ffmpeg ;解决gif转mp4转换后无法播放问题

安装ffmpeg apt install ffmpeg -y gif转mp4 ffmpeg -f gif -i ldh.gif ldh.mp4 故障&#xff1a;生成没报错&#xff0c;但mp4无法播放&#xff0c;体积也不正常 尝试编译安装最新版 sudo apt install -y yasm axel -n 100 https://ffmpeg.org/releases/ffmpeg-6.0.1.tar.x…

【k8s集群搭建(二):基于虚拟机的linux的k8s集群搭建_超详细_可视化界面Dashboard安装_记录全过程踩坑记录及解决方法】

在 master 执行 # 根据 在线配置文件 创建资源 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml设置访问端口 # 修改配置文件 找到 type&#xff0c;将 ClusterIP 改成 NodePort kubectl edit svc kubernetes-…

QML20、布局

1.概述 首先,QML同样允许大家使用硬编码的方式将位置数值直接写到代码中,但是这样做首先难以适应UI的调整,其次代码维护起来也很困难。因此不推荐这样做。推荐大家使用的是以下三种布局管理器:Row,、Column、Grid、Flow,以及使用Anchor进行布局。 2.Row QML 中的 Row 元素…

JS-项目实战-鼠标悬浮变手势(鼠标放单价上生效)

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…

如何录制视频课程?打造高品质在线教学!

在线教学和知识分享已经成为一种新型的教育模式&#xff0c;录制视频课程成为了许多教师、教育培训机构以及知识分享爱好者的首选。可是如何录制视频课程呢&#xff1f;本文将介绍两种录制视频课程的方法&#xff0c;并对其进行分步骤详细说明&#xff0c;以帮助您轻松创建令人…