成为Linux大神——必须要具备的基本技能!

news2024/11/27 10:28:21

要努力,但不要着急,繁花锦簇,硕果累累,都需要过程!

 

目录

1.Linux软件包管理器yum

2.Linux编辑器—vim的使用

2.1vim的基本概念:

2.2vim的基本操作:

2.3vim正常模式命令集:

2.4vim底行模式命令集:

2.5关于vim的配置:

3.Linux编译器-gcc/g++的使用

3.1gcc如何完成?

4.Linux项目自动化构建工具—make和makefile

5.Linux第一个小程序—进度条

5.1行缓冲区的概念

5.2倒计时小程序

5.3进度条小程序

6.使用git命令行

7.Linux调试器—gdb使用

总结

 1.Linux软件包管理器yum

1.如何安装软件?

yum install (-y) +  安装的软件名

-y:表示安装的时候不需要进行询问是否需要安装

1.1.软件安装举例:lrzsz

软件的功能:支持Windows操作系统和Linux操作系统之间进行文件互传

rz:将Windows操作系统的文件传输到Linux操作系统中

sz: 将Linux操作系统的文件传输到Windows操作系统中

2.如何查找安装包?

yum list

3.如何删除安装包?

yum remove(-y) +  删除的软件名

-y:表示删除的时候不需要进行询问是否需要删除

2.Linux编辑器—vim的使用

2.1vim的基本概念:

vim是Linux中的编辑器,使用vim这个工具可以使在Linux中编辑代码更加便捷高效

既然vim用来编辑代码的工具,那如何使用vim呢?

1.创建文件

2.使用vim打开文件,然后进行编辑

使用vim打开文件——默认界面: 

2.2vim的基本操作:

上面我们已经可以使用vim打开一个文件了,那如何使用vim进行编辑代码呢?

想要使用vim进行编辑代码,首先需要了解vim的三种模式正常模式,插入模式,底行模式

正常模式:vim打开时的默认模式

 插入模式:可以进行编辑代码

 底行模式:用来退出vim工具

 了解了三种模式后,该如何正确转换,使用vim写出代码呢?

正常模式转换插入模式:输入i或a或o

插入模式转换正常模式:按左上角键盘Esc键

正常模式转换底行模式:输入冒号“ :”

底行模式转换正常模式按左上角键盘Esc键

注:插入模式和底行模式不能进行相互转换

下面我们就可以使用vim编写一段代码了:

2.3vim正常模式命令集:

1.光标定位:

$:移动到光标所在的行尾

^:移动光标到所在行的行首

G:光标移动到末尾

 gg:光标移动到最开始

 n + G:跳转光标到指定行,n代表行数

2.移动光标:可以使用键盘的上下左右键或者H J k L键

 3.复制/删除文本:

yy:复制光标所在行的内容

p:粘贴所复制的内容

dd:删除光标所在行

注:nyy或npp或ndd:支持对文本内容进行多行复制或粘贴或删除(n代表行数)

ndd + p:剪贴操作(n代表行数)

4.撤销操作:

u:撤销上一步操作

ctrl + r:恢复上一步的撤销

5.文本编辑:

~:可以进行文本内容的大小写转换

R:批量化替换

r:替换一个字符

nr:可以同时替换n个字符(n代表个数)

x:行内向后删除

X:行内向前删除

注:支持nx或nX,同时删除n个字符(n代表个数)

6.更改:

cw:更改光标所在处的字到字尾处

ncw:更改n个字

2.4vim底行模式命令集:

set nu :设置行号

 set nonu:取消行号

 w:表示写入

w!:表示强制写入

q:表示退出

q!:表示强制退出

wq:表示保存并退出

vs:可以同时打开两个文件在同一个屏幕上

注:虽然可以在同一个屏幕上打开两个文件,但是光标只有一个,光标移动到哪个位置,就进行编辑哪个位置的代码,光标在不同文件切换Ctrl ww

!+命令:可以不用退出vim就可以执行命令

%s///g:指定文本全替换:

替换前:

 

 替换后:

2.5关于vim的配置:

上面我们已经可以通过vim编辑器编写代码了,但是编写的时候会发现,很不好用,比如在写代码的时候没有自动补齐,自动换行,自动缩进等……这是因为默认的vim工具是没有任何的配置的,需要进行手动配置:

vim普通配置:需要通过网上搜素指令一一进行配置

1.需要在自己家目录下创建一个文件:.vimrc

2.使用vim打开进行配置:

3.配置的指令可以在网上进行搜索

vim一键配置:一键配置链接

安装完成后的界面演示: 

