​​​​​​

 

枫の个人主页

你不能改变过去,但你可以改变未来

算法/C++/数据结构/C/Linux

Hello,这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕,我们继续来学习C++,C++更新的同时我也会更新Linux。Linux操作系统是很经典的操作系统,因此学习起来注定枯燥无味,西游记大家都看过吧~,我希望能带着大家一起跨过九九八十一难,降伏各类难题,学会Linux,我会尽我所能,以通俗易懂、幽默风趣的方式带给大家形象生动的知识,也希望大家遇到困难不退缩,遇到难题不放弃,学习师徒四人的精神!!!故此得名【Linux游记

 话不多说,让我们一起进入今天的学习吧~~~  

一、软件包管理器

1.1 什么是软件包

在 Linux 下安装软件,通常的办法是下载源代码并编译得到可执行程序,但这种方式比较麻烦。于是有人将常用软件提前编译好,做成软件包(类似 Windows 上的安装程序)放在服务器上,通过包管理器可方便地获取并直接安装。

软件包和软件包管理器的关系,就好比 "App" 和 "应用商店"。其中,yum(Yellow dog Updater, Modified)是 Linux 下常用的包管理器,主要应用在 Fedora、RedHat、Centos 等发行版;Ubuntu 则主要使用 apt(Advanced Package Tool),它同样能自动解决依赖关系,实现软件包的下载和安装。

1.2 Linux 软件生态

Linux 下载软件时,用户通过包管理器(yum/apt)向软件包服务器发送查找、下载请求,服务器返回软件包,包管理器负责解决依赖关系并完成下载、安装、卸载等操作。

评估操作系统的好坏,生态是重要因素,包括社区论坛、官网文档、软件体系、维护更新速度、操作系统自身及针对性客户群体等。

软件包可能存在依赖问题,一个软件可能依赖多个库文件,如某软件可能依赖 libc.so、ssl.so 等。为提高下载速度,可使用国内镜像源,以下是一些国内 Linux 软件安装源的官方链接:

  • 阿里云官方镜像站:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区,提供 CentOS、Ubuntu、Debian 等多种发行版镜像。
  • 清华大学开源软件镜像站:清华大学开源软件镜像站 | Tsinghua Open Source Mirror,提供多种 Linux 发行版镜像及 Python、Perl 等编程语言扩展包,还有丰富文档和教程。
  • 中国科学技术大学开源镜像站:USTC Open Source Software Mirror,提供多种 Linux 发行版镜像和常用开发工具。
  • 北京交通大学自由与开源软件镜像站:首页 - 北京交通大学自由与开源软件镜像站,提供多种 Linux 发行版镜像及相关软件仓库,还有详细文档和指南。
  • 中国科学院软件研究所镜像站 (ISCAS):欢迎访问 ISCAS 开源镜像站,提供多种 Linux 发行版、编程语言和开发工具镜像。
  • 上海交通大学开源镜像站:Index of /,提供丰富的 Linux 软件资源,包括多种发行版镜像和软件仓库。
  • 网易开源镜像站:欢迎访问网易开源镜像站,提供多种 Linux 发行版镜像及相关软件仓库,还有便捷的搜索功能。

1.3 yum 具体操作

1.3.1 查看软件包

使用yum list命令可列出所有软件包,结合grep命令可筛选关注的包,例如:

# Centos
$ yum list | grep lrzsz 
Lrzsz.x86_64 0.12.20-36.el7 @base# Ubuntu
$ apt search lrzsz
# 输出省略

注意事项:

  • 软件包名称格式为:主版本号。次版本号。源程序发行号 - 软件包的发行号。主机平台.cpu 架构。
  • "x86_64" 表示 64 位系统安装包,"i686" 表示 32 位系统安装包,需与系统匹配。
  • "el7" 表示 centos7/redhat7,"el6" 表示 centos6/redhat6。
  • 最后一列的 base 表示 "软件源" 名称。
1.3.2 安装软件

通过简单命令即可安装软件,例如安装 lrzsz:

# Centos
$ sudo yum install -y lrzsz# Ubuntu
$ sudo apt install -y lrzsz

出现 "complete" 字样或无报错说明安装完成。

注意事项:

  • 安装软件需向系统目录写入内容,一般需要 sudo 或切换到 root 账户。
  • yum/apt 需逐个安装软件,同时安装多个会报错。
1.3.3 卸载软件

卸载软件命令如下:

