Linux 安装与软件包管理

1. 硬盘分区布局

1.1 标准目录结构

1
2
3
4
5
/home     # 普通用户文件存储目录
/var # 存放日志文件、邮件队列等可变数据
/usr # 存放程序、库文件、文档等(通常占用空间最大)
/boot # 引导分区,通常100MB左右足够
/swap # 交换分区(建议大小为物理内存的1-2倍)

2. 引导加载程序(GRUB)

2.1 传统GRUB (GRUB Legacy)

1
2
grub-install /dev/sda   # 安装GRUB到指定设备
grub-install -v # 显示详细安装信息

配置文件关键参数(/boot/grub/menu.lst):

1
2
3
4
5
6
7
8
timeout      # 等待用户选择的时间(秒)
default # 默认启动项序号
title # 启动项标题
root # 指定根分区
kernel # 指定内核文件
makeactive # 激活分区
chainloader # 链式加载其他引导程序
hiddenmenu # 是否隐藏菜单

2.2 GRUB2 (现代Linux默认使用)

1
update-grub2   # 更新GRUB2配置

配置文件(/etc/default/grub):

1
2
3
4
5
6
GRUB_DEFAULT                  # 默认启动项
GRUB_HIDDEN_TIMEOUT # 隐藏菜单超时
GRUB_HIDDEN_TIMEOUT_QUIET # 是否静默隐藏
GRUB_TIMEOUT # 菜单显示时间
GRUB_CMDLINE_LINUX_DEFAULT # 默认内核参数
GRUB_CMDLINE_LINUX # 附加内核参数

3. 共享库管理

3.1 基本概念

  • 共享库(Shared Library): 通过动态链接方式被多个程序共同使用的库文件
  • 命名规则: lib*.so* (如 libc.so.6)

3.2 常用命令

1
2
3
ldd /bin/ls      # 查看二进制文件依赖的共享库
ldconfig # 重建共享库缓存
ldconfig -p # 打印当前缓存内容

3.3 共享库搜索顺序

  1. 可执行文件中的DT_RPATH或DT_RUNPATH段
  2. 环境变量LD_LIBRARY_PATH指定的路径
  3. /etc/ld.so.cache缓存中的路径(除非使用-z nodeflib选项)
  4. 默认路径/lib/usr/lib(除非使用-z nodeflib选项)

3.4 添加自定义库路径

1
2
3
4
5
6
# 临时添加(当前会话有效)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

# 永久添加(需修改配置文件)
echo "/path/to/library" >> /etc/ld.so.conf
ldconfig

4. Debian系包管理(Debian/Ubuntu等)

4.1 包命名格式

1
2
3
4
5
6
tree_1.5.3-1_i386.deb
├── 包名(tree)
├── 版本号(1.5.3)
├── 发布号(1)
├── 架构(i386)
└── 扩展名(.deb)

4.2 dpkg命令(底层工具)

1
2
3
4
5
6
7
8
9
dpkg -i package.deb       # 安装包
dpkg -r package # 移除包(保留配置)
dpkg -P package # 完全清除包(包括配置)
dpkg -l # 列出已安装包
dpkg -L package # 列出包安装的文件
dpkg -s package # 显示包状态信息
dpkg -S /path/to/file # 查找文件属于哪个包
dpkg --configure package # 配置已解压的包
dpkg --unpack package.deb # 仅解压不配置

4.3 apt-get命令(高级工具)

1
2
3
4
5
6
7
8
apt-get update            # 更新包数据库
apt-get upgrade # 升级所有可升级包
apt-get dist-upgrade # 智能升级(处理依赖变化)
apt-get install package # 安装包
apt-get remove package # 移除包
apt-get clean # 清理下载的包文件
apt-get -d install package # 仅下载不安装
apt-get -s install package # 模拟安装(不实际执行)

4.4 软件源配置(/etc/apt/sources.list)

1
2
3
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
↑ ↑ ↑ ↑
类型 镜像地址 发行版 组件
  • 类型: deb(二进制包)或deb-src(源代码包)
  • 组件:
    • main: 官方支持的免费软件
    • contrib: 非自由软件但有自由依赖
    • non-free: 有分发限制的软件

4.5 apt-cache命令(查询工具)

1
2
3
apt-cache search keyword    # 搜索包
apt-cache show package # 显示包详细信息
apt-cache depends package # 显示包依赖

4.6 aptitude命令(交互式工具)

1
2
3
4
5
6
aptitude update          # 更新包列表
aptitude install package # 安装包
aptitude remove package # 移除包
aptitude purge package # 完全清除包
aptitude upgrade # 升级包
aptitude dist-upgrade # 智能升级

5. RedHat系包管理(RHEL/CentOS/Fedora)

5.1 rpm命令(底层工具)

1
2
3
4
5
6
7
8
9
10
11
12
rpm -ivh package.rpm     # 安装包(-v:详细,-h:进度条)
rpm -Uvh package.rpm # 升级包
rpm -Fvh *.rpm # 仅升级已安装的包
rpm -e package # 卸载包
rpm -qa # 查询所有已安装包
rpm -qf /path/to/file # 查询文件属于哪个包
rpm -qi package # 查询包信息
rpm -ql package # 列出包安装的文件
rpm -qc package # 列出包配置文件
rpm -qd package # 列出包文档文件
rpm --nodeps # 忽略依赖关系(不推荐)
rpm --test # 测试模式(不实际执行)

5.2 rpm文件提取

1
2
rpm2cpio package.rpm | cpio -idv  # 提取rpm包内容
rpm2cpio package.rpm | cpio -t # 列出rpm包内容

5.3 yum命令(高级工具)

1
2
3
4
5
6
7
8
9
10
yum install package      # 安装包
yum remove package # 移除包
yum update # 更新所有包
yum update package # 更新指定包
yum check-update # 检查可用更新
yum info package # 显示包信息
yum list # 列出包
yum search keyword # 搜索包
yum groupinstall "Development Tools" # 安装软件组
yum repolist # 列出已配置的仓库

5.4 下载rpm包

1
yumdownloader package    # 下载rpm包不安装

5.5 zypper命令(SUSE系统)

1
2
3
zypper install package   # 安装包
zypper remove package # 移除包
zypper update # 更新系统

6. 软件包管理对比

功能 Debian系(apt) RedHat系(yum) SUSE系(zypper)
安装包 apt-get install yum install zypper install
移除包 apt-get remove yum remove zypper remove
更新系统 apt-get upgrade yum update zypper update
搜索包 apt-cache search yum search zypper search
显示包信息 apt-cache show yum info zypper info
清理缓存 apt-get clean yum clean zypper clean