文章目录

  • 一.Linux 软件包管理器 yum
    • (1).软件包和软件包管理器
    • (2).ping指令
    • (3).查看软件包
    • (4).安装软件
    • (5).卸载软件
  • 二.Linux编辑器-vim使用
    • (1).vim基本概念
    • (2).vim模式切换
    • (3).vim命令模式命令集
      • (1).移动光标
      • (2).复制
      • (3).撤销上一次操作
      • (4).删除文字
      • (5).替换
      • (6).更改
      • (7).跳至指定的行
      • (8).多行注释,取消注释
    • (4).vim底行模式命令集
      • (1).列出行号
      • (2).跳到文件中的某一行
      • (3). 不退出vim执行命令行命令
      • (4).分屏
      • (5).光标在多屏幕下进行切换
      • (6).查找字符
  • 三. Linux编译器gcc/g++的使用
    • (1).预处理
    • (2).编译
    • (3).汇编
    • (4).链接
    • (5).动态库,静态库
  • 四.Linux调试器gdb使用
  • 五.Linux自动化构建工具 make/Makefile
    • (1).背景
    • (2).依赖关系和依赖方法
  • 六. git
    • (1).git的起源
    • (2).git的功能
    • (3).使用git提交代码

一.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 osprintf("hello Linux!\n");#elseprintf("hello Windows!\n");#endifreturn 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.ogcc -o mytest test.o // 要用Tab键
test.o:test.sgcc -o test.o -c test.s
test.s:test.igcc -o test.s -S test.s
test.i:test.cgcc -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.cgcc -c test.c
main.o:main.cgcc -c main.c.PHONY:clean
clean:rm *.o mytest

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

因此,以上代码可简写为

mytest:test.o main.ogcc -o $@ $^
test.o:test.cgcc -c $<
main.o:main.cgcc -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

Linux基础开发工具使用(yum,vim,gcc/g++,gdb,make,git)相关推荐

  1. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git

    Linux环境基础开发工具使用 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 软件安装三板斧 1.2.1 查看软件包 1.2.2 安装软件 1.2.3 卸载软件 2. vim 2. ...

  2. Linux——(二)环境基础开发工具(yum,vim,gcc,gdb,makefile,git)

    本节目录 总述 1. yum:软件包管理工具 1.1 软件包是什么? 1.2 软件包的操作 1.2.1 查看 1.2.2 安装 1.2.3 卸载 2. vim:linux编辑器 2.1 vim基本概念 ...

  3. 【Linux】Linux 基础开发工具(yum、vim、gcc/g++、gdb、make/makefile、git)

  4. Linux —— 基础开发工具的基本使用 —— yum、vim、gcc、make和makefile,gdb的简单应用

    目录 1.由生活常识引发的思考 2.yum的概念与使用 2.1yum的概念 2.2yum的使用 3.vim的概念和使用 3.1vim的概念 3.2vim的基本操作 3.2命令模式.插入模式.末行模式的 ...

  5. Linux基础开发工具快速入门

    学习导航 一.软件包管理器yum 1.linux如何进行安装 2.什么是软件包 3.yum如何安装程序 (1)原理的感性理解 (2)yum常用指令 二.Linux编辑器Vim的使用 1.初步认识 2. ...

  6. M的编程备忘录之Linux——基础开发工具

    目录 1.Linux软件包管理器 yum 1.1.查看软件包 1.2.安装软件 1.3.卸载软件 2.Linux开发工具 vim 2.1.vim的基本概念 2.2.vim的基本操作 1.进入vim 2 ...

  7. 【linux系统编程】基础开发工具:vi/vim

    Linux文本编辑器 – vim 正文开始@Assassin 目录: Linux文本编辑器 -- vim 1. vim基本介绍: 2. vim下各模式的切换: 3. vim命令模式: 4. vim底行 ...

  8. 【linux系统编程】基础开发工具:yum

    Linux软件包管理器 – yum 正文开始@Assassin 目录: Linux软件包管理器 -- yum 1. Linux环境下安装软件: 2. yum简介: 3. 软件包来源: 4. 理解yum ...

  9. 2 Linux环境基础开发工具

    2 Linux环境基础开发工具 2.1 Linux软件包管理器yum 2.1.1 软件安装的方式 1. 源码安装 大多数开源的软件都是源码的形式.拿过来自己编译,安装. 优点:源码安装兼容性好. 缺点 ...

最新文章

  1. xp系统的无线配置服务器,xp系统下使用无线提示无线自动配置服务没有运行如何解决...
  2. 【信息抽取】如何使用循环神经网络进行关系抽取
  3. 数学中的向量乘积和矩阵乘积总结
  4. SQL server 2000安装时提示我”以前的某个程序安装已在安装计算机上创建挂起的文件操作....”...
  5. 由逻辑异或运算符而发现的PHP诡异运算符优先级
  6. leetcode 304. 二维区域和检索 - 矩阵不可变(前缀和)
  7. Nginx使用HTTPS建立与上游服务器的网络通信
  8. leetcode__Longest Substring Without Repeating Characters
  9. 读书笔记Black-Scholes-Merton之二
  10. 互联网创业是没有什么好计划的
  11. Python学习教程(Python学习路线):Day13-进程和线程
  12. 不是外部命令也不是可运行程序_手机运行内存4G和6G有什么不同?差别不是一般大...
  13. 【转】jvm内存结构
  14. java动态运行代码并动态执行
  15. python 主函数传参_Python函数传参详解
  16. C# Socket网络编程精华篇 (转)
  17. 2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖
  18. 我们DevSkim、Jarvis和USG是这样子的
  19. 球半篮球分析,NBA总决赛第四场:顿凯尔特人VS勇士
  20. 真!无钥匙!数字钥匙在智能电动车领域的实践

热门文章

  1. TeamViewer一个很好的免费远程控制软件
  2. 精度厘米级,高效低成本的室内外精准定位和AR导航
  3. 采用Apache服务器,利用http协议格式来访问另一台电脑的文件夹
  4. office右键菜单修复_超级右键鼠标增强神器iRightMouse,iRightMouse使用教程
  5. sql文件太大无法导入问题的解决
  6. linux命令(3):pwd命令
  7. 服务器 备案 文档,服务器备案
  8. 微信活码云-裂变系统破除微信加群限制(含源码及数据库文件)-供参考学习
  9. 本科实习生软件开发一月工资_我从第一次软件开发实习中学到了什么
  10. 计算机学院文化节主题,计算机学院第八届电脑文化节策划精选.doc