Linux常用工具

文章目录

  • 前言
  • 一、Linux编辑器-vim使用
    • 1.vim的基本概念
    • 2. vim的基本操作
    • 3. vim命令集
      • 1. 正常模式
        • 1. 模式切换和光标移动
        • 2. 删除文字及复制
        • 3. 其他操作
      • 2. 底行模式
  • 二、Linux编译器-gcc/g++使用
    • 1. 命令和选项
    • 2. 预处理
    • 3. 编译
    • 4. 汇编(生成机器可识别代码)
    • 5. 连接(生成可执行文件或库文件)
  • 三、Linux调试器-gdb使用
  • 四、Linux项目自动化构建工具-make/Makefile

前言

在Linux下我们有一些非常好用的工具,他们可以显著的提升我们的效率,这篇将介绍这些工具,来帮助我们完成Linux编程操作。

一、Linux编辑器-vim使用

1.vim的基本概念

作为初期,我们只需要学习vim三种模式就可以了:
分别是 命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
命令模式(command mode): 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
插入模式(Insert mode): 只有在Insert mode下,才可以做文字输入,[ESC]键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
末行模式(last line mode): 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift + : 即可进入该模式。

2. vim的基本操作

命令模式切换至插入模式

输入a
输入i
输入o

插入模式切换至命令模式

按ESC

命令模式切换至底行模式

shift +

退出vim及保存文件,在底行模式退出:

w 保存当前文件
wq :保存并退出vim)
w! 强制保存
q! 强制退出

在这里插入图片描述

3. vim命令集

1. 正常模式

1. 模式切换和光标移动

i :切换进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件;
a :进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
o :进入插入模式后,是插入新的一行,从行首开始输入文字。
vim是用小写英文字母h、j、k、l,分别控制光标左、下、上、右移一格,当然也可以用上下左右
G :移动到文章的最后
$ :移动到光标所在行的“行尾”
^ :移动到光标所在行的“行首”
w :光标跳到下个字的开头
e :光标跳到下个字的字尾
b :光标回到上个字的开头
nl :光标移到该行的第n个位置,如:10l
gg :进入到文本开始
shift + g :进入文本末端
ctrl + b :屏幕往“后”移动一页
ctrl + f :屏幕往“前”移动一页
ctrl + u :屏幕往“后”移动半页
ctrl + d :屏幕往“前”移动半页

2. 删除文字及复制

x :每按一次,删除光标所在位置的一个字符
nx :5x表示删除光标所在位置的“后面(包含自己在内)”5个字符
X :大写的X,每按一次,删除光标所在位置的“前面”一个字符
nX :5X表示删除光标所在位置的“前面”5个字符
dd :删除光标所在行,相当于剪切
ndd :从光标所在行开始删除n行
yy :复制光标所在行到缓冲区。
nyy :例如,5yy表示拷贝从光标所在的该行“往下数”5行文字。
p :将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

3. 其他操作

r :替换光标所在处的字符
R :替换光标所到之处的字符,直到按下「ESC」键为止。
u :如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
ctrl + r : 撤销的恢复
cw:更改光标所在处的字到字尾处
cnw :更改n个字
ctrl + g :列出光标所在行的行号。
nG :表示移动光标至文章的第n行行首。

2. 底行模式

set nu :会在文件中的每一行前面列出行号。
n :就会跳到文章的第n行。
/ 关键字 : 先按/键,再输入寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找到您要的关键字为止。
w :保存
q :退出
wq :保存退出。

二、Linux编译器-gcc/g++使用

1. 命令和选项

格式: gcc [选项] 要编译的文件 [选项] [目标文件]
常用选项:

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w  不生成任何警告信息。
-Wall 生成所有警告信息。

2. 预处理

gcc –E 文件 –o 文件.i 预处理要生成 .i文件
在这里插入图片描述
预处理功能主要包括宏定义,文件包含,条件编译,去注释等

