linux_day03

1、复习

        遇到虚拟机异常退出,会生成配置文件,不确定文件以后是不是还要用的情况下,先改文件名,再启动虚拟机;

2、磁盘相关命令:

        df(disk full):查看磁盘整体状况

-h :以更方便模式展现

Mounted on:挂载

/      : 根目录

du(disk used):查看磁盘使用情况(可以具体查看目录的使用情况)不加参数默认当前目录

查看指定目录的使用情况:

-d(depth):du -h -d 0(0表示层数,1表示下一层)

3、远程拷贝(上传,下载):scp(srcure copy)

        scp:使用的是ssh协议;

        scp src(本地路径) dest(远程路径);

本地路径:绝对路径()相对路径;

远程路径:用户名@IP: 路径;

在windows下创建一个scpTest.txt文件,在其目录下打开cmd输入 scp scpTest.txt leao@192.168.146.129:~  根据提示完成对文件的上传,目标服务器leao;

查看leao根目录,完成上传;

如果是文件夹要加-r参数;

下载文件把目标文件改到远程路径即可;

从leao服务器下载work文件夹,命令结束小加点

每次上传下载都要密码,为避免麻烦可以使用另一种验证手段:

采用密钥和公钥匹配:自己保留密钥,用户用公钥获取授权;

通过ssh-keygen创建和保存密钥和用钥;(windows环境下测试)

id_rsa:密钥;

id_rsa.pub:公钥;

分发公钥给远程服务器leao:

分发成功,远程服务器获得id_rsa.pub公钥文件:

服务器会生成.ssh文件,通过ll查看:

采用追加模式把公钥文件写入.ssh/authorized_keys;

写入文件后查看公钥;

再次上传文件则不需要密码验证:

gitee的常规用法:

从远程仓库下载,在本地仓库修改,      

修改本地仓库,add(将修改添加到缓存中,stage)

commit(确认修改)

把本地的修改上传到远程仓库:

git是多人合作,另外一个人也会修改:

当远程仓库发生修改,另一个人的原始版本文件修改版本与远程仓库不匹配,另一个人就不能上传,就需要把远程仓库pull下来进行同步,发现远程仓库和本地仓库不一样,发生了代码冲突,需要解决;如果只修改自己的,不修改别人的按下ctrl + x 退出即可;退出后再pull,同步成功后才能修改;

get pull 仓库路径,clone目标文件;(先在gitee上上传公钥)

4、vim

所见即所得形式:记事本,word,,markdown

命令式:vi,vim(m表示improved),emacs

VIM有三种模式:

                普通模式(命令模式)

普通模式到插入模式:i,I,a,A,o,O

i:插入到光标的前面(insert)                        I :插入到行首

a:插入到光标的后面(append)                    A:插入到行尾

o:插入到下一行的开始                                  O:插入到前一行

短命令:

长命令: 以:开头的命令  

光标移动:

        h(左)j(下)k(上)l(右)

翻页操作:

                CTRL + f:下一页;

                ctrl + b :上一页;

                ctrl + u :上半页;

                ctrl + d :下半页;

                H:把光标移动到页首,

                L:该页最后一行的行首,

                gg:文件的开始

                G:文件的末尾

                w:下一个单词(word)

                b:上一个单词

                [ n]- :往前n行

                [ n]+:往后n行    (直接在键盘上输入n  和加减符,n表示数字)

                [n]G / : [ n ]  :去往n行(短命令数字加G,长命令冒号加行号)

在命令模式下编辑文本:

        删除(剪切):

                x:删除一个字符

                dd:删除一行

                [n]dd /  d[n]d :删除n行(从光标往后n行删除)

                :x,y    d       :删除x到y行

                d^  :删除到行首

                d$   /   D:删除到行尾;(删除注释)

                dw:删除一个单词

                [n] dw   /  d[n]w :删除n个单词(从光标开始删除)

                dt):删除到右括号  (delet to)//    dt"    :删除到双引号,删除字符串为空串

        p:粘贴(parst)

        u:撤销修改(undo)

        ctrl + r:恢复修改(recover)

        yy:拷贝一行(yank)

        [n]yy  / y[n] y:拷贝n行

        :x ,y  y     拷贝x到y行

        yw :拷贝一个单词

        [n]yw  /y[n]w  :拷贝n个单词

        查找和替换:

                查找:/regex   (regex表示正则表达式,也可以直接匹配单词)

