Linux常用工具使用方式

目录

常用工具:

安装包管理工具:

 查找含有关键字的软件包

安装软件

安装文件传输工具

安装编辑器

C语言编译器

C++编译器

安装调试器

安装项目版本管理工具

cmake

卸载软件

安装jsoncpp

安装boost库

安装mariadb

安装tree(让目录以tree的形式进行显示)

卸载:

编辑器vim

vim的使用

普通模式:

插入模式:

底行模式:

基本操作

复制:

粘贴:

剪切/删除:

撤销:

对其以及行操作

光标移动:

翻页:

分屏:

编译器:

编译器进行代码解释的四个阶段:

预处理:

编译:

汇编:

链接:

链接:库

库文件

动态库&静态库

动态链接:

静态链接:

调试器:gdb

可执行程序分为两类:

debug程序--调试版:

release程序--发布版:

程序调试操作一:

程序调试操作二:

程序调试操作三:

程序调试操作四:

程序调试操作五:

项目的自动化构建工具:make&Makefile

Makefile:

make:

Makefile的编写规则:

make解释规则:

预定义变量:

伪对象:

项目版本管理工具:git


常用工具:

主要分类为:安装包管理工具(软件商店)、编辑器、编译器、调试器、项目自动化构建工具、项目版本管理工具、文件传输工具。

安装包管理工具:

 查找含有关键字的软件包

apt-cache search [关键字] 

安装软件

apt-get install [软件名] 

安装文件传输工具

apt-get install lrzsz

安装编辑器

apt-get install vim

C语言编译器

apt-get install gcc

C++编译器

apt-get install g++

安装调试器

apt-get install gdb

安装项目版本管理工具

apt-get install git

cmake

apt-get install cmake

卸载软件

apt-get remove [文件名]

安装jsoncpp

apt-get install libjsoncpp-dev

安装boost库

apt-get install libboost-all-dev

安装mariadb

apt-get install mariadb-server

apt-get install mariadb-client

apt-get install libmariadb-dev

安装tree(让目录以tree的形式进行显示)

apt-get install tree

卸载:

apt-get remove [软件名]

编辑器vim

背景:

unix开发出来后,出了第一款类unix平台编辑器vi,但是vi并不好用,因此vim出现。

vim是一个命令行编辑器,因此默认无法使用鼠标进行操作。

为了能够使vim使用更加方便,为此设计了多种操作模式,在不同的操作模式下,相同的按键会有不同的作用。

vim的使用

操作模式共有12种,而写代码的主要只有3种。

普通模式:

是对文档内容进行命令操作

插入模式:

对文档内容的编辑

底行模式:

对文档的保存以及退出操作

vim后边更上文件名,就可以使用vim打开文件,默认处于普通模式

基本操作

a:从光标后开始插入

o:新建一行

还有大写I A O

:        进入底行模式

w 保存

q 退出

q! 强制退出

X 保存并退出

ESC        进入普通模式

复制:

yy 复制一行 nyy从光标行开始复制n行内容

粘贴:

p np 粘贴n行剪切板内容

剪切/删除:

dd删除一行 ndd

x 删除光标所在的字符

ggdG 从首行删除到尾行

撤销:

U 撤销的撤销ctrl+r

对其以及行操作

全文对齐:按照代码风格进行缩进对齐

底行模式输入:

gg=G 对齐

gg 光标移动到文档首行

G 光标移动到末位一行

set number 显示行号

光标移动:

hjkl 左下上右移动光标

w/b 以单词左右移动

翻页:

ctrl+f / ctrl+b 上下翻页

分屏:

进入底行模式输入vnew,新建一个窗口,分屏操作

ctrl+ww切屏

编译器:

将高级语言代码解释成为机器可识别的指令(不同的语言有不同的编译器)

C语言:gcc,msvc,clang.....

C++语言:g++

编译器进行代码解释的四个阶段:

预处理:

头文件引用,去除注释,宏替换...

编译:

进行语法,语义纠错,没有错误则将代码解释成为汇编指令

汇编:

将汇编指令,解释成为机器能识别的二进制指令。

链接:

将所有的机器代码(不同.c生成的文件,库文件)进行打包生成一个可执行程序

gcc编译器常用选项:

-E 只进行预处理

-S 只进行编译

-C 只进行汇编

-O 指定生成的文件名称

如果gcc不跟其他选项,那么生成的就是可执行程序

gcc -E main.c -o main.i

gcc -S main.i -o main.s

