
1. 为什么选择CentOS作为Linux学习起点在众多Linux发行版中CentOS特别适合作为学习起点。作为Red Hat Enterprise LinuxRHEL的社区版本它继承了RHEL的稳定性和企业级特性同时完全免费。我最初选择CentOS时最看重的是它在服务器领域的广泛应用——全球超过30%的企业服务器运行在RHEL/CentOS系统上。CentOS 7.9是目前最成熟的稳定版本其生命周期将持续到2024年。与Ubuntu等发行版相比CentOS的软件包管理工具yum/dnf和系统服务管理systemd更贴近企业实际环境。记得我第一次在CentOS上配置Apache服务时就深刻体会到它的配置文件结构和权限管理对企业运维的友好性。提示虽然CentOS 8已停止维护但CentOS Stream作为滚动发行版仍可选用。不过对初学者建议从CentOS 7.9开始建立完整知识体系。2. 基础环境搭建实战2.1 虚拟机安装要点使用VMware Workstation安装CentOS时有几个关键设置常被忽略虚拟磁盘建议选择将虚拟磁盘拆分成多个文件这样迁移更方便内存分配不应低于2GB特别是要运行GUI时网络适配器选择NAT模式最易上手安装过程中分区方案需要特别注意。我推荐以下分区结构/boot 500MB (标准ext4) / 30GB (xfs文件系统) swap 内存大小的1.5倍不超过8GB /home 剩余所有空间2.2 首次登录后的5个必做配置网络配置nmcli connection modify ens192 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 nmcli connection up ens192关闭SELinux学习阶段建议sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config setenforce 0配置EPEL仓库yum install -y epel-release安装开发工具集yum groupinstall -y Development Tools设置时区timedatectl set-timezone Asia/Shanghai3. Shell脚本编程核心精要3.1 从Hello World到实战脚本初学者常犯的错误是直接复制复杂脚本。我建议从这样的结构开始#!/bin/bash # 作者你的名字 # 日期$(date %F) # 描述这个脚本的功能说明 # 严格模式 set -euo pipefail # 函数定义 usage() { echo 用法$0 [参数] exit 1 } # 主逻辑 main() { local input_file while getopts f: opt; do case $opt in f) input_file$OPTARG ;; *) usage ;; esac done [[ -z $input_file ]] usage # 业务逻辑 if [[ ! -f $input_file ]]; then echo 错误文件不存在 2 exit 2 fi # 处理文件内容 grep -v ^# $input_file | awk {print $1} } main $3.2 定时任务的高级用法crontab的常见误区是环境变量问题。这是我常用的crontab模板# 每分钟检查一次服务 * * * * * source /home/user/.bashrc /path/to/script.sh /var/log/myscript.log 21 # 每天9:30执行 30 9 * * * /usr/bin/flock -xn /tmp/mytask.lock -c /path/to/daily_task.sh关键技巧使用flock防止脚本重复执行明确指定命令全路径通过source加载环境变量错误输出重定向到日志文件4. 开发环境搭建实战4.1 Java环境配置避坑指南OpenJDK安装看似简单但版本管理常出问题。推荐这样安装# 安装OpenJDK 11 yum install -y java-11-openjdk-devel # 多版本管理 alternatives --config java # 环境变量配置写入~/.bashrc cat EOF ~/.bashrc export JAVA_HOME$(dirname $(dirname $(readlink -f $(which java)))) export PATH\$JAVA_HOME/bin:\$PATH EOF常见问题排查执行java -version无输出 → 检查JAVA_HOME设置ClassNotFound异常 → 检查CLASSPATH或jar包路径内存不足 → 调整JVM参数-Xms512m -Xmx1024m4.2 Python多版本管理方案CentOS 7自带的Python 2.7需要与现代Python共存# 安装Python 3.8 yum install -y python38 python38-devel # 创建虚拟环境 python3.8 -m venv /opt/myenv source /opt/myenv/bin/activate # 安装常用包 pip install --upgrade pip pip install numpy pandas requests我习惯用这样的目录结构管理Python项目~/projects/ ├── venvs/ # 所有虚拟环境 ├── src/ # 项目源代码 └── logs/ # 各项目日志5. 系统管理进阶技巧5.1 磁盘扩容完整流程当虚拟机磁盘空间不足时扩容操作需要多个步骤配合在VMware中扩展虚拟磁盘大小在Linux中识别新空间echo 1 /sys/class/scsi_disk/0\:0\:0\:0/device/rescan扩展物理卷pvresize /dev/sda2扩展逻辑卷lvextend -l 100%FREE /dev/centos/root调整文件系统xfs_growfs / # 对xfs文件系统 # 或 resize2fs /dev/centos/root # 对ext45.2 系统服务管理深度解析systemd是现代Linux的核心掌握这些命令至关重要# 查看失败的服务 systemctl --failed # 分析服务启动耗时 systemd-analyze blame # 自定义服务单元示例/etc/systemd/system/myapp.service [Unit] DescriptionMy Custom Application Afternetwork.target [Service] Typesimple Userappuser WorkingDirectory/opt/myapp ExecStart/usr/bin/python3 /opt/myapp/main.py Restarton-failure RestartSec5s [Install] WantedBymulti-user.target重载配置的完整流程systemctl daemon-reload systemctl enable myapp systemctl start myapp journalctl -u myapp -f # 跟踪日志6. 网络配置与防火墙6.1 防火墙规则优化firewalld的富规则(Rich Rules)比直接使用iptables更易管理# 允许特定IP访问SSH firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.100/32 service namessh accept # 开放自定义端口 firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload # 查看生效规则 firewall-cmd --list-all6.2 网络故障排查工具箱这些命令组合使用能解决90%的网络问题# 连通性测试 ping -c 4 8.8.8.8 mtr --report google.com # 端口检查 telnet example.com 80 nc -zv example.com 443 # DNS解析 dig short example.com nslookup example.com # 路由追踪 traceroute -T -p 80 example.com # 网络统计 ss -tulnp netstat -s7. 安全加固实践7.1 SSH安全配置/etc/ssh/sshd_config的关键修改项Port 2222 # 修改默认端口 PermitRootLogin no MaxAuthTries 3 LoginGraceTime 1m AllowUsers yourusername ClientAliveInterval 300 ClientAliveCountMax 2 PasswordAuthentication no # 强制使用密钥生成更安全的SSH密钥ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed255197.2 定期安全检查脚本这是我每周运行的检查脚本框架#!/bin/bash # 检查未授权的SUID文件 find / -perm -4000 -type f -exec ls -la {} \; 2/dev/null /tmp/suid_check.txt # 检查空密码账户 awk -F: ($2 ) {print $1} /etc/shadow /tmp/empty_passwd.txt # 检查最近修改的文件 find / -mtime -3 -type f -exec ls -la {} \; 2/dev/null /tmp/recent_files.txt # 发送报告 mail -s 安全检查报告 adminexample.com (echo 详见附件; uuencode /tmp/*_check.txt)