3. 编译

gcc –S 文件 –o 文件.s 编译要生成 .s文件
在这里插入图片描述
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言

4. 汇编(生成机器可识别代码)

gcc –c文件 –o 文件.o 汇编要生成 .o文件
在这里插入图片描述
汇编阶段是把编译阶段生成的“.s”文件转成目标文件

5. 连接(生成可执行文件或库文件)

gcc –c文件 –o 文件
在这里插入图片描述
不指定名字gcc会默认命名为a.out

三、Linux调试器-gdb使用

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
常用选项:

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

四、Linux项目自动化构建工具-make/Makefile

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
在这里插入图片描述

在这里插入图片描述
一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/82201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 部署 MongoDB 服务

拉取最新版本的 MongoDB 镜像: $ sudo docker pull mongo:latest在本地预先创建好 db 和 configdb 目录, 用于映射 MongoDB 容器内的 /data/db 和 /data/configdb 目录。 使用以下命令来运行 MongoDB 容器: $ sudo docker run -itd --name mongo --privilegedtru…

C#webform Static DataTable 多人同时操作网页数据重复问题

在C# Web Forms中,如果声明一个static变量,它将在整个应用程序域(Application Domain)中保持持久化状态。每个用户的请求都在同一个应用程序域中处理,因此static变量在不同页面间保持相同的值。 当一个用户发起请求时…

LCP 02.分式化简