gcc -C main.s -o main.o

链接:库

在系统中,有一种文件叫做库文件:是进行特定功能,提前封装实现的函数,经过预处理,编译,汇编,打包之后生成的一个提供给别人使用的代码文件

库文件

虽然也是大量的二进制代码打包文件,但是它没有main函数。(因为一个代码里是不能出现两个main函数的。)

动态库&静态库

编译器的链接方式:

动态链接:

链接的是动态库,链接的时候,并不会将库中函数的实现指令给程序中也复制一份,而是只记录了一份符号表到程序中。

优点:

生成的可执行程序比较小

多个程序如果使用了相同的库文件,,实际的库函数代码在内存中就会只加载一份

缺点:

运行程序的时候,需要加载库文件,会耗费时间

多个程序加载时,都会先去扫瞄是否存在该库。

静态链接:

链接的是静态库,链接的时候,是将库中具体用到的函数

优点:

运行时不依赖库文件的存在(具体用到的代码是存在的)

缺点:

生成的可执行程序比较大,如果多个程序都用到了同一个静态库中的代码,则多个程序运行起来后,内存会存在冗余。

gcc默认链接方式:

动态链接(在同一个目录下,有同名的动态库文件,静态库文件lib.so,libc.a,这时候优先链接动态库)

调试器:gdb

作用:

调试程序的运行过程,排查程序运行结果结果不符合预期的原因。

可执行程序分为两类:

debug程序--调试版:

程序员调试程序运行的过程,调试错误

release程序--发布版:

测试人员测试的版本,以及交付的版本

gcc编译器对程序进行编译,最终生成的可执行程序,默认是release版本

然而release版程序是无法被调试的(因为程序中没有调试符号信息,并且代码有可能进行了优化)。

程序调试操作一:

生成debug版本程序

gcc编译链接的时候

gcc -g 生成debug版本程序

程序调试操作二:

使用gdb加载程序

gdb ./main

程序调试操作三:

各种不同的调试指令

1:开始运行程序:run

2:逐步调试程序:start

3:查看调试行附近代码:list main.c:[行号]

如until main.c:9

程序调试操作四:

next--逐过程--遇到函数则直接将函数执行完

step--逐语句--遇到函数则进入函数对函数内部进行逐步调试

程序调试操作五:

直接将代码运行到指定行:until main.c:[行号]

程序调试操作六:

从当前调试位置,开始运行:continue

程序调试操作七:

打断点--让程序运行到指定位置停下来等待调试:break main.c:19 break func

程序调试操作八:

查看断点信息:info break

程序调试操作九:

删除断点:delete [断点编号(info break前方会显示断点编号)]

程序调试操作十:

查看调用栈 backtrace

程序运行一旦崩溃,则调用栈的栈顶函数就是当前导致程序崩溃的代码。

程序调试操作十一:

查看变量内容 print [变量]

程序调试操作十二:

设置变量内容 print [变量]=10

程序调试操作十三:

给变量打断点 watch

项目的自动化构建工具:make&Makefile

Makefile:

就是一个常规的文本文件,但是搭配了make就不一样了

Makefile可以记录项目的构建规则

然后通过make对规则进行解释执行

make:

就是一个Makefile解释程序,会对Makefile中记录的规则按照一定语法规则进行解释执行,最终完成项目的构建

make的执行,会到执行make指令所在的目录下查找Makefile文件,找到了就执行,找不到则会报错。

注意:Makefile文件名是固定的,可以是Makefile或者makefile。其他的都不行

Makefile的编写规则:

[目标对象]:[依赖对象]

\t指令

make解释规则:make会在makefile中找到第一个目标对象

1、检测目标对象文件是否存在

有:则会检测目标对象文件与依赖对象文件的时间关系,判断目标是否需要重新生成(在目标文件上次生成后,源码有没有修改过)

没有:则需要生成

2、如果需要生成,则会检测依赖文件是否存在,是否需要生成因此会到下边找寻依赖文件的生成规则,先生成依赖文件,最终依赖文件都生成后,再去生成目标文件

3、第一个目标对象文件生成后,则退出。所以要把最后想生成什么放在第一行

make解释规则:

1、在执行make指令的目录下,查找Makefile文件进行解释

2、在Makefile中,找到第一个目标对象

3、根据目标与依赖的时间关系,判断目标对象是否需要重新生成,不需要则直接退出。

4、判断依赖对象是否需要生成。如果需要则查找依赖对象的生成规则。进行生成

