Linux基础指令 四(apt,vim,git,cgdb)

基础指令四

文章目录

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 变量=值 :临时修改变量的值,不用编译或者改代码,直接修改变量的值
相关推荐
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
和你看星星2 天前
Git rerere:让重复冲突只解决一次
git
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
AlfredZhao3 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
卷无止境3 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境3 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴4 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
戴为沐4 天前
Linux内存扩容指南
linux
zylyehuo4 天前
Linux 彻底且安全地删除文件
linux