IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux基础开发工具使用(yumvimgcc/g++gdbmakegit) -> 正文阅读

[系统运维]Linux基础开发工具使用(yumvimgcc/g++gdbmakegit)

一.Linux 软件包管理器 yum

(1).软件包和软件包管理器

Linux下载软件的三种方式
1).源码安装
2).rpm安装包(未解决软件的依赖关系)
3).通过yum进行安装软件

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.

yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,
Centos等发行版上

(2).ping指令

关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
可以通过 ping 指令验证
在这里插入图片描述

(3).查看软件包

通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包。

yum list | grep lrzsz

在这里插入图片描述
注意事项:

1). 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
2). “x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
3). “el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.
4). 最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念

(4).安装软件

通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装

sudo yum install 软件包名称

yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装,出现 “complete” 字样, 说明安装完成。

注意事项:
1).安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.

2).yum安装软件只能一个装完了再装另一个. yum正在安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.

补充 : cilent 怎么知道包服务器在哪里?
client 已经配置了目的服务器,以及目的软件源信息,那么软件源信息在哪里呢?

yum的相关配置信息
在这里插入图片描述
yum源中的镜像 url 存放软件源信息

在这里插入图片描述

安装扩展源(非官方的软件)

sudo yum install -y epel-release

(5).卸载软件

sudo yum remove 软件包名称

二.Linux编辑器-vim使用

(1).vim基本概念

我们重点讲解vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

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

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

要查看你的所有模式:打开vim,底行模式直接输入
help vim-modes

(2).vim模式切换

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

$ vim test.c

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

2). [命令模式]切换至[插入模式]

输入a : 从目前光标所在位置的下一个位置开始输入文字
输入i : 从光标当前位置开始输入文件
输入o : 插入新的一行,从行首开始输入文字

3).[插入模式]切换至[命令模式]

按 esc 键

4). [命令模式]切换至[底行模式]

「shift + ;」

5).退出vim及保存文件

在[正常模式]下,按一下「:」冒号键进入[底行模式]
输入 w (保存当前文件)
输入wq (存盘并退出vim)
输入q! (不存盘强制退出vim)

在这里插入图片描述

(3).vim命令模式命令集

(1).移动光标

[h]、[j]、[k]、[l],分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按[gg]:进入到文本开始
按「 $ 」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页

(2).复制

[yw] :将光标所在之处到字尾的字符复制到缓冲区中。
[#yw] :复制#个字到缓冲区
[yy] :复制光标所在行到缓冲区。
[#yy] :例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
[#p]: 将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

(3).撤销上一次操作

[u]:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回
复。
[ctrl + r] : 撤销的恢复

(4).删除文字

[x]: 每按一次,删除光标所在位置的一个字符
[#x]:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
[X]: 大写的X,每按一次,删除光标所在位置的“前面”一个字符
[#X]:例如,「20X」表示删除光标所在位置的“前面”20个字符
[dd]: 删除光标所在行
[#dd]:从光标所在行开始删除#行
[#dd] + [p] : 剪切

(5).替换

[#r]:替换光标所在处的#个字符。
[R]:替换光标所到之处的字符,直到按下「ESC」键为止

(6).更改

[cw]: 更改光标所在处的字到字尾处
[c#w]:例如,「c3w」表示更改3个字

(7).跳至指定的行

[ctrl] +[g] : 列出光标所在行的行号。
[#G] :例如,[10G],表示移动光标至文章的第10行行首

(8).多行注释,取消注释

多行注释
1). [ctrl] + [v] 进入可视模式
2). [h],[l],[j] ,[k] 进行选择
3). [shift + i] 进入插入模式
4). 输入 //
5). 按 [esc]

取消注释
1). [ctrl] + [v] 进入可视模式
2). [h],[l],[j] ,[k] 进行选择
3). 按 [d]

[shift] + [ ~ ] : 大小写切换

(4).vim底行模式命令集

(1).列出行号

[set nu]: 输入「set nu」后,会在文件中的每一行前面列出行号
[set nonu] : 取消行号

(2).跳到文件中的某一行

[#] : [#]号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行

(3). 不退出vim执行命令行命令

[:!cmd] : 不退出vim执行命令行命令

(4).分屏

[: vs 文件名] : 分屏

(5).光标在多屏幕下进行切换

[ ctrl + 2次w] : 光标在多屏幕下进行切换

(6).查找字符

[/关键字] : 先按 [/] 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按
[n]会往寻找到您要的关键字为止。

[?关键字]:先按 [?] 键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直
按[n]会往寻找到您要的关键字为止。

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

我们都知道文本变成可执行程序需要经历以下4个步骤,预处理,编译,汇编,链接,接下来,我们将通过这4个阶段来学习gcc/g++的使用

格式 : gcc [选项] 要编译的文件 [选项][目标文件]
选项 :

  1. -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  2. -S 编译到汇编语言不进行汇编和链接
  3. -c 编译到目标代码
  4. -o 文件输出到文件
  5. -static 此选项对生成的文件采用静态链接
  6. -g 生成调试信息。GNU 调试器可利用该信息。
  7. -shared 此选项将尽量使用动态库
  8. -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
  9. -w 不生成任何警告信息。
  10. -Wall 生成所有警告信息。

(1).预处理

预处理阶段主要所做的四件事情如下 :

1).头文件展开

使用 gcc -E test.c -o test.i 将 test.c 文件预处理以后重定向到 test.i 中,然后我们对比 test.c 和 test.i 文件,观察可知,预处理之后,编译器将系统中 /usr/include/stdio.h 文件内容拷贝到 test.i 中
在这里插入图片描述

2).去掉注释
在这里插入图片描述

3).宏替换
在这里插入图片描述