5、执行指令,完成目标对象的生成后退出。

makefile中的其他简化操作:

预定义变量:

  • $^ 当前编译规则的所有依赖对象
  • $< 当前编译规则中第一个依赖对象
  • $@ 当前编译规则中的目标对象

wildcard获取指定目录下特定规则的文件名

patsubst对字符串进行内容替换,将.c替换为.o

伪对象:

使用PHONY声明一个对象为伪对象

作用:分离目标对象与实际文件之间的关系

(声明makefile中的目标对象是一个假的对象,与实际的文件没有关系。)

这样的话,目标对象的编译规则中的指令无论如何都会被执行。

(为了让一个指令不受外部文件影响,每次都执行。比如有时候.o是最新的,就会导致不会运行make,或者说外面有一个clean的文件,再使用make clean它就不知道执行什么,所以需要这样一个设置。)

项目版本管理工具:git

项目的版本管理:说白了就是将不同提交版本的代码给备份起来以备回滚,以及容灾。

版本管理的工具种类:svn,git,......

1、克隆远程仓库:git clone [地址]

比如gitee的地址在:

点击http

2、添加修改项:git add --all ./

3、提交版本:git commit -m [本次版本的备注]

4、远程推送:git push origin master

⚠️提示⚠️:比如今天在a文件内提交了main1到master在b文件内也想提交main2到master,那么应该先进行pull再进行main2的提交。

git教程参考网址:

Wiki - Gitee.com帮助

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python28-3 朴素贝叶斯分类算法

朴素贝叶斯算法简介 朴素贝叶斯&#xff08;Naive Bayes&#xff09;算法是一种基于贝叶斯定理的分类算法。它广泛应用于文本分类、垃圾邮件检测和情感分析等领域。该算法假设特征之间是独立的&#xff0c;这个假设在实际情况中可能并不完全成立&#xff0c;但Naive Bayes在许…

java笔记(30)——反射的 API 及其 使用

文章目录 反射1. 什么是反射2. 获取class字段&#xff08;字节码文件对象&#xff09;方式1方式2方式3应用 3. 获取构造方法和权限修饰符前期准备获取所有的公共构造方法获取所有的构造方法获取无参构造方法获取一个参数的构造方法获取一个参数的构造方法获取两个参数的构造方法…

Java面试题--JVM大厂篇之G1 GC的分区管理方式如何减少应用线程的影响

目录 引言: 正文: 1. 区域划分&#xff08;Region&#xff09; 2. 并行和并发回收 3. 区域优先回收&#xff08;Garbage First&#xff09; 4. 可预测的停顿时间 5. 分阶段回收 6. 复制和压缩 实际效果: 场景举例 1. 减少单次GC的影响 2. 支持高并发环境 3. 优…

数学建模(1):期末大乱炖

1 概述&#xff01;&#xff01; 1.1 原型和模型 原型&#xff1a;客观存在的研究对象称为原型&#xff0c;也称为“系统”、“过程”。 机械系统、电力系统、化学反应过程、生产销售过程等都是原型&#xff1b; 研究原型的结构和原理&#xff0c; 从而进行优化、预测、评价…

一区算法MPA|海洋捕食者算法原理及其代码实现(Matlab/Python))

Matlab/Python&#xff1a; 本文KAU将介绍一个2020年发表在1区期刊ESWA上的优化算法——海洋捕食者算法 (Marine Predators Algorithm&#xff0c;MPA)[1] 该算法由Faramarzi等于2020年提出&#xff0c;其灵感来源于海洋捕食者之间不同的觅食策略、最佳相遇概率策略、海洋记…

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径&#xff1a;/var/lib/mysql数据库命令存放路径&#xff1a;/user/bin和/user/sbin配置文件目录&#xff1a;/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

使用evo工具比较ORB-SLAM3的运行轨迹(从安装到解决报错)

ORB-SLAM2和ORB-SLAM3怎么跑出来&#xff0c;之前都有相关的保姆级的教程&#xff0c;下来给大家介绍一款evo工具&#xff0c;给科研加速&#xff01;&#xff01;&#xff01; 文章目录 1.下载evo2.生成轨迹3.evo别的功能使用 1.下载evo 输入命令下载 pip install -i https…

你真的会udf提权???数据库权限到系统权限 内网学习 mysql的udf提权操作 ??msf你会用了吗???

