当前位置: 首页 > news >正文

Linux 基本工具详解

软件开发的商业动机
  • 盈利模式:VIP服务、广告投放、生态建设
  • 开源战略:非完全免费,而是长期商业策略
  • 生态价值:成熟的生态系统吸引更多用户和开发者

开源软件通过提供免费基础功能来建立用户基础,然后通过企业版、技术支持、云服务等方式实现商业化盈利。

就像商场提供免费的休息区和WiFi,吸引客流后再通过店铺销售盈利




📦 Linux 软件安装方式

方式

优点

缺点

推荐度

源代码安装

完全自定义

依赖复杂,容易出错

rpm 安装

预编译,快速

需手动解决依赖关系

⭐⭐

yum 安装

自动解决依赖,统一管理

需要网络连接

⭐⭐⭐

yum 就像Linux的应用商店,让安装软件变得简单快捷。




🔍 yum 工作机制
yum 如何实现精确下载?

核心原理:yum 内置了"软件地图",包含:

  • 所有软件的精确下载地址
  • 软件之间的依赖关系
  • 版本信息和完整性校验


镜像加速机制

问题:yum 官方仓库在国外,下载慢且不稳定

解决方案:国内镜像服务器

  • 系统已预配置国内镜像源
  • 定期同步官方仓库
  • 提供高速稳定的下载

代码语言:javascript

AI代码解释

客户端 (yum) → 软件仓库 (repository) ↓ ← 网络 镜像服务器 (国内加速)

yum 就像是Linux系统的应用商店



开源生态的智慧

为什么有人为免费系统开发软件?

答案:Linux用户主要是程序员和企业,具有更高商业价值

开源商业模式

  • 免费基础版 + 收费企业版
  • 技术支持和服务收费
  • 云服务和培训认证

生态重要性

选择操作系统时,软件生态比个人习惯更重要 因此开发者会积极建设生态来吸引用户


软件源类型

官方源(base-repo):系统默认提供(应用商店下载)

扩展源(epel-release):额外软件包(浏览器下载)

代码语言:javascript

yum install -y epel-release # 安装扩展源

代码语言:javascript

AI代码解释

--- --- ### yum 指令详解 #### **常用操作** - `list`:查看软件列表 - `install`:安装软件 - `remove`:卸载软件 --- #### 常用选项 - `-y`: --- #### 操作示例 ```Shell # 查看软件库 yum list # 搜索软件 yum list | grep [软件名] # 安装软件 yum install [软件名.版本号] # 卸载软件 yum remove [软件名.版本号] # 查看已安装 yum list installed


实用软件示例

使用rzsz实现 Linux 与 Windows 文件互传

代码语言:javascript

AI代码解释

# 安装 rz/sz(CentOS/RedHat) yum install lrzsz # 从 Windows 上传文件到 Linux rz # 从 Linux 下载文件到 Windows sz [文件名]

小贴士:rz/sz 是通过终端进行文件传输的简单工具,适合小文件传输。对于大文件或图形界面环境,可以考虑使用 SFTP 或共享文件夹等方式。



趣味软件示例

代码语言:javascript

AI代码解释

yum install -y sl # 蒸汽机车动画

在这里插入图片描述

代码语言:javascript

AI代码解释

yum install -y cowsay # 会说话的牛

在这里插入图片描述

软件的安装需要 root权限:

  • 使用 root身份安装
  • 使用 sudo(下面会讲如何将普通用户添加进白名单)

在Linux中,我们怎么知道需要安装那些软件呢?无他,唯手熟尔!




✏️ 文本编辑器 Vim

vim有一定学习门槛,是一款十分优雅的编辑器,会了vim,其它文本编辑器就是手到擒来



多模式设计哲学

在这里插入图片描述

Vim 让我们的手不用离开键盘就能完成一系列文本编辑操作



命令模式操作
1. 光标导航

代码语言:javascript

AI代码解释

gg " 跳到文件开头 G " 跳到文件末尾 nG " 跳到第n行 ^ " 跳到行首 $ " 跳到行尾 nw/b " 向前/后移动n个单词(可跨行) nh/j/k/l " 向左/下/上/右移动n个字符

2. 文本操作

代码语言:javascript

AI代码解释

nyy " 复制n行 np " 粘贴n次 ndd " 删除n行 nr " 替换光标后n个字符 R " 批量替换 n~ " 改变光标后n个字符大小写 nx " 删除光标后n个字符 u " 撤销 Ctrl+r " 重做(撤销之前的撤销操作) * " 查询光标处匹配项

3. 多文件编辑

代码语言:javascript