匹配f开头t 结尾的单词,[] 是一个集合  ^表示对集合取反,(不匹配所有带空格的,以此排除句子)

n :下一个匹配项

N:上一个匹配项

替换:

:s/regex/substitue/选项   (s表示替换命令,把regex该正则表达式匹配到的内容替换成substitue)       默认没有选项就只替换第一个

选项:g,替换该行的所有匹配项;

多行替换:

第一行到第十行;

全局替换匹配项 :% s/regex/substitue g;

编辑模式(插入模式,所见及所得的模式)

命令模式到插入模式的转化(i,I,a,A,o,O)

i:插入到光标的前面(insert)                        I :插入到行首

a:插入到光标的后面(append)                    A:插入到行尾

o:插入到下一行的开始                                  O:插入到前一行

视图模式(visual)

        作用:选择范围,从命令模式到其他模式,视图模式要从命令模式转化

V  :行优先----------行选模式   

ctrl + V  :竖优先--------列选模式

选择范围,y(拷贝),d(删除),

批量注释和批量删除注释:

(添加//,进入列选模式,ctrl + i (I)行首插入//,esc后选择的列都会被注释;)

步骤:将光标移动到要注释的第一行,ctrl + V 进入列选模式,I ,输入//,esc退出

代码对齐:gg = G(对全文代码进行对齐(没有集成开发环境精细))

对文件的操作:

 :W  (保存)(ctrl + s,使vim进入僵死状态,退出僵死状态ctrl + q)

:q (退出,未修改文件)

:q!(不保存修改并退出)

:wq(保存修改并退出)

多窗口:

:new filename  (在新窗口中打开filename,把窗口切成两个,上下分屏)

:split

:sp

ctrl + w  (可以切换光标所在的窗口,w表示window)        

退出当前窗口:q;保存退出(wq);或者(q!)不保存退出;:qa(退出所有窗口)

多窗口左右分屏:

:vnew      filename

:vsplit

:vsp

多标签:

:tabnew   filename (打开新标签)

切换:

gt          下一个

gT          上一个

切换和上面多窗口相同;
:set nuber   设置行号每次都需要重新设置可以进入配置文件配置vim

配置vim:

~/.vimrc     (rc表示runni command  vim启动时会读取这个文件,并执行里面的命令)

syntax on:关键字高亮显示

hlsearch:查找内容高亮显示

tabstop:tab键默认设置成4空格(不设置是默认8个空格)

autoindent:自动缩进

vimtutor :vim练习手册

5、编译工具链:SDK(software development kit)

        IDE(集成开发环境)vs,clion,eclipse,xcode

gcc(GNU开发的),clang;

gcc -v :查看版本信息

目标平台架构:(交叉编译,一般安卓架构采用ARM架构)

遵循posix标准:

预处理:执行预处理指令

#include:文件包含

#define M 5  :宏定义(简单的文本替换)

#define SIZE(a)  (sizeof(a)/sizeof(a[0]))  :宏函数

#if      #else       #endif     :编译预处理(可以根据条件跳过编译某些片段,预处理后不会包含if 0部分,宏开关)

gcc  -E hello.c  -o   hello.i        (-E 预处理, -o生成)

#ifdef   N  #else  #endif        :(宏开关,定义了N,就编译;)

没有定义N,所以在.i文件中输出else;

预处理过程中去定义宏N:

gcc  -E  hello.c  -o hello.i  -D N 

.i文件显示world;

#ifndef    #else     #endif    :ifnotdefine;如果没有定义目标头文件就满足条件

#ifndef    头文件名  

#define M 100

#endif

gcc  -E  hello.c  -o  hello.i

以上条件编译方法可以为不同的目标平台生成不同的目标代码;

宏开关会用作防御式声明(避免重复包含多个头文件)

#ifndef  _ _foo_h_

#define     xxx

#endif

编译:将c语言代码编译成汇编代码;

        有两种风格的汇编代码(AT&T 汇编,x86/x86_ _64)两种风格汇编代码目标寄存器,源寄存器位置相反;

可以根据预处理指令获得汇编代码:

gcc  -E hello.c -o hello.i

gcc -S  hello.i  -o hello.s

也可以一步到位:

gcc -S hello.c  -o hello.s

对照源文件看汇编代码(实例代码为x86/x86_ _64架构的汇编代码):

x86架构兼容8086架构 (8086 数据总线:16bit      地址总线:20bits)

一个字长:word        16bits  (汇编字长因为8086架构所以为16bits)

L  :long word(长字)32bits(用L表示长字,长字是32bits)

q  :quadra   word        64bits  (q表示四个字)

double (2)  triple(3)quadra (4) penta(5)

push(入栈)           (pushq q表示字长)

pop(出栈)

mov移动(复制)

lea(load effective address)加载有效地址      (leaq q表示字长)

call (函数调用)

ret (函数返回)

%rbp(以%开头的是寄存器,bp表示base pointer(栈帧基址寄存器,存放上一个栈帧的地址))

%rsp(stack  pointer(栈顶寄存器))           bp和sp组成栈帧的大小

%eax(存放返回值)

------------------------------------------------------

pushq        %rbp(将%rbp寄存器的值保存在栈帧中)

movq         %rsp   %rbp     (把rsp的值放入rbp)   rbp -rsp = 0  栈帧大小为0

leaq         .LCO(%rip),%rdi  (.LCO把字符串地址赋值给%rdi(rdi存放第一个参数的位置),%rip里存的是helloworld的地址)

call        puts@PLT  (编译器对printf进行优化,改成puts)

movl     $0,%eax(把返回值0放入eax寄存器)

popq     %rbp(出栈后,恢复%rbp的值)

ret  (函数调用结束)

--------------

godbolt.org (在线编译平台),学习汇编基础;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ztree结合hmap使用经验分享

项目背景 在建德封控拦截系统(Vue3antd2.x)为追求更快的地图初始化体验,在尝试了hmap2.5.0版本以及2.6.3版本后,由于这两个版本在现场电脑的初始化速度不够流畅,最终使用的是hmap2.1.3版本。同时由于布控选设备&#…

2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年起重机械指挥考试试卷为正在备考起重机械指挥操作证的学员准备的理论考试专题,每个月更新的起重机械指挥操作证考试祝您顺利通过起重机械指挥考试。 1、【多选题】《中华人民共和国特种设备安全法》…

在CMake中打印日志信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...) (无) :重要消息 STATUS :非重要消息 WARNING:CMake 警告, 会继续执行 AUTHOR_WARNING:CMake 警告 (dev), 会继续执行 SEN…