3.Linux编译器-gcc/g++的使用

上面我们已经可以熟练的使用vim工具编写代码了,但是当我们写好代码后该如何将代码编译成可执行程序呢?

下面介绍两个工具:gccg++,分别用来将C语言和C++语言编写成可执行程序

3.1gcc如何完成?

格式:gcc + 要编译的文件

gcc将代码变成可执行程序会执行4个阶段预处理,编译,汇编,生成可执行程序

预处理:

功能:头文件的展开,去注释,宏替换,条件编译等

预处理指令是以#开头的代码行

实例:gcc -E test.c -o test.i

选项:"-E"的功能是在预处理之后停止编译过程

选项:"-o"是将test.c文件指明为test.i,".i"是经过预处理的C原始程序

 

 

编译:

功能:将代码翻译成汇编语言,然后停下来

实例:gcc -S test.i -o test.s

-S:编译生成汇编代码

-o:"-o"是将test.i文件指明为test.s

汇编:

功能:将编辑阶段生成的.s文件转换成可重定向的目标二进制文件

实例:gcc -c test.s -o test.o

-c:从现在开始,生成目标二进制文件就停下来

-o:将test.s文件指明为test.o

链接:

功能:将自己写的代码和引用库的函数链接起来,生成可执行的二进制程序

实例:gcc test.o -o test

 

上述步骤中,在最后一个链接阶段会将自己写的代码和引用的库函数链接起来,那这些库函数是什么呢?如何使用这些库函数呢?这些库函数又存在在哪里呢?

库函数:是已经在库当中实现好的,使用的时候只需要调用就可以了。

如何使用库函数呢?

使用库函数时,只需要包含相对应的头文件就可以了,如:使用printf函数时需要包含头文件#include<stdio.h>

库函数又存在在哪里呢?

库函数存在函数库中,函数库一般分为静态库和动态库

动态库:使用动态库,这个链接过程就叫做动态链接

静态库使用静态库,这个链接过程就叫做静态链接

举个简单的例子:上网

现在你有上网的需求,但是家里没有电脑,需要到网吧上网,到网吧上网的这个过程就可以理解为动态链接,使用网吧的电脑就可以理解使用动态库

现在你觉得使用一直到网吧使用电脑不方便,然后就在家里买了一台电脑,在家里上网这个过程可以理解为静态链接,使用家里的电脑可以理解为使用静态库

通过这个例子可以得出一个结论:静态链接的本质就是一份拷贝,相当于例子中的在家里买一台电脑,而动态链接是在使用的时候到指定的地方使用就可以了,相当于例子当中的到网吧上网,不需要进行拷贝

通过动态链接和静态链接的特性可以总结出它们的优缺点:

动态链接的优点:形成的可执行程序小,节省内存,磁盘和网络资源

动态链接的缺点:当库升级或删除时不能再使用

静态链接的优点:不受库升级等影响

静态链接的缺点:形成的可执行程序大,会消耗很多资源

下面通过指令来观察一下动态链接和静态链接:

1.形成一个可执行程序:

2.通过file指令观察是动态链接还是静态链接:

 注:在Linux在生成的可执行程序默认是动态链接的

那如何使用静态库呢?

1.首先需要安装静态库,因为默认不包含静态库

安装指令:sudo yum install -y glibc-static 

2. 

 如何区分动态库还是静态库?

 动态库:是以.so为结尾的

静态库:是以.a为结尾的 

静态链接程序和动态链接程序的区别:

通过图片可以观察出静态链接所占内存远远大于动态链接形成的二进制程序 

注:关于g++完成程序的编译与gcc过程相同

4.Linux项目自动化构建工具—make和makefile

make和makefile是什么?

make:是一条命令

makefile:是一个文件

make和makefail的作用是什么?

make的作用:执行makefile文件里面的内容

makefile的作用:在makefile中编写源文件生成对应的可执行程序的指令

make和makefile如何使用?

在使用之前首先应该理解在makefail中编写指令遵循依赖关系依赖方法的原则

举例说明:依赖关系和依赖方法

假设找你爸打电话要钱,这说明你和你爸之间存在依赖关系,当你给你爸说“我要钱”这句话就是依赖方法

了解了依赖关系和依赖方法之后,接下来就看看Linux系统中如何使用的:

1.创建一个makefile文件:

  2.用vim打开makefile文件编写指令:

3.使用make命令执行makefile里面的内容:

  4.可以生成可执行程序,那如何清理生成的可执行程序呢?

现在可以使用make指令和makefile文件生成和删除对应的可执行程序了,但是在清理文件时在makefile中写的.PHONY又是什么呢?

