目录
Linux 软件包管理器 —— yum
软件包的概念
使用yum
实现本地机器和云服务器的文件互传
Linux 编辑器 —— vim
vim命令模式命令大全
vim底行模式命令大全
配置vim
Linux 编译器 —— gcc/g++使用
执行编译的四个步骤(了解就好)
gcc选项
Linux 调试器 —— gdb使用
背景
release转换成debug
调试
命令汇总
在Linux下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序
但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成Windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装
软件包和包管理器,就好比app和应用商店的关系
yum(Yellow dog Update,Modified)是Linux下非常常用的一种包管理器,主要应用在Fedora,RedHat,Centos等发行版上。
输入指令yum list,就可看到可以下载的全部软件(列表很长,就不截图了)
安装软件
输入指令 sudo yum install 软件名
yum会自动匹配到你想安装的软件并询问你是否需要下载,这时候按y确认安装,当末尾出现complete时,说明安装完成
先安装lrzsz这个软件
安装完后输入指令rz -E可选择可选择需要从本地机器上传的软件
而输入指令sz+文件名可将云服务器上的文件下载到本地机器指定的文件夹中
vim:vim是解决在Linux上代码的编写的问题,本质是文本编辑器
特点:多模式的文本编辑器
这里先介绍vim主要的三种模式:命令模式、底行模式、插入模式
vim默认打开的时候所处的模式是命令模式
命令模式切换成插入模式:
i:在当前光标处进入插入模式
a:在当前光标的后一个位置进入插入模式
o:在当前光标处的下一行进入插入模式
移动光标
h:左移光标
j:下移光标
k:上移光标
l:右移光标
$:移动到光标所在行的行尾
^:移动到光标所在行的行首
gg:移动到文本开头
G:移动到文章的最后
n+shift+g:移动到第n行行首
w:光标跳到下个字开头
e:光标跳到下个字字尾
b:光标回到上个字开头
nl:光标移到该行的第n个位置
ctrl+b:屏幕往后移动一页
ctrl+f:屏幕往前移动一页
ctrl+u:屏幕往后移动半页
ctrl+d:屏幕往前移动半页
删除文字
x:每按一次,删除光标所在位置的一个字符
nx:删除光标所在位置的后面(包括自己)的n个字符
X:大写的X,每按一次,删除光标所在位置的前面一个字符
nX:删除光标所在位置的前面的n个字符
dd:删除光标所在行
ndd:从光标所在行开始删除n行
复制
yw:将光标所在之处到字尾的字符复制到缓冲区中
nyw:复制n个字到缓冲区
yy:复制光标所在行到缓冲区
nyy:表示拷贝从光标所在的该行往下数的n行内容
p:将缓冲区内的字符贴到光标所在位置。注意:所有与y有关的复制命令都必须与p配合才能完成复制与粘贴功能
替换
r:替换光标所在处的字符
R:替换光标所到之处的字符,直到按下Esc键为止
撤销上一次操作
u:若误执行一个命令,可按u撤销该操作,恢复到上一个操作
ctrl + r:撤销的恢复
更改
cw:更改光标所在处的字到字尾处
c#w:表示更改#个字
跳至指定的行
ctrl+g:列出光标所在行的行号
nG:移动光标至文章的第n行行首
在使用底行模式之前,请记住按Esc键确定你已处于正常模式,再按:冒号即可进入底行模式
列出行号
set nu:在文章的每一行前面列出行号
跳到文件中的某一行
#:#表示一个数字,在冒号后输入一个数字,再按回车就会跳到该行了
查找字符
/关键字:先按/键,再输入想寻找的字符,如果第一次找的关键字不是你想找的,可以一直按n会往后寻找到你要的关键字为止
?关键字:先按?键,再输入想寻找的字符,如果第一次找的关键字不是你想找的,可以一直按n会往前寻找到你要的关键字为止
保存文件
w:冒号后输入w可将文件保存
离开vim
q:按q就是退出,如果无法离开vim,可以在q后跟一个!强制离开vim
wq:保存并退出
这里给大家一个非常方便的脚本,你想在哪个用户下配置vim就在哪个用户下敲这个脚本,按回车就会自动帮你安装啦!
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
功能齐全,亲测有效!
gcc是c的编译器,g++是c++的编译器,两者在执行编译时都会经过以下四个步骤
1.预处理(gcc -E):头文件展开,去注释,宏替换,条件编译
2.编译(-S):c代码编译成汇编
3.汇编(-c):将汇编语言翻译成为目标文件(可重定向目标文件)
4.链接:将汇编过程产生成的二进制代码进行链接
-E:只激活预处理,不生成文件,你需要将它重定向到一个文件中
-S:编译到汇编语言,不进行汇编和链接步骤
-c:编译到目标代码
-o:文件输出到文件,常用gcc 代码文件 -o 输出文件
-g:生成调试信息
-static:此选项对生成的文件采用静态链接
首先我们要明白,程序发布的方式有两种,debug版本和release版本
debug:程序本身会被加入更多的调试信息,以便于进行调试。
release:不会添加任何的调试信息,不可被调试。
而Linux gcc/g++ 出来的二进制程序,默认时release版本
so,要使用gdb调试,得先转换成debug版本,所以必须在源代码生成二进制程序的时候,加上-g选项。
可以看到,mytest和mytest_g两者的大小有差别,所以mytest是默认生成的release版本的,mytest_g是debug版本的(因为加入了调试的信息,所以文件会变大)
通过readelf指令和grep过滤后也可以验证我们的观点(readelf命令一般用于查看ELF格式的文件信息),mytest_g就是比mytest多出这些和debug有关的调试信息,所以mytest_g是debug版本的。
总结:Linux默认发布的可执行程序,是动态链接且release方式,可通过-static和-g选项来修改成静态链接和debug版本。
通过gdb mytest_g调试程序
进入到gdb模式后,可以输入 list/l 指令显示源码(每次列10行,接着上次的位置往下列),或者想从第一行开始显示可以输入 l 1 指令。
通过run指令运行程序,输出结果
打断点:b 行号
查看断点:info b
可以看到当前有一个断点在第2行
再打一个断点并查看
删除断点:d num
list /(l 行号):显示源代码,每次列10行,接着上次的位置往下列
list /(l 函数名):列出某个函数的源代码
run/r:运行代码
b 行号:打断点
info b:查看断点
d Num(断点编号):删除断点
p 变量:打印变量值,也可以p &变量打印变量的地址
next/n:逐过程执行
step/s:逐语句执行
display 变量名:跟踪查看一个变量,每进行一步调试都会显示一次它的值
undisplay 跟踪变量名的编号:取消对先前设置的那些变量的跟踪
until x行号:跳至x行(忽略掉那些无效的代码的行)
finish:执行到当前函数的返回,然后停下来等待命令
continue/c:跳转到下一个断点
set var:修改变量的值
disable 断点编号:禁用断点
enable 断点编号:启用断点
bt:查看各级函数调用及参数
quit:退出gdb