第二周Linux学习笔记

文件打包与解压缩


- tar工具打包
tar的解压和压缩都是同一个命令,只需参数不同,使用较方便。
创建一个包时文件名必须紧跟在 -f 之后,解包一个文件(-x参数)到指定路径的已存在目录(-c参数)。
###各内容及代码:
- 只查看不解包文件(-t参数):
```
tar -tf shiyanlou.tar
```
- 使用tar备份文件,保留文件的属性(-p参数),备份链接指向的源文件而不是链接本身(-h参数):
```
tar -cphf etc.tar /etc
```
- tar可以只需要换一个参数创建不同格式的压缩文件(在创建tar文件的基础上添加一个参数 -z)。
使用gzip压缩文件:
```
tar -czf shiyanlou.tar.gz/home/shiyanlou/Desktop
```
- 解压(*.tar.gz)
```
tar -xzf shiyanlou.tar.gz
```

-###各参数及格式:

总结

  • zip:

    • 打包 :zip something.zip something (目录请加-r参数)
    • 解包:unzip something.zip
    • 指定路径:-d 参数
  • tar:
    • 打包:tar -cf something.tar something
    • 解包:tar -xf something.tar
    • 指定路径:-c参数

##文件系统操作与磁盘管理


- 使用 df 命令查看磁盘的容量出现如下图所示:
![](https://img2018.cnblogs.com/blog/1800811/201909/1800811-20190921100308944-2086255523.png)
图中/dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示第几块硬盘(也可能是可移动磁盘),1k一块表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量
- 使用 du 命令查看目录的容量:
![](https://img2018.cnblogs.com/blog/1800811/201909/1800811-20190921101453290-572356976.png)
代码中-d 参数指定查看目录的深度。**注:du(estimate file space usage)命令与df(report file system disk space usage)命令只有一字之差,容易记混。**
- 磁盘管理:用dd命令从标准输入读入用户的输入到标准输出,如截图所示:
![](https://img2018.cnblogs.com/blog/1800811/201909/1800811-20190921102815639-1845301168.png)
命令中bs用于指定块大小,count用于指定块数量。
- 使用 mkfs 命令格式化磁盘,简单的使用mkfs命令来虚拟磁盘镜像格式化为ext4文件系统代码如下:
```
sudo mkfs.ext4 virtual.img
```


##Linux下的帮助命令


- 什么是内建命令,什么是外部命令呢?
- **内建命令**:实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在bash源码的builtins里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。
- **外部命令**:是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。
- help命令:用于显示 shell 内建命令的简要帮助信息。
- man 命令:是显示系统手册页中的内容。
- info 命令:是来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。


##Linux任务计划crontab


- crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。


计算机工作原理学习笔记


**重点介绍:**
- 计算机的工作原理,涉及存储程序计算机工作模型,基本的汇编语言,C语言程序汇编出来的汇编代码如何在存储程序计算机上工作模型上一步步地执行。
**重点分析:**
- 函数调用堆栈相关汇编指令。


##1.1 存储程序计算机的工作模型


- 冯·诺依曼体系结构:
- 冯诺依曼指出程序和数据在逻辑上是一样的,程序也可以存储在存储器中。
- 冯诺依曼体系结构的要点包括:
- 运算器、存储器、控制器、输入设备和输出设备组成计算机硬件。
- 计算机内部采用二进制表示指令和数据。
- 存储程序的基本含义,
**冯诺依曼体系接够的核心是存储程序计算机。**


##1.2 x86-32汇编基础


###x86-32CPU的存储器
####8086CPU总共有14个16位的寄存器分别是:
- 通用寄存器
- 数据寄存器
- AX:累加寄存器,也成为累加器
- BX:基地址寄存器
- CX:计数器寄存器
- DX:数据寄存器(可分可和的特性:分为两个独立的8位寄存器)
- 指针寄存器
- SP:堆栈指针寄存器
- BP:基指针寄存器
- 变址寄存器
- SI:源变址寄存器
- DI:目的变址寄存器
- 控制寄存器
- IP:指令指针寄存器
- FLAG:标志寄存器
- 段寄存器
- CS:代码段寄存器
- DS:数据段寄存器
- SS:堆栈段寄存器
- ES:附加段寄存器
####32位的寄存器(更具通用性):
- 4个数据寄存器(EAX、EBX、ECX、EDX)
- 2个变址和指针寄存器(ESI、EDI)
- 2个指针寄存器(ESP、EBP)
- 6个段寄存器(ES、CS、SS、DS、FS、GS)
- 1个指令指针寄存器(EIP)
- 1个标志寄存器(EFlags):可以保存当前的一些状态
所有开头为E的寄存器,一般都是32位的。
- EBP是堆栈基址指针,比较重要
-ESP也比较重要,它是堆栈栈顶寄存器
####64位寄存器
- 前面带个“R”的都是64位寄存器
- Flags改为了RFLAGS,EIP改为了RIP
###数据格式
- Intel规范用语中**字*表示16位数据类型。
- 在TA32中**双字**表示32位数据类型。
- 在86-64中64位数称为**四字**。


####寻址方式


- 汇编指令
- 操作码
- 操作数
- 立即数常数
- 寄存器数
- 存储器引用
- 最常见的汇编指令是mov指令,movl中的l是指32位,movb中的b是指8位,movw中的w是指16位,movq中的q是指64位。
- 寄存器寻址:不和内存打交道如%eax,其中%开头后面跟一个寄存器名称。
- 立即寻址:使用$开头后面跟一个数值。
- 直接寻址:是直接用一个数值,开头没有$符号。
- 间接寻址:就是寄存器加个小括号。加个小括号表示这个内存地址所存储的数据。
- 变址寻址:在原地址上加上一个数字4,就是把寄存器存储的数值加4。


####常用汇编指令


- 全是大写字母的一般都是Intel汇编,全是小写字母的一般都是AT&T汇编
- 几个重要的指令:pushl、popl和call/ret.
```
pushl %eax
```
就是把EAX寄存器的值压倒堆栈栈顶。
```
popl %eax
```
就是从堆栈的栈顶去一个存储单元,从堆栈栈顶的位置放到EAX寄存器里,称为出栈。
```
call 0x12345
```
call指令是函数调用,调用一个地址。处于安全方面的原因EIP寄存器不能被直接使用和修改。
与call对应的是ret指令,ret指令是函数返回。call指令是C语言里我们调用一个函数,ret指令是调用函数时压栈的EIP寄存器的值还原到EIP寄存器里。带个“(*)”的指令表示这些指令都是不能被程序员直接使用的,是伪指令。


#实验中的问题及解决方法:


- 实验过程中出现在进行编译成汇编代码的过程中指令输入错误的问题如图:
![](https://img2018.cnblogs.com/blog/1800811/201909/1800811-20190921204656516-91436139.png)
- 在进行正确的大小写更正以及空格号的规范后得以解决,按照指定操作最终如图
![](https://img2018.cnblogs.com/blog/1800811/201909/1800811-20190921205158709-685862478.png)


#总结
- 在输入指令时容易在细节方面犯错如字母的大小写、中间的空格键时常忘记。
- 在本章的学习过程中遇到的最大困难在于编译成汇编代码后对每一行代码的解读和堆栈空间的熟悉度以及堆栈空间在每行代码的执行下怎么产生变化等问题。
- 书中解释的执行每行代码后寄存器的数据如何变化、寄存器什么时候开始执行下一行代码等问题需要反复去熟悉,一遍一遍从头开始读代码才能慢慢适应变化的规律。

2019-2020-1 20199301《Linux内核原理与分析》第二周作业的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 2020-2021-1 20209307 《Linux内核原理与分析》第九周作业

    这个作业属于哪个课程 <2020-2021-1Linux内核原理与分析)> 这个作业要求在哪里 <2020-2021-1Linux内核原理与分析第九周作业> 这个作业的目标 & ...

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

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

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

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

随机推荐

  1. solr查询返回有中括号【可用】

    看图 解决方法: 两个core名称一样就对了 有些版本的solr就是schema.xml文件 这个方法好像不行,再找找看,先记录一下 2019-06-29 改完上面后要重启加载一下core 先看一下

  2. Appium移动自动化测试-----(十三)appium API 之其他操作

    其它操作针对移动设备上特有的一些操作. 1.熄屏 方法: * lockDevice() 点击电源键熄灭屏幕. 在iOS设备可以设置熄屏一段时间.Android上面不带参数,所以熄屏之后就不会再点亮屏幕 ...

  3. confluence6.14.1linux安装破解

    一.简介 Confluence为团队提供一个协作环境.在这里,团队成员齐心协力,各擅其能,协同地编写文档和管理项目.从此打破不同团队.不同部门以及个人之间信息孤岛的僵局,Confluence真正实现了 ...

  4. 使用speedtest-cli测量服务器带宽

    使用speedtest-cli测量服务器带宽,这个是python写的工具,很方便,只需要在服务器端安装即可. 1.安装python-pip # yum install python-pip –y 2. ...

  5. 025 Android 带进度条的对话框(ProgressDialog)

    1.ProgressDialog介绍 ProgressDialog可以在当前界面弹出一个置顶于所有界面元素的对话框,同样具有屏蔽其他控件的交互能力,用于提示用户当前操作正在运行,让用户等待: 2.应用 ...

  6. [转帖]使用Nginx转发TCP/UDP数据

    使用Nginx转发TCP/UDP数据 https://www.cnblogs.com/guigujun/p/8075620.html 编译安装Nginx 从1.9.0开始,nginx就支持对TCP的转 ...

  7. C之多维指针讲解

    转载自:  http://c.biancheng.net/view/2016.html #include <stdio.h> #include <string.h> int m ...

  8. 利用Anaconda软件安装opencv模块

    先说明我安装opencv环境的原因:因为我Anaconda中创建了tensorflow和pytorch虚拟环境,想在每个虚拟环境下都安装opencv模块,这样在后期进行代码调试的时候更加便捷,以下是我 ...

  9. Python24之递归和迭代

    一.递归的含义及一些用途 递归就是函数通过return语句实现自己调用自己的过程,基本上所有的程序语言都有递归算法,常有人说(’一般程序员使用迭代,天才程序员使用递归‘),汉诺塔游戏.谢尔宾斯基三角形 ...

  10. 运输计划[二分答案 LCA 树上差分]

    也许更好的阅读体验 \(\mathcal{Description}\) 原题链接 概括一下题意 给一颗有\(n\)个点带边权的树,有\(m\)个询问,每次询问\(u,v\)两点间的权值和,你可以将树中 ...