第二周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. dotnet core use MangoDB

    安装MangoDB 同样我这边再次使用Docker, 方便快捷: # 拉取镜像 docker pull mongo # 运行镜像 docker run -d -p 37017:27017 --name ...

  2. LeetCode 442. 数组中重复的数据(Find All Duplicates in an Array) 17

    442. 数组中重复的数据 442. Find All Duplicates in an Array 题目描述 Given an array of integers, 1 ≤ a[i] ≤ n (n ...

  3. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  4. 《Mysql - 在Mysql服务出现瓶颈时,有哪些“饮鸩止渴”提高性能的方法?》

    一:情景 - 业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内.临时性地提升一些性能. - 在业务高发时候,Mysql 服务压力过大,导致业务受损, 用户的开发负责人说,不管你用 ...

  5. 利用Python进行数据分析 第5章 pandas入门(2)

    5.2 基本功能 (1)重新索引 - 方法reindex 方法reindex是pandas对象地一个重要方法,其作用是:创建一个新对象,它地数据符合新地索引. 如,对下面的Series数据按新索引进行 ...

  6. littleFS在RT1052移植笔记

    环境:rt1052单片机+16G tf卡 为什么使用littleFS? NXP官方SDK支持! 先进的损耗平衡功能(wear leveling)可提供最长的快闪及内存寿命及最大的使用量.因为FALSH ...

  7. ifconfig介绍

    [root@controller01 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNK ...

  8. 火狐浏览器 访问所有HTTPS网站显示连接不安全解决办法

    当 Firefox 连接到一个安全的网站时(网址最开始为“https://”),它必须确认该网站出具的证书有效且使用足够高的加密强度.如果证书无法通过验证,或加密强度过低,Firefox 会中止连接到 ...

  9. javascript 之 扩展对象 jQuery.extend

    在JQuery的API手册中,extend方法挂载在JQuery 和 JQuery.fn两个不同的对象上,但在JQuery内部代码实现的是相同的,只是功能各不相同. 官方解释: jQuery.exte ...

  10. Nginx快速自查手册

    本项目是一个 Nginx 极简教程,目的在于帮助新手快速入门 Nginx. demos 目录中的示例模拟了工作中的一些常用实战场景,并且都可以通过脚本一键式启动,让您可以快速看到演示效果. 概述 什么 ...