【Linux】常用工具

Linux常用工具

1.yum软件包管理工具

功能:yum是一个软件包管理工具,可以完成第三方工具软件的安装卸载功能.

常用选项:

查看

  • yum list 查看yum提供的所有软件列表
  • yum search [软件名] 查看所有与搜索软件名相关的软件

安装

  • yum install [软件名] 注意:安装命令需要在有root权限的情况下执行,切换root用户或者临时提权.

卸载

  • yum remove [软件名] 卸载同样需要在root权限下运行

安装和卸载最好要知道软件的具体名称细节

2.vim编辑器

vim是Linux环境下很好用的一款文本编辑器,可以用来编写代码,vim操作都是用键盘来完成,不支持鼠标操作,所以vim所有的文本处理操作都需要命令来完成,为了实现命令和文本编辑不冲突,设计了多种操作模式.

vim有12种操作模式,其中最常用的有三种模式:

  • 普通模式/正常模式/命令模式:执行对文本内容进行操作的指令.
  • 插入模式:文本编辑模式.
  • 底行模式:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作.

首先输入vim [文件名],此时如果文件没有被创建,则创建一个文件(如果这个文件没有被保存,则这个文件在退出之前是一个临时文件,保存退出后变成普通文件,要是没有保存就退出,临时文件就会被删除,也不会保存成为普通文件),如果文件已经存在,则进入编辑文件.

进入文件后,默认处于普通模式.

模式间的切换:

普通模式->插入模式 i a o I A O

普通模式->底行模式 :(英文冒号)

其他模式->普通模式 ESC


普通模式:

请添加图片描述

所有的模式切换都是先回到普通模式,再切换到其他模式.

在普通模式下,有几种常用的操作:

  • dd / ndd 剪切或删除光表标所在行(n代表行数).
  • x 删除光标所在字符.
  • dw 删除光标所在单词
  • p 粘贴
  • yy / nyy 复制光标所在行(n代表行数).
  • u 撤销上一次操作
  • ctrl+r 还原撤销
  • 光标移动 左下上右 hjkl 前后翻页 ctrl+f/b 移动到文章末尾/开头 G/gg
  • G=gg 全文格式对齐
  • ctrl+g 列出光标所在行数

插入模式:插入模式即文本编辑模式

请添加图片描述

这个模式没有命令操作,但是由普通模式切换到插入模式时,不同的命令会有不同的光标位置

  • i 在光标位置插入字符
  • I 在光标所在行的行首插入字符
  • o 光标所在行的下一行新行插入字符
  • O 光标所在行的上一行新行插入
  • s 删除光标所在字符并插入字符
  • S 删除光标所在行并插入字符
  • a 光标所在字符的下一个字符插入
  • A 光标所在行的行尾插入字符

底行模式:

请添加图片描述

普通模式下按英文冒号进入

底行模式常见操作:

  • :w 保存
  • :q 退出
  • :wq 保存并且退出
  • :!q 强制退出不保存
  • : /[字符串] 匹配字符串,按n跳转到下一个匹配到的字符串(:?[字符串]也可以)
  • %s/string/world/g 全文字符串替换,这条命令是把全文的string替换成了world
  • 1,12s/string/world/g 指定行数字符串替换,这条命令是把1到12行的string替换成了world

3.gcc/g++编译器

功能:将高级语言程序代码编译成为机器指令

我们平时常用的visual studio clion vc++6.0等都属于集成开发环境,当中内置文本编辑器,编译器,调试器等各种工具,可以自动化构建项目,而在Linux中,这些步骤都是被分开的,在vim中完成代码编辑后,代码并不能直接被运行,需要经历编译器编译代码后才能生成可执行程序。

拿c语言为例,程序编译分为四个过程:

  1. 预处理:展开所有代码(引入头文件,宏替换,删除注释等)
  2. 编译:语法语义检测,没有错误则将代码解释成汇编指令
  3. 汇编:将汇编指令解释成为二进制机器指令
  4. 链接:将所有需要的二进制机器指令(其他的.o以及库文件)打包成可执行程序

常见选项:

  • -E 只进行到预处理完成

请添加图片描述

请添加图片描述

  • -S 只进行到汇编完成

请添加图片描述

请添加图片描述

  • -c 只进行到编译完成

请添加图片描述

请添加图片描述

  • -o 指定要生成的目标文件对象名称

运行main

./main

请添加图片描述

库文件:提供给开发者的一些常用函数等,提前打包好的机器指令文件。

链接过程:将所写的多个.o文件以及使用的库代码文件打包生成可执行程序

.o文件就是我们自己所写的.c文件生成到最后的机器指令文件

静态链接:将库中的代码直接写入到可执行程序中(生成程序较大,运行时不需要依赖库,但是会存在重复冗余代码)

