基础指令四
文章目录
linux常见安装方式
1.源代码安装:通过源代码直接编译出软件,很少见
2.rpm包安装:将编译出的软件打包好,比较不方便,各软件的地址及依赖不一样
3.包管理器:相当于是软件商店,到指定服务器去直接拉取软件,自动解决依赖
linux下常用的包管理器是yum,ubuntu常用apt
yum/apt
使用方法:
cpp
sudo apt install -y name //安装name,-y表示默认同意
sudo apt remove [-y] name //卸载name,-y多了个框,表示可选
cat /etc/apt/sources.list //系统标准源
ll /etc/apt/sources.list.d/ //第三方扩展源
vim
vim是vi的升级版,兼容vi的所有指令,通过vim 文件名 来进入文件,不存在则创建文件
如果没有读权限,则打开文件后什么都看不到,如果没有写权限,但自己是拥有者,可以在命令后加!强制执行
vim主要需要掌握三种模式
cpp
命令模式:控制光标移动,进行字或者行的删除,以及移动或复制某区段,以及切换至插入或底行模式
插入模式:只有插入模式可以进行文字输入,按esc回到命令模式
底行模式:可以进行文件保存退出,寻找字符串,列出行号等操作,按shift+:进入底行模式
非必须但是重要的模式
替换模式:也叫覆写模式,新输入的内容直接替换就内容,按R或者shift+r进入,esc退出
视图模式:以ctrl+v时进入视图模式的光标作为起点,到光标所在位置作一个矩形,对该矩形进行操作
视图模式下可以使用各种命令模式的命令集,按shift+i进入插入模式,进行多行操作,按esc同步到选中的所有行
模式切换
命令模式下按a,i,o都可以进入插入模式,i表示光标前插入,最常用,a表示光标后插入,o表示向下新开一行插入
命令模式下按shift+;,相当于:进入底行模式
插入模式下按esc返回命令模式
底行模式下按esc退回命令模式
命令集
命令模式命令集
cpp
移动光标
hjkl:左下上右移动
w:向右移动一个单词
b:向左移动一个单词
#w:向右移动#个单词
#b:向左移动#个单词
删除
x:删除光标所在位置的一个字符
#x:删除光标开始的#个字符
X:删除光标前的一个字符
dd:删除光标所在行
复制粘贴
yw:将光标所在位置的字符复制到缓冲区
#yw:将光标及之后的#个字符复制到缓冲区
yy:将光标坐在行复制到缓冲区
#yy:将光标所在行开始的向下#行复制到缓冲区
p:将缓冲区的字符粘贴到光标所在位置
替换
r:将光标处的字符替换为下一个输入的字符
#r:将光标开始的#个字符替换为下一个输入的字符
shift+r:相当于输入R,进入替换模式,新的输入将直接覆盖旧输入
跳转
ctrl+g:显示光标所在行号
#G:光标移动到#行
G:跳转到文本结尾
GG:跳转到文本开头
撤销
u:撤销上一个操作
ctrl+r:用于撤销刚才的撤销,同时它也可以被u撤销
退出
shift+zz:相当于ZZ,保存并退出
底行模式命令集
cpp
跳转
set nu:显示行号
#:跳转到#行
查找
/关键词:查找关键词,可以按n向后跳转
?关键词:也是查找关键词,不过按n是向前跳转
返回终端
!命令:输入一个!后面加shell命令,可以不退出vim,临时返回终端执行shell命令
命令!:在命令集的后面加一个!表示强制执行命令,无视rwx权限
分屏操作
vs 文件名:分屏,创建一个新页面,输入wq保存后才会创建新文件
ctrl+ww:切换到另一个vim页面
保存退出
w:保存文件
q:退出文件
wq:组合使用,保存并退出
git
git是版本管理工具,它会将每个版本的代码做一份快照,没变的文件与上版本共用一份,变化的文件额外记录进去
它是无中心分布式的,但使用中一般会有一个远端中心
基础文件
.git文件存放是本地仓库的信息,是隐藏文件,存在.git文件的目录就叫做工作区
.gitignore文件里面存档是上传时需要忽略的文件,可以直接指定文件,也可以使用通配符*.c来指定一个类型的文件
readme.md就相当于仓库中项目的使用说明
基础指令
克隆仓库
git clone 网址,可以将网址对应的代码克隆到本地,并自动生成.git文件
推送
git status 查询当前本地仓库状态,与实际文件有哪些差异,内容修改或文件增删等
git add . 将所有的修改都添加到暂存区,不生成具体版本,可撤销,也可以git add 文件 来单独添加某几个文件
git commit -m "提交日志",将暂存区提交给本地仓库,并附加提交日志,-m "提交日志"是一定要写的,这时会生成一次快照,作为一个小版本
git push 将本地仓库同步到远端仓库,需要进行身份认证
git reset HEAD 文件名 可以将add到暂存区的文件撤回来
git checkout -- 文件名 可以放弃工作区的修改,还原到上一版本地仓库的内容
git log 查询提交日志
拉取
git pull 拉取远端仓库合并到本地,每次push前最好先pull一下,避免本地和远端冲突
如果一开始pull到仓库,其中有test.c,test1.c,test2.c文件
本地修改了:test.c、test1.c
别人修改了:test.c、test2.c,并上传到远端
test1.c和test2.c会会由git自动进行合并,但是test.c由于本地和远端同时修改了同一个文件的同一部分,会出现冲突
git就会调用vim,将本地文件与现在的云端文件进行对比,由程序员决定保存哪些
gdb与cgdb
gbd是调试代码的工具,具备以下功能
txt
断点:运行到某行自动停下
单步执行:一行一行跑,看每步发生什么
查看变量:随时看 int、数组、指针的值
查看调用栈:程序崩溃时,看是哪个函数、哪行代码炸的
内存查看:看指针指向的内存内容
崩溃分析:程序 coredump 后,用 GDB 回溯崩溃现场
而cgbd是gbd的可视化版本,操作更简单
debug和release
debug版本不对代码进行优化,执行逻辑与代码逻辑相同,方便寻找bug,包含调试信息,所以体积大,运行慢
release版本编译器会对代码的逻辑优化,删除冗余变量,但是不能调试
只有debug版本可以被调试,但是最终的release版本也需要进行测试,
正常的编译会直接生成release版本,加入选项-g可以指定生成debug版本
shell
gcc -g test.c -o test_debug #debug版本
gcc test.c -o test_release #release版本
cgbd指令
通过cgbd 文件名 进入调试模式,只能使用编译好的二进制文件进行调试
调试模式下指令
r :run,运行
o :打开文件
q :quit,退出
l :list,查看代码,l 函数名,列出函数的源代码,l 文件名:行号,列出指定文件的源代码
n :next,逐行运行
c :继续运行
空格 :在当前行打断点
b :break,断点,
b 行号:在行号处打断点
b 行号 if 条件:在运行到行号时,如果满足条件,则停顿,不满足条件就继续执行
condition 断点编号 条件 :将指定编号的断点变为条件断点
b 函数名:在函数开头打断点
info b:查看所有断点信息
d :delete,删除,d breakpoints,删除所有断点,d breakpoints n,删除序号为n的断点
p 变量 :print 打印变量
watch 变量 :监视变量,监视后如果该变量被修改了,会提示
set var 变量=值 :临时修改变量的值,不用编译或者改代码,直接修改变量的值