.PHONY:是一个关键字用来修饰对象clean,表示这个对象是一个伪目标

伪目标:该目标总是被执行

下面通过指令现象再解释:

使用make指令时如果第一次已经形成了可执行程序,该源文件(test.c) 没有再被更改,则不会再执行make指令。

 相对于make指令,make clean指令总是能被执行,这就是.PHONY这个关键字修饰的作用,使得clean这个对象总是被执行

再这里有一个小问题就是第一次生成可执行程序后,gcc为什么知道不需要在重新编译了呢?

关于这个问题来介绍一下文件的三个时间:Access Modify Change

Modify:内容被修改的时间

Change:属性修改时间

Access:文件访问时间

Modeify:

源文件修改之前:

源文件修改之后:

 通过两图对比在内容修改后,Modify的时间就被改变了

 Change:

属性修改之前:

 属性修改之后:

通过两图对比,属性被修改之后,Change的时间就被改变了

Acess:

 访问之前:

 访问之后:

通过两图对比,访问前后时间Access时间发生了改变

注:如果连续频繁访问文件内容,Access时间不会发生改变,在底层中Acess时间的改变有一定的时间间隔 

了解了以上三个时间就可以回答,为什么gcc将第一次编译好的可执行程序不会再进行编译第二次了,是通过Modify的时间对比来进行判断的,因为可执行程序的生成一定依赖于源文件,所以源文件的Modify时间肯定比可执行程序时间早,gcc在编译的时候对比源文件和可执行程序的Modify的时间来确定是否需要重新生成可执行程序

所以.PHONY修饰后能够被一直执行是因为忽略了通过Modfiy时间进行判断的准则

注:make命令执行makefile中的命令默认从第一条开始,执行完一条命令之后就停下来!

makefile的推导规则:

执行make命令时根据依赖关系从后往前执行makefile中的命令:

5.Linux第一个小程序—进度条

上面我们已经掌握了如何在Linux上使用vim进行编辑,下面就尝试着通过所掌握的工具在Linux上写一个小程序—进度条

5.1行缓冲区的概念

下面先来看一段现象:

 这是什么原因呢?

是因为我们写的代码默认放到缓冲区里面,图一中有‘\n’,‘\n’的作用是告诉缓冲区我的代码已经写完了,不用在等了,直接将代码显示到显示器上,图二没有‘\n’,缓冲区就一直在等,直到程序运行结束的时候,才会将缓冲区的内容显示到显示器上!

解决方法:使用fflush(stdout)刷新缓冲区中的内容

 

5.2倒计时小程序

通过这个小程序再来了解一下回车和换行的概念:

 这段小程序是10秒倒计时,但是打印到显示器上是从上往下打印的,如何将程序在同一个地方进行打印呢?

解决方案:将‘\n’换成‘\r’,然后再刷新一下缓冲区里面的内容就ok了! 

 为什么将‘\n’,换成‘\r’就可以了呢?

因为‘\n’表示:换行并且回到下一行的最开始!

‘\r’表示:回到光标所在行的最开始!

5.3进度条小程序

有了上面的只是铺垫,下面就可以正式编写进度条小程序了

1.建立三个文件:main.c,process.c,process.h

 2.写一个makefile:

编译成功:

 3.代码编写:

process.c

process.h:

6.使用git命令行

1.什么是git?

git:叫版本控制器,是一个工具,可以用来上传代码进行备份!

gitee和github是一个网站

2.安装git:

yum install -y git

3.在gitee上创建一个仓库:

4.将创建好的仓库克隆到本地: 

5..gitignore文件介绍:

 凡是在这个文件内部的后缀,对应的文件,都不会被上传到gitee上去

注:gitignore中文件的内容可以自己修改,如不想上传.sln文件,可以增加.sln,在上传的时候默认就不会上传.sln的文件了

6..git介绍:

  .git就是本地仓库,本质就是一个目录,上传代码push的时候就是将.git中的内容同步到gitee上

7.git add .:

将代码放到.git中

8.git commit -m '提交说明' 

将代码提交到.git中

注:第一次再提交的时候会注册自己的用户名和邮箱:

 9.git push 

将代码推送到远端仓库gitee上 

10.git其它命令

git log:查看提交日志

git mv:重命名

git pull:同步内容

git status:查看文件状态

7.Linux调试器—gdb使用

上面我们已经学习了如何在Linux操作系统上使用vim进行编写代码,以及在使用gcc.g++编译代码,除此之外当我们编写代码出现问题时,该如何进行调试呢?