4).条件编译

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

(2).编译

注 : 编译,汇编,链接的分析使用的是如下代码

#include<stdio.h>
#define os 0                                                                                                          
int main()
{
 #if os
    printf("hello Linux!\n");
 #else
    printf("hello Windows!\n");
 #endif
  return 0;
}

编译的目的是将代码编译成汇编语言

使用 gcc -S test.i -o test.s 命令
在这里插入图片描述

(3).汇编

汇编的目的是生成二进制的机器指令(目标文件)

使用 gcc -c test.s -o test.o 命令
在这里插入图片描述

(4).链接

如果我们使用了库函数,那么在目标文件中,只存在函数调用,没有函数实现,链接的过程本质是将自己调用的过程和具体的实现过程关联起来

使用 gcc test.o -o test 命令

补充 :
1). ldd 命令可以用来查看可执行程序所依赖的库
2). 库的名称是由 lib + name + 后缀(.a/.so) 组成
3). 在Linux CentOS下,以 .so 结尾的是动态库,以 .a 结尾的是静态库
4). 在 Window 下,以 .dll 结尾的是动态库,以 .lib 结尾的是静态库

在这里插入图片描述

我们在写代码时使用了 printf 函数,该函数的实现在 C库中

(5).动态库,静态库

库是一批代码实现和使用说明的结合,最大意义是减少当前开发的工作量,也是软件分工的具体表现

都有什么库 : 动态库(.so),静态库(.a)

静态库是指编译链接时,把库文件的代码全部加入到可执行文件当中,因此生成的文件比较大,但在运行时也就不再需要库文件了,静态库一般以.a为后缀。
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件当中,而是在程序运行时由链接文件加载库,这样可以节省系统的开销,动态库一般以.so为后缀。

动态链接
优点 :省空间(磁盘的空间,内存的空间),程序体积小,加载速度快
缺点 :依赖动态库,程序运行可移植性较差

静态链接
优点: 不依赖第三方库,程序运行可移植性较好
缺点:浪费空间(磁盘的空间,内存的空间),程序体积大,加载速度慢

gcc 生成可执行程序,默认是动态链接的
在这里插入图片描述在这里插入图片描述

四.Linux调试器gdb使用

debug模式 : 程序本身会被加入调试信息,可调试
release模式 : 不会添加任何调试信息,不可调试

centos7 gcc中默认生成的可执行程序是 release 版本的,不可调试
如果我们想调试某程序,应使用 -g 选项 ,即 gcc test.c -o mytest_g -g
readelf 命令可用来查看可执行程序的段信息,我们从中也可看出

1). gcc 默认生成的可执行程序是没有任何调试信息的(release),不可调试
2). debug版由于加入了调试信息,比release版的大小大
在这里插入图片描述

gdb 的使用

1). list(l) 行号 :显示binFile源代码,接着上次的位置往下列,每次列10行。
在这里插入图片描述

2). list(l) 函数名:列出某个函数的源代码。
在这里插入图片描述

