linux就该这么学【yum 、vim、编译器gcc g++使用、make使用(linux系统gcc编译器编写c)

linux就该这么学【yum 、vim、编译器gcc g++使用、make使用 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构. “x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示3

软件包名称: 主版本号。源程序版本号- 软件包的版本号。后缀“x86_64”表示64位系统的安装包。安装32 位系统。选择软件包时,“el7”代表centos7/redhat6。base代表“软件来源”,名称与“小米应用商店”、“华为应用商店”等概念类似

卸载软件

sudo yum Replace lrzsz //lrzsz 删除软件

Linux开发工具

通常,Windows开发环境是vs2019。这有助于快速编译代码,提供良好的编码环境,并使调试更容易。编译代码。 gdb用于调试代码。

vim特征

简单地说,vi 和vim 的区别在于它们都是多模式编辑器。不同的是vi不仅兼容所有vi指令,而且还具有一些新功能。初始化。例如,语法高亮和可视化操作不仅可以在终端中执行,还可以在X windows、mac os 和windows 中执行。

1. Vim 是一个多模式编辑器,默认为命令模式(NORMAL)。

2. Vim 有三种主要模式:命令模式(NORMAL)、插入/编辑模式(INSERT)、底线模式。

模式切换

1.命令模式切换到插入模式:i(光标不变)、a(同一行的下一个位置)、o(开始新行)

2. 要从插入模式切换到命令模式,请按住键盘左上角的ESC 键。

3. 要进入底线模式,您需要在命令模式下按住键盘上的Shift + 。

vim命令模式命令集

移动光标

Vim 可以直接使用键盘上的光标来上下左右移动光标,但普通Vim 使用小写字母“h”、“j”、“k”和“l”来移动光标左侧控制。底部、顶部和右侧网格分别。

按“G”转到文章末尾

按“shift + $”:移动到光标所在行的“末尾”

按“shift + ^”:移动到光标所在行的“开头”

按“w”将光标跳到下一个单词的开头。

按“b”将光标返回到上一个单词的开头。

按“e”,光标将跳转到下一个单词的末尾。

按“nl”将光标移动到该行的第n 个位置(5l、56l 等)。

按[gg]:输入文本的开头

按[shift+g]:输入文本结尾

按[n,shift+g]:输入指定文本行1000 Shift+g 输入第1000行

按“ctrl”+“b”将屏幕移动“后一页”

按“ctrl”+“f”将屏幕移动一页到“下一页”

按“ctrl”+“u”将屏幕“向前”移动半页

按“ctrl”+“d”将屏幕“向前”移动半页

复制

“yw”:将光标处的字符复制到单词末尾到缓冲区中。

\”nyw\”: # 将单词复制到缓冲区

“yy”:将光标所在行复制到缓冲区。

“nyy”:例如“6yy”表示从光标所在行“倒计时”复制6行文本。

“p”:将缓冲区中的字符粘贴到光标位置。注意:所有与“y”相关的复制命令必须与“p”组合才能完成复制粘贴功能。

“np”:n代表一个数字。如果仅使用p 进行粘贴,则默认情况下只会粘贴一行。 np 粘贴n 行。

撤销上一次操作

“u”:如果错误执行命令,可以按“u”立即返回到上一个操作。要执行多个回复,请多次按“u”。

“ctrl + r”: 撤消恢复

删除文字

“”:每按一次,删除光标所在位置的字符。

“nx”:例如“6x”表示删除光标位置之后的6个字符(包括你自己)

“X”:大写字母X,每按一次都会删除光标位置“之前”的字符。

“nX”:例如“20X”表示删除光标位置“之前”的20个字符。

“dd”:删除光标所在行,也可用作剪切

“ndd”:从光标所在行开始删除n行。

更改

“Shift + ~”:将光标所在行的单词由大写转换为小写,由小写转换为大写。

vim底行模式命令集

在使用末行模式之前,请务必按“ESC”键以确保处于正常模式,然后按(冒号)进入末行模式。

列表行号

“set nu” : 键入“set nu”以列出文件中每行之前的行号。

