开源软件通过提供免费基础功能来建立用户基础,然后通过企业版、技术支持、云服务等方式实现商业化盈利。
就像商场提供免费的休息区和WiFi,吸引客流后再通过店铺销售盈利
方式 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
源代码安装 | 完全自定义 | 依赖复杂,容易出错 | ⭐ |
rpm 安装 | 预编译,快速 | 需手动解决依赖关系 | ⭐⭐ |
yum 安装 | 自动解决依赖,统一管理 | 需要网络连接 | ⭐⭐⭐ |
yum 就像 Linux 的应用商店,让安装软件变得简单快捷。
核心原理:yum 内置了"软件地图",包含:
问题:yum 官方仓库在国外,下载慢且不稳定
解决方案:国内镜像服务器
客户端 (yum) → 软件仓库 (repository)
↓ ← 网络
镜像服务器 (国内加速)yum 就像是Linux系统的应用商店
为什么有人为免费系统开发软件?
答案:Linux用户主要是程序员和企业,具有更高商业价值
开源商业模式:
生态重要性:
选择操作系统时,软件生态比个人习惯更重要 因此开发者会积极建设生态来吸引用户
官方源 (base-repo):系统默认提供(应用商店下载)
扩展源 (epel-release):额外软件包(浏览器下载)
yum install -y epel-release # 安装扩展源
---
---
### yum 指令详解
#### **常用操作**
- `list`:查看软件列表
- `install`:安装软件
- `remove`:卸载软件
---
#### 常用选项
- `-y`:
---
#### 操作示例
```Shell
# 查看软件库
yum list
# 搜索软件
yum list | grep [软件名]
# 安装软件
yum install [软件名.版本号]
# 卸载软件
yum remove [软件名.版本号]
# 查看已安装
yum list installed使用rzsz实现 Linux 与 Windows 文件互传
# 安装 rz/sz(CentOS/RedHat)
yum install lrzsz
# 从 Windows 上传文件到 Linux
rz
# 从 Linux 下载文件到 Windows
sz [文件名]小贴士:rz/sz 是通过终端进行文件传输的简单工具,适合小文件传输。对于大文件或图形界面环境,可以考虑使用 SFTP 或共享文件夹等方式。
yum install -y sl # 蒸汽机车动画
yum install -y cowsay # 会说话的牛
软件的安装需要 root权限:
在Linux中,我们怎么知道需要安装那些软件呢?无他,唯手熟尔!
vim有一定学习门槛,是一款十分优雅的编辑器,会了vim,其它文本编辑器就是手到擒来

Vim 让我们的手不用离开键盘就能完成一系列文本编辑操作
gg " 跳到文件开头
G " 跳到文件末尾
nG " 跳到第n行
^ " 跳到行首
$ " 跳到行尾
nw/b " 向前/后移动n个单词(可跨行)
nh/j/k/l " 向左/下/上/右移动n个字符nyy " 复制n行
np " 粘贴n次
ndd " 删除n行
nr " 替换光标后n个字符
R " 批量替换
n~ " 改变光标后n个字符大小写
nx " 删除光标后n个字符
u " 撤销
Ctrl+r " 重做(撤销之前的撤销操作)
* " 查询光标处匹配项:vs filename " 垂直分屏打开文件
Ctrl+ww " 切换工作窗口:wq! " 强制保存退出
:set nu " 显示行号
:set nonu " 隐藏行号
:/keyword " 搜索关键词
:!gcc file.c " 编译文件
:!./a.out " 运行程序说明:底行模式下指令开头/结尾
!表述强制执行
vim -d [文件名]在 vim 底行模式下输入:%!xxd
补充:文本编辑器查看二进制文件乱码,是因为它默认将二进制序列依据ASCII码翻译成了文本信息
~/.vimrc(没有可以自行创建)
# 将以下指令粘贴到Linux系统执行,就能一键完成Vim配置
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh**注意:**尽量不要用root身份进行配置操作,保持默认配置更安全。
在了解sudo指令之前,我们一些的操作都要切换到root身份进行,非常的麻烦
普通的用户 → 保安检查 → 权限判断
白名单用户 → 直接放行
黑名单用户 → 直接拒绝普通用户无法使用sudo,是因为没有访问/etc/sudoers文件的权限,但root又不可能直接修改配置文件本身的访问权限,这样相当于完全放权了(谁都能sudo),不是给自己挖坑吗?

/etc/sudoers文件

说明:这样任何一个普通用户,想要进入白名单就必须经过管理员同意
源文件 → 预处理 → 编译 → 汇编 → 链接
↓ ↓ ↓ ↓
.i文件 .s文件 .o文件 可执行文件gcc -E hello.c -o hello.i#include内容插入
gcc -S hello.i -o hello.sgcc -c hello.s -o hello.ogcc hello.o -o hello小故事理解:你考上高中但学校禁网,学长告诉你网吧位置。当你想上网时就去网吧,其他同学也可以去同一家网吧。
特点:
小故事续集:网吧被查封后,你在学长开的二手电脑店买了电脑,从此在家就能上网,不再依赖网吧。
特点:
类型 | Linux | Windows | 特点 |
|---|---|---|---|
动态库 | .so | .dll | 1. 运行时加载,多个程序共享 |
.a|.lib|编译时嵌入,独立执行|动态链接:
你想上网,但学校不让带电脑。学长告诉你:“学校旁边有网吧”。你需要上网时就去网吧,多个同学可以共享同一个网吧。如果网吧关门了,大家都上不了网。
静态链接:
网吧关门后,你从二手市场买了台电脑放在宿舍。现在你可以随时上网,不依赖外部环境,但需要自己维护电脑。
gcc:C语言程序,链接C标准库
g++:C++程序,链接C++标准库(兼容C)
# 记忆技巧: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 # 查看可执行文件信息# 生成可调试版本:
gcc -g test.c -o test
# 检查是否包含调试信息:
readelf -S test | grep -i debug注意:gcc默认编译生成的是release版本,无法直接调试
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
就像修车:小问题自己看看,大问题才用专业工具
所以不管黑猫白猫,能抓到老鼠的就是好猫,不要觉得自己的方法习惯就是不入流的
make是命令,Makefile是配置文件,两者配合实现项目自动化构建。
目标文件: 依赖文件
[TAB]依赖方法# 构建可执行程序
mytest: test.c
gcc -o mytest test.c
# 清理生成的文件
clean:
rm -f mytest
# 伪目标,不生成实际文件
.PHONY: clean儿子: 妈妈
[TAB]说:"妈,我没钱了"儿子: 妈妈 → 依赖关系
要钱 → 依赖方法
说明:依赖方法需要建立在依赖关系的基础之上,仅有依赖关系,而没有依赖方法是没意义的
# 使用特殊符号
test: test.c
$(CC) $(CFLAGS) -o $@ $^
clean:
rm -f test
.PHONY: clean符号说明:
$@:代表目标文件
$^:代表所有依赖文件
@命令:执行但不回显具体指令内容
为什么不能连续 make?
stat [文件名] # 查看文件时间戳
# Access: 最后访问时间
# Modify: 内容修改时间
# Change: 属性修改时间