3). r或run :运行程序。
4). n 或 next(逐过程):单条执行。
5). s或step(逐语句):进入函数调用
6). break(b) 行号:在某一行设置断点
在这里插入图片描述

7). info break :查看断点信息。
在这里插入图片描述

8). finish:直接执行完当前函数返回,然后停下来等待命令
在这里插入图片描述

9). continue(或c):从当前位置跳到下一个断点处在这里插入图片描述

10). p 变量:打印变量值。
在这里插入图片描述

11). delete breakpoints(d breakpoints):删除所有断点
在这里插入图片描述

12). delete n(d n) :删除序号为n的断点
在这里插入图片描述

13). display + 变量名:跟踪查看一个变量,每次停下来都显示它的值
在这里插入图片描述

14). undisplay + 序号名:取消对先前设置的那些变量的跟踪
在这里插入图片描述

15). until + 行号:跳至某行
在这里插入图片描述

16). quit:退出gdb

在这里插入图片描述

五.Linux自动化构建工具 make/Makefile

(1).背景

我们在 Windows 环境下,使用 vs 多文件编程时,我们不用关心哪些文件先编译,哪些文件后编译,链接时是哪些文件互相链接,这些文件与文件之间的关系是由 vs 帮我们解决好了,而在Linux中,这些都是由用户自己去决定的

我们在进行多文件编程时,有两种生成可执行程序的方式
1).

 gcc -o mytest test1.c test2.c .........

2).

gcc -c test1.o test1.c
gcc -c test2.o test2.c
..........
gcc -o mytest test1.o test2.o .......

建议使用第二种方式,原因如下 :
如果在众多文件中有一个文件被改动了,第一种方式需要将所有的文件重新编译链接,第二种方式只需要重新编译被改动的文件即可

可如果我们所写的项目中有上百个源文件,那我们岂不是要写上百条命令,这时候 make/makefile 就登场了

注意 :

(1). 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

(2). makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

(3). make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

(4). make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建

(2).依赖关系和依赖方法

依赖关系 : mytest 依赖于 test.o ,test.o 依赖于 test.s ,test.s 依赖于 test.i ,test.i 依赖于 test.c

依赖方法 : 如何从 test.o 变成 mytest,如何从 test.s 变成 test.o,如何从 test.i 变成 test.s,如何从 test.c 变成 test.i

工程是需要被清理的,像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重新编译。但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

Makefile文件

mytest:test.o
	gcc -o mytest test.o // 要用Tab键
test.o:test.s
	gcc -o test.o -c test.s
test.s:test.i
	gcc -o test.s -S test.s
test.i:test.c
	gcc -o test.i -i test.c
	
.PHONY:clean // 伪目标
clean:
	rm -f test.i test.s test.o mytest
// mytest:main.o test.o 先编译 main.c test.c
mytest:test.o main.o  // 先编译 test.c main.c 
	gcc -o mytest test.o main.o
test.o:test.c
	gcc -c test.c
main.o:main.c
	gcc -c main.c

.PHONY:clean
clean:
	rm *.o mytest

$@ : 依赖关系中的目标文件
$^ : 依赖关系中的依赖文件列表
$< : 依赖关系中的一个依赖文件

因此,以上代码可简写为

mytest:test.o main.o
	gcc -o $@ $^
test.o:test.c
	gcc -c $<
main.o:main.c
	gcc -c $<

.PHONY:clean
clean:
	rm *.o mytest

在这里插入图片描述

六. git

(1).git的起源

Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。

Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!

(2).git的功能

张三团队开发发布了一个项目,在项目被人使用的过程中,有人发现了一些bug,向张三团队提出,于是张三团队新建了一个分支,将源项目代码复制过来,修正好bug且测试通过,然后合并分支(分支管理),张三团队给这个项目增加了一些新功能,但又不想原来的项目版本丢失,于是在每次开发新版本时,张三团队都会记录下做了哪些改动(版本控制),而且开发过程中,每人负责不同的模块开发,开发完成后,将自己的代码提交到本地仓库,同步到远程仓库(多人协作),这些都是使用 git 做到的。

git 的功能
1).版本控制
2).分支管理
3).多人协作

在这里插入图片描述

(3).使用git提交代码

(1).git clone
在这里插入图片描述

(2).git add
(3).git commit
(4).git push

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:14:35  更:2021-08-06 10:14:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 4:46:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计