# Centos
sudo yum remove [-y] lrzsz# Ubuntu
sudo apt remove [-y] lrzsz
1.3.4 注意事项

yum/apt 的所有操作需保证主机网络畅通,可通过ping www.baidu.com验证。

1.4 安装源

Centos 安装源路径:

$ ll /etc/yum.repos.d/
# 显示CentOS-Base.repo(标准源)和epel.repo(扩展源)等

可安装扩展源:sudo yum install -y epel-release

Ubuntu 安装源路径:

$ cat /etc/apt/sources.list # 标准源
$ ll /etc/apt/sources.list.d/ # 扩展源

二、编辑器 Vim

2.1 vi 与 vim 的区别

vi 和 vim 都是多模式编辑器,vim 是 vi 的升级版本,兼容 vi 的所有指令,还具有语法加亮、可视化操作等新特性,可在终端、x window、mac os、windows 等环境运行。

2.2 vim 的基本概念

课堂主要讲解三种模式:命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode):

  • 命令模式:控制光标移动,可进行删除、复制等操作,能进入插入模式或底行模式。
  • 插入模式:可进行文字输入,按 ESC 键回到命令模式。
  • 底行模式:可进行文件保存、退出等操作,在命令模式下按 shift+:进入。

2.3 vim 的基本操作

进入 vim:$ vim test.c,默认处于命令模式,需切换到插入模式才能输入文字。

模式切换:

  • 命令模式→插入模式:输入 a、i 或 o。
  • 插入模式→命令模式:按 ESC 键。
  • 命令模式→底行模式:按 shift+;(即输入:)。

退出与保存:在底行模式下,w保存,wq存盘并退出,q!不存盘强制退出。

2.4 vim 正常模式命令集

  • 插入相关:i(从光标处输入)、a(从光标下一位输入)、o(插入新行并从行首输入)。
  • 光标移动:h(左)、j(下)、k(上)、l(右);G(到文尾)、$(到行尾)、^(到行首)等。
  • 删除操作:x(删除光标处字符)、#x(删除光标后 #个字符)、dd(删除当前行)等。
  • 复制粘贴:yw(复制到字尾)、yy(复制当前行)、p(粘贴)。
  • 替换操作:r(替换光标处字符)、R(持续替换至 ESC)。
  • 撤销操作:u(撤销)、ctrl + r(恢复撤销)。

2.5 vim 末行模式命令集

  • 列出行号:set nu
  • 跳至某行:输入行号后回车。
  • 查找字符:/关键字(向后找)、?关键字(向前找),按 n 继续查找。
  • 保存退出:w(保存)、q(退出)、wq(保存退出)。

2.6 vim 配置

  • 系统公共配置文件:/etc/vimrc
  • 用户私有配置文件:~/.vimrc,可设置语法高亮(syntax on)、显示行号(set nu)等。
  • 可安装 TagList、WinManager 等插件增强功能。

三、编译器 gcc/g++

3.1 编译过程

gcc/g++ 编译分为四个阶段:

  1. 预处理:宏替换、去注释、头文件展开等,使用-E选项,生成.i文件。
  2. 编译:生成汇编代码,使用-S选项,生成.s文件。
  3. 汇编:生成机器码,使用-c选项,生成.o文件。
  4. 链接:生成可执行文件,无特殊选项,生成可执行程序。

3.2 动态链接与静态链接

  • 静态链接:将库代码全部加入可执行文件,文件较大,运行时无需库,但更新麻烦。
  • 动态链接:程序运行时加载库,文件较小,节省资源,更为常用。

Linux 下动态库后缀为.so,静态库为.a;Windows 下动态库为.dll,静态库为.lib

3.3 常用选项

包括-E(预处理)、-S(编译)、-c(汇编)、-o(指定输出文件)、-g(生成调试信息)等。

四、自动化构建工具 make/Makefile

4.1 基本概念

make 是命令工具,Makefile 是定义编译规则的文件,两者配合实现项目自动化构建,提高开发效率。

4.2 基本使用

例如,对于myproc.c文件,Makefile 可写为:

myproc:myproc.cgcc -o myproc myproc.c
.PHONY:clean
clean:rm -f myproc

myproc依赖myproc.c,通过gcc命令生成;clean为伪目标,用于清理文件。

4.3 make 工作流程

  1. 在当前目录找 Makefile 或 makefile。
  2. 找到第一个目标文件作为最终目标。
  3. 若目标文件不存在或依赖文件更新时间更新,则执行命令生成目标。
  4. 递归查找依赖关系,直至生成最终目标。

