Linux知识点 -- Linux环境基础开发工具使用

news2025/2/27 17:32:07

Linux知识点 – Linux环境基础开发工具使用

文章目录

  • Linux知识点 -- Linux环境基础开发工具使用
  • 一、Linux编辑器 - vim
    • 1.vim的打开与关闭
    • 2.vim的三种模式
    • 3.命令模式常见命令
    • 4.底行模式命令
    • 5.设置vim的table键为4个字符
  • 二、Linux编辑器 - gcc / g++
    • 1.介绍
    • 2.gcc / g++的使用
    • 3.gcc / g++的编译过程
    • 4.Linux下的动、静态库
  • 三、Linux项目自动化构建工具 - make / Makefile
    • 1.介绍
    • 2.使用make / Makefile来构建项目
    • 4 .PHONY: 伪目标
    • 5.Linux多文件项目
  • 四、进度条小程序


一、Linux编辑器 - vim

vim配置:https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search

1.vim的打开与关闭

打开vim

[lmx@VM-8-2-centos lesson07-27]$ vim

在这里插入图片描述
使用vim打开文件

[lmx@VM-8-2-centos lesson07-27]$ vim main.c

在这里插入图片描述
关闭vim
shift + :,光标到左下角,然后输入q,退出vim;
在这里插入图片描述

2.vim的三种模式

(1)命令模式:默认打开的模式,输入命令可执行;
输入 i 切换至编辑/插入模式,按ESC退回命令模式;
输入 shift + : 切换至底行模式,按ESC退回命令模式;

在这里插入图片描述
(2)编辑/插入模式:用于文本编辑;
在这里插入图片描述
(3)底行模式:执行底行命令;
在这里插入图片描述
注:编辑模式和底行模式不能互相切换;

3.命令模式常见命令

(1)yy:将当前光标所在的行进行复制;
nyy表示复制n行;

(2)p:当复制的行在光标处进行粘贴;
np表示粘贴n次;
(3)dd:将当前光标所在的行进行剪切(删除);
ndd表示剪切n行;

在这里插入图片描述
(4)u:撤销操作;
(5)ctrl + r :撤销u操作;
(6)shift + g:光标定位到文件的结尾;
(7)gg:光标定位到文件的最开始;
(8)n + shift + g:光标定位到文件的任意行;
(9)shift + 6(^):光标定位到当前行的最开始;
(10)shift + 4(¥):光标定位到当前行的最结尾;
(11)w,b:以单词为单位,进行光标的前后移动;
(12)h,j,k,l:左,下,上,右;
(13)shift + ~:大小写切换
(14)shift + r:进入替换模式(insert);
(15)r:替换光标所在的字符;
nr:替换n个字符;
(16)x:删除光标所在字符;
shift + x:删除光标之前的字符;
支持nx,n + shift + x;

4.底行模式命令

**(1)set nu/nonu : 打开行号 / 取消行号;
(2)vs 文件名:分屏操作;
分屏切换光标:ctrl + ww;
(3)w:写入,保存;w!是强制保存;
(4)q:退出;q!强制退出;
(5)!cmd :不退出vim执行对应的cmd命令(执行命令行,编译,运行,查看man等);
**
在这里插入图片描述

5.设置vim的table键为4个字符

[lmx@VM-8-2-centos lesson07-27]$ cd ~  //进入家目录
[lmx@VM-8-2-centos ~]$ vim .vimrc	//打开vim配置文件

在这里插入图片描述
将这几行改为4,table就是4字符了;

二、Linux编辑器 - gcc / g++

1.介绍

gcc / g++是专门用来编译链接c / c++的编译器;
默认centos7.6 or 8匹配的gcc版本是4.8;
gcc进行程序处理的过程与widows系统上的IDE处理过程是一样的,都经历4步:
(1)预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …)
(2)编译(c -> 汇编)
(3)汇编(汇编 -> 可重定向二进制目标文件)
(4)链接(链接多个.o文件,多个.obj文件合并形成一个可执行文件,默认名为a.out)

2.gcc / g++的使用

使用gcc编译生成可执行文件:
在这里插入图片描述
执行gcc 文件名… -o 可执行文件名
-o是指定一个新名字,输出到该文件;
也可以gcc -o 可执行文件名 文件名…

-o后一定要跟着目标文件名;

