Linux:基础开发工具
文章目录
- Linux 软件包管理器 yum
- 什么是软件包
- 关于rzsz
- 查看软件包
- 安装软件
- 卸载软件
- 安装扩展源
- Linux 编辑器 vim
- vim的基本概念
- 正常/普通/命令模式(Normal mode)
- 插入模式(Insert mode)
- 底行模式(last line mode)
- vim的基本操作
- [命令模式]切换至[插入模式]
- [插入模式]切换至[命令模式]
- [命令模式]切换至[底行模式]
- 退出vim
- vim命令模式
- 底行模式
- Linux 编译器 gcc/g++
- 默认编译
- 预编译
- 编译
- 汇编
- 链接
- 动态库和静态库
- 动态链接和静态链接的对比
- Linux 项目自动化构建工具 make/makefile
- Linux 调试工具 gdb
- debug和release
- gdb指令
Linux 软件包管理器 yum
什么是软件包
在Linux下安装软件有三种方式:源代码安装、rpm安装、yum安装。
源代码安装就是下载程序的源代码,并进行编译,得到可执行程序。
但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。
软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系。
yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。
关于rzsz
这个工具用于Windows机器和远端的Linux机器通过XShell传输文件。
安装完毕之后可以通过拖拽的方式将文件上传过去。
注意:关于yum的所有操作必须保证那个主机(虚拟机)网络畅通!
可以通过ping指令验证:
ping ww.baidu.com
查看软件包
通过 yum list 命令可以罗列出当前一共有哪些软件包.。由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包.。例如:
yum list | grep lrzsz
结果如下:
注意:
- 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
- “x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
- “el7” 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示 centos6/redhat6.
- 最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
安装软件
通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装
sudo yum install lrzsz
yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装.
出现 “complete” 字样, 说明安装完成.
注意:
- 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
- yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
卸载软件
卸载命令
sudo yum remove lszrz
安装扩展源
尽管yum已经为我们准备了很多软件,但也有很多软件在yum上找不到,所以yum还有一个扩展源,是一些还没有进入yum的软件,但是以后可能会进入yum,但现阶段还不成熟。如果我们就是想要使用yum扩展源中的软件,就需要我们先下载yum扩展源,然后再按照之前的方法下载软件即可。
安装扩展源命令:
yum install -y epel-release
Linux 编辑器 vim
vim的基本概念
vim是一个多模式的编辑器,本文主要介绍最常用的三种模式:命令模式(Normal mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按ESC
键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
底行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,:
即可进入该模 式。
添加行号:set nu
去除行号:set nonu
要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes
。
三种模式的相互切换:
vim的基本操作
进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面。不过有一点要特别注意,就是在进入vim之后,是处于[命令模式],要切换到[插入模式]才能够输入文字。
[命令模式]切换至[插入模式]
输入:a
,i
,o
均可
[插入模式]切换至[命令模式]
目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下`ESC键转到[命令模式]再删除文字。当然,也可以直接删除。
[命令模式]切换至[底行模式]
shift + ;
, 其实就是输入:
退出vim
在[底行模式]下:
w:保存当前文件
wq:保存并退出vim
q:不保存退出vim
q!/wq!:强制执行操作
vim命令模式
常用指令:
指令 | 含义 |
---|---|
gg | 定位光标到最开始行 |
G | 定位光标到结尾行 |
n + G | 光标定位到任意行 |
(n)+ yy | 赋值光标所在行和其下(n - 1)行 |
(n) + p | 粘贴n重复行到光标下一行 |
(n) + dd | 剪切/删除 |
u | 撤销 |
CTRL + r | 反撤销 |
$ | 定位光标到当前行结尾 |
^ | 定位光标到当前行开始 |
w/b | 光标按单词在行内/跨行移动 |
h/j/k/l | 光标左下上右移动 |
shift + ~ | 快速大小写切换 |
(n) + r | 对光标及之后位置进行批量替换 |
(n) + x | 对光标及之后位置的字符删除 |
R | 批量替换模式(Esc退出) |
底行模式
「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是想要的,可以一直按「n」会往后寻找到想要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是想要的,可以一直按「n」会往前寻找到想要的关键字为止。
Linux 编译器 gcc/g++
两种编译器的用法几乎相同,区别在于:gcc只能编译C语言,g++可以编译C语言和C++。
以下介绍以gcc为例。
默认编译
使用gcc编译代码时,需要使用指令:
gcc test.c
这样会生成一个a.out
文件,在当前目录下使用./a.out
即可执行该程序。
因为gcc编译生成的文件默认文件名为a.out
,编译后生成可执行文件,就可以使用相对路径执行该文件。
如果想为生成的文件命名,需要添加-o [文件]
选项。
预编译
编译过程分为:预编译(进行宏替换)、编译(生成汇编代码)、汇编(生成二进制文件)、链接(生成可执行文件或库文件)四个过程。
预编译的作用:
- 展开头文件
- 条件编译
- 宏替换
- 去注释
所以经过预编译后的文件仍为C语言文件。
如果想得到预编译后的文件,可以使用-E
选项。同时使用-o [文件]
选项来命名生成的文件。
gcc -E test.c -o test.i
命名预编译后的文件没有硬性的规则,不过一般我们把经过预编译后的文件命名为.i
文件。
编译
编译过程将C/C++文件转成汇编文件。
如果想得到编译后的文件,可以使用-S
选项。同时使用-o [文件]
选项来命名生成的文件。
gcc -S test.i -o test.s
我们一般将编译后的文件命名为.s
文件。
需要注意的是,我们可以对test.i
编译,也可以对test.c
编译,前者是直接编译,后者是先预编译再编译,生成的汇编文件没有区别。
汇编
汇编过程将汇编代码转换为二进制代码。
gcc -c test.s -o test.o
汇编生成的文件称为可重定位目标二进制文件,简称目标文件,在Linux下后缀一般为.o
,在Windows下后缀为.obj
。
目标文件还不能执行,要想生成一个可执行程序,还要进行最后一步:链接。
链接
目标文件和库进行链接形成可执行程序。
库(库文件):提供给我们方法的实现,如printf
等。
C语言的标准库,本质就是一个文件,有自己的路径。
动态库和静态库
Linux下动态库后缀为.so
,静态库后缀为.a
,库的命名规则为libname.so.xxx
,其中name
是区分不同库文件的部分,其余部分相同。
Windows下动态库后缀为.dll
,静态库后缀为.lib
。
链接分为动态链接和静态链接,动态链接用到的库称为动态库,静态链接用到的库称为静态库。
Linux下动态库的路径:/lib64/libc.so
,静态库的路径:/lib64/libc.a
。
静态链接时,在程序运行的过程中会到动态库中查找所需方法,所以动态库不能缺失,缺失后不致影响一个程序,很多程序都无法正常运行;在编译器使用静态库进行静态链接时,将自己的方法拷贝到目标程序中,该程序以后不再依赖库。
在Linux中,编译形成的可执行程序,默认采用动态链接,如果要按照静态链接的方式进行编译,需要加-static
选项。
如果没有静态库,使用-static
会报错。
如果没有动态库,有静态库,而且编译器能找到,也可以编译。
-static
的本质:改变优先级,且只适配一次,即一旦声明-static
,就不会再使用动态库。
查看文件链接的库以及链接方式的指令:flie [文件]
动态链接和静态链接的对比
动态库时共享库,有效的节省资源(磁盘空间,内存空间,网络空间)。但动态库一旦缺失,各个程序都无法正常运行。
静态库不依赖库,程序可以独立运行,但程序体积大,比较消耗资源。
Linux 项目自动化构建工具 make/makefile
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
例如当我们写出一个C语言文件test.c
#include <stdio.h>int main()
{printf("Hello Linux\n");return 0;
}
我们可以在同一目录下创建一个makefile文件,并在其中写
test:test.cgcc -o test test.c.PHONY:clean
clean:rm -f test
其中第一行和第五行叫做依赖关系,第二行和第六行叫做依赖方法。
make是否执行:比较可执行程序的最近修改时间和源文件的最近修改时间,如果.exe
新于.c
,则不执行make,如果.exe
老于.c
,则执行make。
而.PHONY:[文件]
可以使该文件忽略时间,总是被执行。
使用make时,后面要加指令,如:make clean
,如果不加指令,默认执行makefile中的第一条指令。
Linux 调试工具 gdb
debug和release
在Linux下,编译生成的可执行程序默认是release
版本,无debug
信息,想要生成debug
版本的可执行程序,需要在编译时加-g
选项。
readelf:可以读取可执行程序文件的指令。
readelf -S [文件] | grep -i debug
可以查看文件中有没有debug
信息。
gdb指令
指令 | 含义 |
---|---|
l [行号/函数名] | 查看代码 |
r | 启动程序(到断点停下) |
b [行号/函数名] | 打断点 |
info b | 查看断点 |
d [断点编号] | 取消断点 |
n | 逐过程调试 |
s | 逐语句调试 |
p [变量] | 查看变量值 |
display [编号] | 常显示变量值 |
undisplay | 取消常显示 |
until [行号] | 跳转至x行 |
finish | 直接结束当前函数 |
c | 运行到下一个断点 |
disable [编号] | 关闭断点 |
enable [编号] | 打开断点 |
相关文章:
Linux:基础开发工具
文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…...
HarmonyOS NEXT Push接入
接入HarmonyOS NEXT Push 推送功能,相比于 Android 真的是简单太多。不再需要适配接入各个厂家的推送 SDK,真是舒服。 1.开通推送服务与配置Client ID 1.1 创建应用获取Client ID 按照官方文档来就可以了:https://developer.huawei.com/co…...
如何快速入门Element-UI:打造高效美观的前端界面
Element-UI 是一款基于 Vue.js 的开源组件库,提供了丰富的 UI 组件,可以帮助开发者快速构建美观、响应式的前端界面。本文将详细介绍如何快速入门 Element-UI,包括环境搭建、组件使用、样式定制及常见问题解决方法,帮助你高效地使用 Element-UI 进行前端开发。 一、环境搭…...
Langchain的向量存储 - Document示例代码里的疑问
文章目录 前言一、语句分析二、 举例解释三、 完整代码总结 前言 之前的代码里有下面这句话,可能有看不明白的读者。 vectors [embeddings.embed(doc.page_content) for doc in docs]今天一起来看下这句话。 一、语句分析 这句话实际上是一个列表推导式&#x…...
Docker 教程-介绍-2
快速了解docker有什么。 Docker简介 Docker 是一个开源的应用容器引擎,基于Go语言开发,并遵循Apache 2.0协议。它允许开发者将应用及其依赖包打包进一个可移植的容器中,这些容器可以发布到任何支持Docker的Linux或Windows机器上,…...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 伐木工(200分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 伐木工(200分) 🌍 评测功能需要订阅专栏后私信联系清隆解…...
UltraScale+系列模块化仪器,可以同时用作控制器、算法加速器和高速数字信号处理器
基于 XCZU7EG / XCZU4EG / XCZU2EG • 灵活的模块组合 • 易于嵌入的紧凑型外观结构 • 高性能的 ARM Cortex 处理器 • 成熟的 FPGA 可编程逻辑 ,基于 IP 核的软件库 基于 Xilinx Zynq UltraScaleMPSoC 的 FPGA 技术,采用 Xilinx Zynq UltraScale&a…...
Python与其他编程语言(如Java、C++)相比有哪些优势?
一、技术难点 在探讨Python与其他编程语言相比的优势时,技术难点在于如何全面、准确地把握并阐述这些优势。这需要对Python、Java、C等编程语言有深入的理解,包括它们的语法特性、应用领域、性能特点、开发效率等。 首先,Python的语法简洁明…...
Edge浏览器双击关闭标签页,双击关闭浏览器选项卡
设置》外观》自定义浏览器,开启“使用双击关闭浏览器选项卡” 设置里面搜索“双击”,这是最快的方式 鼠标滚轮单击 或者进入“设置”-“辅助功能” 呼吁已久的功能来了!Edge浏览器双击关闭标签页功能上线新 国产浏览器大多都有双击关闭标签页…...
C++ 贪心算法——跳跃游戏、划分字母区间
一:跳跃游戏 55. 跳跃游戏 题目描述:给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ࿱…...
汽车数据应用构想(三)
上期说的,用数据去拟合停车信息的应用,那么类似的POI信息相关的场景其实都可以实现。今天讲讲用户使用频率也很高的加油/充电场景。 实际应用中,在加油场景中用户关心的通常还是价格。无论是导航还是各种加油APP/小程序,都已经很…...
体素技术在AI绘画中的革新作用
随着人工智能技术的不断进步,AI绘画已经成为艺术创作和视觉设计领域的一大趋势。在众多推动AI绘画发展的技术中,体素技术以其独特的优势,正在逐渐改变着我们对计算机生成图像的认识。本文旨在探讨体素技术在AI绘画中的应用与影响,…...
Leetcode.866 回文质数
题目链接 Leetcode.866 回文质数 rating : 1938 题目描述 给你一个整数 n n n ,返回大于或等于 n n n 的最小 回文质数。 一个整数如果恰好有两个除数: 1 1 1 和它本身,那么它是 质数 。注意, 1 1 1 不是质数。 例如…...
【论文阅读】Point2RBox (CVPR’2024)
paper:https://arxiv.org/abs/2311.14758 code:https://github.com/yuyi1005/point2rbox-mmrotate...
深度学习的点云分割
深度学习的点云分割 点云分割是计算机视觉中的一个重要任务,特别是在三维数据处理和分析中。点云数据是由大量三维点构成的集合,每个点包含空间坐标(x, y, z),有时还包含其他信息如颜色和法向量。点云分割的目标是将点…...
【知识点】c++模板特化
在 C 中,模板特化分为全特化(full specialization)和偏特化(partial specialization)。它们允许程序员为特定类型或类型模式提供不同的实现,以覆盖通用模板的默认行为。 模板全特化 模板全特化是指为某个…...
算法家族之一——二分法
目录 算法算法的打印效果如果算法里的整型“i”为1如果算法里的整型“i”为11 算法的流程图算法的实际应用总结 大家好,我叫 这是我58,现在,请看下面的算法。 算法 #define _CRT_SECURE_NO_WARNINGS 1//<--预处理指令 #include <stdi…...
【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment
论文:https://arxiv.org/abs/2404.16022 代码:https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…...
Elastic 8.14:用于简化分析的 Elasticsearch 查询语言 (ES|QL) 正式发布
作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.14 正式发布。 什么是新的? 8.14 版本最重要的标题是 ES|QL 的正式发布(GA),它是从头开始设计和专门构建的,可大大简化数据调查。在新的查询引擎的…...
C语言指针与数组的区别
在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别: ### 数组 1. **固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改…...
springboot3一些听课笔记
文章目录 一、错误处理机制1.1 默认1.2 自定义 二、嵌入式容器 一、错误处理机制 1.1 默认 错误处理的自动配置都在ErrorMvcAutoConfiguration中,两大核心机制: ● 1. SpringBoot 会自适应处理错误,响应页面或JSON数据 ● 2. SpringMVC的错…...
【小沐学Python】Python实现Web服务器(CentOS下打包Flask)
文章目录 1、简介2、下载Python3、编译Python4、安装PyInstaller5、打包PyInstaller6、相关问题6.1 ImportError: urllib3 v2 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.0.2k-fips 26 Jan 2017. See: https://github.com/urllib3/url…...
Cesium开发环境搭建(一)
1.下载安装Node.js 进入官网地址下载安装包 Node.js — Download Node.js https://cdn.npmmirror.com/binaries/node/ 选择对应你系统的Node.js版本,这里我选择的是Windows系统、64位 安装完成后,WINR,输入node --version,显示…...
视频、图片、音频资源抓取(支持视频号),免安装,可批量,双端可用!
今天分享一款比较好用资源嗅探软件,这个嗅探工具可以下载视频号,界面干净,可以内容预览和批量下载,看到这里你是不是想用它爬很多不得了的东西。这款软件无需安装,打开即用。同时他支持windows系统和Mac系统,是一款不可…...
FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉
在调试串口任务中增加如下代码,发现可以用keil进行仿真,但是烧录程序后,调试串口没有打印,状态灯也不闪烁,单片机完全起不来 博主就纳了闷了,究竟是什么原因,这段代码可是公司永流传的老代码了&…...
CentOS 7基础操作08_Linux查找目录和文件
1、which命令——查找用户所执行的命令文件存放的目录 which命令用于查找Linux命令程序并显示所在的具体位置.其搜索范围主要由用户的环境变量PATH决定(可以执行言echo sPATH”命令查看),这个范围也是Linux操作系统在执行命令或程序时的默认搜索路径。 which命令使用要查找的命…...
CI/CD实战面试宝典:从构建到高可用性的全面解析
实战部署与配置 请描述你设计和实现的一个CI/CD pipeline的完整流程,包括构建、测试、部署各个阶段。 我设计的CI/CD pipeline通常包括以下几个阶段: 代码提交:开发人员将代码提交到Git仓库,触发CI/CD流程。代码检查࿱…...
NLP实战入门——文本分类任务(TextRNN,TextCNN,TextRNN_Att,TextRCNN,FastText,DPCNN,BERT,ERNIE)
本文参考自https://github.com/649453932/Chinese-Text-Classification-Pytorch?tabreadme-ov-file,https://github.com/leerumor/nlp_tutorial?tabreadme-ov-file,https://zhuanlan.zhihu.com/p/73176084,是为了进行NLP的一些典型模型的总…...
MySQL: 表的增删改查(基础)
文章目录 1. 注释2. 新增(Create)3. 查询(Retrieve)3.1 全列查询3.2 指定列查询3.3 查询字段为表达式3.4 别名3.5 去重: distinct3.6 排序: order by3.7条件查询3.8 分页查询 4. 修改 (update)5. 删除(delete)6. 内容重点总结 1. 注释 注释:在SQL中可以使用“–空格…...
WDF驱动开发-PNP和电源管理(三)
对于PNP设备来说,理解它们的启动和删除顺序,以及意外移除顺序非常重要,在早期,经常有拔插U盘导致windows重启的例子,这就是意外移除带来的问题。 功能或Filter驱动程序的启动顺序 下图显示了框架调用 WDF (KMDF 和 U…...
wordpress安卓ios应用/google下载安卓版下载
2018 年的数字加密资产市场有 2 个热点:ICO 和 DAPP。ICO 的热度从 2017 年持续到 2018 年上半年就慢慢地淡出了我们的视野,DAPP 很快就接了这个市场的热度。从 2018 年 6 月份开始,随着 EOS 公链的上线,不少开发者也看到了 DAPP …...
一个在线做笔记的网站/百度如何做广告
一、操作系统提代一个开发接口给硬件开发商,让他们可以根据这个接口设计可以驱动他们硬件的驱动程序。二、应用程序是参考操作系统提供开发接口所开发出来的软件三、核心功能:系统呼叫接口、程序管理、内存管理、文件系统管理、装置驱动四、CPU每次能够处…...
温州大型网站设计公司/网址收录
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm完整代码:复制代码代码如下:用html5的canvas画布绘制贝塞尔曲线原文function draw(id){var canvasdocument.getelementbyid(id);if(canvasnull)return false;var contextcanvas.getcontext(2d);cont…...
中国定制家具网/seo算法培训
配置示例 server{ server_name aaa.com location /api { proxy_pass http://xxx.com/api; proxy_set_header Host $proxy_host; #$host } } 说明 在同一服务器的IIS 发布了xxx.com 站点和 yyy.com 站点 共有80端口。需要通过Header Host 来分别响应 在通过浏览器访问的情况下&a…...
wordpress登录去不了后台/网络服务器价格
这篇文章的原始URL是:http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 主要说的是多线程下,如何确保Lazy初使化的对象的完整性与正确性,并例举了可行与不可行的几种情况,这也是我们在编写多线程应用的…...
用python做的电商网站/百度官网app
一、什么是Hive Hive是建立在Hadoop基础常的数据仓库基础架构,,它提供了一系列的工具,可以用了进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的按规模数据的机制。Hive定义了简单…...