1. Linux系统安装基础指南
第一次接触Linux系统安装的新手往往会感到无从下手。作为一个从Red Hat 6.0时代就开始使用Linux的老用户,我总结了最实用的安装方法和避坑技巧。Linux安装的核心在于理解分区方案和引导加载程序配置,这两点决定了系统能否正常启动和运行。
1.1 安装介质准备
目前主流的Linux发行版如CentOS、Ubuntu等都提供ISO镜像下载。建议从官方镜像站获取,国内用户可以选择阿里云或清华大学的镜像源加速下载。以CentOS 7为例:
wget https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso下载完成后,推荐使用Rufus或Ventoy制作启动U盘。注意U盘容量至少8GB,制作前备份好数据,因为整个过程会格式化U盘。
重要提示:UEFI和Legacy BIOS模式对安装有直接影响。新型电脑通常使用UEFI,需要在BIOS中关闭Secure Boot才能顺利安装大多数Linux发行版。
1.2 磁盘分区方案
合理的分区方案能提升系统安全性和管理便利性。对于初学者,我建议以下分区方案(以50GB磁盘为例):
| 挂载点 | 大小 | 文件系统 | 说明 |
|---|---|---|---|
| /boot | 1GB | ext4 | 引导分区 |
| / | 20GB | xfs | 根分区 |
| /home | 剩余空间 | xfs | 用户数据分区 |
| swap | 内存大小的1-2倍 | swap | 交换空间 |
对于服务器环境,建议单独划分/var分区(存放日志等频繁写入的数据)以提高稳定性。使用LVM(逻辑卷管理)可以带来更大的灵活性,允许后期动态调整分区大小。
1.3 安装后基础配置
系统安装完成后,有几项必须立即进行的配置:
- 网络配置:通过nmtui命令配置静态IP或DHCP
- 软件源更新:替换为国内镜像源加速软件下载
- 防火墙设置:根据需求开放必要端口
- SELinux策略:了解并配置适合的安全策略
# CentOS更换阿里云源示例 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 makecache2. 软件包管理核心工具
Linux系统的软件管理主要依靠包管理系统,不同发行版有不同的工具。Red Hat系(如CentOS、RHEL)主要使用RPM和YUM/DNF,而Debian系(如Ubuntu)使用dpkg和APT。
2.1 RPM包管理详解
RPM(Red Hat Package Manager)是Red Hat系列发行版的底层包管理工具。它直接操作.rpm格式的软件包文件,适合离线环境下的软件安装。
常用RPM命令示例:
# 安装软件包 rpm -ivh package.rpm # 升级软件包 rpm -Uvh package.rpm # 查询已安装软件 rpm -qa | grep httpd # 查看软件包信息 rpm -qi package_name # 查看软件包文件列表 rpm -ql package_name # 卸载软件包 rpm -e package_nameRPM的一个主要缺点是依赖关系需要手动解决。例如安装A软件需要B和C库,而B又需要D库,这种嵌套依赖关系处理起来非常麻烦。
2.2 YUM/DNF高级用法
YUM(Yellowdog Updater Modified)和它的下一代替代品DNF解决了RPM的依赖问题,能够自动下载并安装所需依赖。
基础YUM命令:
# 搜索软件包 yum search keyword # 显示软件包信息 yum info package_name # 安装软件包 yum install package_name # 更新系统 yum update # 删除软件包 yum remove package_nameYUM的高级功能包括:
组安装:批量安装相关软件组
yum groupinstall "Development Tools"本地仓库创建:适用于无网络环境
createrepo /path/to/rpm_files版本锁定:防止关键软件被意外更新
yum versionlock add package_name历史查看与回滚
yum history yum history undo 3 # 撤销事务ID为3的操作
实用技巧:使用
yum install -y自动回答yes,适合脚本中使用;yum clean all清理缓存解决某些异常问题。
3. 系统服务管理实战
Linux使用systemd作为现代发行版的初始化系统和服务管理器。理解systemd对于管理系统服务至关重要。
3.1 systemd核心概念
systemd的主要组件和概念包括:
- unit文件:定义服务、挂载点、设备等的配置文件,位于/usr/lib/systemd/system/和/etc/systemd/system/
- target:类似于传统运行级别,但更灵活
- journalctl:系统日志查看工具
3.2 服务管理常用命令
# 启动服务 systemctl start httpd # 停止服务 systemctl stop httpd # 重启服务 systemctl restart httpd # 查看服务状态 systemctl status httpd # 启用开机启动 systemctl enable httpd # 禁用开机启动 systemctl disable httpd # 重新加载unit文件 systemctl daemon-reload3.3 自定义服务创建
以创建一个简单的Python Web服务为例:
- 创建服务脚本/usr/local/bin/myweb.py
#!/usr/bin/env python3 from http.server import SimpleHTTPRequestHandler, HTTPServer class MyHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(b"Hello from systemd service!") HTTPServer(("", 8000), MyHandler).serve_forever()- 创建unit文件/etc/systemd/system/myweb.service
[Unit] Description=My Python Web Service After=network.target [Service] ExecStart=/usr/local/bin/myweb.py WorkingDirectory=/tmp User=nobody Restart=always [Install] WantedBy=multi-user.target- 启用并启动服务
chmod +x /usr/local/bin/myweb.py systemctl daemon-reload systemctl enable --now myweb4. 常见问题排查与优化
4.1 依赖问题解决
当遇到依赖问题时,可以尝试以下方法:
使用
repoquery查找提供特定文件的包yum install yum-utils repoquery --whatprovides */libssl.so.10使用
yum deplist查看完整依赖关系yum deplist package_name从第三方仓库如EPEL获取额外软件包
yum install epel-release
4.2 性能优化建议
YUM/DNF调优:
- 并行下载:在/etc/dnf/dnf.conf中添加
max_parallel_downloads=10 - 快速镜像:安装
yum-plugin-fastestmirror - 保持缓存:设置
keepcache=1保留下载的rpm包
- 并行下载:在/etc/dnf/dnf.conf中添加
系统服务优化:
- 分析启动时间:
systemd-analyze blame - 禁用不必要服务:如蓝牙、打印服务等
- 调整journal日志大小:/etc/systemd/journald.conf中设置
SystemMaxUse=100M
- 分析启动时间:
安全加固:
- 定期更新:
yum update --security - 最小化安装:安装时选择"Minimal Install"
- 使用firewalld配置防火墙规则
- 定期更新:
4.3 日志分析技巧
systemd的journal日志是排查问题的宝贵资源:
# 查看指定服务的日志 journalctl -u httpd # 实时跟踪日志 journalctl -f # 按时间筛选 journalctl --since "2023-01-01" --until "2023-01-02" # 按优先级过滤 journalctl -p err # 显示内核消息 journalctl -k对于传统日志文件(如/var/log/messages),可以使用grep、awk等工具分析:
# 查找错误信息 grep -i error /var/log/messages # 统计HTTP状态码 awk '{print $9}' /var/log/httpd/access_log | sort | uniq -c5. 进阶软件管理技巧
5.1 从源码编译安装
当官方仓库没有所需软件或需要特定版本时,可以从源码编译安装。以安装最新版Nginx为例:
# 安装编译依赖 yum groupinstall "Development Tools" yum install pcre-devel zlib-devel openssl-devel # 下载源码 wget https://nginx.org/download/nginx-1.25.1.tar.gz tar zxvf nginx-1.25.1.tar.gz cd nginx-1.25.1 # 配置编译选项 ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_v2_module # 编译安装 make && make install # 创建systemd服务文件 cat > /etc/systemd/system/nginx.service <<EOF [Unit] Description=The NGINX HTTP and reverse proxy server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOF # 启用服务 systemctl enable --now nginx5.2 创建本地YUM仓库
在内网环境中,可以创建本地YUM仓库集中管理软件包:
# 安装必要工具 yum install createrepo yum-utils # 创建仓库目录 mkdir -p /var/www/html/repos/{base,epel} # 同步官方仓库(示例) reposync -g -l -d -m --repoid=base --newest-only --download-metadata --download_path=/var/www/html/repos/base reposync -g -l -d -m --repoid=epel --newest-only --download-metadata --download_path=/var/www/html/repos/epel # 创建仓库元数据 createrepo /var/www/html/repos/base createrepo /var/www/html/repos/epel # 客户端配置 cat > /etc/yum.repos.d/local.repo <<EOF [local-base] name=Local Base baseurl=http://your-server-ip/repos/base enabled=1 gpgcheck=0 [local-epel] name=Local EPEL baseurl=http://your-server-ip/repos/epel enabled=1 gpgcheck=0 EOF5.3 容器化应用管理
现代Linux系统越来越多地使用容器技术部署应用。Podman是一个无需守护进程的Docker替代品:
# 安装Podman yum install podman # 运行容器 podman run -d --name my-nginx -p 8080:80 nginx # 查看运行容器 podman ps # 生成systemd单元文件 podman generate systemd --name my-nginx > /etc/systemd/system/container-my-nginx.service # 启用容器服务 systemctl enable --now container-my-nginx对于需要持久化存储的容器,可以创建卷:
podman volume create mysql_data podman run -d --name mysql -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret mysql:5.7