动态链接:在可执行程序中记录库中函数符号信息表,并没有把具体实现的指令写入可执行程序,而是在运行时加载这个库(生成的可执行程序小,在内存中共享库,但是运行时依赖库的存在

gcc默认链接方式:动态链接

4.gdb调试器(调试程序运行过程)

编译器只能发现语法错误,如果程序运行过程中出现奔溃,指针越界,逻辑异常等错误则无法检测,所以我们得借助调试工具来对代码进行调试才能发现并解决这类问题

程序发布时分为两个版本:

  • Debug 版本

    ​ Debug 是“调试”的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化,程序还是“原汁原味”的。

  • Release 版本

    ​ Release 是“发行”的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提高执行效率,虽然最终的运行结果仍然是我们期望的,但底层的执行流程可能已经改变了编译器还会尽量降低 Release 版本的体积,把没用的数据一律剔除,包括调试信息,最终,Release 版本是一个小巧精悍、非常纯粹、为用户而生的程序。

Debug 版本的存在是为了方便程序员开发和调试,性能和体积不是它的重点;

Release 版本是最终交给用户的程序,性能和体积是需要重点优化的两个方面。

在开发过程中,我们一般使用 Debug 版本,只有等到开发完成,确认没有任何 Bug 之后,希望交给用户时再生成 Release 版本。


gcc编译器默认生成Release版本程序,无法进行调试,所以在使用gdb之前,我们得把我们的源代码编译成为Debug版本的程序,才能对其进行调试。

gcc -g 选项,把程序编译成Debug版本程序

请添加图片描述

gdb ./main 开始调试

请添加图片描述

常见指令:

开始调试:

  • run 直接运行
  • start 逐步调试
  • list [源码名称]:n 查看指定源文件n行附件代码

流程控制:

  • n/next 下一行(逐过程)
  • s/step 下一行(逐语句)
  • until [源码名称]n 直接运行到指定文件第n行
  • b/break [源码名称]n 给指定文件第n行打断点
  • b/break [函数名称] 给指定函数打断点
  • info break / i b 查看断点信息
  • d/delete [断点ID 删除断点
  • delete 删除所有断点
  • print 查看/设置数据变量
  • watch i 给变量打一个监控断点,变量发生变换时触发断点
  • countinue 从调试位置开始不再逐步调试而是继续向下运行
  • breaktrace 查看函数调用栈,快速找到程序奔溃位置,栈顶函数就是导致程序崩溃的函数

5.make/makefile(项目自动化构建工具)

  • makefile:是一个文本文件,在其中编写项目构建规则
  • make:是一个makefile解释程序,在当前目录下找到文件名为makefile的文件进行逐行解释执行.

makefile编写规则:

main(目标对象):test.c(依赖对象)
[tab]gcc test.c -o main(为了生成目标对象要执行的编译指令)	

如果我们要生成目标对象所需要的以来对象有很多,这么编写会很不方便,此时我们可以使用预定义变量

常用的预定义变量:

  • $@ 目标对象
  • $^ 所有依赖对象
  • $< 第一个依赖对象

我们也可以用变量来表示所有依赖对象的名称

SRC=$(wildcard ./*.c)
#这个SRC变量就可以表示所有的.c文件
#wildcard是来获取所有的.c文件名称的

如果需要的依赖对象很多,要是其中的一个依赖对象进行了修改,要编译程序,所有的依赖对象都需要重新编译,很做很多不必要的工作,浪费时间和设备资源,所以在编译过程中,我们不对.c文件全部进行编译链接,我们只把所有的依赖对象都只进行到编译完成,不对其进行链接,这样只会对依赖对象发生改变的对象进行编译,其他未改变的文件就不会被重复编译,等到改变后的文件编译完成,再对其进行链接,提高效率.

make解释执行规则:

make生成第一个目标对象后就会退出

为了生成目标对象,如果所需的依赖对象没有生成,则生成依赖对象之后再去生成目标对象.

此时我们的依赖对象就成了.o结尾的文件,但是我们为未进行make之前, .o文件还没有被生成,我们不能通过wildcard来获取.o结尾的文件名称,所以我们对.c结尾的文件名称进行字符串替换,就可以用变量表示所有的.o结尾的文件名称.

OBJ=$(patsubst %.c %.o,$(SRC))
#OBJ变量表示.o结尾的文件名称,也就是生成目标文件所需要的依赖对象
#pastsubst是进行字符串替换

接着我们可以将makefile简化到以下版本

main:$(OBJ)
	gcc $^ -o $@
%.c:%.o
	gcc -c $^ -o $@

还有,我们可以再给项目添加一个目标对象clean用来清理项目

由于这个clean目标对象不是第一个目标对象,所以它不会被自动生成,而且我们的目的不是生成这个目标对象,而是执行下面的清理指令,所以我们可以用make clean 来指定生成目标对象,用来执行清理操作.但是,如果目录内有一个clean文件,则会和make clean指令发生冲突,清理操作不会被执行.所以为了避免发生这个问题,我们就声明一个伪对象clean,用来执行清理操作.

.PHONY 声明伪对象,与外部文件脱离关系,不需要真正生成的对象

这样一来就不会与外部的clean发生冲突,就可以正常执行清理操作

最终的makefile文件:

main:$(OBJ)
	gcc $^ -o $@
%.c:%.o
	gcc -c $^ -o $@
.PHONY:clean
clean:
	rm -rf $(OBJ) main

6.git(项目的版本管理工具)

功能:将项目的每个节点版本保存起来,以便于随时能够回滚到原来的版本,或者可以协同开发.

git操作步骤:

  1. 克隆远程仓库: git clone [远程仓库地址]
  2. 添加修改记录: git add --all ./
  3. 提交本地仓库: git commit -m "备注信息"
  4. 同步远程仓库: git push origin master
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomage1213888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值