【hacker送书第一期】嵌入式虚拟化技术与应用

第一期图书推荐 前言为什么嵌入式系统需要虚拟化技术?专家推荐本书适用群体内容简介目录权威作者团队参与方式 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展,虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系…

云端部署ChatGLM-6B

大模型这里更新是挺快的,我参考的视频教程就和我这个稍微有些不一样,这距离教程发布只过去4天而已… 不过基本操作也差不多 AutoDL算力云:https://www.autodl.com/home ChatGLM3:https://github.com/THUDM/ChatGLM3/tree/main Hug…

消息队列之初识Rabbit及安装

文章目录 一、MQ的相关概念1.什么是MQ?2.为什么要用MQ2.1流量消峰2.2应用解耦2.3异步处理 3.MQ 的分类3.1.ActiveMQ3.2.Kafka3.3.RocketMQ3.4.RabbitMQ 4.MQ 的选择4.1.Kafka4.2.RocketMQ4.3.RabbitMQ 二、RabbitMQ的相关概念1.四大核心概念2.RabbitMQ 核心部分3.Ra…

OpenMMlab导出yolov3的onnx模型并推理

手动导出 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth mod…

数据结构-堆和二叉树

目录 1.树的概念及结构 1.1 树的相关概念 1.2 树的概念 1.3 树的表示 1.4 树在实际中的应用(表示文件系统的目录树结构) 2.二叉树的概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的存储 3.堆的概念及结构 4.堆的实现 初始化堆 堆的插入…