下面来介绍一个新的工具gdb,可以使用这个工具进行代码的调试:

1.gdb工具安装:

yum install -y gdb

2.开始调试:

gdb + 调试的可执行程序:

 3.退出调试:q 

 注:默认情况下,gdb无法对现在生成的出现进行调试,是因为在Linux操作系统中gcc或g++默认生成的是release版本,所以为了调试,需要对生成可执行程序改为debug版本!

如何生成debug版本呢?

gcc test.c -o test -g :加上-g命令

4.调试命令:

1.查看代码:l

默认一次显示10,想从0行开始,l 0,如果代码没有显示完整,可以使用回车键继续显示

2.打断点:

b + 打断点的行数:

 3.查看打断点的信息:

info b

4.删除断点:

d + 断点编号

断点编号:

 

 5.开始调试:r

到断点处停下来

 6.逐过程调试:n

7.逐语句调试:s

 8.断点跳跃:c

从当前断点直接运行到下一个断点处

 9.查看调用堆栈:bt

10.运行完一个函数:finish

 11.查看变量的值:p + 变量

 p + 变量:只能观察当前的一次,在进入循环值发生变化时,如果想常显示变量的值使用display

 

 undisplay + 对应的编号:取消常显示

12跳出循环:until + 循环代码结束的行数 

总结

本篇文章总结了在Linux系统上如何进行编程的相关问题,这也是我们在使用Linux操作系统必备的基础知识,掌握好这些基础知识才能为我们以后深入学习Linux操作系统打下坚实的基础!

 

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

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

相关文章

vue3 + ts: layout布局

一、理解&#xff1a;layout layout&#xff0c;语义&#xff1a;布局&#xff0c;设计&#xff0c;结合前端vue项目&#xff0c;我理解为这样的定义&#xff1a;页面级别的组件&#xff0c;框架级别的组件&#xff0c;基础布局组件&#xff0c;基础设计 关键词&#xff1a;组…

SEO外链专员,SEO专员,SEO编辑,每天工作量给他们怎么安排?

企业想要做好网站排名&#xff0c;想要让网站在搜索引擎中获得更高的曝光度&#xff0c;就需要对网站进行整体优化&#xff0c;而整体优化就包括站内优化&#xff0c;以及站外优化&#xff0c;只有这样才能让网站关键词获得的更多的排名&#xff0c;从而也就能够获得更多的流量…

堪称经典,一个非常适合初学者的机器学习实战案例

大家好&#xff0c;今天我给大家介绍一个非常适合新手的机器学习实战案例。 这是一个房价预测的案例&#xff0c;来源于 Kaggle 网站&#xff0c;是很多算法初学者的第一道竞赛题目。 该案例有着解机器学习问题的完整流程&#xff0c;包含EDA、特征工程、模型训练、模型融合等…

轻量级简约仪表板Dasherr

什么 Dasherr &#xff1f; 这是老苏在逛 reddit 时偶然发现的&#xff0c;作者刚发布&#xff0c;这是一款全新的轻量级仪表板。 官方目前没有提供 docker&#xff0c;但本身的安装方法并不复杂&#xff0c;只要将代码下载后&#xff0c;将 www 目录中的文件放入到 Web 服务器…

蓝桥杯入门即劝退(五)跑断腿的小蓝

九层之台&#xff0c;起于垒土&#xff0c;你我皆是垒土人✔ 愿我的文章对你有所帮助&#xff01; 欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; 一、题目&#xff08;填空题&#xff09; 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 …

阿里测试8年,从5K到40K,这178天的心酸只有我自己知道···

从事测试工作已8年有余了&#xff0c;今天想聊一下自己刚入门时和现在的今昔对比&#xff0c;虽然现在也没什么大成就&#xff0c;只能说笑谈一下自己的测试生涯。 技术栈的变化 刚开始是做的开发&#xff0c;也是做了好几年的开发&#xff0c;后面软件测试的风潮开始了&…

前端工程师的摸鱼日常(17)

声明&#xff1a;全文纯属个人想法&#xff0c;无论提到什么&#xff0c;都无贬低和抬高之意&#xff0c;也没有对当今直正者感到不满。如果有部分内容与我思想不一&#xff0c;或戳于谁之痛处&#xff0c;可以跳过浏览&#xff0c;就当我在讲故事或者笑话。如果内容侵犯到XXX的…

CH34X linux驱动安装,参考代码例程

