Linux常用工具及命令

目录

vim:文本编辑器

gcc:编译器       

makefile:不普通的普通文件

gdb:调试器

yum:软件包管理


vim:文本编辑器

vim是随Linux和UNIX系统分发的vi编辑器的gg改进版本,具有很高的可配置性和效率,包含分屏编辑、颜色格式和突出显示编辑文本等功能。vim 有12种模式,每种模式有不同的功能,做不同的操作。

普通模式、插入模式、底行模式、视图模式、替换模式等..

命令: vim filename

模式转换图及转换方法↓↓↓

Linux常用工具及命令_第1张图片

从普通模式切换到插入模式的方法:

i: 从光标所在位置开始插入

a: 从光标所在位置的下一个字符处开始插入

I: 将光标移动到行首,然后进入插入模式

A: 将光标移动到行尾,然后进入插入模式

o: 在光标所在行的下方,新建一行,进入插入模式

O: 在光标所在行的上方,新建一行,进入插入模式

s: 删除光标所在字符,然后进入插入模式

S : 删除所在行,然后进入插入模式

从普通模式切换到底行模式的方法:

:w 保存

:q 退出

:q! 强制退出(不保存本次修改)

:wq 保存并退出

:!pwd   临时执行命令,按回车返回vim

:set nu  临时设置行号

从普通模式切换到视图模式的方法:

v         进入行视图模式,可以进行选择操作  (visual) -->按 “=”  可格式化对齐

ctrl+v  进入列视图模式,可以进行选择操作(visual block)

V        进入行视图模式,可以进行选择操作(visual line)  此时 “行” 是最小的操作单位~

从插入模式/底行模式/视图模式返回普通模式:

ESC

普通模式下的常用操作:

h 向左移动光标

j 向下移动光标

k 向上移动光标

l  向右移动光标

w 光标向右移动一个单词

b  光标向左移动一个单词

gg 光标移动到文档首行

G 光标移动到文档末尾行

gg=G    全文缩进对齐     

yy 复制光标所在行

nyy 从光标所在行开始向下复制n行

p 向光标所在行下方粘贴新行

P 向光标所在行上方粘贴新行

dd 删除光标所在行(vim种删除其实是剪切)

ndd 从光标所在行开始向下删除n行

x 删除光标所在字符

dw 删除光标位置开始的一个单词

u 撤销操作

ctrl+r  返回撤销操作

r   替换光标所在字符--> r + 要修改成的字符

R 进入替换模式,对内容一直替换

Gcc:编译器       

linux下程序的执行就是告诉操作系统程序文件在哪个路径下。

gcc是一个编译工具,将我们所写的C语言程序编程成为机器可识别的语言程序。

windows下和Linux下的二进制接口不同,程序不能互相运行,因为ABI不同。

ABI应用程序二进制接口是一个所有处理二进制的程序(包括编译器、汇编器、链接器和语言运行库支持)都会使用的接口

gcc常用选项

-o:指定要生成的文件的名称

-g:开启gdb调试选项,目的是在可执行程序中加入调试符号信息

程序的编译过程:

1. 预处理(gcc  -E:只预处理)

去掉注释,展开所有代码

2. 编译(gcc  -S:只编译)

先纠错,没有错误则编译成为汇编代码

3. 汇编(gcc  -c:只汇编)

将汇编代码生成机器可识别代码

**汇编只是将我们写的代码编译完毕,但是不能运行,因为代码不完全,我们调用的一些库函数,并不知道如何实现,需要经过第四步才能生成可执行程序。

4. 链接

将库中的函数链接过来和我们的代码最终合并生成可执行程序

链接过程有两种:

动态链接:链接的是动态库

静态链接:链接的是静态库(gcc  -static 静态链接)

动态链接生成的可执行程序小,静态链接大,但是动态链接生成的程序运行时需要动态库的存在,静态库不需要(静态链接就是将库中的函数全部拿过来生成可执行程序了,所以大)

程序的链接方式默认是动态链接

