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.mzph.cn/diannao/38651.shtml

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

相关文章

基于Java的区块链数字身份认证

基于Java的区块链数字身份认证 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨基于Java的区块链数字身份认证&#xff0c;这是区块链技术在安全领…

潜水耳机哪个牌子好?用户精选,这四款潜水耳机质量上乘!

在这个快节奏的时代&#xff0c;人们越来越渴望在运动中也能享受到音乐的陪伴。潜水&#xff0c;作为一种独特的水下运动&#xff0c;自然也不例外。然而&#xff0c;并非所有的耳机都能承受水下的压力和环境&#xff0c;这就要求我们对潜水耳机有着更高的要求。作为一名资深的…

数据库锁之间有哪些区别?

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/database/lock 以下是数据库中常用的几种锁类型: 1. 共享锁(Shared Lock,S Lock) 共享锁允许多个事务同时读取同一资源,但不能修改该资源。其他事…

Kubernetes的发展历程:从Google内部项目到云原生计算的基石

目录 一、起源与背景 1.1 Google的内部项目 1.2 Omega的出现 二、Kubernetes的诞生 2.1 开源的决策 2.2 初期发布 三、Kubernetes的发展历程 3.1 社区的成长 3.2 生态系统的壮大 3.3 重大版本和功能 3.4 多云和混合云的支持 四、Kubernetes的核心概念 4.1 Pod 4.…

hive4 从入门到精通

查询hive 架构 准备 HDFS配置 vim $HADOOP_HOME/etc/hadoop/core-site.xml <!--配置所有节点的root用户都可作为代理用户--><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><!--配置root用户…

Jenkins接口自动化项目的工程创建

jenkins的下载安装 jenkins下载的官网地址 https://www.jenkins.io/download/ java环境变量的配置下载 jenkins是用java语言编写的所以要配置java环境 需要安装java的JDK 推荐安装JDK17(https://blog.csdn.net/wochunyang/article/details/138520209) JDK17的下载地址 ht…

HTML文本内容 转化为纯文本

public static String htmltoString(String htmlContent) { /*String htmlContent "<p class\"MsoNormal\"><span style\"font-family: 思源黑体 CN Normal;\">1、应用场景</span></p>\n" "<p class\"Ms…

加载数据到mysql并解决原始数据乱码问题

查看linux上数据&#xff1a; 使用命令转换编码&#xff1a; iconv -f GBK -t UTF-8 toutiao.csv -o toutiao2.csv加载数据到mysql: load data local infile /root/toutiao2.csv INTO TABLE pdz FIELDS TERMINATED BY , LINES TERMINATED BY \r\n;

ZXL-2000砌体砂浆强度点荷仪

一、产品简介&#xff1a; 砌体砂浆强度点荷仪&#xff08;又名&#xff1a;砂浆点荷仪&#xff09;&#xff0c;是根据GB/T50315-2000《砌体工程现场检验技术规程》而研制生产的。是砌体砂浆强度检测的专用仪器&#xff0c;其特点是能在现场或试验室直接测试&#xff0c;不影…

Java短剧系统

探索影视新体验 &#x1f4f1;一、引言&#xff1a;短剧时代的来临 在数字化的今天&#xff0c;我们见证了许多内容消费模式的转变。从长篇大论的电视剧到短小精悍的短视频&#xff0c;再到如今备受瞩目的短剧&#xff0c;观众对于影视内容的需求越来越多元化。而短剧系统微信…

怎么选域名?

域名是互联网上独一无二的标识&#xff0c;它不仅是网站访问的地址&#xff0c;更是品牌形象的重要组成部分。选择一个好的域名至关重要&#xff0c;因为它可以影响网站的搜索引擎排名、用户的第一印象以及品牌的长期发展。本文将提供选择域名时需要考虑的关键因素和实用建议。…

vite+vue集成cesium

1、创建项目、选择框架vuejs pnpm create vite demo_cesium 2、进入项目安装依赖 cd demo_cesium pnpm install3、安装cesium及插件 3、pnpm i cesium vite-plugin-cesium 4、修改vite-config.js import { defineConfig } from vite import vue from vitejs/plugin-vue impo…

【笔记】手工部署之linux中开放已安装的mysql与tomcat端口

在需要打包的springboot项目中输入mvn clean package 在target下面获得jar包 进入linux中你想要该jar包存在的位置 将jar包上传至linux中 此时在浏览器中输入linux的ip地址&#xff1a;端口号/mapping路径为404 故&#xff1a; 在linux中另开一个标签页 检查mysql和tomcat已…

js条件引用

在JavaScript中&#xff0c;条件引用模块通常涉及到在运行时根据条件判断来决定是否加载某个模块。这在某些情况下非常有用&#xff0c;比如在不同环境下使用不同的模块&#xff0c;或者在某些特定条件下才需要某个模块的功能。 以下是几种在JavaScript中实现条件引用的方法&a…

Linux内核升级

Background wireguard 内核要求内核版本4.18以上&#xff0c;对于内核版本4.18以下&#xff0c;无法使用WireGuard。内核版本4.18以上、5.6以下&#xff0c;可以通过升级内核的方式支持WireGuard。内核5.6及以上版本已经原生支持WireGuard&#xff0c;可以直接使用原生的WireGu…

【总线】AXI4第六课时:寻址选项深入解析

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

pip的常用命令整理|python入学必备知识

1. 什么是pip? 通俗的说&#xff1a;pip 是 Python 第三方包管理工具&#xff0c;它提供了对Python 包的查找、下载、安装、卸载的功能。Python 3.4以上版本都自带 pip 工具。 2. 查看系统是否安装的pip&#xff1f; 下面这行代码如果没有报错&#xff0c;则证明系统中安装…

设计模式(实战项目)-状态模式

需求背景&#xff1a;存在状态流转的预约单 一.数据库设计 CREATE TABLE appointment (id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 主键id,appoint_type int(11) NOT NULL COMMENT 预约类型(0:线下查房...),appoint_user_id bigint(20) NOT NULL COMMENT 预约人…

实现胶囊神经网络,识别手写MNIST数据集,谈谈实现及理解。

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

稀疏数组Java练习代码含IO

是在学习尚硅谷的数据结构与算法Java课程&#xff0c;课后自己凭借思路写的练习代码 首先定义一个稀疏数组类 import java.io.*; import java.util.Objects;public class SparseArray {int sum;//创建原始数组public int[][] createArray(int column, int row){//根据传入数据…