搜索字符

“/关键字” : 首先按“/”键,然后输入要搜索的字符。如果您第一次搜索的关键字不是您要查找的内容,您可以按住“n”进行搜索。输入所需的按键,直到单词稍后。

列表行号

“set nu” : 键入“set nu”以列出文件中每行之前的行号。

“set nonu” : 键入“set nonu”会取消文件中的行号。

跳转到文件中的特定行

“#”: “#”符号代表数字。在冒号后输入一个数字,然后按Enter 键跳转到该行。例如,如果输入数字15 并按Enter,则会跳转到文章的第15 行。

保存文档

\”w\” : 输入“w”代替冒号以保存文件

离开维姆

“q”:如果按“q”无法退出vim,可以按“q”加“!”强制退出vim。 “wq”:通常建议在退出时与“w”一起使用,以便您可以在退出时保存文件。

打开多个窗口

底线模式vs + 输入文件名(不存在则创建,存在则打开对应文件)

在多个文件之间切换

ctrl + w 或ctrl + h、ctrl + L

ctrl + w 快速双击切换(推荐)

光标位置

vim test.c +10 //打开test.c文件,将光标置于第10行

!vim //打开历史上最近一次的vim操作

vim配置分享

配置文件位置

/etc/目录下有一个名为vimrc.txt 的文件。这是系统中公共的vim配置文件,对所有用户有效。您可以在每个用户的主目录中创建自己的私有配置文件并将其命名为“.vimrc”。例如,vimrc 文件通常已存在于/root 目录中。如果不存在则创建它。切换用户并自行运行

su,进入你的主工作目录,运行cd ~ 打开自己目录下的.vimrc 文件,然后运行vim .vimrc

打开并编辑vimrc.txt当然,博主之前已经设置过了。

如果需要读者,博主推荐一个主配置方案。

链接: Vim 配置。

只需在shell 中运行命令,它就会自动下载并安装。

卷曲-sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh bash ./install.sh

注意:通常每个用户下有一个vimrc,互不影响。

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

从编译程序到运行程序只需几步

预处理(宏替换)

预处理功能主要包括宏定义、文件包含、条件编译、注释去除等。

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

gcc E 你好.c o 你好.i

选项“-E”。该选项的作用是在预处理完成后强制gcc停止编译过程。

选项“-o”指向目标文件,“.i”文件是预处理后的C原程序。

编译(生成程序集)

在这个阶段,gcc首先要检查代码的标准化、语法错误等,以确定代码实际执行的工作。如果检查正确,gcc 会将代码转换为汇编语言。用户可以使用“-S”选项查看它。此选项仅进行编译而不进行汇编并生成汇编代码。

示例: gcc S hello.i o hello.s

汇编(生成机器可读代码)

汇编阶段将编译阶段生成的“.s”文件转换为目标文件。读者现在可以使用选项“-c”来查看汇编代码已转换为“.o”二进制目标代码。

示例: gcc c hello.s o hello.o

链接(生成可执行文件或库文件)

如果编译成功,我们将进入链接阶段。

示例: gcc hello.o o hell

当程序运行时

函数库

在这个C程序中,没有定义“printf”的函数实现,预编译中包含的“stdio.h”只有函数声明,没有定义函数实现。那么“printf”函数的实现呢?

最终的答案是:系统在一个名为libc.so.6的库文件中实现了这些功能。如果未指定,gcc 将转到系统默认搜索路径“/usr/lib”。也就是说,我们希望能够使用libc.so.6库函数来实现“printf”函数。这就是链接的作用

函数库又分为静态库和动态库

Linux 上默认使用动态链接

ldd 用于显示可执行文件所依赖的动态库。在Linux 上创建的可执行文件默认称为动态链接,ldd 显示可执行文件所依赖的库文件。这里我们展示的是C 标准。图书馆

ls /lib64/小于-al |

//可以看到lib64路径下的所有动态库

影响:

静态库