想用USB转I2C工具调试个I2C接口芯片未果。 驱动安装参考下面内容&#xff1a; 1. 使用的系统环境 本文使用Ubuntu 20.04 LTS版本Linux系统为测试环境。 2. 使用到的工具软件介绍 Linux系统下编译CH365/CH367的驱动使用到的工具主要有gcc和make&#xff0c;版本如下所示&…

“清华女神”回国,赤子之心,如愿以偿

目录1、女神科学家颜宁是谁2、颜宁在深圳人才论坛最新演讲&#xff0c;以及招聘邮箱3、颜宁微博回应4、结论与展望最近女神科学家颜宁回国了&#xff0c;整个科学界和中国都沸腾了&#xff0c;也上了热搜&#xff0c;成了热门话题&#xff0c;越来越多的海归精英选择回国 1、…

LeetCode 每日一题——816. 模糊坐标

1.题目描述 816. 模糊坐标 我们有一些二维坐标&#xff0c;如 “(1, 3)” 或 “(2, 0.5)”&#xff0c;然后我们移除所有逗号&#xff0c;小数点和空格&#xff0c;得到一个字符串S。返回所有可能的原始字符串到一个列表中。 原始的坐标表示法不会存在多余的零&#xff0c;所…

5_会话管理实现登录功能

一 会话管理登录功能 前置了解 初识cookie 如下图,浏览器初次访问服务器时,服务器生成数据将数据存放在浏览器的cookie中,当浏览器再次访问服务器时将会携带该cookie,此时服务器就可以确定该浏览器的身份了。 session的使用 如下图,session的实现需要借助cookie,不同cookie的是…

荧光标记氨基酸:荧光标记L-苯丙氨酸乙酯盐酸盐,L-phenylalanine ethylester labeled

产品名称&#xff1a;荧光标记L-苯丙氨酸乙酯盐酸盐&#xff0c;L-phenylalanine ethylester labeled L-苯丙氨酸乙酯盐酸盐是化学物质&#xff0c;分子式是C11H16NO2。别名L-苯基丙氨酸乙酯盐酸盐&#xff0c;熔点: 154-157&ordm;C&#xff0c;比旋光度: 33.7&ordm;(…

使用myCobot 280机械臂校准OAK智能深度相机

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

第三站:函数(第三幕)递归训练

目录 一、编写一个函数实现n的k次方&#xff0c;使用递归实现。&#xff08;k为整数&#xff09; 二、写一个递归函数DigitSum(n)&#xff0c;输入一个非负整数&#xff0c;返回组成它的数字之和 三、编写一个函数 reverse_string(char * string)&#xff08;递归实现&#x…

WebDAV之葫芦儿·派盘+墨阅

墨阅 支持webdav方式连接葫芦儿派盘。 是一款专注于帮助用户离线缓存网页文档图书漫画的免费工具APP。您可以利用墨阅收集来自互联网网站平台的公开文章,图片,漫画等,可以对网页样式进行调整,支持自定义动作,批量离线等功能方便用户日常离线。目前支持小说,markdown,图…

公众号搜题系统

公众号搜题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转…

语义分割之RTFormer介绍

语义分割之RTFormer介绍 论文链接&#xff1a;https://arxiv.org/abs/2210.07124 代码地址&#xff1a;https://github.com/PaddlePaddle/PaddleSeg ViT以来&#xff0c;Transformer作为特征提取器在语义分割领域证明了自己&#xff0c;但是由于Transformer的核心 muti-self-…

苹果电脑提高工作效率alfred 5中文

Mac电脑上哪个效率工具好用呢&#xff1f;alfred 5是最强大的效率启动工具之一&#xff0c;丰富的插件资源、简单的上手成本&#xff0c;会是你提高 Mac 使用效率的得力助手。可通过热键&#xff0c;关键字&#xff0c;文本扩展等提高您的效率。搜索您的Mac和网络&#xff0c;并…

Sprint产品待办列表的优先级要怎么排?

在梳理产品待办事项列表的过程中&#xff0c;产品负责人需要先做优先级排列&#xff0c;保证我们在一定的时间盒内能够交付需要优先级最高、最具价值的用户故事。 那这个用户故事的优先级要怎么排列&#xff0c;我们怎样选择用户故事的实现顺序&#xff1f; 有一个实践可以推…

力扣(LeetCode)816. 模糊坐标(C++)

模拟 一次遍历 sss &#xff0c;尝试对遍历到的位置进行分割。对分割点左右字符串 ltltlt , rtrtrt 分别构造子串。 构造子串的规则: 整数不以 000 开头&#xff0c;(特例)单独的 000 可以作为整数。小数不以 000 结尾。小数的整数位是 000 &#xff0c;则整数位不能组成新数…