五、Linux 第一个程序:进度条

5.1 相关知识

  • 回车(\r):光标回到行首;换行(\n):光标下移一行。
  • 行缓冲区:输出带\n会刷新缓冲区,否则需用fflush(stdout)手动刷新。

5.2 进度条代码

  • process.c:实现进度条逻辑,包括版本 1 和版本 2 的函数。
  • process.h:声明进度条函数。
  • main.c:调用进度条函数模拟下载过程。
  • Makefile:定义编译规则。

六、版本控制器 Git

6.1 基本概念

Git 是主流版本控制器,可管理文件历史版本,方便多人协作,支持各种格式文件,尤其适合管理源代码。

6.2 安装与使用

  • 安装:yum install git
  • 基本操作(三板斧):
    1. git add:将文件加入暂存区。
    2. git commit -m "日志":提交到本地仓库。
    3. git push:同步到远程仓库。
  • 可配置免密码提交,需设置用户信息(git config --global user.name等)。

七、调试器 gdb

7.1 基本使用

  • 程序需以 debug 模式编译(加-g选项)。
  • 常用命令:
    • gdb binFile:启动调试。
    • l:显示源代码。
    • b 行号:设置断点。
    • r:运行程序。
    • n/s:单步执行(n不进函数,s进函数)。
    • p 变量:打印变量值。
    • q:退出调试。

7.2 高级技巧

  • watch:监视变量变化,值改变时暂停程序。
  • set var:修改变量值。
  • 条件断点:b 行号 if 条件,满足条件时触发。

八、结语

今日C++到这里就结束啦,如果觉得文章还不错的话,可以三连支持一下。感兴趣的宝子们欢迎持续订阅小枫,小枫在这里谢谢宝子们啦~小枫の主页还有更多生动有趣的文章,欢迎宝子们去点评鸭~C++的学习很陡,时而巨难时而巨简单,希望宝子们和小枫一起坚持下去~你们的三连就是小枫的动力,感谢支持~

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

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

相关文章

阿里云-基于通义灵码实现高效 AI 编码 | 4 | 场景学习:3分钟写一个音乐闹钟小应用

文章目录一、初版需求与代码生成二、需求迭代与代码更新三、需求细化与功能完善3.1 pygame安装3.2 放置音乐文件3.3 执行代码免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn 一、初版需求与代码生成 首先向通义灵码提出了基本需求&#xff1…

【算法笔记】欧拉降幂公式与欧拉函数

