【Linux】Linux环境基础开发工具使用

 上篇博客我们学习了Linux权限相关知识,那么这节课我们来学习一下Linux环境基础开发工具使用吧~,主要包括yum、vim、gcc/g++的使用,以及Linux项目自动化构建工具。

目录

Linux软件包管理器--yum

yum是什么

yum相关操作

yum本地配置

Linux编辑器-vim的使用

vim的基本概念 

vim的基本操作

vim命令模式命令集

vim底行模式命令集

Linux编译器-gcc/g++使用

预处理

编译

汇编

链接

静态库与动态库

Linux项目自动化构建工具-make/makefile


Linux软件包管理器--yum

yum是什么

yum是一个软件下载安装管理的一个客户端,类似小米应用商店、华为应用商城。Linux中软件包可能有依赖关系,yum会帮助我们解决依赖关系的问题。

yum相关操作

yum安装三板斧:

查找:yum list | grep XXX

安装:[sudo/以root身份]yum install [-y] XXX

删除:[sudo/以root身份]yum remove [-y] XXX

yum本地配置

配置是在干什么呢?

yum会根据/etc/yum.repos.d/该路径下面的配置文件,来构成自己的下载链接,(根据OS版本,根据你要下载的软件),yum帮助我们下载,安装一般的机器,内置的链接地址是centos的官网,软件链接都是指向国外的。yum可能比较慢,所以需要配置。

如何配置呢?本质就是更改文件或者更改文件内容

例如,

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

 这行命令的意思就是,把在阿里云远端的文件下载下来,命名为CentOS-Base.repo

在配置完成后,

清除缓存  yum clean all

生成缓存  yum makecache

升级更新  yum -y update

使用yum一般都要是联网的!

Linux编辑器-vim的使用

vim是一款多模式的编辑器,所谓多模式,是指插入模式、命令模式和底行模式

vim的基本概念 

插入模式

只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令模式。该模式是我们后面用的最频繁的编辑模式。

命令模式

核心模式。控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式下,或者到底行模式。

底行模式

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,按shift+;(也就是:) 即可进入该模式。

vim的基本操作

进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:

$ vim test.c

不过有一点要特别注意,就是你进入vim之后,是处于【命令模式】,你要切换到【插入模式】才能够输入文字。

请注意,vim默认不会帮我们新建文件的,只有当保存时,该文件才会首次被创建。

【命令模式】切换至【插入模式】

输入a

输入i -- 加一个空格

输入o -- 另起一行

【插入模式】切换至【命令模式】

按ESC键即可。

【命令模式】切换至【底行模式】

shift+;其实就是输入:

退出vim及保存文件,在【正常模式】下,按一下「:」冒号键进入【底行模式】,例如

:w(保存当前文件)

:wq(保存并退出)

:q!(不保存强制退出)

为了方面理解记忆,画出模式切换图:

vim命令模式命令集

进入插入模式

按「i」切换进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件;

按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;

按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

从插入模式切换为命令模式

按「ESC」键。

复制

n+yy:复制前n行( n:连续复制n行)

n+p:粘贴,当前光标的下一行(n:表示把指定内容粘贴n次)

n+dd:剪切/删除指定行、连续的多行

撤销上一次操作

u:撤销

ctrl+r:对历史撤销

移动光标

shift+4=$:将光标定位到当前行的结尾

shift+6=^:将光标定位到当前行的开始

gg:将光标定位到整个文本的最开头

shift+g=G:将光标定位到整个文本的最后一行

n+shift+g=nG:将光标定位到整个文本的任意一行

h,j,k,l:左、下、右、上,也可以带n。

(这四个字母快速记忆:h在最左边所以代表左,l在最右边所以代表右,k-king国王高高在上代表上,j-jump向下跳)

w:按照单词为单位进行光标后移

b:按照单词为单位进行光标前移

