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,一经查实,立即删除!

相关文章

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

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

JavaWeb 学习笔记 3:Servlet

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

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

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

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

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

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…

多线程详解(上)

文章目录 一、线程的概念1)线程是什么2)为甚要有线程(1)“并发编程”成为“刚需”(2)在并发编程中, 线程比进程更轻量. 3)线程和进程的区别 二、Thread的使用1)线程的创建继承Thread…

算法通关村-----链表中环的问题

环形链表 问题描述 给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中…

使用Scrapy构建高效的网络爬虫

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 Scrapy是一个强大的Pyth…

python虚拟环境(venv)

一、什么是python环境 首先要知道什么是python环境? Python环境主要包括以下内容: 解释器 python.exe (python interpreter,使用的哪个解释看环境配置) Lib目录 标准库 第三方库:site-pakages目录,默认安装第三方…

基于DSPACE功率平衡理论的并联有源电力滤波器模型(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

webpack配置alias后eslint和ts无法识别

背景 我们在 webpack 配置 alias 后,发现项目中引入的时候,还是会报错,如下: 可以看到,有一个是 ts报错,还有一个是 eslint 报错。 解决 ts 报错 tsconfig.json {"compilerOptions": {...&q…

【力扣每日一题】2023.9.18 打家劫舍Ⅲ

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 今天是打家劫舍3,明天估计就是打家劫舍4了。 今天的打家劫舍不太一样,改成二叉树了,不过规则没有变&…

狗dog 数据集VOC-5912张

狗,是食肉目犬科犬属 哺乳动物 ,别称犬,与马、牛、羊、猪、鸡并称“六畜” 。狗的体型大小、毛色因品种不同而不同,体格匀称;鼻吻部较长;眼呈卵圆形;两耳或竖或垂;四肢矫健&#xff…

网站降权的康复办法(详解百度SEO数据分析)

随着搜索引擎算法的不断升级,很多网站在SEO优化过程中遭遇到降权的情况。如果您的网站也遭遇到了类似的问题,不必惊慌失措。本文将为您详细介绍网站降权恢复的方法,包括百度SEO数据分析、网站收录少的5个原因、网站被降权的6个因素以及百度SE…

IP风险查询:抵御DDoS攻击和CC攻击的关键一步

随着互联网的普及,网络攻击变得越来越普遍和复杂,对企业和个人的网络安全构成了重大威胁。其中,DDoS(分布式拒绝服务)攻击和CC(网络连接)攻击是两种常见且具有破坏性的攻击类型,它们…

js写一个判断字符串是否能够转为JSON 的函数

其实非常简单 这里我们需要涉及到 捕获异常 因为如果你直接在if里面转 我已经试过了 直接就报错了 一点面子不给 我们写一个这样的函数 function isJsonString(str) {try {JSON.parse(str);return true;} catch (e) {return false;} }编写如下代码 console.log(isJsonString(…

企业架构LNMP学习笔记58

开始学习Tomcat: 学习目标和内容: 1)能够描述Tomcat的使用场景; 2)能够简单描述Tomcat的工作原理; 3)能够实现部署安装Tomcat; 4)能够实现和配置Tomcat的Server服务…