Linux编辑器

ops/2025/3/18 18:48:15/

Linux编辑器

yum

yum是包管理器,类似于Linux的应用商店,安装和卸载工具需要使用yum,Linux系统中是预装了yum的

rzsz工具: Linux和window的文件互传工具 yum install lrzsz

查看所有的软件列表: yum list
在这里插入图片描述

el代表centos,@base代表软件的提供方是base

卸载软件 yum remove lrzsz

拓展yum源: yum install epel-release

好玩(无用)的指令

yum install sl

yum源在哪里查看? ls /etc/yum.repos.d/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何更新yum源?

先备份 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

阿里云源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

清华大学源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo

网易源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

清理缓存 sudo yum clean allsudo yum makecache

验证新源是否可用 sudo yum repolist

更新yum源的本质就是: 用新的保存有各种文件替换现有的CentOS-Base.repo文件

vim

vim是一个文本编辑器

vim的模式:一开始进入vim之后是命令模式,输入i进入插入模式,输入shift+分号进入底行模式

在命令模式下,所有的输入都被当做命令来看待

命令模式->插入模式 输入iao即可

插入模式->命令模式 输入esc即可
在这里插入图片描述

若在使用vim编辑文件时,出现了异常,导致后面打开文件的时候会出现异常.是因为vim默认会帮我们保存这个文件的备份.
在这里插入图片描述

此时输入d即可删除掉这个临时文件

vim命令行模式下的常用命令

shift+4进入当前行的最后一列

shift+6进入当前行的第一列

shift+g将光标定位到文本的最结尾

gg将光标定位到文本的最开始

number shift+g将光标定位到文本的第number行

h 光标左移

l 光标右移

j 光标下移(jump)

k 光标上移(king)

number yy 复制当前行开始的number行

number p将剪切板的内容粘贴number次

u撤销

crtl+r对撤销进行撤销

dd 剪切当前行能和p组合使用

number dd 剪切number行

摁住shift,按~进行大小写转换

number r 替换当前光标所所在字符,替换为下一次输入

shift + r进入替换模式

number x 删除光标所在字符,默认向后删

number shift + x 删除光标所在字符,向前删

w 按照单词在行内向右移动

b 按照单词在行内向左移动

shift + 3 查询当前页面中当前光标所在的单词,按n进行跳转

底行模式:

  1. 在这里插入图片描述

  2. 可以在底行中先输入!,再进行编译运行当前的软件

  3. 可以在底行中直接对比两个文件
    在这里插入图片描述

    如何进行光标移动? ctrl + ww w按两次

  4. 在底行模式中输入 set nu可以显示行号,输入 set nonu可以取消行号

vim使用技巧案例

vim test.cpp +11让光标直接定位在11行
在这里插入图片描述

保存并退出vim的另一种方式: shift + zz也就是输入两次Z

vim中批量化加注释的方式

  1. crtl + v
  2. hjkl区域选择
  3. 输入 shift + i
  4. 输入 //
  5. 输入 esc

vim中批量化去注释的方式

  1. ctrl + v
  2. hjkl区域选择
  3. 输入 d

vim的配置

  • 需要到家目录创建 .vimrc的文件

系统中也有一个vimrc文件 通过 ls /etc/vimrc查看

要配置vim,直接编辑对应用户的家目录下的.vimrc文件即可

vim的一键配置,直接在gitee上搜索VimForCpp
在这里插入图片描述

直接执行这个指令即可

gcc/g++编译器

C语言代码编译制定文件名 gcc -o a test.c -std=c99
在这里插入图片描述

C代码也可以使用g++进行编译 g++ -o a test.c
在这里插入图片描述

gcc只能编译C代码,g++可以编译C代码和C++代码

程序翻译的过程

  1. 预处理
  2. 编译
  3. 汇编
  4. 链接

预处理(处理之后还是C语言代码)

  1. 头文件展开
  2. 去注释
  3. 宏替换
  4. 条件编译

编译(编译之后就成了汇编语言)

汇编(将汇编->二进制,也就是可重定位目标二进制文件,但是这个二进制文件是不能执行的)

链接()

预处理实例 gcc -E test.c -o test.i
在这里插入图片描述

注意右边的test.i文件中没有了头文件,因为进行了头文件展开

条件编译时: 可以在编译时添加宏 gcc -o mybin test.c -D V2=1
在这里插入图片描述

可以通过给编译器传递不同的宏的值来进行对代码的动态裁剪


编译实例 gcc -S test.i -o test.s

在这里插入图片描述
在这里插入图片描述

-S选项的功能是?从现在开始进行程序的翻译,编译工作做完就停下来


汇编实例 gcc -c test.s -o test.o

在这里插入图片描述

此时的test.o文件已经是二进制了

-c的功能? 从现在开始进行程序的翻译,如果汇编工作做完就停下来,最终生成的是不可执行的目标二进制文件


链接实例 gcc -o test test.o
在这里插入图片描述

如何查看一个文件所依赖的库呢? 使用 ldd filename
在这里插入图片描述

Linuxwindow
动态库.so.dll
静态库.a.lib

动态库的特点:一旦缺失,所有依赖这个库的程序都无法执行

动态库

  • 优点:比较节省资源,不会出现太多的重复代码,可以节约很多内存,网络等资源
  • 缺点:对库的依赖性较强,一旦库丢失,所有使用这个库的程序都无法运行

静态库

  • 优点:不依赖库,可以在同类型平台进行跨平台使用
  • 缺点:生成的可执行程序的体积比较大,比较浪费资源.内存,网络等资源

默认的编译指令 gcc -o test test.c是动态链接的
在这里插入图片描述

静态链接案例