shift+`=~:大小写快速切换

shift+zz=ZZ:保存并退出

删除文字

n+x:删除光标后续的一个字符,可以一次删除n个(一行内)

n+shift+x=X:删除光标前的一个字符,可以一次删除n个(一行内)

替换

n+r:对光标指定的位置,进行一个字符的替换,可以一次替换多个

shift+r=R:进入替换模式,直接进行文本替换

vim底行模式命令集

在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

w:保存

q:退出

wq:保存并退出

!:强制

set nu、nonu:打开行号、去掉行号

/关键字:做搜索

!command:不退出vim,可以进行shell命令的执行,方便常用函数查看

:vs filename分屏,用于多文件操作

Linux编译器-gcc/g++使用

gcc编译器只能用于编译C程序,g++编译器既可以编译C程序,也可以编译C++程序。

程序的翻译过程主要包括四步:预处理、编译、汇编、链接。

预处理

gcc命令

gcc -E test.c -o test.i

这句代码是预处理,预处理会完成宏替换、去注释、头文件展开,条件编译等。-o test.i要挨在一起,生成test.i文件,-o指目标文件。从现在开始进行程序的翻译,预处理完成,就停下。

编译

gcc -S test.i -o test.s

这句代码是编译,将C语言变成汇编语言,从现在开始程序的翻译,编译完成就停下来

汇编

gcc -c test.s -o test.o

这句话是汇编,将汇编语言编译成二进制目标文件,从现在开始进行程序的翻译,汇编完成就停下来。

链接

gcc test.o -o my.exe

这句话是链接,形成可执行程序。

巧记命令:ESc(按顺序,键盘左上角的ESC键,特别记忆一下c是小写),形成的文件是iso(按顺序,镜像文件后缀就是iso)。

静态库与动态库

在windows中,动态库以.dll为后缀,静态库以.lib为后缀;而在Linux中,动态库以.so为后缀,静态库以.a为后缀。

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。

Linux项目自动化构建工具-make/makefile

make是一条指令,makefile是一个文件,两个搭配使用,完成项目自动化搭建。make会根据makefile的内容,完成编译/清理工作。

上图中,有这样一行.PHONY:clean.PHONY:XXX,XXX对应的方法,总是要被执行的。

现在抛出两个问题并给予回答:

a.为什么makefile对最新的可执行程序,默认不会重新生成呢?

提高编译效率。

b.makefile怎么知道我的程序需要被编译了呢?

比较可执行文件的最近修改时间和源文件最近修改时间,如果可执行文件的最近修改时间更靠近当前时间,那么需要重新编译,否则,不需要重新编译。

几个符号 

文件依赖性

make/makefile会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法,但必须注意的是,所要形成的目标文件必须放在第一行(即上图中的2、3行),剩下的3-8行可以乱序。

也就是说,当执行到第1行时,需要依赖文件code.o,但是这时还没有,就需要去下面找,第3行形成了code.o,但是所需的code.s还是没有,这就需要依次往下类推,直到遇到code.c,code.c是存在的。

支持变量替换

makefile支持变量定义,就类似于C语言中的一样,这非常方便以后的修改!

 我们在进行make/makefile时,会打印出对应的命令:

如果我们不想打印出这样的命令,可以在makefile文件对应的命令前加上@符号,

依赖方法也可以有多行,(加上@是为了不打印出对应的执行语句)

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

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

相关文章

程序员怎么写简历_写简历软件

你们在制作简历时,是不是基本只关注两件事:简历模板,还有基本信息的填写。 当你再次坐下来更新你的简历时,可能会发现自己不自觉地选择了那个“看起来最好看的模板”,填写基本信息,却没有深入思考如何使简历…

小程序样例5:简单登录界面

基本功能 1、头像选择、用户名、密码、昵称选择、性别、城市 2、确认注册跳转 我的页面。 3、其他注册方式跳转用户名 密码登录方式 4、清除 和 密码显示按钮: 5、用户名、密码合法性校验: 6、点击微信图标,调转回微信登录: 代码…

模糊神经网络控制器(MATLAB)

模糊神经网络控制器(Fuzzy Neural Network Controller)是将模糊控制和神经网络相结合的一类控制器。它综合了两者的优点,主要包括以下特点: 知识表达能力强。模糊系统的语言规则和神经网络的学习能力相结合,可以表示复杂的非线性映射关系。 自适应能力强。神经网络提供了在线学…

幻兽帕鲁服务器部署教程(超详细)

幻兽帕鲁服务器部署教程(超详细) 文章目录 幻兽帕鲁服务器部署教程(超详细)[TOC] 前言一、怎么部署属于自己的幻兽帕鲁服务器一、怎么登录游戏体验? 前言 在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同…

HCIA学习作业五

拓扑图: PC端 PC1>ipconfig PC2>ipconfig PC3>ipconfig PC4>ipconfig PC>ping PC1>ping 192.168.1.125 PC1>ping 192.168.1.254 PC1>ping 192.168.1.253 PC2>ping 192.168.1.125 PC2>ping 192.168.1.253 PC3>ping 192.168.1.126…

蓝桥杯备战——9.读写AT24C02

1.分析原理图 由上图我们可以看到AT24C02通过IIC与单片机进行通讯,由于A0,A1,A2都接地,所以器件地址为0XA0。 2.IIC通讯协议 比赛的时候会提供IIC驱动代码,我们不需要自己去写,我这里简单贴出一份: #include "i…

电池-电量监测基础知识

一、为何要进行电池电量监测 不知各位有没有想过为何现在手机电池和笔记本电脑电池不容易鼓包了?十年前还经常出现的电池鼓包最近像是消失了一样,其实是因为随着电量监测技术的发展,哪怕是最基本的电子设备也有电池侧和产品侧至少两级电量监测…

1.30 C++ day4

思维导图 构造函数、析构函数、拷贝构造函数、拷贝赋值函数 代码 #include <iostream>using namespace std;class Stu//封装一个学生类 { private://私有属性string name;int id;double *score; public://公共属性//无参构造函数Stu(){cout << "Stu::无参构…

File、IO流(一)

File、IO流 File File是Java.io包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以是文件、或者文件夹&#xff09;。 注意&#xff1a;File类只能对文件本身进行操作&#xff0c;不能读写文件里面存储的数据。 IO流 用于读写数据的&…

二叉树-堆实现

目录 Test.c测试代码 test1 test2 test3 &#x1f387;Test.c总代码 Heap.h头文件&函数声明 头文件 函数声明 &#x1f387;Heap.h总代码 Heap.c函数实现 ☁HeapInit初始化 ☁HeapDestroy销毁 ☁HeapPush插入数据 【1】插入数据 【2】向上调整Adjustup❗ …

nginx负载均衡案例

大家好今天给大家带来nginx负载均衡实验案例,首大家先看一下我的各类版本信息。&#xff08;还有两台设备信息相同就不展示了&#xff09; 一&#xff0c;搭建nginx环境 ❶首先创建Nginx的目录并进入&#xff1a; [rootlocalhost]# mkdir /soft && mkdir /soft/nginx…

java-JUC并发编程学习笔记03(尚硅谷)

线程间通信 例子&#xff1a; 对一个值1 -1交替完成&#xff0c;a的值就是1 b的值就是0 这个过程就是线程间通信 Synchronized实现&#xff1a; 虚假唤醒问题&#xff1a; 我们再添加两个线程。 我们发现我们的结果就不对了。 我们只需要使用while即可。 我们线程通信的最后一…

商品主图重复如何处理?淘宝、拼多多和阿里巴巴多店铺商品上架运营技巧

采集铺货的时候&#xff0c;商品主图重复上架有什么影响&#xff1f; 我们在1688、阿里国际站等采集货品&#xff0c;在抖音、淘宝、京东和拼多多进行售卖的时候&#xff0c;由于货源类似&#xff0c;经常会发现商品重复&#xff0c;无法在平台获得有效流量。以企业为纬度&…

【保驾护航】HarmonyOS应用开发者基础认证-题库-2024

通过系统化的课程学习&#xff0c;熟练掌握DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK等HarmonyOS应用开发的关键概念&#xff0c;具备基础的应用开发能力。 考试说明 1、考试需实名认证&#xff0c;请在考前于个…

【云原生】consul自动注册,实现负载均衡器与节点服务应用解耦,批量管理容器

目录 一、consul解决了什么问题&#xff1f; 二、consul的模式 三、consul的工作原理 四、实操consul连接负载均衡与容器 步骤一&#xff1a;完成consul的部署 步骤二&#xff1a;完成gliderlabs/registrator:latest镜像的拉取&#xff0c;并完成启动 步骤三&#xff1a;…

二维数组的学习

前言 在前面我们学习了一维数组&#xff0c;但是有的问题需要用二位数组来解决。 二维数组常称为矩阵&#xff0c;把二维数组写成行和列的排列形式&#xff0c;可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式&#xff1a; 数据类型 数…

最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

企业资产管理软件市场分析:预计2029年将达到91亿美元

固定资产是企业资产重要的组成部分&#xff0c;是企业赖以生存的基础&#xff0c;加强固定资产管理&#xff0c;对于保障企业稳定发展有着重要意义。但是&#xff0c;不少企业因资产管理模式落后&#xff0c;以致各项资产信息无法及时传递与共享&#xff0c;资产损耗和及时维护…

c语言学习笔记之字符串库函数和逗号表达式

逗号表达式 #include <stdio.h>int main(){int a 10;int b 5;int c 6;int d (a 23,b a-4,c b2);printf("%d",d); }打印结果为: 逗号表达式,从左往右依次进行,将最后一个表达式的值赋值给变量. c语言字符串相关库函数 求字符串长度strlen长度不受限制的…

【Linux】线程安全

线程安全 一、Linux线程互斥1、进程线程间的互斥相关背景概念&#xff08;1&#xff09;临界区和临界资源&#xff08;2&#xff09;互斥和原子性出现负数原因为什么--ticket不是一个原子操作&#xff1f; 2、互斥量mutex&#xff08;1&#xff09;互斥量的接口i、初始化互斥量…