makefile:不普通的普通文件

在makefile 中定义很多程序编译规则,在终端命令行下敲击一个make命令,这时make程序,会跑到当前目录下找寻makefile文件,按照makefile中已经规划好的编译顺序和规则,完成整个项目的编译。

命令->vim makefile

       ->make

make只在当前目录下找名字叫makefile/Makefile的文件。

如何编写makefile文件:

目标对象名称:依赖对象名称

【Tab键】 为了生成对象所执行的命令

‘main’is up date说的是,目标对象已经是最新的,不需要重新生成;

make这个程序会去判断依赖文件的最后修改时间,和目标对象文件的最后修改时间,如果目标对象的时间戳大于依赖文件的时间戳,那么就证明依赖文件在上次编译后没改过,不需要重新编译。

make的执行规则:

1、make可以检测目标对象与依赖对象的时间属性,判断程序是否需要重新编译。

2、make永远只找第一个目标对象生成,生成第一个对象就退出了。

3、make可以指定要生成的对象,例如:make clean

伪对象:不管是不是最新的,都要重新生成( .PHONY来声明)

例    .PHONY:main clean

预定义变量:makefile 中已经提前定义好的变量

$@ 编写规则中要生成的目标对象

$^ 编写规则中所有的依赖对象

$< 编写规则中第一个依赖对象

变量的使用要加$符号,否则认为是字符串赋值

上方的举例可写为:

wildcard

用于获取文件名 ,获取当前目录下文件名以.c结尾的文件名赋值给src

扩展:  =   :=   ?=  += 这几种赋值方式有什么不同?

1) "=" 递归展开赋值,右侧的变量还允许在后面定义。左侧变量的值,由右侧变量最后的值决定。
2) ":=" 将右侧中包含的变量直接展开给左侧的变量赋值。
3) "?=" 只有当左侧变量还没有被定义的时候,才会将右侧的值赋给左侧;
如果左侧变量已经被定义过,即使是空值,?=不会给左侧赋值。
4) "+=" 给左侧变量追加值。

gdb:调试器

gdb调试一个程序需要这个程序在编译时加上 -g 选项开启调试,为可执行程序加入些调试符号信息。

命令 gcc -g filename

gdb如何加载程序

gdb filename(例 ./main)

gdb进入之后 file ./main

gdb常用命令

run (r) 开始运行程序,程序直接跑起来

r -l -s -a 程序的参数在这里加载

start 开始逐步调试程序

list(l) 查看当前行附近代码

next(n) 下一步(不跟踪进入函数)

s 下一步(跟踪进入函数)

until n 直接运行到第n行

b 添加断点

b main.c:n 给main.c第n行添加断点

b n       给当前文件第n行添加断点

b func          给函数添加断点

i 查看详细信息

i b 查看当前断点信息

d 默认删除所有断点

d n 删除 i d 为n的断点

p 打印变量内容

p x(变量名)

watch 变量监控,变量内容修改时会停下(c为下一步)

watch x(变量名)

bt 查看函数调用栈信息

quit(q) 退出

yum:软件包管理

yum是红帽子系列linux操作系统进行软件包管理的工具

软件的安装/移除/查看都是通过yum工具完成的。

yum help 将显示用法信息

查看

yum list 显示已安装的和可用的软件包

yum list |  grep  想要安装的包名字

yum search KEYWORD 根据仅在名称摘要字段中找到的关键词列出软件包

yum info PACKAGENAME 提供与安装包相关的详细信息,包括安装所需的磁盘空间

安装

yum install PACKAGENAME 获取并安装软件包,包括所有依赖项

yum update PACKAGENAME 获取并安装更新版本的软件包,包括所有依赖项

移除

yum remove  安装包名字

yum remove 将删除列出的软件包和需要将要删除的软件包的任何软件包,可能导致意外删除软件包,因此请仔细检查要删除的软件包列表。

yum history 查看安装和删除事务的摘要

你可能感兴趣的:(Linux)