我们在已经取得了数据库的账号密码过后&#xff0c;我们要进一步进行提取的操作&#xff0c;我们mysql有4钟提权的操作。 udf提权(最常用的)mof提权启动项提权反弹shell提权操作 怎么获取密码操作&#xff1a; 怎么获取密码&#xff0c;通过sql注入获取这个大家都应该知道了&a…

百强韧劲,进击新局 2023年度中国医药工业百强系列榜单发布

2024年&#xff0c;经济工作坚持稳中求进、以进促稳、先立后破等工作要求。医药健康行业以不懈进取的“韧劲”&#xff0c;立身破局&#xff0c;迎变启新。通过创新和迭代应对不确定性&#xff0c;进化韧性力量&#xff0c;坚持高质量发展&#xff0c;把握新时代经济和社会给予…

零基础开始学习鸿蒙开发-读书app简单的设计与开发

目录 1.首页设计 2.发现页面的设计 3.设置页面的设计 4.导航页设计 5.总结&#xff1a; 6.最终的效果 1.首页设计 Entry Component export struct home {State message: string 首页build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

基于线调频小波变换的非平稳信号分析方法(MATLAB)

信号处理领域学者为了改进小波变换在各时频区间能量聚集性不高的缺点&#xff0c;有学者在小波分析基础上引入调频算子构成了线性调频小波变换&#xff0c;线调频小波一方面继承了小波变换的理论完善性&#xff0c;另一方面用一个新的参数&#xff08;线调频参数&#xff09;刻…

构建高效业财一体化管理体系

构建高效业财一体化管理体系 业财一体化战略意义 提升决策质量 强化数据支撑&#xff1a;通过整合业务与财务数据&#xff0c;为决策提供准确、实时的信息基础&#xff0c;确保分析的深度与广度。促进业务与财务协同&#xff1a;打破信息孤岛&#xff0c;实现业务流程与财务管…

Django 定义模型执行迁移

1&#xff0c;创建应用 Test/app8 python manage.py startapp app8 2&#xff0c;注册应用 Test/Test/settings.py 3&#xff0c;配置路由 Test/Test/urls.py from django.contrib import admin from django.urls import path, includeurlpatterns [path(app8/, include(a…

Linux服务器上安装CUDA11.2和对应的cuDNN 8.4.0

一、检查 检查本机是否有CUDA工具包&#xff0c;输入nvcc -V: 如图所示&#xff0c;服务器上有CUDA&#xff0c;但版本为9.1.85&#xff0c;版本过低&#xff0c;因此博主要重装一个新的。 二、安装CUDA 1.查看服务器最高支持的CUDA版本 在命令行输入nvidia-smi查看显卡驱动…

Mining Engineering First Aid Riding

4个最主要的日常技能&#xff1a;Mining 采矿 Engineering 工程 First Aid 急救 Riding 骑术 4个最主要的日常技能

C# 信号量的使用

学习来源&#xff1a;《.net core 底层入门》 第六章第9节&#xff1a;信号量 案例&#xff1a;主线程负责添加数据&#xff0c;子线程负责获取数据 使用SemaphoreSlim&#xff08;轻信号量&#xff09;实现&#xff1a; using System; using System.Collections.Generic; us…

AI写作变现指南:从项目启动到精通

项目启动 1. 确定目标客户群体 首先&#xff0c;明确谁是我们的目标客户。以下是一些潜在的客户群体&#xff1a; 大学生&#xff1a;他们需要写论文、报告、演讲稿等。 职场人士&#xff1a;包括需要撰写商业计划书、市场分析报告、项目提案等的专业人士。 自媒体从业者&…

TiDB-从0到1-BR工具

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、BR工具 BR工具全称backup & restore&#xff0c;如同MySQL可以通过mysqldump和xtrabackup进行备份…

入门JavaWeb之 JDBC 连接数据库

JDBC&#xff1a;Java Database Connectivity&#xff0c;Java 数据库连接 需要 jar 包支持&#xff1a; java.sql javax.sql mysql-connector-java&#xff08;连接驱动&#xff0c;必须导入&#xff09; 在 MySQL 先建个 jdbc 数据库后 USE jdbc; 执行后再 CREATE TABLE…

Java_日志

日志技术 可以将系统执行的信息&#xff0c;方便的记录到指定的位置(控制台、文件中、数据库中) 可以随时以开关的形式控制日志启停&#xff0c;无需侵入到源代码中去进行修改。 日志技术的体系结构 日志框架&#xff1a;JUL、Log4j、Logback、其他实现。 日志接口&#xf…