如何主动进行静态链接? gcc -o mybin2 test.c -static

注意:在第一次执行这个指令的时候,会出错,是因为系统默认没有安装静态库,需要通过 sudo yum install glibc-static指令进行安装
在这里插入图片描述

所以gcc的默认链接就是动态链接,要主动静态链接需要输入 -static 选项

案例:静态链接和动态链接生成的可执行文件的文件大小区别很大
在这里插入图片描述

使用g++进行静态链接 g++ -o file file.cpp ,前置安装: sudo yum install libstdc++-static

自动化构建工具Make/Makefile

make是一个命令 makefile是一个配置文件

mybin:test.cgcc -o $@ @^

在这里插入图片描述

清理项目

mybin:test.cgcc -o $@ @^
clean:rm - r mybin

清理的话直接运行 make clean即可

默认的make只会执行从上到下的第一个目标文件,并且默认只生成一个

使用make的实例
在这里插入图片描述

发现有了mybin文件之后,再次进行make之后,make帮我们检测了此时的mybin文件是否是最新的,只要mybin这个目标文件的最近修改时间比所有的源文件时间的最近修改时间新,就说明这个mybin文件是最新的.

如何查看一个文件的三个时间? stat filename
在这里插入图片描述

这三个时间从上到下分别是 Access Time, Modify Time,Change Time

当对文件的内容做修改时,修改的是Modify Time

如果是对文件的属性做更改那么就是改变文件的Change Time

Access TIme是访问文件的最新的时间,但是并不是每次查看文件都会修改文件的Access Time会浪费系统的资源

如果每次修改文件的话,Modify TimeChange Time都会同时改变,因为修改了文件之后,文件的大小也会变化.文件的属性也就变化了.

使用touch命令可以修改文件的Modify Time. 例如 touch filename

makefile文件的更多的语法:

伪目标 使用 .PHONY进行修饰
在这里插入图片描述

不过一般建议将clean设置为伪目标 因为清理工作总是要执行的
在这里插入图片描述

不建议将源文件设置为伪目标,如果每一次make的时候,每个目标文件都要重新编译的话,会降低编译效率

在makefile文件中还可以进行替换操作,如图
在这里插入图片描述

makfile文件中的递归式写法

mybin:test.ogcc -o mybin test.o
test.o:test.sgcc -c test.s -o test.o
test.s:test.igcc -S test.i -o test.s
test.i:test.cgcc -E test.c -o test.i
.PHONY:clean
clean:rm -f test.i test.s test.o mybin

在这里插入图片描述

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

相关文章

Mybatis批量操作

1、批量插入 <!--批量操作-插入--><!-- 相当于INSERT INTO t_goods (c1,c2,c3) VALUES (a1,a2,a3),(b1,b2,b3),(d1,d2,d3),...--><insert id"batchInsert" parameterType"java.util.List">INSERT INTO t_goods (title,sub_title,origina…

数据库系统原理|课程回顾与习题部分参考答案

YI时间&#xff5c;松子茶碎碎念&#xff5c;MM-DFW&#xff5c;LAMBDA系列 星标&#x1f31f;松子茶 更新不掉队&#x1f31f; 作者 | 松子茶 © 原创内容(除图片) 未经作者授权&#xff0c;严禁转载或镜像 一、课程简介 《数据库系统原理》课程是计算机科学与技术专…

信奥赛CSP-J复赛集训(模拟算法专题)(18):P8318 『JROI-4』淘气的猴子

信奥赛CSP-J复赛集训(模拟算法专题)(18):P8318 『JROI-4』淘气的猴子 题目描述 jockbutt 有一个正整数序列,长度为 n n n,分别为 a 1 , a 2 . . . a n a_1,a_2...a_n a1​,a2​...an​,她非常喜欢这个序列,平时都非常爱惜它们。 可是有一天,当 jockbutt 在和你约…

maven之自定义插件

写在前面 在使用maven肯定是离不开插件的&#xff0c;比如执行mvn clean或者时mvn compile其实运行的就是绑定的默认插件。虽然我们一般不需要来自定义插件&#xff0c;但是为了使用的过程中更加的清晰&#xff0c;来尝试自定义插件还是很有必要的&#xff0c;所以本文就一起来…

基于 Docker 和 Flask 构建高并发微服务架构

基于 Docker 和 Flask 构建高并发微服务架构 一、微服务架构概述 &#xff08;一&#xff09;微服务架构的优点 微服务架构是一种将应用程序拆分为多个小型、自治服务的架构风格&#xff0c;在当今的软件开发领域具有显著的优势。 高度可扩展性&#xff1a;每个微服务可以独…

前端面试:ajax 和 xhr 是什么关系?

在前端开发中&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;和 XHR&#xff08;XMLHttpRequest&#xff09;是两个密切相关但有些不同的概念。以下是对这两者的详细解释及其关系&#xff1a; 1. AJAX 定义&#xff1a;AJAX 是一个用于创建异步 we…

centos Supported Java versions are: [17, 21]

在 CentOS 系统中&#xff0c;支持的 Java 版本取决于你使用的 CentOS 版本以及你所使用的 Oracle JDK 或 OpenJDK 的版本。截至我所知的信息&#xff0c;截至2023年&#xff0c;CentOS 7 和 CentOS 8 都已经停止官方支持&#xff0c;并被各自的替代版本取代&#xff0c;即 Cen…

STM32 - 在机器人领域,LL库相比HAL优势明显

在机器人控制器、电机控制器等领域的开发&#xff0c;需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以&#xff0c;大家常用的HAL库明显不符合要求。再加上&#xff0c;我们学习一门技术&#xff0c;一定要学会掌握底层的原理。MCU开发的底层就是寄存器…