​​题目来源: leetcode题目,网址:110. 平衡二叉树 - 力扣(LeetCode) 解题思路: 模拟分式计算过程即可。 解题代码: class Solution {public int[] fraction(int[] cont) {if(cont.length1){…

JPEG算法及例程

JPEG(Joint Photographic Experts Group)是一种常见的图像压缩算法,用于减小图像文件的大小。它是一种有损压缩算法,即通过牺牲一定的图像质量来实现压缩。 以下是一个简单的JPEG压缩算法的例程: 将输入图像转换为YUV…

抖音seo矩阵系统源代码分享

技术开发注意事项: 确定业务需求:在开发前,需要明确抖音矩阵系统的业务需求,了解用户的需求和使用习惯,明确系统的功能、性能和安全需求。 选择合适的技术方案:根据系统的需求和复杂度,选择合适…

ibevent 定制——libevent 定制内存分配

libevent 定制内存分配 默认情况下,libevent 使用 C 库的内存管理函数在堆上分配内存。通过提供 malloc、realloc和 free 的替代函数,可以让 libevent 使用其他的内存管理器。希望 libevent 使用一个更高效的分配器时;或者希望 libevent 使用一个工具分配器,以便检查内存泄漏时…

有多条业务线,mysql建多库多表比较好还是一个库多个表比较好呢?

选择使用多库多表还是一个库多个表,取决于你的具体情况和需求。以下是一些考虑因素: 数据隔离:如果每条业务线需要完全独立的数据隔离,例如不同业务线的数据不会相互关联或共享,那么使用多库可以更好地实现数据隔离。 …

JavaWeb 学习笔记 3:Servlet

JavaWeb 学习笔记 3:Servlet 1.简介 Servlet 是 JavaEE 定义的一套 Web 应用开发标准(接口),实现了该技术的 Web 服务器软件(如 Tomcat)上可以运行一个 Servlet 容器,只要我们使用 Servlet 技…

Python 移动文件到指定路径

需求:将指定的文件从指定目录移动到用户指定的目标目录。 shutil 是 Python 标准库中的一个模块,它提供了许多文件和文件集合的高级操作。基本上,它可以帮助我们执行文件操作,例如复制、移动、更名和删除。它旨在与 os 模块一起使…

【测试开发】基础篇 · 专业术语 · 软件测试生命周期 · bug的描述 · bug的级别 · bug的生命周期 · 处理争执

【测试开发】基础篇 文章目录 【测试开发】基础篇1. 软件测试生命周期1.1 软件生命周期1.2 软件测试生命周期 2. 描述bug3. 如何定义bug的级别3.1 为什么要对bug进行级别划分3.2 bug的一些常见级别 4. bug的生命周期5. 产生争执这么怎么办(处理人际关系)…

ChatGPT:URL编码问题——如何正确进行URL编码以处理特殊字符

ChatGPT:URL编码问题——如何正确进行URL编码以处理特殊字符 报错: URISyntaxException: Malformed escape pair at index 192: http://Center/Question/questionList.html?seaKey%E6%8D%AE%E7%BB%9F%E8%AE%A1%EF%BC%8C%E5%9B%A0%E7%81%AB%E7%81%BE%E6%…

服务器数据恢复-LINUX操作系统下各文件系统误删除/格式化数据的恢复方案

服务器数据恢复环境: 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系统的Linux操作系统。 服务器故障: LINUX操作系统下误删除/格式化数据。 服务器数据恢复过程: 1、首先会检测服务器是否存在硬件故障,如果检测出硬件故障,交…

Linux之jar包之启动与停止脚本

Linux之jar包之启动与停止脚本 一、使用说明二、脚本代码 一、使用说明 启动 ./service.sh start关闭 ./service.sh stop二、脚本代码 #!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAMEmxy_system-0.0.1-SNAPSHOT.jar # shellcheck disabl…

9.18算法

机器人重物1126 注意编号是方块的,而不是格点的 及如果为n*m的矩阵,需要开(n1)*(m1)的矩阵 //如果没有转向,就是走迷宫,结合记忆化,如果这个点之前走过就不走了 //又转向的话,就用一个变量记录当前转向&…

量化分析革新金融服务软件的三种方式

金融服务软件行业爱死量化分析了。 为什么呢?因为在这个本质上不可预测的行业中,量化分析提供了一种确定性,或者至少是类似于确定性的东西。 市场总是在变动,利润也起伏不定。交易达成了,然后落空,又再次…

Golang Linux 安装与环境变量配置

下载 Go 二进制包 wget https://dl.google.com/go/go1.21.1.linux-amd64.tar.gz 解压文件并将其移至 /usr/local 目录 sudo tar -C /usr/local -xzf go1.20.1.linux-amd64.tar.gz -C 选项解压文件到 /usr/local 目录,查看 /usr/local/go 目录的内容 将 Go 二进…

19 视图定义 union 是根据第一个 select 字段列表顺序,来进行 merge 的

前言 这个问题主要是 在之前存在这样的一个问题, 在生产环境上面 按照 我的直观理解, mysql 应该是根据 key 进行 merge, 所以 select 的顺序应该是 “不重要”??, 但是 结果我理解错了 然后 线上的查询也出现了问题, 发现很奇怪的问题, 明明 key01 列 是 id, 但是有一部…

深度学习——线性神经网络一

深度学习——线性神经网络一 文章目录 前言一、线性回归1.1. 线性回归的基本元素1.1.1. 线性模型1.1.2. 损失函数1.1.3. 解析解1.1.4. 随机梯度下降1.1.5. 用模型进行预测 1.2. 向量化加速1.3. 正态分布与平方损失1.4. 从线性回归到深度网络 二、线性回归的从零开始实现2.1. 生…

Java面试题整理(带答案)

目录 TCP和UDP的区别 get和post的区别 Cookie和session的区别 Java的基本类型有哪些? 抽象类和接口区别? 对于堆栈的理解 和equals区别 如何理解Java多态? 创建线程都有哪些方式 脏读、不可重复度、幻读都是什么? Jav…

数据治理-数据仓库环境

数据仓库环境包括一系列组织起来以满足企业需求的架构组件,从源系统流动到数据暂存区,数据可以在这里被清晰,当数据集成并存储在数据仓库或操作数据存储中时,可以对其进行补充丰富。在数据仓库中,可以通过数据集市或数…