AI代码解释

:vs filename " 垂直分屏打开文件 Ctrl+ww " 切换工作窗口

底行模式操作

代码语言:javascript

AI代码解释

:wq! " 强制保存退出 :set nu " 显示行号 :set nonu " 隐藏行号 :/keyword " 搜索关键词 :!gcc file.c " 编译文件 :!./a.out " 运行程序

说明:底行模式下指令开头/结尾!表述强制执行



查看二进制文件

代码语言:javascript

AI代码解释

vim -d [文件名]

在 vim 底行模式下输入:%!xxd

补充:文本编辑器查看二进制文件乱码,是因为它默认将二进制序列依据ASCII码翻译成了文本信息



Vim 配置
  • 配置文件位置:~/.vimrc(没有可以自行创建)
  • 个性化配置不会影响其他用户
  • 推荐使用现成配置方案快速搭建环境

代码语言:javascript

AI代码解释

# 将以下指令粘贴到Linux系统执行,就能一键完成Vim配置 curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

**注意:**尽量不要用root身份进行配置操作,保持默认配置更安全。




🔐 权限管理 sudo

在了解sudo指令之前,我们一些的操作都要切换到root身份进行,非常的麻烦



权限控制模型

代码语言:javascript

AI代码解释

普通的用户 → 保安检查 → 权限判断 白名单用户 → 直接放行 黑名单用户 → 直接拒绝


sudo 白名单配置方法

普通用户无法使用sudo,是因为没有访问/etc/sudoers文件的权限,但root又不可能直接修改配置文件本身的访问权限,这样相当于完全放权了(谁都能sudo),不是给自己挖坑吗?


1. 切换到 root 用户

在这里插入图片描述


2. 编辑/etc/sudoers文件

在这里插入图片描述


3. 添加白名单用户(大约在第100行左右)

在这里插入图片描述

说明:这样任何一个普通用户,想要进入白名单就必须经过管理员同意




🔧 编译器 GCC/G++
编译流程四阶段

代码语言:javascript

AI代码解释

源文件 → 预处理 → 编译 → 汇编 → 链接 ↓ ↓ ↓ ↓ .i文件 .s文件 .o文件 可执行文件

1. 预处理

代码语言:javascript

AI代码解释

gcc -E hello.c -o hello.i
  • 头文件展开#include内容插入
  • 宏替换:简单文本替换,无类型检查
  • 条件编译:平台适配、功能裁剪
  • 去注释:删除所有注释内容

2. 编译

代码语言:javascript

AI代码解释

gcc -S hello.i -o hello.s
  • C代码 → 汇编代码
  • 语法分析和优化

3. 汇编

代码语言:javascript

AI代码解释

gcc -c hello.s -o hello.o
  • 汇编代码 → 机器码
  • 生成目标文件

4. 链接

代码语言:javascript

AI代码解释

gcc hello.o -o hello
  • 组合目标文件和库文件
  • 解析外部引用


为什么需要库?
  • 避免重复造轮子
  • 提供标准功能实现
  • 保护源代码

动态链接 vs 静态链接
动态链接(共享库)

小故事理解:你考上高中但学校禁网,学长告诉你网吧位置。当你想上网时就去网吧,其他同学也可以去同一家网吧。

特点

  • 运行时加载,多个程序共享
  • 节省磁盘、内存资源
  • 库文件缺失会影响所有依赖程序
静态链接

小故事续集:网吧被查封后,你在学长开的二手电脑店买了电脑,从此在家就能上网,不再依赖网吧。

特点

  • 编译时嵌入,独立执行
  • 程序独立运行,不依赖外部库
  • 体积较大,占用更多资源

类型

Linux

Windows

特点

动态库

.so

.dll

1. 运行时加载,多个程序共享

  1. 节省磁盘、内存资源
  2. 库文件缺失会影响所有依赖程序| |静态库|.a|.lib|编译时嵌入,独立执行|

生动的库链接比喻

动态链接

你想上网,但学校不让带电脑。学长告诉你:“学校旁边有网吧”。你需要上网时就去网吧,多个同学可以共享同一个网吧。如果网吧关门了,大家都上不了网。

静态链接

网吧关门后,你从二手市场买了台电脑放在宿舍。现在你可以随时上网,不依赖外部环境,但需要自己维护电脑。



编译器选择
  • gcc:C语言程序,链接C标准库
  • g++:C++程序,链接C++标准库(兼容C)


编译选项

代码语言:javascript

AI代码解释