静态库是指库文件中的所有代码在编译和链接时都被添加到可执行文件中,因此生成的文件比较大,但运行时不再需要库文件。相反,动态库不会在编译和链接期间将库文件的代码添加到可执行文件中,而是在程序运行时由运行时链接文件加载。这节省了系统开销。动态库通常具有后缀“.so”。前面提到,libc.so.6是一个动态库。 gcc编译时默认使用动态库。链接完成后,gcc 可以生成如下所示的可执行文件。 gcc hello.o o 你好

gcc 生成的二进制程序默认是动态链接的。这可以通过file命令来验证。

概括:

1、动态库链接产生的可执行程序体积较小,节省系统资源。缺点是如果库丢失,依赖的程序将无法运行。

2、如果静态库链接产生的可执行程序比较大,则会将库中的代码复制到可执行程序中,但如果库不存在,程序就会比较大,占用系统空间的缺点。就是资源被浪费了。 没有影响

gcc选项

-E 仅启用预处理,不生成文件。您需要重定向到输出文件。

-S 编译为汇编语言,无需汇编和链接。

-c 编译为目标代码

-o file 输出到文件

-static 此选项将静态链接应用于生成的文件。

-g 生成调试信息。 GNU 调试器可以利用此信息。

-shared 该选项尝试使用动态库,因此生成的文件较小,但系统需要动态库。

-O0、-O1、-O2、-O3

编译器优化选项有四个级别。 -O0 为不优化,-O1 为默认值,-O3 为最高优化级别。

-w 不生成警告消息。

– 墙壁生成所有警告消息

gdb

博主首先展示了如何在Linux环境下调试程序,然后让读者补充内容。请仔细阅读。

Blogger的Linux平台目前不支持在for循环内部直接定义变量,比如上面的编译错误,所以解决这个问题的方法就是在用gcc编译时使用-std=c99选项即可。C99 支持这一点。 即使这样写,程序也能成功编译。

启动gdb

gdb test //gdb后面是可执行程序

影响:

Linux默认生成的可执行程序是静态链接的,并以release方式发布。

debug版本的解决办法

gcc test.c -o test-d -g -std=c99

//将test.c文件重定向到test-d程序-g选项为调试模式

//-std=c99 用c99方法编译

影响:

执行结果没有什么区别,接下来我们看一下重点

比较:

readelf -S test -d |//显示调试信息

效果:

概括:

1、Linux默认生成的可执行程序是静态链接的,并以release方式发布。

2. 如果要调试gcc,则需要使用-g 选项在调试模式下公开gcc。调试模式将调试信息添加到您的程序中,允许您调试程序。

开始调试

gdb test -d //使用gdb工具调试debug版本

影响:

也可以直接使用L来显示。 L 是列表的缩写。这里不区分大小写。

设置断点

您可以使用break + 行号,也可以直接使用break 缩写(b)。

这里可以看到刚刚设置的断点

info b//显示设置的断点

影响:

设置断点后,运行程序

1. Run 表示执行到断点处停止,缩写(r)

2. Step表示每条语句及其缩写

3. 接下来是逐步的过程。它的缩写是n

显示变量的内容

p+变量名

使用显示类似于在VS上设置监控值,可以让你持续观察变量的变化。

您取消隐藏的是行的观察值,该值会自动从视图中隐藏。

直接跳转到特定行。

影响:

建议使用disable来禁用断点。这与以下效果相同:

启用断点

从一个断点跳转到另一个断点

continue 的缩写是(c),用于从一个断点跳转到另一个断点。此C 函数的优点之一是,如果在调试过程中没有报告错误,它允许您选择要跳过的代码部分。如果在此过程中出现错误,您可以通过仅删除这部分代码中的错误来继续缩小范围。

设置var 并退出

set var 表示在调试时更改变量值,finish 表示完成当前函数的执行并将结果值返回到调用它的地方。

gdb的使用

list/l 行号: binFile 显示源代码并从末尾向下移动10 行。

list/l 函数名:列出函数的源代码。

r 或run:运行程序。

n 或下一个:运行一次。

s或step:输入函数调用

