2003年我第一次接触Red Hat 9.0时,那个蓝色安装界面让我意识到这将改变我的技术生涯。Linux作为开源操作系统的代表,其核心价值在于提供了完全可控的计算环境。与商业系统不同,Linux允许用户从内核层到应用层进行全方位定制,这种自由度是其他系统难以企及的。
现代Linux发行版主要分为两大阵营:基于RPM包的Red Hat系(包括CentOS、Fedora)和基于DEB包的Debian系(包括Ubuntu、Mint)。我在生产环境中更倾向于使用CentOS,因为其长达10年的生命周期和出色的稳定性,特别适合企业级应用;而Ubuntu则因其友好的桌面环境和丰富的软件库,成为开发者的首选。
提示:选择发行版时需要考虑硬件兼容性,老旧设备建议使用轻量级发行版如Lubuntu,而新硬件则推荐最新内核版本的系统以获得最佳驱动支持。
在最近的Dell R740服务器部署中,我采用了以下分区方案:
使用fdisk进行分区时,记得用partprobe命令让内核重新读取分区表。文件系统选择上,XFS在处理大文件时性能显著优于EXT4,这也是我近年来首选XFS的原因。
配置静态IP时,除了修改/etc/sysconfig/network-scripts/ifcfg-eth0文件外,还需要注意:
bash复制# 禁用NetworkManager服务(服务器环境推荐)
systemctl disable NetworkManager
systemctl stop NetworkManager
# 启用传统network服务
systemctl enable network
对于多网卡绑定,我常用mode=6(balance-alb)模式,配置示例:
bash复制DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BONDING_OPTS="mode=6 miimon=100"
我的.bashrc中这些配置让效率提升300%:
bash复制# 历史命令加强
export HISTTIMEFORMAT="%F %T "
export HISTSIZE=10000
export HISTFILESIZE=20000
shopt -s histappend
# 智能补全
bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'
# 快速目录跳转
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
处理Apache日志时,这个awk命令组合帮我节省数小时:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10
解析nginx日志时间戳的sed技巧:
bash复制sed -E 's/([0-9]{2})\/([a-zA-Z]{3})\/([0-9]{4})/\2 \1 \3/g' error.log
排查高负载问题时,我的标准流程:
top查看整体情况(按1显示所有CPU核心)iotop -oPa定位磁盘IO问题pidstat -d -p PID 1 3监控特定进程IOstrace -p PID -T -f -o debug.log跟踪系统调用对于僵尸进程,正确的清理方式是先终止其父进程:
bash复制ps -eo ppid,stat | grep Z | awk '{print $1}' | xargs kill -9
生产环境中使用cron的注意事项:
我常用的错误排查命令:
bash复制# 查看cron执行记录
grep CRON /var/log/syslog
# 测试环境变量
env -i /bin/bash --noprofile --norc
/etc/ssh/sshd_config关键配置:
bash复制Port 58222 # 非标准端口
Protocol 2
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 1m
AllowUsers deploy monitor
ClientAliveInterval 300
ClientAliveCountMax 0
配合fail2ban防御暴力破解:
bash复制[sshd]
enabled = true
port = 58222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
我的iptables基础规则模板:
bash复制# 清空现有规则
iptables -F
iptables -X
# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 开放SSH端口
iptables -A INPUT -p tcp --dport 58222 -j ACCEPT
# 保存规则(CentOS)
service iptables save
/etc/sysctl.conf关键配置:
bash复制# 避免TCP TIME_WAIT状态堆积
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
# 增大文件描述符限制
fs.file-max = 655350
# 内存分配策略
vm.swappiness = 10
vm.overcommit_memory = 1
# 网络性能
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
应用配置:sysctl -p
针对不同存储设备的推荐调度器:
永久修改方法(以CentOS为例):
bash复制grubby --update-kernel=ALL --args="elevator=deadline"
reboot
我的四步诊断法:
journalctl --since "2023-08-01 00:00:00" --until "2023-08-02 00:00:00"journalctl -u nginx -fjournalctl -p err -bgrep -i "error" /var/log/messages当遇到网络连接问题时,这个检查清单能快速定位问题:
ethtool eth0ip addr showip route showdig +short example.comnc -zv 192.168.1.1 22iptables -L -n -v安全运行Docker的必须配置:
bash复制# 禁用默认的iptables规则
echo '{"iptables": false}' > /etc/docker/daemon.json
# 限制容器资源
docker run -it --cpus 1.5 --memory 2g --memory-swap 2g alpine
# 只读文件系统
docker run -it --read-only alpine
我的常用playbook片段:
yaml复制- name: 安全加固
hosts: webservers
become: yes
tasks:
- name: 更新系统
yum:
name: '*'
state: latest
update_cache: yes
- name: 配置SSH
template:
src: templates/sshd_config.j2
dest: /etc/ssh/sshd_config
notify: restart sshd
handlers:
- name: restart sshd
service:
name: sshd
state: restarted
node_exporter关键指标解读:
我的服务器健康检查看板包含:
掌握Linux的进阶路线:
我每周会抽时间研究内核邮件列表(lkml.org)的最新动态,这帮助我提前了解即将到来的特性变化。对于想深入内核开发的同学,建议从简单的字符设备驱动开始实践,逐步挑战更复杂的子系统。