仿写知乎日报第四周

本周主要修改了以往的一些bug,实现了一些遗漏的新功能。 无限右滑 无限右滑我听了学长的思路,首先在scrollView的画布大小设置多一个宽度的画布,然后每当滑到那个画布的时候,就调用一个通知,该通知会触发在首页的vie…

【 第十三章】软件设计师 之 面向对象程序设计

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 备考资料导航 软考好处:软考的…

有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, …

k8s笔记资源限制,亲和和性 污点和容忍

镜像下载失败 当宿主机资源不足时,会把pod kill ,在其他node 重建 在宿主机放可能多的资源 requests(请求) limits(限制) 超出百分比 容器 pod namespace级别 pod使用资源过多,导致宿主机资源不足,会导致重建pod cpu 内存限…

【设计原则篇】聊聊单一职责原则

因为是刚开始写软件设计相关的文章,这里先大概介绍下,软件设计相关的知识图谱。大概分类的话, 编程范式 软件设计相关原则 Don’t Repeat Yourself (DRY)Keep It Simple, Stupid(KISS)Program to an interface, not an implementationYou Ai…

深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用

大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻J…

STM32 寄存器配置笔记——GPIO配置输出

一、概述 本文主要介绍GPIO 作为输出时的寄存器配置。包括时钟配置,输出模式配置。以STM32F10xxx系列为例,配置PA8、PD2端口作为输出,输出高/低电平。 二、配置流程 1)GPIO外设时钟 通过查找STM32F10xxx中文参考手册得知&#xf…

Vant 移动端UI 组件自动引入

Vue项目中安装Vant # Vue 3 项目,安装最新版 Vant npm i vant 组件按需引入配置 Vant按需引入- - -安装:unplugin-vue-components 插件 unplugin-vue-components 插件可以在Vue文件中自动引入组件(包括项目自身的组件和各种组件库中的组件&…

“总线仲裁”——以CAN总线为例

总线仲裁 1.什么是总线仲裁2.为什么要总线仲裁3.怎么进行总线仲裁(总线仲裁机制)3.1 如何确定冲突3.1.1 确定冲突前提3.1.2 同时冲突3.1.3 延时冲突 3.2 冲裁逻辑3.2.1 避免延时冲突3.2.1 避免同时冲突 1.什么是总线仲裁 提到总线仲裁的概念&#xff0c…

设计模式1

![在这里插入图片描述](https://img-blog.csdnimg.cn/c9fbecf1ae89436095885722380ea460.png)一、设计模式分类: 1、创建型模式:创建与使用分离,单例、原型、工厂、抽象、建造者。 2、结构型模式:用于描述如何将对象按某种更大的…

SpringBoot 自动配置原理

SpringBoot 自动配置原理 注: 本文使用的springboot版本为 2.7.11 1、SpringBootApplication 字面分析,这个注解是标注一个Spring Boot应用。 Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited SpringBootConfiguration En…

Vue3 setup函数

一、setup函数介绍 setup函数是Vue3中全新的一个配置项,值为一个函数,是所有 Composition API 中“表演的舞台”。 我们在Vue2中用到的所有数据、方法,都需要配置在setup中。 这是我们在Vue2中的写法: 这是我们在Vue3 setup中的…