Break(b)行号:在特定行设置断点

Break函数名称:在函数的开头设置断点。

info Break:显示断点信息。

退出:运行直到当前函数返回,然后等待命令。

print:打印表达式的值。您可以通过表达式更改变量的值或调用函数。

p变量:输出变量的值。

set var:改变变量的值

continue(或c):连续执行程序,而不是从当前位置开始一步一步执行。

run(或r):从头开始顺序运行程序,而不是逐步运行。

删除断点:删除所有断点。

删除断点n:删除序号为n的断点。

禁用断点:禁用断点

启用断点:启用断点

info(或i)断点:检查当前设置的断点。

显示变量名称:跟踪变量并在每次停止时显示其值。

undisplay:取消对先前设置的变量的跟踪。

Up to X line number:跳转到X行

Breaktrace(或bt):显示各级函数调用和参数

info(i) locals:显示当前栈帧中局部变量的值。

退出:退出GDB

make/Makefile

如果你想在生活中取得任何成就,你还需要依赖关系和依赖方法。

依赖性:做或不做这件事的决定,生活中看不见的事情

依赖方法:决定如何做,你想做什么。

举例:举个例子,如果你想买一个笔记本,你口袋里没有钱,但你又很需要这个笔记本,你就会想到你的父亲。而你和你父亲是父子关系。所谓依赖,就是你把付款链接发给你爸爸,你爸爸代你付钱的依赖方式。

Makefile的作用是什么?

假设您有许多需要编译的源文件。在这种情况下,您每次都需要使用gcc test.c -std=c99 编译此文件。这是非常低效的,并且需要人工来为大型项目进行编译。当您没有那么多工作要做时,Makefile 就可以发挥作用。在创建Makefile 之前,您需要考虑如何执行它。我们如何考虑依赖关系和依赖方法?

hello:test.c //左边代表目标文件,右边代表依赖文件。整个代码代表了一种依赖关系,表明前者依赖于后者。

这里需要注意的是,写完第一行后,需要按Tab键才能写第二行。编辑makefile 时避免格式错误。

使用make命令后,会自动执行这行gcc命令,生成可执行程序hello。 make 动作相当于在vs 中生成一个解。

这还不够,虽然创建hello 很有用,但清除hello 还不够。它还提供了make clean以及相应的依赖和依赖方法来清除hello。

补充hello:test.c。 hello 是实际目标。这意味着您需要依赖项。另一方面,伪目标不必提供依赖项,但它们必须提供它们所依赖的方法。

Makefile默认形成可执行程序

.PHONY:

影响:

1. 以下往往是错误的目标:

2. 表示目标始终运行并且可以运行多次。

接下来,使用make生成几个临时文件。首先我们理清以下逻辑:

使用make 创建多个文件

make clean 清理多个文件

我的制作文件

生成文件概述:

1、make是执行依赖和依赖方法的命令

2.Makefile是维护机制的文件

3. makefile中保存的是项目的依赖结构。

4. 如果依赖关系没有建立,则依赖的方法不会被执行。

makefile构建多文件工程

第一个版本

第二个版本

$@:对应目标文件

$^:代表依赖文件列表

第三版

我们整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以安心参加面试并获得高薪offer。

这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。

本次访谈集内容为

174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx 面试题77 redis 面试题Zookeeper 题28

总共1000多道面试题,内容全面且有价值。

174 道运营工程师面试问题

1.什么是运维?

2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?

3. 给定300台服务器,如何管理它们?

4、我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

问题**

53道Kafka面试题,18道mysql面试题,40道nginx面试题,77道Redis面试题,28道Zookeeper面试题。

总共1000多道面试题,内容全面且有价值。

174 道运营工程师面试问题

1.什么是运维?

2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?

3. 给定300台服务器,如何管理它们?

4、我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

17.如何重置mysql root密码?

#这才是你应该如何学习Linux【使用yum、vim、编译gcc g++,相关内容来源网络仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91230.html

(0)
CSDN的头像CSDN
上一篇 2024年6月21日
下一篇 2024年6月21日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注