欧拉降幂公式 在数论中,欧拉降幂公式是一个强大的工具,用于简化大指数模运算。公式如下: ∀k>φ(m),有Ak≡Akmodφ(m)φ(m)(modm)成立。\forall k > \varphi(m),有 A^k \equiv A^{k \mod \varphi(m) \varphi(m…

基于STM32的交通灯设计—紧急模式、可调时间

基于STM32交通灯设计(仿真+程序+设计报告)功能介绍具体功能:1.数码管和LED模拟交通灯;2.南北绿灯9秒,东西绿灯15秒,黄灯2秒;3.紧急情况:按下按键,…

汽车软件研发智能化:AI在CI/CD中的实践

当汽车行业加速驶入“软件定义”的时代,软件已成为决定车辆竞争力的核心要素。从智能座舱的多场景交互到自动驾驶的复杂决策逻辑,汽车软件的代码量逐年递增,复杂度呈指数级攀升,传统研发流程深陷困境:代码质量管控滞后…

DeepSeek:开启智能体驱动对话式数据分析新时代

在数字化浪潮汹涌澎湃的当下,数据已然成为驱动企业发展、推动科学研究以及优化日常生活决策的关键力量。数据分析,作为从海量数据中提取有价值信息、洞察趋势、挖掘规律的核心手段,其重要性不言而喻。无论是企业精准把握市场动态、优化运营流程,还是科研人员探索未知领域、…

MCP驱动企业微信智能中枢:企业级机器人服务构建全攻略

一、背景与目标 公司规模200-300人,主要使用企业微信作为内部沟通平台。日常面临大量重复性通知工作,如会议提醒、系统维护通知、项目进度更新等。 业务痛点: 人工发送通知效率低下,平均3分钟/条重要信息传递不及时&#xff0c…

语音识别系统的技术核心:从声音到文字的智能转换

语音识别技术,也称为自动语音识别(ASR),其核心目标是将人类语音信号转换为对应的文本或指令。随着人工智能的发展,语音识别已成为智能助手、实时翻译、车载系统等领域的关键技术。其工作原理可分解为信号处理、特征提取…

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》

《用 Django 构建博客应用:从模型设计到文章管理的全流程实战》 一、引言:为什么选择 Django 构建博客系统? 在 Python 的 Web 框架中,Django 被誉为“全能型选手”。它不仅提供了强大的 ORM、模板系统、认证机制和后台管理,还鼓励开发者遵循“DRY”(Don’t Repeat You…

以 R1 为视角,手把手教你画 OSPF 最短路径树与推导路由表

视频版讲解>>>>>>>>>>>>>>>>>>>OSPF最短路径树构建与路由计算练习(一) 在 OSPF 协议的学习中,“纸上谈兵” 不如 “实战推演”—— 尤其是以特定路由器为主视角,从 LS…

axios请求缓存与重复拦截:“相同请求未完成时,不发起新请求”

import axios from "axios";// 1. 缓存已完成的请求结果(key:请求URL参数,value:数据) const requestCache new Map(); // 2. 记录正在执行的请求(避免并行重复请求) const pendingR…

k8s的SidecarSet配置和initContainers

目录引言一、k8s如何实现Sidecar这段配置正确吗?正确的配置方式为什么这样做?一个简单的例子总结二、什么是SidecarSet主要功能使用场景示例配置三、也可以通过 initContainers 的 restartPolicy 实现边车逻辑四、题外话:什么是InitContainer…

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先

PostgreSQL与SQL Server:为什么 PostgreSQL遥遥领先 在数据库领域,PostgreSQL 和 Microsoft SQL Server 长期以来一直是竞争对手。然而,近年来,PostgreSQL 以其性能、灵活性和创新功能让 SQL Server 望尘莫及。以下是对 PostgreSQL 明显优越的…

零跑汽车8月交付57066台,同比增长超88%

零跑汽车官宣,在刚刚过去的8月份,品牌交付57066辆,同比增长超88%再创历史新高,并实现了连续6个月稳坐新势力销冠。目前,零跑旗下共有T03、B10、B01、C01、C10、C11、C16等七款车型在售,得益于零跑坚持全栈自…

DNS地址推荐

DNS地址推荐(2025年最新整理) 以下DNS服务器按使用场景分类,涵盖国内、国际、安全隐私、游戏优化等需求,均为2025年仍在维护的公共DNS服务: 一、国内通用DNS(适合中国大陆用户) 国内DNS服务器对…

兴趣电商内容数据洞察未来市场走向研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序的实践

摘要:在互联网电商数据高度透明的当下,“已发生”的品类规模和品类增速数据虽易获取,但主要反映市场历史状况,难以预测未来走向。兴趣电商的内容数据因揭示消费者“新需求”和“潜在需求”,在宏观层面更早体现用户消费…

【已更新文章+代码】2025数学建模国赛A题思路代码文章高教社杯全国大学生数学建模-烟幕干扰弹的投放策略

截止周四晚上11点已更新五个问题完整建模和问题一二的代码 截止周五早上完整版已更新 可以看主页最新博文获取 完整内容请看文末最后的推广群2.1问题1的分析 问题1是典型的确定性时空几何与运动学计算问题,核心在于通过建立坐标系下的参数方程,量化烟幕云…

UE4 Rider如何直接调试PC DebugGame

背景1、用UBT 打了一个exe的包,打开时遇到崩溃,想获知这个崩溃时的中间信息,例如材质信息,于是我直接双击 打包位置下的崩溃dmp文件 (MyGame/Saved/Archived/WindowsClient/MyGame/Saved/Crashes/....dmp) …

【FastDDS】Layer DDS之Domain ( 06-Partitions )

在DDS(Data Distribution Service,数据分发服务)中,Partition(分区) 是一种在“域(Domain)”提供的物理隔离基础上,为发布者(Publisher)和订阅者(Subscriber)新增的逻辑隔离与通信筛选机制。它的核心作用是在“域”和“主题(Topic)”之外,进一步精细化控制哪些…

FastVLM:高效视觉编码助力视觉语言模型突破高分辨率效率瓶颈

想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其最大潜力。 CSDN教学平台录播地址…

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解

【HarmonyOS】一步解决弹框集成-快速弹框QuickDialog使用详解 一、集成的应用背景介绍 最近比较忙,除了工作节奏调整,有重点项目需要跟。业务时间,也因为参加了25年创新大赛,我们网友,组成了鸿蒙超新星研发团队&#x…