【Linux】常用工具篇
·
【Linux】常用工具篇
一.vim编辑器
1.什么是vim
- vim是一个专注的编译器,支持多模式编写(5种常见,3种核心)
- 3种核心:命令模式(默认模式)、底行模式、插入模式等
· 命令模式:移动光标、复制粘贴等
· 底行模式:保存、退出、查找、替换等
· 编辑模式:输入文本
2.切换模式
- 命令模式 --> 插入模式:i、a、o
- 命令模式 --> 底行模式:" : "
- 回到命令模式:Esc
3.命令模式
- gg:光标定位到最开始 G:最结尾
- n+gg:定位到n行
- $:定位到行尾 ^:定位到行首
- hjkl:左下上右
- yy:复制当前行 nyy:复制n行
- dd:剪切当前行 ndd:剪切n行 x:删除字符
- p:复制 np:复制n次
- u:撤销 ctrl+r:反撤销
- shift+zz:直接退出
4.底行模式
- w:保存 q:退出
- xx+!:强制执行xx操作
- set nu:设置行号
- /xxx:搜索xxx,n跳转下一个
- !+command:不退出vim执行command
- vs+文件:分屏给下一个文件
- ctrl+ww:光标移动到下一个终端
5.视图模式
- 注释:ctrl+v+j/k/l/h(选中行)+shift+i(进入插入模式)+ // +Esc(批量注释)
- 去注释:ctrl+v+j/k/l/h(选中行)+shift+i(进入插入模式)+ // +Esc(批量注释)
二.gcc/g++(Linux下最常用的编译器)
1.gcc编译C语言,g++编译C++
2.编译过程
C/C++代码从源码到可执行文件通常经历四个阶段:
- 预处理:展开头文件、宏替换、条件编译等
gcc -E code.c -o code.i
-E:开始程序的翻译,预处理结束就停下
-o:写入到xx文件 - 编译:检查语法错误,将预处理后的文件转换为汇编代码
gcc -S code.i -o code.s
-S:开始程序翻译,形成汇编代码就停下 - 汇编:将汇编代码转换为机器码
gcc -c code.s -o code.o
-c:生成机器可识别的二进制(可重定位目标二进制文件,无法执行) - 链接:.o文件与库文件链接,生成可执行文件
gcc code.o -o code
链接是在做什么:解决符号引用,将多个目标文件和库函数合并。
链接方式:静态链接:将库代码直接复制到可执行文件中,文件大但独立性强(- static静态链接)
动态链接:运行时加载库,文件小但依赖系统库(默认是动态链接)
3.库的管理
- 动态库和静态库的生成:
· 动态库生成:通常使用 ar 命令打包 .o 文件。
· 静态库生成:需要加 -fPIC 和 -shared 选项。 - 动态库与静态库的使用:
· 程序生成时库的链接搜索路径:编译器去哪里找库文件。
· 程序运行时库的加载搜索路径:操作系统运行时去哪里加载库文件(如/lib,/usr/lib,/etc/ld.so.sonf等)
4.gcc常见选项
- -static:强制静态链接
- -fPIC:生成位置无关代码(用于动态库)
- -shared:生成动态库
- -I(大写):指定头文件的搜索路径
- -l(小写):指定连接的库名称
- -L:指定链接时库文件的搜索路径
- -g:生成调试信息,供gdb使用
三.gdb纯命令行调试器(GNU调试器,用于调试C/C++程序)
1.功能
- 用于查看程序运行时的状态,定位bug,Linux下无法直接调试,因为gcc/g++默认为release模式。
2.程序调试的前提
- 编译时必须加上 -g选项(g++ -g),为可执行程序加上调试信息,进入debug模式。
3.gdb加载程序
- gdb 可执行文件:进入调试
4.常用调试命令
- 开始调试:
run(r):运行程序
run+参数:带参数运行程序
start:单步执行,停在main函数第一行 - 逐行调试:
n(next):逐过程
s(step):逐语句
finish:执行完当前函数
until:跳转到指定行 - 断点调试
b(break):设置断点
i(info)b:查看断点信息
d(delete):删除断点
watch:监视变量/表达式的值,如果改变,程序暂停执行 - 函数调用栈追踪:
bt(backtrace):查看函数调用堆栈,分析崩溃位置
四.make(自动化构建工具)
1.为什么使用make
手动编译每次都要重新敲命令,若项目很大,会很麻烦。make通过智能对比文件的“时间戳”,重新编译那些修改过的文件。
2.编写规则:
- mytest(目标文件):test.c(依赖文件)
gcc test.c -o mytest(生成目标文件需要执行的shell命令,缩进必须使用tab,不能用空格)
3.时间戳(文件ACM时间)
- Access:最近访问时间(不会次次更新,减少IO压力)
- Modify:修改文件内容
- Change:修改文件属性
- touch + 文件:更新ACM时间
4.伪命令
- 声明clean只是一个动作,不是命令,每次都执行
- .PHONY:clean
clean:
rm -rf mytest
5.自动变量
- $@:当前规则的目标文件
- $^:当前规则的所有依赖文件
- $<:当前规则的第一个依赖文件
五.git(版本控制器)
1.简介
- git用于管理代码的历史版本,本身是一个开源的命令行工具。
- GitHub是基于git的国际化代码托管平台,生态更庞大;gitee是本土化的。
2.核心命令
- git clone XX:从远程克隆一个开源项目
- git add 文件名(.):把文件(所有)放入暂存区
- git commit -m “消息”:把暂存区内容提交到本地仓库,并附带日志信息
- git push:把本地仓库的提交推送到远程仓库
- git status:查看当前文件的状态
- git log:查看日志
- git pull:更新本地(远端永远是最新的)
3. .gitignore
- git的黑名单,在.gitignore里的文件,不会被纳入版本控制
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)