[lmx@VM-8-2-centos lesson07-27]$ gcc hello.c -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello    install.sh  main.o    mytest  test.c  test.o
hello.c  main.c      Makefile  proc    test.h

运行可执行文件
./可执行文件
(./是指在当前文件夹下)

[lmx@VM-8-2-centos lesson07-27]$ ./hello
hello world!

使用g++编译生成可执行文件
在这里插入图片描述

[lmx@VM-8-2-centos lesson07-27]$ g++ hello.cpp -o hello
[lmx@VM-8-2-centos lesson07-27]$ ls
hello      install.sh  main.o    mytest  test.c  test.o
hello.cpp  main.c      Makefile  proc    test.h

3.gcc / g++的编译过程

gcc选项
在这里插入图片描述

(1)预处理
在这里插入图片描述
g++ -E:从现在开始进行程序的翻译,如果预处理完成,就停下来;
预处理后保存到可执行临时文件hello.i中;
在这里插入图片描述
(2)编译
在这里插入图片描述
g++ -S:从现在开始进行程序的翻译,如果编译完成,就停下来;
编译后保存到hello.s文件中;
在这里插入图片描述
(3)汇编
在这里插入图片描述
g++ -c:从现在开始进行程序的翻译,如果汇编完成,就停下来;
汇编后生成可重定向目标文件hello.o;
在这里插入图片描述
(4)链接
在这里插入图片描述
链接生成可执行文件hello(若不指定文件名,默认名为a.out);

4.Linux下的动、静态库

静态库:是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为".a"(windows下为".lib");
动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销;动态库一般后缀名为".so"(windows下为".dll");
gcc默认生成的二进制程序,是动态链接的;

Linux中的库位置
在这里插入图片描述
gcc / g++默认生成的可执行文件是动态连接的
在这里插入图片描述
gcc / g++使用静态链接
在这里插入图片描述
若链接失败,可能是没有安装静态库:

sudo yum install -y glibc-static  #c静态库
sudo yum install -y libstdc++-static  #c++静态库

三、Linux项目自动化构建工具 - make / Makefile

1.介绍

一个工程中的源文件有很多,按类型、功能、模块分别放在若干个,目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于更复杂的功能操作;
make是一个命令,Makefile是一个文件,两者一块完成项目的自动化构建;
Makefile中包含了a.依赖关系;b.依赖方法;

2.使用make / Makefile来构建项目

(1)创建Makefile文件

[lmx@VM-8-2-centos lesson07-27]$ touch Makefile

(2)编写Makefile并构建项目
在这里插入图片描述
在Makefile中编辑依赖关系和依赖方法:
依赖关系可以不依赖任何文件;
在这里插入图片描述
编辑好Makefile后,在命令行中执行make指令,系统就会依照Makefile中的依赖关系和依赖方法去构建项目:
在这里插入图片描述
在这里插入图片描述
(3)项目清理
在这里插入图片描述
使用make clean指令调用clean文件,执行清理项目的指令;
在这里插入图片描述
注:Makefile默认只会找到第一个目标文件去执行,只有一对依赖关系和方法;
像上面的Makefile在执行make指令时只会执行test文件,而不会找到后面的clean;
如果改成下面这样:
在这里插入图片描述
make时只会执行clean,而不会执行后面的test;
在这里插入图片描述
如果想执行Makefile后面的目标文件,可以在make后面带上文件名;
在这里插入图片描述

4 .PHONY: 伪目标

==.PHONY:==标记的目标文件为伪目标,总是被执行;
在这里插入图片描述
clean为伪目标;
在这里插入图片描述
make执行一次后,可执行程序test是最新的,就不能再次执行了;
而伪目标clean可以一直执行;

注:Makefile是如何得知我们的可执行程序是最新的:
是根据文件的最近修改时间来知道的
在这里插入图片描述

5.Linux多文件项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Makefile需要执行的指令:
在这里插入图片描述
在这里插入图片描述
Makefile第一个找到的目标文件是mytest,所以在第一次make时,系统检测到没有test.o 和 main.o,所以会继续向下执行,直到形成test,o和mian.o;
在这里插入图片描述

四、进度条小程序

写代码时先写Makefile,保证能把hello world跑通,再写其他代码;
在这里插入图片描述
在这里插入图片描述
缓冲区问题:
在这里插入图片描述
在这里插入图片描述
hello world会在3秒之后才会打印;
printf这句代码早就执行完了,只不过信息没有立马被显示出来;
c语言是会给我们提供输出缓冲区(一段内存空间)的,根据特定的刷新策略来进行刷新;
显示器设备,一般的刷新策略是行刷新,碰到’\n’,就把’\n’之前的所有字符全部显示出来;

如果需要马上刷新输出缓冲区,可以用fflush:
在这里插入图片描述
在这里插入图片描述
这样hello world就会立刻打印出来,打印完再等3秒程序运行结束;

倒计时程序:
在这里插入图片描述
\r:回车,不会触发行刷新;\n:换行;
每打印完一个字符串,\r光标回到最开始,在当前行继续向后打印,然后强制刷新缓冲区;延迟1s后进入下一次循环;
在这里插入图片描述
程序运行完成后,光标回到最开始:
在这里插入图片描述
进度条程序

  1 #include<stdio.h>  
  2 #include <unistd.h>  
  3 #include <string.h>  
  4   
  5 #define NUM 102  
  6   
  7 int main()  
  8 {  
  9   char bar[NUM];  
 10   memset(bar, 0, sizeof(bar));  
 11   const char* lable = "|/-\\"; //4符号代表进度条  
 12   
 13   int count = 0;  
 14   while(count <= 100)  
 15   {  
 16     
 17     printf("[%-100s][%d%%] %c\r", bar, count, lable[count%4]);  
 18     bar[count++] = '#';  
 19     fflush(stdout);  
 20     usleep(30000);//单位是微妙  
 21   }  
 22   printf("\n");                                                             
 23   return 0;                                          
 24 }    

运行效果:
在这里插入图片描述

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

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

相关文章

docker笔记详解

Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are …

Linux | 将SpringBoot+Vue项目部署到服务器上

知识目录 一、写在前面二、后端部署2.1 项目打包2.2 项目运行 三、通过Shell脚本自动部署项目3.1 安装Git和Maven3.2 编写Shell脚本3.2 执行脚本 四、前端部署4.1 安装NGINX4.2 node.js安装4.3 npm打包项目4.4 运行项目 四、总结撒花 一、写在前面 大家好&#xff0c;我是初心…

MyBatis配置

配置结构 属性&#xff08;properties&#xff09; 属性不仅可以在内部直接修改&#xff0c;还可以在外部引入&#xff0c;外部引入需要在配置文件引入属性的文件&#xff0c; db.properties放在资源目录下面&#xff0c;然后在configuration标签下面导入外部配置的propertie…

Kali linux ssh Permission denied, please try again解决

新装的kali 没有ssh 装上ssh后root用户禁止登录所以要修改ssh配置&#xff0c;下面就这个过程解决全部演示。 默认情况下 SSH 不允许以 root 用户登录&#xff0c;因此将会出现下面的错误提示信息&#xff1a; Permission denied, please try again.kali linux 默认没有ssh,因此…

股票量价关系基础知识5

图解各阶段量价关系&#xff1a;价涨量增 价涨量增是指股价上涨的同时成交量也放大。它是最常见的多头进攻模式&#xff0c;说明价量配合良好&#xff0c;反映投资者买卖情绪高涨。成交量放大说明有资金流入&#xff0c;做多力量增强&#xff0c;后市看涨。 注意&#xff1a;1…

yolov5 用自己的数据集进行训练

在训练之前先要按照一定目录格式准备数据&#xff1a; VOC标签格式转yolo格式并划分训练集和测试集_爱钓鱼的歪猴的博客-CSDN博客 目录 1、修改数据配置文件 2、修改模型配置文件 3、训练 1、修改数据配置文件 coco.yaml 拷贝data/scripts/coco.yaml文件&#xff0c; pa…

requset页面的代码逻辑

基地址 &#xff1a; //引入axios import axios from axios; //vuex // import store from ../store/index; //配置基准地址 const Serve axios.create({baseURL: http://47.99.166.157:3000,// transformRequest: [function (data) {// try {// return jsonBig.…

【python】无限量PPT免费下载?找模板在不怕心仪得不能用啦

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8 pycharm 不会安装的可以文末名片我获取哦 &#x1f60e; 模块使用: 第三方模块&#xff0c;需要安装 win R 输入cmd 输入安装命令 pip install 模块名 &#xff08;如果出现爆红 可能是因为 网络…

5分钟搞懂矩阵乘法的本质

