实验内容

在实验楼的环境中敲入命令

cd LinuxKernel/

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

效果截图:



一、补习第一周云班课视频

(一)文件系统

1、FHS:文件系统层次结构标准

Linux的正常运行是以目录结构为基础的。FHS定义了两层规范,第一层是,/下面的各个目录应该要放什么文件数据,例如/etc应该放置设置文件,/bin和/sbin则应放置可执行文件等。第二层则是针对、usr和/var这两个目录的子目录来定义。例如/var/log防止系统日志文件,/usr/share放置共享数据等等。



FHS将目录定义为四种交互作用的形态,如图:



以“.”开头的文件都是隐藏文件,~通常表示当前用户的home目录

使用pwd命令可以获取当前所在路径。

2、mkdir创建目录

mkdir -p /*同时创建父目录(如果不存在该父目录)*/
cp 被复制文件 复制到的位置 /*复制目录时,加上-r或者-R,表示递归复制*/
rm -f 文件名/*忽略提示,强制删除*/
rm -r 要删除的目录/*删除目录*/
mv 源目录文件 目的目录/*移动文件*、/
mv 就文件名 新文件名 /*重命名文件*/
rename /*批量重命名文件*/

3、使用cat,tac和nl命令查看文件

cat和tac都是打印文件到标准输出(终端),其中cat为正序显示,tac为倒序显示。

标准输入输出:当我们执行一个shell为、、命令行时,会自动打开三个标准文件,即标准输入文件(stdin),默认对应终端的键盘,标准输出文件(stdout)和标准错误输出文件(stderr),后两个文件都对应被重定向到终端的屏幕,以便我们能够看到输出内容。进程将从标准输入文件到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

cat -n 文件名 :显示行号,与nl类似
-b : 指定添加行号的方式,主要有两种:
-b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
-b t:只列出非空行的编号并列出(默认为这种方式)
-n : 设置行号的样式,主要有三种:
-n ln:在行号字段最左端显示
-n rn:在行号字段最右边显示,且不加 0
-n rz:在行号字段最右边显示,且加 0
-w : 行号字段占用的位数(默认为 6 位)

4、more和less命令分页查看文件

man手册内容就是用less来显示内容more命令打开一个文件时,会默认显示一屏,底端显示阅读进入,按enter往下滚动一行,按space往下滚动一屏,h显示帮助,q退出

5、head和tail命令查看文件

/etc/passwd文件可以查看最近新增加的用户。

tail -n 数字 文件名:尾部查看n行

tail -f:可以实现不停地读取某个文件的内容并显示,可以用于日志动态监测。

file 文件名:可以用于查看文件类型。

(二)文件系统操作与磁盘管理

1、df查看磁盘

df:查看磁盘容量
df -h以更易懂的方式显示出来

挂载:Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构).因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。

2、du查看目录的容量

du -h -d 0 ~:只查看1级目录的信息
du -h -d 1 ~:查看2级
du -a 显示目录中所有文件的大小
du -s仅显示总计,只列出最后加总的值

(三)Linux架构:

1、下图摘自链接



操作系统通过进程、虚拟内存和文件三个重要抽象管理计算机的CPU、内存、I/O设备,为用户提供shell,为程序员提供系统调用。

2、常用Linux快捷键

(1)ctrl+alt+t:打开终端

(2)ctrl+shift+t:新建标签页

(3)alt+数字N:终端中切换到第N个标签页

(4)tab终端命令补全

(5)上下键盘:切换命令历史

(6)crtl+c:中断程序运行

3、常用命令

(1)man命令:man 想要查看的命令,查看该命令的帮助

man -a:搜索并打开所有man中同名帮助,例如 man passwd ,你首先会进入一个PASSWD(1) section用户命令类的帮助手册,你再按q键退出当前正在显示的帮助手册,就会进入PASSWD(5) section文件格式类的帮助手册。

man -aw:显示所有手册文件的路径。例如man -aw passwd

/usr/share/man/man1/passwd.1.gz

/usr/share/man/man5/passwd.5.gz

man -M:指定手册文件的搜索路径,有的时候我们自己安装的软件是带有自己的帮助文件的,通常不在我们的MANPATH 里面,那么我们就可以手动指定man搜索的文件路径。如 man -M /home/mysql/man mysql 显示的就是你安装的mysql的帮助,而不是系统默认的旧版mysql的帮助。

man -k:根据关键字搜索联机帮助,是一种模糊搜索。例如要查找"passwd"相关的信息,使用man -k passwd会找到很多和passwd相关的帮助页。

man -f:关键字精确搜索,与-k不同,它只搜索与关键字完全匹配的帮助页。

(一)vim编辑器

