我们使用Linux开发的时候会高频率使用一些工具,这些工具也是需要我们去学习如何使用!
yum的使用
yum命令是安装软件的命令
yum list | grep 软件名 查找所有包含软件名的软件
yum -y install 软件名 直接安装软件 不需要再进行交互了
yum -y remove 软件名 直接卸载软件
vim的使用
vim是Linux下的一款多模式编辑器,一般系统自带,我们常用的模式3~5种。
- 命令模式(vim进入默认)
- 插入模式
- 底行模式
- 替换模式
- 视图模式
命令模式输入i进入插入模式
命令模式输入shift+:进入底行模式
任何模式退出到命令模式按esc键
保存vim写入的内容并退出:进入底行模式,输入wq
vim指令集
底行模式下,调出和去掉行号:set nu/set nonu
大部分命令都是在命令模式下进行的
yy/nyy:复制当前行或者复制当前行在内的指定若干行
p/np:粘贴一行或者多行相同的内容到当前光标所在行之下
u:撤销刚才的操作
CTRL + r:对撤销进行撤销
dd/ndd:对当前行或者当前行在内的n行的内容进行剪切 如果只dd/ndd,不进行p/np就是删除
shift g:将光标定位到文档的最结尾
gg:将光标定位到文档的最开始
n shift g:将光标定位到文档的指定行
shift 4($):将光标定位到文档行的结尾
shift 6(^):将光标定位到文档的最开始
n w,n b:将光标按照单词为单位,进行前后移动,w是前,b是后
shift ~:快速大小写切换
n r:替换光标所在的字符
nx:行内删除 左侧->右侧
nX:行内删除 右侧->左侧
上:k 下:j 左:h 右:l
底行命令:
调出和去掉行号:set nu/set nonu
替换字符:%s/(要被替换的字符串)/(要替换的字符串)/g
/(要搜索的字符串)
!command (可以直接在vim中执行指令)
vs file(直接创建分屏文件,但是没有w不会保存)
vim分屏模式下,光标在那个文件就会操作哪个文件,切换文件 CTRL ww
强制保存退出 :wq!
强制退出:q!
vim配置
手动配置:
vim在启动的时候,会自动在当前用户的目录下,寻找配置文件(vimrc),需要在这个文件里面添加配置信息。
自动配置:
在普通用户下执行下面指令,一键配置
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
推荐使用自动配置
gcc/g++编译器
gcc是C语言的编译器,g++是c++的编译器,命令操作是相同的
我们从写好代码到生成可执行程序,需要经过四个步骤:
- 预处理(头文件展开,条件编译,宏替换,去注释等)
- 编译(C语言转换成汇编语言)
- 汇编(可重定位目标二进制文件,不可以被执行,bin.obj)
- 链接(将我们自己形成的.obj文件和库文件合并,形成可执行程序)
从.c文件生成a.out的可执行程序,之前用gcc .c文件名生成,如果我们指定可执行程序的文件名应该加命令选项-o,例如编译myfile.c文件,生成可执行程序myfile,被指定的文件名是跟在-o后面的。
gcc -o myfile myfile.c
或者gcc myfile.c -o myfile
gcc -o会直接生成可执行程序,从1到4一步到位,想让程序做完预处理或者编译或者汇编之后直接停下,也有对应的命令选项:
- 让程序做完预处理直接停下,用
-E
选项,例如:gcc -E myfile.c -o myfile.i
,如果不加-o选项,预处理文件会直接打印到命令行。 - 让程序做完编译操作直接停下,用
-S
选项,例如:gcc -S myfile.i -o myfile.s
,然后程序会生成.s的汇编代码文件 - 让程序做完汇编操作直接停下,用
-c
选项,例如:gcc -c myfile.s -o myfile.o
,生成的.o文件里面都是二进制的内容了。 - 做完汇编操作后,.o文件还不是可执行程序,还需要gcc编译,例如:
gcc myfile.o -o myfile
,最后生成的myfile文件才是可执行的。
链接
在程序还没有还是运行的时候,编译器里面的链接器就会提前准备好链接供程序调用,在链接阶段如果程序需要调用库函数,那么链接器会给程序一个链接去访问库,从而使程序能够调用库里面的函数,而库分为动态库和静态库,动态库是由动态链接去访问的,静态库是由静态链接去访问的,系统默认调用动态库。
- 静态库的优点:调用静态库时,会把调用库函数的代码直接拷贝到程序中,静态链接成功,不依赖任何库,自己可以独立运行。
- 静态库的缺点:自身拷贝问题,会浪费空间。
- 动态库的优点:可以被所有人共享,因为动态链接成功的时候会把地址放到程序内部,不需要拷贝代码,更有效的节省空间
- 动态库的缺点:一旦动态库出现问题,程序无法运行。
系统默认是调用动态库,如果想调用静态库,用命令选项
-static
,例如:gcc myfile.c -o myfile-static -static
如果没有安装静态库,命令
yum install glibc-static libstdc++ -static -y
make/makefile
我们在编写程序的时候,有时候需要多次编译源文件,多次编写gcc/g++指令,有时候指令很繁琐且重复率很高,这时候make能大大提升效率。
make是一条指令,makefile是一个文件。makefile是一个围绕依赖关系和依赖方法构建的一个自动化工具。
使用:
在makefile中编写一些对应的指令,例如:
//test依赖于test.c,这是依赖关系
test:test.c
gcc -o test test.c //依赖方法
.PHONY:clean //被.PHONY声明过后可以多次执行
clean: //依赖关系可以为空,生成伪目标
rm -f test
在命令行中直接写make默认会调用第一条的依赖关系和依赖方法,并且打印出相对应的指令,如果调用clean
或者其他的指令,make clean
,例如:
但是我们重复执行make,也就是重复编译.c文件,默认是不可以的,因为test可执行程序文件是最新的。判断条件:test这个可执行文件最后一次的修改时间是在test.c的最后一次修改时间之后,说明这个test文件是最新的,反之,如果test.c文件的修改时间在test修改时间之后,说明test.c在生成可执行文件之后又一次做了修改,test就不是最新的,这时候才可以再编译。
除非被.PHONY修饰
sudo命令
在普通用户下,如果指令操作权限不够,sudo可以进行提权,无视权限,相当于root,默认普通用户不能用sudo,因为创建的普通用户没有添加到被系统信任的名单中,添加时需要先转换到root身份,找到/etc/sudoers这个文件,进行修改添加
git
git是一个版本管理工具
常用的git命令:
git --version //显示git版本编号
git clone 仓库地址 //克隆远端仓库到本地
git add . //添加仓库目录下没有被添加到暂存区的文件
git commit -m "提交说明,不要随便瞎写" //把暂存区的文件提交到本地仓库
git push //提交本地仓库内变更的内容到远端仓库
git log //查看历史提交记录
gdb调试器
gdb是一个程序调试器,可以帮助程序员确定bug的位置。
gdb命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb