1. 软件包管理器
(1) 什么是软件包
在Linux下安装软件,主要有以下方法
1. 下载到程序的源代码,并进行编译得到可执行程序。
2. 软件包安装-- 获取rpm安装包,用rpm指令安装
3. 包管理器 yum(centos) apt/apt-get(ubuntu) 进行安装。(解决包的依赖问题)
软件包和软件管理器,类似于手机上的app和应用商店的关系。
yum 是Linux下常用的一种包管理器,主要应用在Fedora,RedHat,Centos等发行版上。
而在Ubuntu上主要使用apt作为其包管理器。apt同样可以自动解决依赖关系、下载和安装软件包的功能。
(2) yum与apt的安装与删除
以下代码分别是yum与apt下载指定软件包的指令(package_name)是要下载的软件包执行后按y确认安装即可安装成功(安装和删除都需要root用户进行)
yum install package_nameapt-get install package_name
通过以下指令可以更新所有软件包
yum updateapt update
以下指令是yum与apt的删除软件包操作
yum remove package_nameapt purge package_name
以下指令是列出所有的可用的软件包
yum一般会列出:软件包的名称、软件包的版本号
apt默认情况下只列出软件包名称和版本
yum list availableapt list available
(3) 注意事项
关于yum与/apt的所有操作都必须保证主机(虚拟机)网络通畅。
可以通过ping指令来验证,结果如下所示
2. 编辑器 vim
(1). vim的概念
vim是vi的升级版本不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮便于阅读,不仅可以在终端运行也可以运行于windows,Macos等不同的操作系统,通用性强。
我们可以使用vim 文件名 来使用vim编辑器,如果文件名不存在,系统会自动创建。
vim常见的三种模式(有很多模式,目前掌握着三种)。分别是命令模式、插入模式、底行模式,各模式的功能区分如下:
正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符,字或行的删除,移动复制某区段及进入Insert mode下,或者到last line mode
插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按[ESC]键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
末行(底行)模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
进入vim默认是命令模式
输入i或a或者o可以切换为插入模式,i a o的区别为
i:在当前光标处进入插入模式。
a:在当前光标的后一位置进入插入模式。
o:在当前光标处新起一行进入插入模式
我们按Esc键即可退出插入模式,再按下shift+; 即:即可进入底行模式。
若输入w(保存当前文件) wq(存盘并退出vim) q!(不存盘强制退出vim)就能保存退出
在命令模式下要查看你的所有模式:打开vim,底行模式直接输入
help vim - modes 即可
(2). vim的快捷键
命令模式
h | 光标左移 |
l | 光标右移 |
j | 光标下移 |
k | 光标上移 |
G | 移动到文章的最后 |
$ | 移动到光标所在行的行尾 |
^ | 移动到光标所在行的行⾸ |
w | 光标跳到下个字的开头 |
e | 光标跳到下个字的字尾 |
b | 光标回到上个字的开头 |
#l | 光标移到该行的第#个位置,如:5l,56l |
gg | 进入到文本开始 |
shift+g | 进⼊文本末端 |
ctrl+b | 屏幕往 后 移动一页 |
ctrl+f | 屏幕往 前 移动一页 |
ctrl+u | 屏幕往 后 移动半页 |
ctrl+d | 屏幕往 前 移动半页 |
x | 每按⼀次,删除光标所在位置的⼀个字符 |
#x | 6x 表示删除光标所在位置的后⾯(包含自己在内)6个字符 |
X | ⼤写的X,每按⼀次,删除光标所在位置的“前⾯”⼀个字符 |
#X | 20X 表示删除光标所在位置的 前20个字符 |
dd | 删除光标所在行 |
#dd | 从光标所在行开始删除#行 |
yw | 将光标所在之处到字尾的字符复制到缓冲区中 |
#yw | 复制#个字到缓冲区 |
yy | 复制光标所在行到缓冲区 |
#yy | 6yy 表示拷贝从光标所在的该行往下数”6行⽂字 |
p | 将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须 与“p”配合才能完成复制与粘贴功能 |
r | 替换光标所在处的字符 |
R | 替换光标所到之处的字符,直到按下「ESC」键为⽌ |
u | 回到上⼀个操作。按多次“u”可以执⾏ 多次回复 |
ctrl+r | 撤销的恢复(撤销撤销操作) |
cw | 更改光标所在处的字到字尾处 |
c#w | c3w 表示更改3个字 |
ctrl+g | 列出光标所在行的行号。 |
#G | 15G 表示移动光标到第15行首。 |
底行模式
set nu | 会在⽂件中的每⼀行前面列出行号 |
set nonu | 取消显示行号 |
# | #表示⼀个数字,再按回车键就会跳到该行 |
/关键字 | 先按/,再输入想寻找的字符,若第一次找的关键字不是想要的按n往后寻找 |
?关键字 | 先按?再输入想寻找的字符,若第一次找的关键字不是想要的按n往后寻找 |
w | 保存文件 |
q q! | 强制离开vim |
wq | 退出并保存 |
vim还可以进行各种配置,可以通过各种教程配置
3. 编译器 gcc/g++
gcc一般编译C语言,g++一般编译C++
要经过:预处理—>编译—>汇编—>链接四个阶段,可以参考这篇了解程序的编译与链接-CSDN博客
使用格式
gcc 选项 要编译的文件 选项 目标文件
以下是常用选项
•-E 只激活预处理,这个不生成文件,你需要把它重定向到⼀个输出文件里面
• -S 编译到汇编语⾔不进行汇编和链接
• -c 编译到目标代码
• -o 文件输出到⽂件,该选项后需紧跟输出文件名.。不指定就为a.out文件
• -static 此选项对⽣成的⽂件采用静态链接
• -g 生成调试信息。GNU调试器可利用该信息。
• -shared 此选项将尽量使⽤动态库,所以⽣成文件比较小。
• -O0/O1/O2/O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
• -w 不生成任何警告信息。
• -Wall 生成所有警告信息。
利用gcc/g++编译完成后,使用 ./生成的可执行文件 即可执行文件。
4. 自动化构建 make/Makefile
(1). make与Makefile的概念
一个工程中的源文件很多,Makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要重新编译,以及其它更复杂的功能操作。
其好处就是自动化编译,写好之后,只需要一个make命令,整个工程完全自动编译,提高开发效率。
make是一个命令工具,用来解释Makefile中指令的命令工具,一般来说,大多数IDE都有这个命令,比如:Delphi的make,Visual C++的n make,Linux下GNU的make。可见,makefile很常见。
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建
(2). 基本使用
test:test.cppg++ -o test test.cpp
.PHONY:clean
clean:rm -f test
我们上面的文件test,它依赖test.cpp
g++ -o test test.cpp 就是与之对应的依赖方法(开头必须用TAB开头,不可用四个空格)
依赖文件列表可以是空的
clean这种,没有被第一个目标直接或间接关联,那么它后面所定义的命令不会被自动执行,但是可以显式执行。即上面的 make clean。来清除所有的目标文件。以便重编译。
我们加上.PHONY修饰就将其设置成了伪目标,伪目标的特性是,总能被执行
比如
执行完make后是不能再执行make的,但是我们改变一下Makefile中的内容
.PHONY:test
test:test.cppg++ -o test test.cpp
.PHONY:clean
clean:rm -f test
就可以了
我们推导一下
test:test.og++ test.o -o test
test.o:test.sg++ -c test.s -o test.o
test.s:test.i g++ -S test.i -o test.s
test.i:test.cppg++ -E test.cpp -o test.i
.PHONY:clean
clean:rm -f *.i *.s *.o test
上面递归实现了编译全过程,当然实际没有必要这样写。
(3). make的工作
在默认方式下,即只输入make命令
1. make会在当前目录下找名字叫"Makefile"或"makefile"的文件。
2. 如果找到,它会找文件中的第一个目标文件(target),在上面会找到test,并作为最终的目标文件。
3. 如果test文件不存在,或者test所依赖的后面的test.o文件的文件修改时间要比test这个文件新(可以用touch进行测试),那么他就会执行后面所定义的命令来生成test这个文件
4. 如果test所依赖的test.o文件不存在,那么make会在当前文件中找目标为test.o文件的依赖性,如果找到则再根据那一个规则生成test文件。(有点类似于一个堆栈的过程)
5. 当然,.c文件和.h文件是存在的,于是make会生成test.o文件,再用test.o文件声明make的终极任务,即执行文件。
6. 这就是整个make的依赖性,make会一层一层的去找文件的依赖关系,知道最后编译出第一个目标文件。
7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。而对于所定义的命令的错误或编译不成功,make不管。
makefile(M可以大写也可以小写)文件也可以简写为:
1. $@ :表示依赖关系中的目标文件(冒号左侧)。
2. $^ :表示依赖关系中的依赖文件列表(冒号右侧全部)。
3. $< :表示依赖关系中的第一个依赖文件(冒号右侧第一个)。
5. git
为了方便管理与保存代码我们就需要使用git。git实际上就是一个代码托管平台。
git的使用步骤
1. 下面分别是Ubuntu与Centos的下载指令
sudo apt install gitsudo yum install git
2. 在gitee上创建一个仓库
3. 将仓库克隆到本地
在linux中执行以下指令
git clone 链接
我们要将刚创建的仓库克隆到本地,将上面链接处设置上对应的链接就可以了。
4. 设置全局git邮箱和用户
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
上面双引号填自己邮箱,下面填自己的名字即可。
5. 将要上传的代码拷贝到此路径
6. 通过指令上传代码
先通过以下代码将文件添加到暂存区
git add 文件名
在使用以下指令将暂存区文件提交到本地仓库
git commit -m "提交的内容信息"
最终通过以下指令,再输入gitee用户名与密码后将本地推送到远程仓库
git push
7. 查看日志与删除远端仓库文件
(1). 查看日志输入以下指令即可
git log
(2). 删除远端仓库文件
例如删除test文件
依次输入以下指令
git rm testgit commit -m "测试删除"git push
实现如下所示
上面还通过 git status 来看了当前文件状态与之前提交的区别,上图绿色字体即为区别
6. 调试器——gdb
程序的发布方式有两种,debug模式和release模式,Linux gcc/g++出来的二进制程序默认是release模式的。我们必须在源代码生成二进制程序时加上-g选项,如果没有添加,程序无法被编译。
gcc test.c -o test
//默认模式不支持调试gcc test.c -o test -g
//debug模式支持调试
可以通过 gdb 调试文件 调试目标文件。
gdb binFile
命令 | 作用 | 使用 |
gdb binFile | 打开 | 略 |
list/l | 显示源代码,从上次位置开始,每次列出10行 | list/l 10 |
list/l 函数名 | 列出指定函数的源代码 | list/l main |
list/l 文件名:行号 | 列出指定的源代码 | list/l test.c:1 |
r/run | 从程序开始连续执行 | run |
n/next | 单步执行,不进入函数内部 | next |
s/step | 单步执行,进入函数内部 | step |
break/b 文件名:行号 | 在指定行号设置断点 | break 10 break test.c:10 |
break/b 函数名 | 在函数开头设置断点 | break main |
info break/b | 查看当前所有断点的信息 | info break |
finish | 执行到当前·函数返回然后停止 | finish |
printf/p | 打印表达式的值 | print start+end |
p 变量 | 打印指定变量的值 | p x |
set var 变量=值 | 修改变量的值 | set var i=10 |
continue/c | 从当前位置开始连续执行程序 | continue |
delete/d breakpoints | 删除所有断点 | delete breakpoints |
delete/d breakpoints n | 删除序号为n的断点 | delete breakpoints l |
disble breakpoints | 禁用所有断点 | disble breakpoints |
enable breakpoints | 启用所有的断点 | enable breakpoints |
info/i breakpoints | 查看当前设置的断点列表 | info breakpoints |
display 变量名 | 跟踪显示指定变量的值(每次停止时) | display x |
undisplay 编号 | 取消对指定编号的变量的跟踪显示 | undisplay 1 |
until X行号 | 执行到指定行号 | until 20 |
backtrace/bt | 查看当前执行栈的各级函数调用及参数 | backtrace |
info/i locals | 查看当前栈帧的局部变量值 | info locals |
quit或ctrl+d | 退出GDB调试器 | |
watch | 监视一个表达式(如变量)的值,这个值在程序运行期间的值发生变化,会暂停程序执行并通知使用者 | watch r |
set var 变量=值 | 更改一个变量看是否是因为这个变量报错 | set var f=1 |