linux_day03

news2024/11/17 17:39:29

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 (在线编译平台),学习汇编基础;

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

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

相关文章

【JAVA学习笔记】69 - 多用户通信系统

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/QQClient https://github.com/yinhai1114/Java_Learning_Code/tree/main/QQServer 〇、环境设置以及前言 该项目内会弱化UI界面的设计,因为JAVA本质不是用来开发界面的。 项目开发流程 对于…

Windows桌面黑屏无法打开软件窗口不显示卡死等解决方案

问题还原 该软件窗口无论如何操作均 无法打开显示的窗口 ,但是 可使用 ALTTab 看到任务视图 目录 问题还原 解决方案 1. 使用 WinR 打开命令窗口 盲输 cmd 2. 盲输 taskkill /f /im explorer.exe 关闭资源管理器 3. 输入 start explorer.exe 启动任务管理器即可恢复正常…

摊牌 了,我不藏了,上线了一年多的网站还是广而告之吧!

大家好,我是大明哥,一个专注「死磕 Java」系列文章创作的程序员。 本文已收录到我的小站:https://skjava.com。 从去年开始一直有小伙伴问我,大明哥,你的网站怎么打不开了?我只能苦涩地跟他说,没…

仿写知乎日报第四周

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

第一百七十回 Material3中的IconButton

文章目录 1. 概念介绍2. 使用方法2.1 filled风格2.2 filledTonal风格2.3 outlined风格 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何修改NavigationBar组件的形状"相关的内容,本章回中将 介绍IconButtion组件.闲话休…

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

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

Mybatis-Plus入门

Mybatis-Plus入门 MyBatis-Plus 官网:https://mp.baomidou.com/ 1、简介 MyBatis-Plus (简称 MP) 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、 提高效率而生。 https://github.com/baomidou/mybatis-p…

优秀智慧园区案例 - 中建科技产业园(中建·光谷之星),万字长文解析先进智慧园区建设方案经验

一、项目背景 中建科技产业园(中建光谷之星),位于武汉光谷中心城、中国(湖北)自贸试验区武汉片区双核心区,光谷发展主轴高新大道北侧,建筑面积108万平米,是中建三局“中建之星”和“…

物联网AI MicroPython学习之语法 network网络配置模块

学物联网,来万物简单IoT物联网!! network介绍 模块功能: 用于管理Wi-Fi和以太网的网络模块参考用法: import network import time nic network.WLAN(network.STA_IF) nic.active(True) if not nic.isconnected():…

WebSocket网络协议

二十六、WebSocket 26.1 介绍 WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HHTP协议和WebSocket协议对比&#xff…

选购护眼台灯,全网都没有说清一个关键点!——照度均匀度

网上关于护眼台灯的选购推荐帖子多如牛毛,好台灯选购要点大体可归纳为以下五点: RG0无蓝光危害(豁免级蓝光危害,RG1为低蓝光危害、RG2、RG3分别为中度和高危危害) 无眩光,无可视频闪(不刺眼…

tensorboard报错解决:No dashboards are active for the current data set

版本:tensorboard 2.10.0 问题:文件夹下明明有events文件,但用tensorboard命令却无法显示。 例如: 原因:有可能是文件路径太长了,导致系统无法读取文件。在win系统中规定,目录的绝对路径不得超…

Java通过JNI技术调用C++动态链接库的helloword测试

JNI调用原理 原理就不细说了&#xff0c;其实就是写个库给Java调&#xff0c;可以百度一下Java JNI&#xff0c;下面是HelloWorld代码测试 编写一个本地测试类 package com.my.study.cpp_jni;/*** 测试Java调用C库* <p>使用命令javac -h . NativeTest.java自动生成C头…

相机突然断电,保存的DAT视频文件如何打开

3-6 本文主要解决因相机突然断电导致拍摄的视频文件打不开的问题。 在平常使用相机拍摄视频&#xff0c;比如使用佳能相机拍摄视频的时候&#xff0c;如果电池突然断电&#xff0c;就非常有可能会导致视频没来得及保存而损坏的情况&#xff0c;比如会产生下图中的这种DAT文件…

云端部署ChatGLM-6B

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

Linux进程的认识与了解[上]

文章目录 1.何为进程?1.1对进程的认识1.2基本概念 2.OS如何管理大量进程?2.1图解2.2进程的形成 3.何为PCB?3.1对PCB的认识3.2task_ struct内容分类3.2对进程表的认识 4.查看进程4.1基础指令4.2获取某进程的PID(process id)4.3杀死进程4.4获取当前进程的父进程的ppid(parent …

王道数据结构课后代码题p40 9.给定一个带表头结点的单链表,写出算法 : 按递增次序输出单链表中各结点的数据元素并释放结点 (c语言代码实现)

本题代码如下&#xff08;有注释&#xff09; void delete_min(linklist* head) {while ((*head)->next ! NULL)//循环到只剩下头节点{lnode* pre *head;//pre为元素最小结点的前驱结点指针lnode* p (*head)->next;//p为工作指针lnode* q;//指向被删除的结点while (p-…

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

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

【MySQL系列】 第二章 · SQL(中)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

Accelerate 0.24.0文档 一:极速入门

文章目录 一、概述1.1 PyTorch DDP1.2 Accelerate 分布式训练简介1.2.1 实例化Accelerator类1.2.2 将所有训练相关 PyTorch 对象传递给 prepare()方法1.2.3 启用 accelerator.backward(loss) 1.3 Accelerate 分布式评估1.4 accelerate launch 二、Accelerate 进阶2.1 notebook_…