# 记忆技巧:ESC对应gcc选项 gcc -E test.c # 只预处理 gcc -S test.c # 编译到汇编 gcc -c test.c # 编译到目标文件 gcc test.c -o test # 生成可执行文件 gcc test.c -o test -static # 静态链接 gcc test.c -o test -g # 生成调试版本 file test # 查看可执行文件信息



🐛调试器 GDB
Debug vs Release 版本

代码语言:javascript

AI代码解释

# 生成可调试版本: gcc -g test.c -o test # 检查是否包含调试信息: readelf -S test | grep -i debug

注意:gcc默认编译生成的是release版本,无法直接调试



GDB 基本使用

代码语言:javascript

AI代码解释

gdb test # 启动调试 l # 查看代码(list) b n # 在第n行设置断点(break) b main # 在main函数设置断点 info b # 查看所有断点 d n # 删除n号断点(delete) r # 运行程序(run) s # 单步进入(step into) n # 单步跳过(step over) c # 继续运行(continue) p variable # 打印变量值(print) display variable # 持续监视变量 undisplay 1 # 取消监视 finish # 运行到当前函数返回 until n # 运行到第n行 q # 退出调试(quit)

注意:gdb会记住你上次操作,下次直接回车表示默认执行上次的指令



调试策略选择

调试不是唯一选择

  • 🖨️打印调试:简单问题用printf
  • 👀代码审查:仔细阅读代码逻辑
  • 🔧工具调试:复杂问题用 GDB

就像修车:小问题自己看看,大问题才用专业工具

所以不管黑猫白猫,能抓到老鼠的就是好猫,不要觉得自己的方法习惯就是不入流的




🛠️ 项目自动化构建 Makefile
什么是 Makefile?

make是命令,Makefile是配置文件,两者配合实现项目自动化构建。


http://www.jsqmd.com/news/789192/

相关文章:

  • 为Home Assistant AI构建持久记忆系统:PERMEAR架构详解与实战
  • ContextMenuManager:让Windows右键菜单变得清爽高效的终极解决方案
  • Docker 私有仓库 Harbor 搭建与镜像推送(系列第六篇:企业私有镜像仓库实战)
  • 探索Noto Emoji:打造跨平台表情符号统一体验的完整指南
  • Xplorer文件属性查看器:从新手到专家的完整指南
  • LinkSwift网盘直链下载助手:九大网盘一键获取真实下载地址的终极解决方案
  • 2026年AI技术大会餐饮安排:3大颠覆性变革、5类参会者精准营养画像、72小时动态餐食推演系统全解析
  • 2026年毕业生必备:论文被AI标记?三招避三大坑,高效降AI率! - 降AI实验室
  • JiYuTrainer终极解析:5步掌握极域电子教室破解与系统控制实战技巧
  • 优选驾考小程序(30276)
  • BB响实战指南:从基础设置到飞行安全的全流程解析
  • 神经网络波函数:AI破解量子多体问题维度灾难的新范式
  • 2026济南钻石回收靠谱商家推荐|专业高价,安全变现不套路 - 奢侈品回收测评
  • Win10任务管理器里那个NVIDIA Display Container LS服务到底是干嘛的?关了它会影响玩游戏吗?
  • 别再死记硬背了!用这个“水管模型”5分钟搞懂三极管电流放大原理
  • K8s 集群快速搭建(系列第八篇:单机/多节点集群实战)
  • 面试拷打:Java 泛型 T / E / K / V / ?——只会用不会讲,答完面试官直接拒绝
  • 元学习在药物虚拟筛选中的应用:MetaScreener项目深度解析
  • Switchyard:AI应用统一运行时层,简化多模型API集成与Web会话管理
  • YOLOv11自然生态鸟类目标分割数据集-3858张-flying-bird-1
  • 构建可穿戴设备ECG AI分析平台:从异构数据到实时推理的工程实践
  • 告别玄学调参:手把手教你为TensorRT INT8量化编写Python校准器(附完整代码)
  • 纯Bash脚本构建轻量级AI助手:架构解析与实战部署
  • 基于MCP协议实现AI安全运维:easypanel-mcp部署与实战指南
  • Adobe-GenP 3.0终极指南:免费解锁Adobe全系列创意软件
  • QMC音频格式终极转换指南:如何快速免费解锁QQ音乐加密文件
  • 5分钟快速掌握Jable视频下载:终极Chrome插件完整教程
  • 极化码ORBGRAND译码算法与FPGA实现研究【附代码】
  • AI助手如何通过MCP协议调用Google Trends进行市场趋势分析
  • 三星 Galaxy Watch 或能预测昏厥发作,但误报问题待解,仍需更多实际测试