1、vim是从vi发展出来的文件编辑器。

vim的设置

:set nu显示行号

:set ai 自动缩行

:set ts=4 设置一个TAB键等于几个空格

(1)vim的6种基本模式和5中派生模式

①普通模式:dd删除当前行,2dd执行两次删除行操作。dj删除当前和下一行,类似2dd。普通模式到插入模式可以用a或者i进行切换。普通模式下退出vim“shift+zz”

光标移动按键 说明
h 左
l 右
j 下
k 上
w 移动到下一个单词
b 移动到上一个单词
删除命令 说明
x 删除游标所在字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行
dw 删除一个单词
d$或者D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
dlG 删除至文档首部

②插入模式:按esc键切换到普通模式。

命令 说明
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换光标所在位置后到一个单词结尾的字符

③可视模式:与普通模式相似,但是移动命令会扩大高亮文本区域,高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮区域上,Vim的文本对象也能和移动命令一样用在这个模式中。

④选择模式:和无模式编辑器的行为类似(windows标准文本控件的方式)。可以用鼠标或者键盘高亮选择文本,不过输入任何字符的话,vim会用这个字符替换选择的高亮文本框,并且自动进入插入模式。

⑤命令行模式:可以输入会被解释并执行的文本,例如执行命令键“:”,搜索“/”和“?”,或者过滤命令键“!”**在命令执行之后,vim返回到命令行模式之前的模式,通常是普通模式。

命令 说明
:q! 强制退出,不保存
:q 退出
:wq! 强制保存退出
:w<文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出

⑥Ex模式:与命令行模式类似,可以一次执行多条命令,离开Ex模式使用“:visuall”。

(三)makefile

1、makefile关系到整个工程的编译规则,一个工程中源文件不计其数,并且按照功能、类型、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行哪些复杂的功能操作,因为makefile像一个shell脚本一样,其中可以执行操作系统的命令。makefile带来的好处就是:“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发效率。

二、第三章 MenuOS的构造

(一)Linux内核源代码简介

1、操作系统两把宝剑

(1)中断上下文的切换——保存现场和回复现场。

(2)进程上下文的切换。

任晓蕊 2019-2020-1 20199302《Linux内核原理与分析》第四周作业的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169219 linux内核原理与分析第二周作业

    "linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...

  3. Linux内核原理与分析-第一周作业

    本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...

  4. 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业

    1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...

  5. 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业

    前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...

  6. Linux内核原理与分析-第二周作业

    写之前回看了一遍秒速五厘米:如果

  7. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  8. 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业

    <Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...

  9. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

  10. 2019-2020-1 20199329《Linux内核原理与分析》第十一周作业

    <Linux内核原理与分析>第十一周作业 一.本周内容概述: 学习linux安全防护方面的知识 完成实验楼上的<ShellShock 攻击实验> 二.本周学习内容: 1.学习& ...

随机推荐

  1. python技巧 — pip install 错误,超时

    jieba库安装失败   pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba wordcloud库安装失败 pip instal ...

  2. 15 IO流(十二)——数据流Data InputStream/OutputStream 未学会

    数据流的引入 Data流的父类是Filter抽象基类,也就是说Data流是装饰流. 数据流可以将数据的类型也一起传输. 数据流的读取写入顺序(数据类型的读写顺序)需要一致. 未完成代码 /** *Da ...

  3. argv和raw_input的区别

    argv是在一开始就要输入不输入程序会出现错误,raw_input是在运行之后进行输入.

  4. C#在linux上运行实现

    1 C#开发完了服务 2 部署到linux centos7上 3无法直接运行 解决方法 1 linux cenos7上安装mono  2 执行mono xxx.exe 即可 解决方法2 下载 anye ...

  5. php位运算及其高级应用

    我们之前学过逻辑与(&&)      条件1 && 条件2 当两边条件同时成立时候返回1 逻辑或(||)         条件1 || 条件2    当两边条件只要有一 ...

  6. 我的 VSCode 配置

    VSCode 配置 先安装 Settings Sync 插件,然后点击"download from github"之类的一个链接,弹出一个输入框,输入 a5922d436b82dd ...

  7. Numpy学习笔记(下篇)

    目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...

  8. PB 计算公式算出结果赋值给另外一列

    在数据窗口中添加一个公式列 --在itmchanged事件中写的计算赋值代码 String ls_gs,ls_sqldecimal{2} ls_gsjg if dwo.name='gs1' then ...

  9. spring boot使用@Aspect记录日志(请求参数,响应结果)

  10. tkinter学习笔记_02

    4. 多行输入框 text # 按钮 # command 执行动作 def insert_point(): var = e.get() t.insert('insert', var) b = tk.B ...