Linux 下常用工具
目录
Linux 编辑器 — vim
vim 的模式
正常/普通/命令模式
插入模式
低行模式
vim 配置
Linux 编译器 —gcc/g++
使用 gcc/g++ 的格式
预处理
编译
汇编
链接
函数库
Linux 调试器 — gdb
Linux 项目自动化构建工具 — make/Makefile
Linux 软件包管理器 — yum
Linux 编辑器 — vim
vi 和 vim 都是多模式编辑器,vim 是 vi 的升级版,它不仅兼容 vi 的所有指令,而且还有一些新的特征在里面,比如语法加亮。
vim 的模式
vim 的模式总共有 12 中,这里先介绍常用的三种模式:
正常/普通/命令模式
该模式下可控制光标的移动,字符、字或行的删除,复制某区段,进入插入模式或低行模式。
进入 vim 之后是处于普通模式,切换到插入模式才能输入文字。
- 普通模式切换到插入模式的方法:
- 输入 a :在光标所在位置的下一个位置开始输入
- 输入 i :在光标所在位置处输入
- 输入 o :在光标所在行的下插入一行,从行首开始输入文字
- 移动光标:
- vim 可直接用键盘上的光标来上下左右移动,但正规的操作应该用英文小写字母 [h]、[j]、[k]、[l],分别控制光标左、下、上、右移动一格
- 按 [G] :移动到文件最后一行
- 按 [$] :移动到光标所在行的最后一个字符
- 按 [^] :移动到光标所在行的第一个字符
- 按 [w] :光标跳到下个字的开头
- 按 [e] :光标跳到字尾
- 按 [b] :光标回到子的开头
- 按 [#l] :光标移到该行的第 # 个位置
- 按 [gg] :跳到文件开始
- 按 [G] :跳到文件末尾
- 按 [Ctrl] + [b] :屏幕往后移动一页
- 按 [Ctrl] + [f] :屏幕往前移动一页
- 按 [Ctrl] + [b] :屏幕往后移动半页
- 按 [Ctrl] + [b] :屏幕往前移动半页
- 删除文字
- 按 [x] :每按一次,删除光标所在位置的一个字符
- 按 [#x] :从光标所在位置开始,连续删除 # 个字符
- 按 [X] :每按一次,删除光标所在位置的前一个字符
- 按 [#X] :删除光标所在位置的前 # 个字符
- 按 [dd] :删除光标所在行
- 按 [#dd] :从光标所在的行开始删除 # 行
- 复制
- 按 [yw] :将光标所在之处到字尾的字符复制到缓冲区
- 按 [#yw] :从光标所在的字开始,复制 # 个字到缓冲区
- 按 [yy] :复制光标所在的行到缓冲区
- 按 [#yy] :从光标所在的行开始,复制 # 行到缓冲区
- 按 [p] :将缓冲区内的字符贴到光标所在的位置。
- 替换
- 按 [r] :替换光标所在处的字符
- 按 [R] :替换光标所到之处的字符,知道按下 [Esc] 键为止
插入模式
只有在插入模式下才可以进行文字输入。
按 Esc 键可切换到普通模式。
低行模式
该模式下进行文件保存或退出 vim,找字符串所在的行、列出行号等操作。
在普通模式下按 [:] 可切换到该模式下。
在该模式下输入 :help vim-modes 可查看所有模式。
退出 vim 及保存文件:
- :w :保存当前文件
- :wq :保存文件并退出 vim
- :q! :不保存,强制退出 vim
vim 配置
在目录 /etc/ 下有个名为 vimrc 的文件,这是系统中公共的 vim 配置文件,对所有用户都有效。
而在每个用户的主目录下,都可以建立私有的配置文件,命名为 ".vimrc",例如,/root 目录下,通常已经存在一个 .vimrc 文件,如果不存在,则创建之。
打开自己目录下的 .vimrc 文件,即可进行 vim 配置。
常用配置选项:
- 设置语法高亮 :syntax on
- 显示行号 :set nu
- 设置缩进的空格数为4 :set shiftwidth=4
要配置好看功能更多的 vim,原生的配置还是不够的,可以选择安装插件来完善配置(保证用户是你要配置的用户)。
Linux 编译器 —gcc/g++
编译器生成一个可执行文件要经过预处理、编译、汇编、链接四个过程,下面详细说一下编译器完成每个过程的方法以及每个过程中编译器完成的事情。
使用 gcc/g++ 的格式
gcc [选项] 要编译的文件 [选项] [目标文件]
g++ [选项] 要编译的文件 [选项] [目标文件]
预处理
预处理阶段主要完成:
- 文件包含
- 宏替换
- 条件编译
- 去掉注释
我们编译一个简单的 C 文件,并让它在编译器完成预处理后停止编译过程。
test.c 文件:
#include<stdio.h>2 //这是一个非常简单的程序3 //在标准输出中输出 "hello word"4 int main()5 { 6 printf("hello word\n");7 return 0;8 }
gcc 编译器完成对 test.c 文件的预处理后停止,test.i 文件为经过预处理后的文件:
gcc -E test.c -o test.i
预处理后的文件是以 # 开头的代码行:
编译
在这个阶段 gcc 首先要检查代码的规范性,是否有语法错误等。在检查无误后,gcc 把代码翻译成汇编语言。
gcc 编译器完成对 test.i 文件的编译后停止,test.s 文件为经过编译后的文件:
gcc -S test.i -o test.s
编译后生成的汇编代码(部分):
汇编
汇编阶段是把编译阶段生成的 test.s 文件转成目标文件(生成机器可识别代码)。
gcc 编译器完成对 test.s 文件的汇编后停止,test.o 文件为经过汇编后的文件:
gcc -c test.s -o test.o
汇编后生成的机器代码(部分):
链接
在成功编译后就进入连接阶段,生成可执行文件或库文件。
gcc test.o -o test
完成链接过程后生成的可执行文件(部分):
函数库
在这里涉及到一个很重要的概念——函数库。我们的 C 程序中并没有定义 printf 函数的实现,且在预编译过程中展开的 stdio.h 中也只有该函数的声明,而没有定义函数的实现,那么,是在那里实现函数的呢?
stdio.h 文件里只有 printf 函数的申明:
系统把这些函数实现都被放到名为 "lib.so.6" 的库文件中去了,在没有特别指定时,gcc 会到系统默认的路径 /usr/lib 下进行查找,也就是链接到 lib.so.6 库文件中去,这样就能使用 printf 函数了,而这也就是链接的作用。
函数库一般分为静态库和动态库两种:
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不在需要库文件了。静态库后缀名一般为 .a 。
动态库在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为 .so 。gcc 在编译链接时默认使用动态库。
gcc 默认生成的二进制程序,是动态连接的,这点可通过file 命令验证:
gcc 选项
- -E :只激活预处理,这个不生成文件,你需要把他重定向到一个输出文件里面
- -S :编译到汇编语言,不进行汇编和链接,会生成一个 .s 文件
- -c :编译到目标代码
- -o :某个过程产生的文件输出到一个指定的文件
- -static :此选项对生成的文件采用静态链接
- -g :生成调试信息。GNU 调试器可利用该信息
- -share :此选项将经量使用动态库,所以生成的文件比较小,但是需要系统有动态库
- -O0 :表示编译器没有优化
- -O1 :缺省值
- -O2 :
- -O3 : 优化级别最高
- -w :不生成任何警告信息
- -Wall :生成所有警告信息
Linux 调试器 — gdb
程序的发布方式有两种,debug 模式和 release 模式。
Linux 下 gcc/g++ 编译出来的二进制程序,默认是 release 模式。
要使用 gdb 调试器,必须在源代码生成二进制程序的时候,加上 -g 选项。
- 进入 gdb:gdb test
- 退出 gdb : q 或 Ctrl+d
- 调试命令:
- list/l 行号 :显示 test 源代码
- list/l 函数名 :列出某个函数的源代码
- r/run :运行程序,把整个程序跑一遍 从开始连续而非单步执行程序
- n/next :单步执行
- s/step :进入函数调用
- break 行号 :在某一行设置断点
- break 函数名 :在某个函数开头设置断点
- info break :查看断点信息
- finish :执行到当前函数返回,然后停下来等待命令
- p 变量 : 打印变量值
- set var :修改变量的值
- c/continue :从当前位置开始连续而非单步执行程序
- delete breakpoints :删除所有断点
- delete breakpoints n :删除序号为 n 的断点
- disable breakpoints :禁用断点
- enable breakpoints :启用断点
- info/i breakpoints :参看当前设置了哪些断点
- display 变量名 :跟踪查看一个变量,每次停下来都显示它的值
- undisplay :取消对先前设置的那些变量的跟踪
- until n :跳到 n 行
- breaktrace/bt :查看各级函数调用及参数
- info/i locals :查看当前栈帧局部变量的值
Linux 项目自动化构建工具 — make/Makefile
make 是一个命令,Makeile 是一个文件,两个搭配使用,完成项目自动化构建。
test.c 文件:
#include<stdio.h>
int main()
{printf("hello word\n");return 0;
}
Makefile 文件:
1 test:test.o2 gcc test.o -o test3 test.o:test.s4 gcc -c test.s -o test.o5 test.s:test.i6 gcc -S test.i -o test.s7 test.i:test8 gcc -E test.c -o test.i9 10 .PHONY:clean11 clean:12 rm -f test.i test.s test.o test
原理:
当我们输入 make 命令时:
- make 会在当前目录下找名字为 "Makefile"或"makefile" 的文件
- 如果找到,他会找文件中第一个目标文件,在上面的例子中它会找到 test 这个文件,并把这个文件作为最终的目标文件
- 如果 test 文件不存在或者 test 所依赖的 test.o 文件修改时间比 test 这个文件新,那么它就会执行后面所定义的命令来生成 test 这个文件
- 如果 test 所依赖的 test.o 文件不存在,那么 make 会在当前文件中找到目标为 test.o 的依赖性,如果找到根据规则生成 test.o 文件
- 然后再用 test.o 文件根据规则生成 test 文件(目标文件)
- 这就是 make 的依赖性,make 会一层又一层的去找文件的依赖关系,直到最终编译出第一个目标文件
- 在寻找过程中,如果出现错误,例如最后被依赖的文件找不到,那么 make 会直接退出,并报错
工程是需要被清理的,像 clean 这种,没有被第一个文件直接或者间接关联,那么它后面所定义的命令不会被自动执行,不过,我们可以显示要 make 执行。即命令——make clean,以此来清楚所有的目标文件,以便重编译。
一般这种 clean 的目标文件,我们将他设置为伪目标,用 .PHONY 修饰,伪目标的特性是总是被执行的。
Linux 软件包管理器 — yum
在 Linux 下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是大佬们把一些常用的软件提前编译好,做成软件包放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。这里提到的软件包和包管理器就好比 "APP" 和 “应用商店”这样的关系。yum 是 Linux 下非常常用的包管理器,主要应用在 Fedora(红帽子)。
通过 yum 我们可以通过很简单的一条命令完成 gcc 的安装:
sudo yum install gcc.x_86_64
yum 会自动找到都有哪些软件包需要下载,这时候敲 y 确认安装。出现 complete 字样,说明安装成功。
安装软件是需要向系统目录写入内容,一般需要 sudo 或者切换到 root 用户下才能完成。
yum 安装软件只能一个装完再装另一个。
卸载软件:仍然是一条简单的命令
sudo yum remove gcc.x86_64
yum 源就是 yum 从哪些服务器上来查找软件包,默认的 yum 源是国外的资源,但可替换。
Linux 下常用工具相关推荐
- 万得终端 linux安装,Linux下常用工具
Linux下常用工具: yuv rgba playerubuntu 18.04 wps1 2sudo dpkg -i wps-office_10.1.0.5672~a21_amd64.deb sudo ...
- Linux下常用工具
先贴一个链接,可以快速一键将你的vim打造成功能强大的IDE ,全小白操作 https://gitee.com/HGtz2222/VimForCpp?tdsourcetag=s_pctim_aioms ...
- Linux下常用日志分析工具
Linux下常用日志分析工具 Logcheck简介 对于拥有大量账户.系统繁忙的Linux系统而言,其日志文件是极其庞大的,很多没有用的信息会将值得注意的信息淹没,给用户分析日志带来了很大的不便.现在 ...
- linux 录屏软件 按键,linux下常用的截图、录屏工具
linux下常用的截图.录屏工具 (2010-01-05 10:47:21) 由于和老公一起做一个百度俱乐部的小项目,在编写测试文档时要使用截图.录屏的小工具,于是展开搜索什么工具比较好使. 录屏: ...
- Linux下常用java问题排查命令、工具
本文描述的大部分基于linux环境. 对于一个程序,在Linux下我们可以根据程序响应信息查找对应的进程ID: ps -ef | grep java | grep -v grep | |awk '{p ...
- Linux网络常用工具分类介绍
Linux网络命令较多,单纯的介绍网络命令的用法也没什么意思.本文将常见的网络命令进行分类,并做出思维导图,对每个分类的命令选择性的介绍其作用.常见选项和用法举例.BTW,不建议记住所有命令,了解一下 ...
- Linux按压缩率大小排序,Linux下常用压缩 解压命令与压缩比率对比
常用的格式有: tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar 只是打包动作,相当于归档处理,不做压缩:解压也一样 ...
- Linux(二) 常用工具
Linux(二) 常用工具 一.编辑器 linux常见编辑器有:vi编辑器.vim编辑器.gedit编辑器,还可以用vscode作为编辑器 vi编辑器是Linux内置的编辑器 界面如图所示: vim编 ...
- Linux下常用软件推荐列表
Linux下常用软件推荐列表(欢迎补充...) halazi100发布于 2010-12-10 | 17617次阅读 字号: 大 中 小 (网友评论 14 条) 我要评论 [i=s] 本帖最后 ...
最新文章
- 年报系统课堂讨论记录
- unix:///tmp/supervisor.sock no such file
- js tool 方法之删除数组指定项
- electron 主进程与渲染进程 渲染进程与渲染进程 之间的通信
- ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析
- netty 发送 http请求
- 谷歌发布 MediaPipe Holistic,实现移动端同时进行人脸、手部和人体关键点检测跟踪...
- EncodingAESKey
- SCP对拷如何连接指定端口远程主机
- [Oracle] SQL*Loader 详细使用教程(5)- 典型例子
- 1、redis之安装与配置
- windows系统下搭建私有nuget仓储服务器, 打包程序集并推送到私有nuget仓储服务器...
- Could not find a package configuration file... GflagsConfig.cmake gflags-config.cmake 解决方法
- Linux网络编程 --- HTTP协议
- 项目实施中的风险控制与管理
- VMDK文件无法正常打开
- iOS 技术支持网址:
- 仓库温度湿度控制措施_一般仓库的温湿度控制范围是多少合适?
- ♥ 七夕七夕 ♥ - 怎么给女朋友送礼物攻略
- 招人!!!招人!!!