
1. Linux软件包管理器yum深度解析1.1 软件安装的三种方式对比在Linux系统中软件安装主要有三种方式每种方式都有其适用场景和优缺点源代码安装原理直接获取软件的源代码手动编译安装典型流程./configure→make→make install优点可高度定制化能针对特定系统优化缺点依赖管理复杂需手动解决依赖关系编译过程耗时对新手不友好卸载时需要手动清理文件rpm安装原理使用Red Hat Package Manager安装预编译的二进制包典型命令rpm -ivh package.rpm优点安装速度快无需编译提供基本的依赖检查缺点依赖关系仍需手动解决不同发行版的rpm包可能不兼容包版本管理不够灵活yum安装原理基于rpm的高级包管理工具自动解决依赖关系典型命令yum install package优点自动解决依赖关系提供简单的版本管理支持软件仓库管理缺点需要网络连接除非配置本地仓库对软件版本的控制不如源代码安装灵活实际工作中90%以上的场景推荐使用yum安装仅在以下情况考虑其他方式需要特定版本的软件需要自定义编译选项软件不在官方仓库中1.2 yum工作原理详解yum的工作机制可以类比手机应用商店仓库配置配置文件位置/etc/yum.repos.d/核心配置项[base] nameCentOS-$releasever - Base mirrorlisthttp://mirrorlist.centos.org/?release$releaseverarch$basearchrepoos gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7$releasever和$basearch是变量会自动替换为系统版本和架构元数据缓存yum首次运行时会下载仓库元数据到/var/cache/yum更新缓存yum makecache依赖解析使用SAT布尔可满足性算法解决依赖关系自动计算需要安装/升级/删除的软件包事务处理所有操作都在事务中完成支持事务回滚yum history undo id1.3 yum实战技巧常用命令速查# 搜索软件包 yum search keyword # 查看软件包信息 yum info package # 安装软件自动解决依赖 yum install package # 卸载软件 yum remove package # 更新所有软件 yum update # 查看已安装软件 yum list installed # 清理缓存 yum clean all配置优化技巧国内镜像源配置以阿里云为例sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sudo yum makecache并行下载加速 在/etc/yum.conf中添加fastestmirrortrue max_parallel_downloads10保留历史记录history_recordtrue history_list_viewcommands常见问题排查依赖冲突使用yum deplist package查看完整依赖关系尝试yum-complete-transaction修复未完成的事务软件包找不到检查仓库配置yum repolist all添加EPEL仓库yum install epel-release空间不足清理旧内核package-cleanup --oldkernels --count1清理缓存yum clean all2. Linux开发工具vim高级用法2.1 vim模式深度解析vim作为多模式编辑器其模式转换关系如下命令模式 -- 插入模式 ↑↓ 底行模式模式切换技巧命令模式→插入模式i当前光标前插入a当前光标后插入o下方新建行插入I行首插入A行尾插入O上方新建行插入插入模式→命令模式Esc或Ctrl[命令模式→底行模式:底行模式→命令模式Esc2.2 高效编辑技巧光标移动单词移动w下一个单词开头e当前/下一个单词结尾b上一个单词开头行内移动0行首^第一个非空白字符$行尾屏幕移动H屏幕顶部M屏幕中间L屏幕底部Ctrlf向下翻页Ctrlb向上翻页文本操作删除x删除当前字符dd删除当前行dt删除到引号处复制粘贴yy复制当前行p粘贴到光标后P粘贴到光标前撤销重做u撤销Ctrlr重做高级组合命令快速注释多行Ctrlv进入可视块模式选择行后按I输入#按Esc生效批量替换:%s/old/new/gc其中c表示确认每次替换多文件操作分屏:vsp file垂直:sp file水平切换窗口Ctrlw w移动窗口Ctrlw HJKL2.3 vim配置实战基础配置示例~/.vimrc 显示设置 set number 显示行号 set cursorline 高亮当前行 set showcmd 显示命令 编辑设置 set tabstop4 Tab显示宽度 set shiftwidth4 自动缩进宽度 set expandtab Tab转空格 set autoindent 自动缩进 搜索设置 set hlsearch 高亮搜索结果 set ignorecase 忽略大小写 set smartcase 智能大小写 快捷键映射 nnoremap leaders :wCR 快速保存 inoremap jj Esc 快速退出插入模式插件管理Vundle示例安装Vundlegit clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim配置插件set nocompatible filetype off set rtp~/.vim/bundle/Vundle.vim call vundle#begin() Plugin VundleVim/Vundle.vim Plugin scrooloose/nerdtree Plugin vim-airline/vim-airline call vundle#end() filetype plugin indent on安装插件 在vim中执行:PluginInstall实用插件推荐NERDTree文件浏览器ctrlp.vim快速文件查找vim-airline状态栏美化vim-commentary快速注释vim-fugitiveGit集成3. Linux编译器gcc/g深度使用3.1 编译过程详解gcc编译流程可分为四个阶段预处理-E展开宏和头文件删除注释处理条件编译输出.i文件编译-S语法分析语义分析优化生成汇编代码输出.s文件汇编-c将汇编代码转为机器码生成可重定位目标文件输出.o文件链接合并目标文件解析符号引用链接库文件生成可执行文件完整编译示例# 预处理 gcc -E main.c -o main.i # 编译 gcc -S main.i -o main.s # 汇编 gcc -c main.s -o main.o # 链接 gcc main.o -o program3.2 重要编译选项调试选项-g生成调试信息GDB使用-ggdb生成更详细的GDB调试信息-O0关闭优化默认-O1/-O2/-O3不同级别的优化警告选项-Wall启用所有警告-Wextra额外警告-Werror将警告视为错误-pedantic严格遵循ANSI标准目录选项-I dir添加头文件搜索路径-L dir添加库文件搜索路径-l lib链接指定库安全选项-fstack-protector栈保护-D_FORTIFY_SOURCE2缓冲区溢出检查-Wl,-z,now立即绑定符号3.3 静态库与动态库实战静态库创建与使用创建静态库gcc -c lib.c -o lib.o ar rcs libmylib.a lib.o使用静态库gcc main.c -L. -lmylib -o static_prog动态库创建与使用创建动态库gcc -fPIC -shared lib.c -o libmylib.so使用动态库gcc main.c -L. -lmylib -o dynamic_prog export LD_LIBRARY_PATH.:$LD_LIBRARY_PATH对比分析特性静态库动态库文件扩展名.a.so链接方式编译时完整嵌入运行时动态加载磁盘空间较大多副本较小共享内存占用较高较低更新维护需重新编译替换.so文件即可运行速度略快无加载开销略慢有加载开销依赖关系无需确保.so文件存在4. Makefile高级技巧4.1 Makefile核心语法基本结构target: dependencies command变量定义CC gcc CFLAGS -Wall -O2 SRCS main.c util.c OBJS $(SRCS:.c.o)自动变量$目标文件名$第一个依赖文件$^所有依赖文件$?比目标新的依赖文件模式规则%.o: %.c $(CC) $(CFLAGS) -c $ -o $4.2 多目录项目构建目录结构project/ ├── src/ │ ├── main.c │ └── util.c ├── include/ │ └── util.h └── Makefile对应MakefileCC gcc CFLAGS -Wall -I./include SRC_DIR src OBJ_DIR obj SRCS $(wildcard $(SRC_DIR)/*.c) OBJS $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS)) TARGET program $(TARGET): $(OBJS) $(CC) $(CFLAGS) $^ -o $ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c mkdir -p $(OBJ_DIR) $(CC) $(CFLAGS) -c $ -o $ clean: rm -rf $(OBJ_DIR) $(TARGET) .PHONY: clean4.3 高级技巧条件判断ifeq ($(DEBUG),1) CFLAGS -g else CFLAGS -O2 endif函数应用# 获取所有.c文件 SRCS : $(wildcard src/*.c) # 生成对应的.d依赖文件 DEPS : $(patsubst %.c,%.d,$(SRCS)) # 包含依赖文件 -include $(DEPS) %.d: %.c $(CC) -MM $ $.$$$$; \ sed s,\($*\)\.o[ :]*,\1.o $ : ,g $.$$$$ $; \ rm -f $.$$$$并行构建make -j4 # 使用4个线程并行构建自动化依赖生成DEPFLAGS -MT $ -MMD -MP -MF $(OBJ_DIR)/$*.d $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c mkdir -p $(OBJ_DIR) $(CC) $(CFLAGS) $(DEPFLAGS) -c $ -o $ -include $(OBJS:.o.d)在实际开发中我通常会采用分层级的Makefile结构将不同模块的构建规则分离最后通过顶层Makefile整合。这种结构特别适合大型项目可以有效管理构建复杂度提高编译效率。