大家好啊&#xff0c;我是董董灿。 很多与深度学习算法相关的面试&#xff0c;面试官可能都会问一类问题&#xff0c;那就是你是如何理解矩阵乘算法的。 更有甚者&#xff0c;会让你当场手写矩阵乘算法&#xff0c;然后问细节&#xff0c;问如何优化&#xff0c;面试现场&…

【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理方法MATLAB代码实现(持续更新)

【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理方法MATLAB代码实现(持续更新) 一、降维方法 常见的降维方法&#xff1a; 1.变量归类&#xff08;主成分分析PCA、核主成分分析KPCA&#xff09; 2.变量筛选&#xff08;临近成分分析NCA、皮尔逊系数PCC、…

签名预售活动圆满结束!各位敬等快递,第一个付款的兄弟来领取大礼!

我的新书经过千难万险终于上架&#xff0c; 为了感谢众多老铁的支持&#xff0c; 所以上周日搞了签名预售的活动&#xff0c;挂了300本&#xff0c; 一上线很快就被大家买光了&#xff0c; 留言需要单独写一些话的老铁&#xff0c;我也都尽量满足了&#xff0c; 如果一楼还…

HNU-操作系统OS-实验Lab5

OS_Lab5_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf &#xff08;学号 202108010XXX&#xff09; 实验目的 了解第一个用户进程创建过程了解系统调用框架的实现机制了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理 实验…

计算机组成原理基础练习题第一章

有些计算机将一部分软件永恒地存于只读存储器中&#xff0c;称之为&#xff08;&#xff09; A.硬件    B.软件C.固件    D.辅助存储器输入、输出装置以及外界的辅助存储器称为&#xff08;&#xff09; A.操作系统    B.存储器 C.主机      D.外围设备完整的计算机系…

算法时间空间复杂度

文章目录 算法算法特性 时间复杂度时间复杂度概念算法运行时间例如时间复杂度分三种 空间复杂度 算法 算法特性 1.有穷性&#xff1a;执行有穷步&#xff08;有限步&#xff09;之后结束。 2.确定性&#xff1a;只有唯一的执行路径。 3.可行性&#xff1a;代码可以执行起来…

2023年数维杯ABC选题人数公布

根据各个平台开赛后28小时各项数据统计&#xff0c;进行评估&#xff08;方法见注释&#xff09;&#xff0c;最终得出2023年数维杯选题人数&#xff0c;大致为 A:B:C260&#xff1a;281&#xff1a;40 题号选题人数A260B281C40 选题人数统计结果分析&#xff1a;AB为研究生本…

vue3开启大海贼时代!!!

大海贼时代结束&#xff01;&#xff01;&#xff01; vue3开始&#xff01;&#xff01;&#xff01; setup初体验 1.与vue2不同的是 定义的变量和方法都被放到一个叫 setup( )里面了 2.vue2里面没有了 this 3. 1&#xff09;访问变量先定义 const msg 1 2&#xff0…

[架构之路-196] - 发现问题原因的通常步骤:提出问题、明确问题、偏差分析、因素分析、原因分析

目录 前言&#xff1a; 通用问题的方法论 第一步&#xff1a;是提出问题阶段&#xff1a;表象、总体、大致 第二步&#xff1a;是明确问题阶段&#xff08;深层&#xff09;&#xff1a;分解、分类、排序 第三步&#xff1a;是明确问题阶段&#xff08;目标&#xff09;&a…

关于一个C++项目:高并发内存池的开发过程(一)

原项目地址&#xff1a;高并发内存池项目: 高并发内存池项目的课堂板书代码 (gitee.com) 写在前面 本打算利用五一假期的时间将这个项目一口气开发完成&#xff0c;但由于本人的懈怠&#xff0c;这个项目最终只完成了80%。于是利用长假后的一天假期&#xff0c;将这个项目的框…

springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理

介绍 本系统为springboot整合security&#xff0c;mybatisPlus&#xff0c;thymeleaf实现登录认证及用户&#xff0c;菜单&#xff0c;角色权限管理。页面为极简模式&#xff0c;没有任何渲染。 源码&#xff1a;https://gitee.com/qfp17393120407/spring-boot_thymeleaf 开发…

算法训练Day59:503.下一个更大元素II 42. 接雨水

文章目录 [下一个更大元素 II](https://leetcode.cn/problems/next-greater-element-ii/description/)题解 接雨水题解 下一个更大元素 II CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (66.68%)8060--0 Tags 堆 | 数组 | 单调栈 Compani…