[linux] 看了就会写程序并且变成黑框高手的linux的基础工具篇 ^.^
Posted 哦哦呵呵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[linux] 看了就会写程序并且变成黑框高手的linux的基础工具篇 ^.^相关的知识,希望对你有一定的参考价值。
目录
注:以下所有命令执行,都是基于linux系统centos7.5版本下
1. yum包管理器
1.1 yum包管理器是干什么的?
在linux系统中安装软件,通常是下载软件源码,并进行编译得到可执行程序。这种做法过于复杂,所以就有了形同windows的软件商店,通过商店直接下载软件包,进行直接安装。
1.2 yum的基本使用命令
- 罗列liunx下的所有可以下载的软件包,命令:
yum list
。
- 上图可以看出直接罗列出来软件实在太多了,难以分辨,所以使用grep筛选出我们想看到的软件包。命令:
yum list | grep [软件包名]
- 安装软件,命令:
yum install (-y) [软件包名]
linux中安装文件需要向系统目录中写入文件,所以需要使用sudo命令或者切换到root用户下。
安装软件时必须逐个安装,不能同时安装多个。
这里以安装 lrzsz
为例,该软件是用于windows和远端linux机器通过xshell传输文件的。
此页面显示已经安装了该软件,进行的更新操作。
- 卸载软件
yum remove (-y) [软件包名称]
这里以卸载lrzsz为例。
2. Linux开发工具相关
在liunx系统中,我们最常用的功能无疑就是对软件的开发了,如何进行程序的书写,程序的编译,调试,代码的管理,将会在下文中详细介绍以上功能。
2.1 vim编辑器
2.1.1 vim是什么?
vim简单来说,就是一款编辑器,可以编写程序的编辑器,其中可以书写c/c++等,具有代码高亮显示等等一些特性。
2.1.2 vim的简单介绍
1.vim我们常用的一共有三种模式,分别为命令模式,插入模式,底行模式。
- 命令模式:在此模式下,可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段,或进入插入模式、底行模式下。
- 插入模式:可以进行文字的输入,按
esc
回到命令行模式,该模式使用最为频繁,在底行模式下按下键盘i
键进入插入模式。- 底行模式:此模式中,可以进行文件的保存或退出,也可以进行文件替换、查找字符串,列出行号等操作。在命令模式中,
shift + :
进入该模式。
2.1.3 vim的功能按键
贴一张键位图:
加下来,挑一些常用功能介绍一番。这些功能都是在正常模式下的操作,并且区分大小写,在vim中最常用的7个功能移动光标、删除、复制、粘贴、替换、撤销、更改
。
1.移动光标
方法一:键盘上下左右键
方法二:
操作 | 现象 |
---|---|
h | 光标左移 |
l | 光标右移 |
k | 光标上移 |
j | 光标下移 |
gg | 光标快速移动至第一行 |
G | 光标快速回到最后一行 |
[num]G | 光标跳转至num行 |
2.删除字符
操作 | 现象 |
---|---|
x | 向后删除光标所在位置的元素 |
[num]x | 向后删除num个字符 |
X | 向前光标所在删除字符 |
[num]X | 向前删除num个字符 |
dd | 对光标所在行进行剪切 |
[num]dd | 剪切num行 |
3.复制字符
操作 | 现象 |
---|---|
yy | 复制光标所在行 |
[num]yy | 复制光标以下num行 |
4.粘贴
操作 | 现象 |
---|---|
p | 在光标的下一行进行粘贴 |
P | 在光标的上一行进行粘贴 |
5.替换
操作 | 现象 |
---|---|
r | 替换当前光标所在的字符 |
R | 进入到replace模式,进行替换,esc结束替换 |
6.撤销
操作 | 现象 |
---|---|
u | 撤销上次的操作 |
ctrl + r | 反撤销 |
7.更改
操作 | 现象 |
---|---|
cw | 删除当前单次,并进入插入模式 |
2.1.4 底行模式中常用的指令
1.搜索字符
操作 | 现象 |
---|---|
/[待查找字符] | 向下搜索 |
?[待查找字符] | 向上搜索 |
上述操作如果第一次不是想要查找的值可以按 n
继续查找
2.查找指定字符并全文替换
:%s/[待替换字符]/[替换后字符]/g
参数含义 %s
全文替换 g
替换当前行所有目标字符串
替换前:
替换后:
3.显示取消行号
操作 | 现象 |
---|---|
set nu | 显示行号 |
set nonu | 取消显示行号 |
4.批量注释与批量取消注释
操作 | 现象 |
---|---|
ctrl+v -> 选中注释行(j/k) -> I ->插入注释符 -> esc | 批量注释 |
ctrl+v-> 选中注释行(j/k/l/h) -> x | 批量取消注释 |
2.2 gcc/g++编译器
2.2.1 作用
gcc 用来编译c语言,g++用来编辑c++。如果提示无法使用该命令,则需要利用上述的yum管理器进行安装
2.2.2 命令格式及参数解释
命令格式:gcc/g++ [参数] 编译的文件名 [参数] [目标文件]
参数 | 作用 |
---|---|
-E | 对文件进行预处理,生成 .i 文件 |
-S | 对文件进行汇编,生成 .s 文件 |
-c | 编译目标代码,生成 .o 文件 |
-o | 文件输出到XX文件 |
-g | 编译最后的参数,可以调试程序 |
-static | 对文件进行静态编译 |
-shared | 动态编译,不填写此参数默认为动态编译 |
2.2.3 编译过程及参数使用
在liunx编译中需要经历4个过程,预处理、编译、汇编、链接。
1.预处理
在预处理阶段,主要完成头文件展开、宏替换、条件编译、去注释等。处理移 # 开头的所有代码。
命令格式gcc -E filename.c -o filename.i
2.编译
生成汇编代码,在这个阶段会进行代码规范性的检测,语法语义的检查,并且编译为汇编代码
命令格式:gcc -S filename(.i) -o sort.s
3.汇编
将编译生成的汇编代码,转化为机器码文件。生成
.o
文件
命令格式:gcc -c filename.s -o filename.o
4.链接
对编译的机器码文件,进行链接生成可执行文件
可以省略上述步骤,直接生成可执行文件
命令格式:gcc [filename] -o [filename]
注意
在链接过程中,分为静态链接和动态链接
静态链接:静态链接的可执行文件大于动态链接生成的可执行文件,因为在这个过程中在所有依赖文件全部加入到可执行文件中,运行时不依赖任何文件。
动态链接:默认方式为动态链接,不将库文件加入到程序中,而是在程序运行时动态链接所需要的库文件。
静态链接与动态链接大小对比:
2.3 gdb调试工具
2.3.1 gdb调试前的准备
程序的版本共有两种,分别为debug版本和release版本,debug版本是提供给程序员调试的程序版本,而release版本是发布程序的版本。而linux默认编译出来的release版本。所以想要调试程序必须要在编译后加上-g
参数。
gcc filename.c -o filename -g
2.3.2 gdb调试的小命令
gdb 可执行文件
进入调试模式才能有以下的操作。
参数 | 作用 |
---|---|
l | 显示当前调试程序的代码,一次显示10行 |
r | 运行程序,没有断点则会一次执行完程序 |
b 行号 | 在指定行号位置加入断点 |
i b | 查看所有断点信息 |
disable 断点序号 | 禁用断点 |
enable 断点序号 | 启用断点 |
n | 逐过程执行 |
s | 逐语句执行 |
c | 从当前位置连续执行代码,直至遇到断点或程序结束 |
p 变量名 | 打印指定变量信息,也可以打印自定义类型变量 |
bt | 查看调用堆栈,从底向上看堆栈信息 |
where | 与bt命令相同 |
q | 退出调试 |
2.3.3 gdb调试命令的演示
-
l
显示程序代码
-
r
运行代码
-
b [行号]
对指定行号设置断点
-
i b
查看所有断点信息
-
disable 断点序号
-
enable 断点序号
-
n
逐过程执行
一次性执行完QuicSortNonR()
函数
-
s
逐语句执行
进入到PrintResult()
函数体中执行斜体样式
-
p 变量名
-
bt
查看堆栈信息
2.4 make/makefile自动化构建工具
2.4.1 自动化构建是什么
如果工程中文件量非常大,则上面的gcc命令则需要手动一步步去执行,太慢了。所以有了makefile文件。
makefile文件书写一次,只需要使用make命令,整个工程就会自动编译。
makefile文件写编译规则,make负责解释这些规则。
2.4.2 makefile文件怎么写
1.书写规则
makefile文件由三部分构成,分别是 目标文件、依赖对象、编译命令共同组成。
伪目标:将对象设置为伪目标,则不管文件有没有更新的情况下都不会生成目标对象。常用于工程清理,比如说下发图片中第22行就是伪目标对象
上述makefile文件中的依赖关系为:
sort_test
依赖sort.o
和stack.o
sort.o
和stack.o
依赖sort.s
和stack.s
以此类推
2.4.3 makefile工作原理
1.make会在当前目录下寻找名字为
makefile
或Makefile
的文件进行编译
2.make命令只会为生成第一个目标文件而服务,上述例子中只会为生成sort_test
文件而服务
3.如果目标文件的依赖对象不存在会在下方命令中寻找可以生成该依赖对象的命令进行执行。会先生成所需要的依赖对象再去生成目标对象
4.如果文件没有更新则执行make
命令不会去重新编译,如果文件有更新,再去执行make
命令才会对改变的目标重新生成目标对象。
-
执行
make
命令
-
文件未更新执行
make
命令
-
文件更新执行
make
命令
-
清理工程
2.4.4 内置变量和自定义变量
1.内置变量
在这里只列最常用的两个变量
参数 | 作用 |
---|---|
$^ | 代表所有依赖对象 |
$@ | 代表所有目标对象 |
2.自定义变量
自定义方法:
变量名 = 字符串
使用方法:$(变量名)
一般用来定义名字出现次数较多的变量
还记得上面makefile文件中的代码吗,我们将上述代码改写以下利用内置变量与自定义变量进行改写。
2.4 git代码管理工具
在这个工具的使用中,我会以我的个人仓库作为示例进行演示。
1.登录自己的远端仓库
登录自己的远端仓库,并且新建一个仓库。我这里有仓库了就不新建了。
2.复制远端仓库链接
找到远端仓库的链接复制下来,一会有大用。
2.4.1 linux下的git工具使用
没有工具的要先下载工具
1.克隆项目到本地
如果想对远端仓库进行代码的提交,则必须先要克隆仓库到本地
git clone [url]
克隆时,也保证当前文件夹不是仓库
2.将代码交由git管理
将代码放入仓库中,如果直接在仓库新建代码,但是它不归仓库所管理,所以要通过add命令交由仓库管理。
git add [文件名]
3.提交改动到本地
上一步做完之后,新建的文件已经由仓库管理了,本地仓库没有接收这个改动,所以将改动提交至本地。
git commit -m "日志信息"
提交代码时,一定要提前配置好用户名和邮箱地址。下面就是反例。
4.将改动过的代码提交到远端仓库
git push origin master
总结
以上的所有内容就是关于liunx工具的使用了,文章中难免会出现一些小问题,如果有发现,欢迎批评指正。
以上是关于[linux] 看了就会写程序并且变成黑框高手的linux的基础工具篇 ^.^的主要内容,如果未能解决你的问题,请参考以下文章