【Linux】常用工具
Linux常用工具
文章目录
- Linux常用工具
- 1.yum软件包管理工具
- 2.vim编辑器
- 3.gcc/g++编译器
- 4.gdb调试器(调试程序运行过程)
- 5.make/makefile(项目自动化构建工具)
- 6.git(项目的版本管理工具)
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语言为例,程序编译分为四个过程:
- 预处理:展开所有代码(引入头文件,宏替换,删除注释等)
- 编译:语法语义检测,没有错误则将代码解释成汇编指令
- 汇编:将汇编指令解释成为二进制机器指令
- 链接:将所有需要的二进制机器指令(其他的.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:%.ogcc -c $^ -o $@
还有,我们可以再给项目添加一个目标对象clean用来清理项目
由于这个clean目标对象不是第一个目标对象,所以它不会被自动生成,而且我们的目的不是生成这个目标对象,而是执行下面的清理指令,所以我们可以用make clean 来指定生成目标对象,用来执行清理操作.但是,如果目录内有一个clean文件,则会和make clean指令发生冲突,清理操作不会被执行.所以为了避免发生这个问题,我们就声明一个伪对象clean,用来执行清理操作.
.PHONY 声明伪对象,与外部文件脱离关系,不需要真正生成的对象
这样一来就不会与外部的clean发生冲突,就可以正常执行清理操作
最终的makefile文件:
main:$(OBJ)gcc $^ -o $@
%.c:%.ogcc -c $^ -o $@
.PHONY:clean
clean:rm -rf $(OBJ) main
6.git(项目的版本管理工具)
功能:将项目的每个节点版本保存起来,以便于随时能够回滚到原来的版本,或者可以协同开发.
git操作步骤:
- 克隆远程仓库: git clone [远程仓库地址]
- 添加修改记录: git add --all ./
- 提交本地仓库: git commit -m "备注信息"
- 同步远程仓库: git push origin master
【Linux】常用工具相关推荐
- linux常用工具命令
linux常用工具命令 @(LINUX)[linux] linux常用工具命令 一dmidecode 1硬件平台 2内存 3cpu 二1sar 三iostat 1iostat -xk 1 四vmsta ...
- 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...
- Linux常用基础指令、Linux常用工具(软件包)使用带图详解
目录 目录相关指令: 文件相关指令: 压缩解压缩指令: 匹配查找指令: 权限相关指令: Linux常用工具: 指令使用规则:指令 [该指令的详细操作选项] [操作对象(通常有路径)],后面两可不加. ...
- Linux常用工具大全
Linux常用工具: yum:应用商店,管理安装,连接服务器,软件包管理工具 软件安装方法: 1.手动源码安装 2.使用工具安装 Yum list:查看可以安装什么 yum list|grep gcc ...
- Linux 常用工具(上)
Linux常用工具 一.软件包管理工具 yum 二.编辑器 vim (一)定义 (二)模式分类 (三)模式切换 (四)不同模式下的常见操作 三.编译器 gcc\g++ (一)编译过程 (二)指令 四. ...
- linux常用工具及命令
1.windows复制文件到linux可以使用工具winscp工具 2.建立软连接命令(将/software/run.log的文件指向/usr/local/logs/中): cd /usr/local ...
- Linux常用工具的使用
推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 写这篇文章的主要目的是帮助大家理解以下几个问题: (1)掌握Linux RPM软件包管理器的使用: (2)掌握vi文本编辑器的使用. ...
- linux常用工具awk,linux中awk工具
awk sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件.awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义, ...
- Linux常用工具之vim
引言 如同windows装载记事本和画图等软件工具一样,Liunx操作系统下也具有功能类似的软件工具~ Linux编辑器-vim使用 Linux操作系统下常用的编辑器之一,类似的工具还有nano等~ ...
- Linux常用工具介绍
Linux工具介绍
最新文章
- oracle定时器怎么开启,Oracle的定时器使用示例
- 记录Mask RCNN调整预测网格 font大小
- Windows下JSON可视化工具
- Onchain Capital创始人看涨BCH
- C# FTP下载文件
- 14.7倍推理加速、18.9倍存储节省!北航、商汤、UCSD提出首个点云二值网络 | ICLR 2021...
- **52.常用的存储保护方法有哪些?
- Linux模块机制浅析
- AttributeError:module tensorflow no attribute app解决办法
- ES批量提交-RestHighLevelClient
- wxWidgets:wxStaticBoxSizer类用法
- matlab armax 无法识别,求教:Java调用系统辨识工具箱内的armax函数出错
- NET问答: 如何检查一个 string 是否为有效的 url 格式?
- Angular深入理解之指令
- College student reflects on getting started in open source(二)
- jquery程序 windows移植到linux显示不了,Windows10 + WSL 使用Linux图形界面程序
- 在窗体创建时显示窗体
- apache-cxf测试webservice添加header信息
- R语言meta包的预后meta分析复现
- Linux-CentOS7安装教程【附CentOS7镜像】