Linux服务篇
Linux服务篇
导读:Linux之所以统治服务器世界,靠的就是它丰富而强大的服务生态。从定时任务到远程登录,从Web服务到邮件系统,本章将带你逐一认识这些"幕后英雄"。每个服务都会讲清原理、配置和RHEL/Debian双系统的安装方法。
1 crontab——定时任务调度
生活类比
crontab就像你的日程表闹钟:每天早上7点起床、每周一交作业、每月1号交房租……Linux用crontab来自动执行重复性任务,比如每天凌晨备份数据、每小时检查磁盘空间。
时间格式
* * * * * * 命令
│ │ │ │ │ │
│ │ │ │ │ └── 星期几(0-7,0和7都是周日)
│ │ │ │ └───── 月份(1-12)
│ │ │ └──────── 日期(1-31)
│ │ └─────────── 小时(0-23)
│ └────────────── 分钟(0-59)
└───────────────── 秒(0-59){可以省略}
常用时间表达式
| 表达式 | 含义 |
|---|---|
* * * * * | 每分钟执行一次 |
0 * * * * | 每小时整点执行 |
0 2 * * * | 每天凌晨2点执行 |
0 2 * * 0 | 每周日凌晨2点执行 |
0 0 1 * * | 每月1号0点执行 |
*/5 * * * * | 每5分钟执行一次 |
0 8-18 * * 1-5 | 工作日8点到18点每小时执行 |
0 0 1 1 * | 每年1月1日0点执行 |
互动提问:如果要"每30分钟执行一次",应该写
*/30 * * * *还是0,30 * * * *?答案:都可以。
*/30等价于0,30(在0-59范围内,从0开始每隔30)。
基本操作
crontab -e # 编辑当前用户的定时任务
crontab -l # 查看当前用户的定时任务
crontab -r # 删除当前用户的所有定时任务
crontab -u username -l # 查看指定用户的定时任务(需root)
实例
# 每天凌晨3点备份/etc目录
0 3 * * * tar czf /backup/etc-$(date +\%Y\%m\%d).tar.gz /etc
# 每5分钟记录一次系统负载
*/5 * * * * uptime >> /var/log/load.log
# 每周一早上8点发送磁盘使用报告
0 8 * * 1 df -h | mail -s "Weekly Disk Report" admin@example.com
# 每天下午6点清理/tmp中超过7天的文件
0 18 * * * find /tmp -type f -mtime +7 -delete
注意:crontab中的
%号需要转义为\%,因为%在crontab中有特殊含义(换行符)。
/etc/crontab——系统级定时任务
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 分 时 日 月 周 用户 命令
0 2 * * * root /usr/local/bin/backup.sh
*/10 * * * * www /usr/local/bin/check_web.sh
与用户级crontab的区别:多了一列"用户名",指定以谁的身份执行。
相关目录
| 路径 | 说明 |
|---|---|
/etc/crontab | 系统级crontab主文件 |
/etc/cron.d/ | 放置第三方软件的定时任务文件 |
/etc/cron.daily/ | 每天执行的脚本(由crond调用) |
/etc/cron.hourly/ | 每小时执行的脚本 |
/etc/cron.weekly/ | 每周执行的脚本 |
/etc/cron.monthly/ | 每月执行的脚本 |
/var/spool/cron/ | 用户级crontab文件存储位置 |
2 SSH——安全远程登录
生活类比
SSH就像一条加密的秘密通道。早期的Telnet是"明信片"——谁都能看到你写的内容;SSH是"密封信"——只有收件人能打开看。
安装
# RHEL系
yum install -y openssh-server openssh-clients
systemctl enable --now sshd
# Debian系
apt install -y openssh-server openssh-client
systemctl enable --now ssh
连接与基本使用
ssh user@192.168.1.100 # 以user身份登录
ssh -p 2222 user@192.168.1.100 # 指定端口
ssh -i ~/.ssh/my_key user@host # 指定密钥文件
ssh -L 8080:localhost:80 user@host # 本地端口转发
ssh -R 9090:localhost:22 user@host # 远程端口转发
sshd_config关键配置
配置文件路径:/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
# 基本设置
Port 22 # 监听端口(建议改为非标准端口如2222)
ListenAddress 0.0.0.0 # 监听地址
Protocol 2 # 仅使用SSHv2
# 认证设置
PermitRootLogin no # 禁止root直接登录(安全加固)
PermitRootLogin prohibit-password # 或:root只允许密钥登录
PasswordAuthentication yes # 是否允许密码认证
PubkeyAuthentication yes # 是否允许密钥认证
MaxAuthTries 3 # 最大认证尝试次数
LoginGraceTime 60 # 登录超时时间(秒)
# 安全设置
AllowUsers alice bob admin # 只允许指定用户登录
AllowGroups sshusers # 只允许指定组的用户登录
ClientAliveInterval 300 # 每300秒发心跳
ClientAliveCountMax 2 # 2次无响应则断开
# 修改后重启sshd
systemctl restart sshd # RHEL系
systemctl restart ssh # Debian系
密钥认证——告别密码
# 第1步:在客户端生成密钥对
ssh-keygen -t rsa -b 4096 -C "my laptop key"
# 或使用更安全的ed25519算法
ssh-keygen -t ed25519 -C "my laptop key"
# 生成两个文件:
# ~/.ssh/id_rsa ← 私钥(绝对不能泄露!)
# ~/.ssh/id_rsa.pub ← 公钥(放到服务器上)
# 第2步:把公钥复制到服务器
ssh-copy-id user@192.168.1.100
# 这条命令会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 文件
# 第3步:测试免密登录
ssh user@192.168.1.100
# 如果配置正确,将不再要求输入密码
互动提问:为什么建议把SSH端口从22改为其他端口?能防止什么?
答案:不能防止有针对性的攻击,但能大幅减少自动化扫描和暴力破解的日志。互联网上大量机器人在扫描22端口,换个端口能减少99%的骚扰。
SSH安全加固清单
- 修改默认端口为高位端口(如
Port 52222) - 禁止root直接登录(
PermitRootLogin no) - 使用密钥认证,禁用密码认证(
PasswordAuthentication no) - 限制允许登录的用户(
AllowUsers) - 设置登录超时(
LoginGraceTime) - 配合fail2ban防暴力破解
- 使用防火墙限制SSH访问来源IP
scp / rsync——远程文件传输
# scp:简单文件传输
scp file.txt user@host:/tmp/ # 上传文件
scp user@host:/tmp/file.txt ./ # 下载文件
scp -r /local/dir user@host:/remote/dir # 递归传输目录
scp -P 2222 file.txt user@host:/tmp/ # 指定端口
# rsync:智能同步(只传差异部分,强烈推荐)
rsync -avz /local/dir/ user@host:/remote/dir/ # 压缩+显示进度
rsync -avz --delete src/ dest/ # 同步删除(镜像同步)
rsync -avz --exclude="*.log" src/ dest/ # 排除日志文件
rsync -avz -e "ssh -p 2222" src/ user@host:dest/ # 指定SSH端口
rsync --progress -avz src/ dest/ # 显示传输进度
rsync参数速查:
| 参数 | 含义 |
|---|---|
-a | 归档模式(保留权限、时间、软链接等) |
-v | 显示详细信息 |
-z | 传输时压缩 |
--delete | 删除目标中多余的源端文件 |
--exclude | 排除匹配的文件 |
--progress | 显示进度条 |
-e | 指定远程shell命令 |
3 rsyslog——系统日志管理
生活类比
rsyslog就是服务器的"监控摄像头+日记本"。系统发生的每一件事(谁登录了、什么服务报错了、内核警告了)都会被记录下来。出了问题翻日志,就像回看监控录像。
安装
# RHEL系
yum install -y rsyslog
systemctl enable --now rsyslog
# Debian系
apt install -y rsyslog
systemctl enable --now rsyslog
日志级别(优先级从低到高)
| 级别 | 数字 | 含义 | 说明 |
|---|---|---|---|
| debug | 7 | 调试 | 开发调试信息 |
| info | 6 | 信息 | 一般性信息 |
| notice | 5 | 注意 | 值得注意但不报错 |
| warn | 4 | 警告 | 潜在问题 |
| err | 3 | 错误 | 功能出错 |
| crit | 2 | 严重 | 严重问题 |
| alert | 1 | 告警 | 需要立即处理 |
| emerg | 0 | 紧急 | 系统不可用 |
互动提问:如果配置了
*.warn记录日志,info级别的消息会被记录吗?答案:不会。
*.warn表示只记录warn及以上级别(warn、err、crit、alert、emerg),info低于warn,所以不会被记录。
/etc/rsyslog.conf 关键配置
vi /etc/rsyslog.conf
# 格式:设施.级别 目标文件
# 设施(facility):消息来源 级别(severity):严重程度
# 系统日志
auth,authpriv.* /var/log/secure # 认证相关(谁登录了)
*.info;authpriv.none /var/log/messages # 一般信息(排除认证)
*.emerg :omusrmsg:* # 紧急消息广播给所有用户
# 服务日志
mail.* /var/log/maillog # 邮件日志
cron.* /var/log/cron # 定时任务日志
kern.* /var/log/kern.log # 内核日志
常用日志文件
| 文件路径 | 记录内容 |
|---|---|
/var/log/messages | 系统综合日志 |
/var/log/secure (RHEL) / /var/log/auth.log (Debian) | 认证与安全日志 |
/var/log/cron | 定时任务日志 |
/var/log/maillog | 邮件服务日志 |
/var/log/boot.log | 启动日志 |
/var/log/dmesg | 内核启动硬件检测日志 |
/var/log/yum.log / /var/log/apt/ | 软件安装日志 |
查看日志的技巧
tail -f /var/log/messages # 实时跟踪日志(最常用!)
tail -100 /var/log/secure # 查看最后100行
grep "Failed" /var/log/secure # 查找登录失败的记录
journalctl -u sshd --since today # 查看今天sshd服务的日志
journalctl -f # 实时跟踪所有日志
journalctl --since "2024-01-01" --until "2024-01-02" # 按日期范围
logrotate——日志轮转
日志文件会越来越大,logrotate 负责自动切割、压缩和清理旧日志。
vi /etc/logrotate.d/messages # 自定义轮转规则
/var/log/messages {
weekly # 每周轮转一次
rotate 4 # 保留4份历史
compress # 压缩旧日志(.gz)
delaycompress # 延迟一次压缩(方便查看上一份)
missingok # 文件不存在不报错
notifempty # 空文件不轮转
create 0640 root adm # 新文件权限和属主
postrotate # 轮转后执行
/bin/kill -HUP $(cat /var/run/syslogd.pid 2>/dev/null) 2>/dev/null || true
endscript
}
# 手动执行轮转(测试用)
logrotate -f /etc/logrotate.conf
logrotate -d /etc/logrotate.d/messages # -d 只模拟不执行
4 NFS——网络文件系统
生活类比
NFS就像把邻居家的硬盘"借"过来用——通过网络把远程服务器的目录"挂载"到本地,操作远程文件就像操作本地文件一样方便。
安装
# RHEL系
yum install -y nfs-utils
systemctl enable --now nfs-server
# Debian系
apt install -y nfs-kernel-server # 服务端
apt install -y nfs-common # 客户端
systemctl enable --now nfs-kernel-server
服务端配置
# 编辑exports文件
vi /etc/exports
# 格式:共享目录 允许访问的客户端(选项)
/data/share 192.168.1.0/24(rw,sync,no_root_squash)
/home/public *(ro,sync,all_squash)
/backup 192.168.1.100(rw,sync) 192.168.1.101(rw,sync)
常用选项:
| 选项 | 含义 |
|---|---|
rw / ro | 读写 / 只读 |
sync | 同步写入磁盘(安全但稍慢) |
async | 异步写入(快但不安全) |
no_root_squash | 客户端root用户保持root权限 |
root_squash | 客户端root映射为nfsnobody(默认,更安全) |
all_squash | 所有用户都映射为匿名用户 |
# 使exports生效
exportfs -rv # 重新导出所有共享
exportfs -v # 查看当前导出
# RHEL系需开放防火墙
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
客户端挂载
# 查看服务端共享了什么
showmount -e 192.168.1.100
# 手动挂载
mount -t nfs 192.168.1.100:/data/share /mnt/nfs
# 开机自动挂载(/etc/fstab)
echo "192.168.1.100:/data/share /mnt/nfs nfs defaults 0 0" >> /etc/fstab
互动提问:NFS客户端挂载后,发现普通用户无法写入,但root可以。可能是什么原因?
答案:很可能是
root_squash(默认启用)导致。客户端的root被映射为nobody,但普通用户的UID/GID如果与服务端不一致,也会导致权限问题。需要确保两端用户的UID/GID一致。
5 DHCP——动态IP地址分配
生活类比
DHCP就像酒店的"自动分房系统"——你一进大厅(连上网络),前台(DHCP服务器)自动给你分配一个房间号(IP地址),退房(断开连接)后房间号回收给别人用。
安装
# RHEL系
yum install -y dhcp-server
systemctl enable --now dhcpd
# Debian系
apt install -y isc-dhcp-server
systemctl enable --now isc-dhcp-server
dhcpd.conf 配置
# RHEL系
vi /etc/dhcp/dhcpd.conf
# Debian系
vi /etc/dhcp/dhcpd.conf
# 全局设置
default-lease-time 600; # 默认租约时间(秒)
max-lease-time 7200; # 最大租约时间
option domain-name-servers 114.114.114.114, 8.8.8.8;
option domain-name "example.local";
# 定义子网和地址池
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200; # 地址池范围
option routers 192.168.1.1; # 默认网关
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
}
# 地址保留(给特定MAC固定分配IP)
host server1 {
hardware ethernet 00:0c:29:ab:cd:ef;
fixed-address 192.168.1.10;
}
host printer {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.20;
}
# 重启服务
systemctl restart dhcpd # RHEL系
systemctl restart isc-dhcp-server # Debian系
# 查看租约信息
cat /var/lib/dhcpd/dhcpd.leases # RHEL系
cat /var/lib/dhcp/dhcpd.leases # Debian系
互动提问:DHCP地址保留和普通静态IP有什么区别?
答案:地址保留是在服务端固定分配,客户端仍然通过DHCP获取;静态IP是客户端自己配置,不经过DHCP服务器。地址保留更便于集中管理。
6 Apache——Web服务器
生活类比
Apache就像一个24小时营业的图书馆——浏览器(读者)来请求一本书(网页),Apache找到对应的书(HTML文件)交给读者。如果有多本书(多个网站),Apache通过"不同的门"(虚拟主机)引导读者去正确的书架。
安装
# RHEL系(服务名叫httpd)
yum install -y httpd mod_ssl
systemctl enable --now httpd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# Debian系(服务名叫apache2)
apt install -y apache2
systemctl enable --now apache2
关键配置文件
| 系统 | 主配置文件 | 站点配置 | 模块目录 |
|---|---|---|---|
| RHEL系 | /etc/httpd/conf/httpd.conf | /etc/httpd/conf.d/*.conf | /etc/httpd/conf.modules.d/ |
| Debian系 | /etc/apache2/apache2.conf | /etc/apache2/sites-available/ | /etc/apache2/mods-available/ |
httpd.conf 关键配置
ServerRoot "/etc/httpd" # 配置根目录
Listen 80 # 监听端口
ServerAdmin admin@example.com # 管理员邮箱
ServerName www.example.com:80 # 服务器名
DocumentRoot "/var/www/html" # 网页根目录
<Directory "/var/www/html">
Options Indexes FollowSymLinks # 允许目录浏览和符号链接
AllowOverride All # 允许.htaccess覆盖
Require all granted # 允许所有访问
</Directory>
DirectoryIndex index.html index.php # 默认首页
ErrorLog "logs/error_log" # 错误日志
CustomLog "logs/access_log" combined # 访问日志
虚拟主机——一台服务器跑多个网站
# 基于域名的虚拟主机
<VirtualHost *:80>
ServerName www.site1.com
ServerAlias site1.com
DocumentRoot /var/www/site1
ErrorLog logs/site1-error.log
CustomLog logs/site1-access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName www.site2.com
DocumentRoot /var/www/site2
ErrorLog logs/site2-error.log
CustomLog logs/site2-access.log combined
</VirtualHost>
Debian系启用虚拟主机的额外步骤:
# 将配置放入 sites-available
cp site1.conf /etc/apache2/sites-available/
# 启用站点(创建软链接到 sites-enabled)
a2ensite site1.conf
# 禁用站点
a2dissite site1.conf
# 重启生效
systemctl reload apache2
SSL/HTTPS配置
# RHEL系
# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/pki/tls/private/server.key \
-out /etc/pki/tls/certs/server.crt
# Debian系
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/server.key \
-out /etc/ssl/certs/server.crt
# 启用SSL模块(Debian系需要)
a2enmod ssl
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt # RHEL
SSLCertificateKeyFile /etc/pki/tls/private/server.key # RHEL
# Debian系改为对应路径
</VirtualHost>
# 强制HTTP跳转HTTPS
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
互动提问:
Listen 80和<VirtualHost *:80>有什么区别?答案:
Listen 80告诉Apache监听80端口(全局设置);<VirtualHost *:80>定义了在80端口上如何根据域名分发请求到不同的网站(虚拟主机设置)。两者缺一不可。
7 DNS服务——BIND
生活类比
BIND就是把你自己变成"电话簿管理员"——别人查 www.yourcompany.com 的IP地址时,由你的DNS服务器来回答。
安装
# RHEL系
yum install -y bind bind-utils
systemctl enable --now named
# Debian系
apt install -y bind9 bind9utils dnsutils
systemctl enable --now named
named.conf 主配置
vi /etc/named.conf # RHEL系
vi /etc/bind/named.conf # Debian系(通过 include 引入)
options {
listen-on port 53 { any; }; # 监听端口和地址
directory "/var/named"; # 区域文件目录
allow-query { any; }; # 允许查询的客户端
recursion yes; # 允许递归查询
};
// 正向解析区域
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { none; };
};
// 反向解析区域
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.rev";
allow-update { none; };
};
正向解析区域文件
vi /var/named/example.com.zone
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 ; 序列号(修改后需递增)
3600 ; 刷新时间(辅助DNS多久来同步)
900 ; 重试时间
604800 ; 过期时间
86400 ; 最小TTL
)
; NS记录——指定域名服务器
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
; A记录——域名到IPv4的映射
ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
@ IN A 192.168.1.100
www IN A 192.168.1.100
mail IN A 192.168.1.101
ftp IN A 192.168.1.102
; MX记录——邮件服务器
@ IN MX 10 mail.example.com.
; CNAME记录——别名
blog IN CNAME www.example.com.
反向解析区域文件
vi /var/named/192.168.1.rev
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024010101 3600 900 604800 86400
)
@ IN NS ns1.example.com.
10 IN PTR ns1.example.com.
100 IN PTR www.example.com.
101 IN PTR mail.example.com.
# 检查配置语法
named-checkconf # 检查主配置
named-checkzone example.com /var/named/example.com.zone # 检查区域文件
# 重启服务
systemctl restart named
# 测试解析
dig @192.168.1.10 www.example.com
nslookup www.example.com 192.168.1.10
互动提问:为什么修改区域文件后必须递增序列号?
答案:辅助DNS服务器通过比较序列号来判断区域数据是否更新。如果序列号没变,辅助DNS会认为数据没更新,不会同步新数据。
8 NTP时间同步——chrony
生活类比
NTP就像全班同学对表——如果每个人的表差几分钟,协作就会乱套。NTP确保所有服务器的时间精确一致。
安装
# RHEL系(CentOS 7+默认使用chrony)
yum install -y chrony
systemctl enable --now chronyd
# Debian系
apt install -y chrony
systemctl enable --now chrony
chrony配置
vi /etc/chrony.conf # RHEL系
vi /etc/chrony/chrony.conf # Debian系
# 上游NTP服务器
server ntp.aliyun.com iburst # 阿里云NTP(国内推荐)
server ntp1.aliyun.com iburst
server ntp.tencent.com iburst # 腾讯NTP
# server 0.pool.ntp.org iburst # 国际NTP池
# 允许客户端同步的网段
allow 192.168.1.0/24
# 作为本地时钟源(上游不可用时仍能提供时间)
local stratum 10
# 记录时钟漂移
driftfile /var/lib/chrony/drift
# 日志
logdir /var/log/chrony
# 重启服务
systemctl restart chronyd # RHEL
systemctl restart chrony # Debian
# 查看同步状态
chronyc sources -v # 查看时间源
chronyc tracking # 查看详细追踪信息
chronyc sourcestats # 查看统计信息
# 手动强制同步
chronyc makestep
sources输出解读:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp1.aliyun.com 2 6 377 33 -123us[ -456us] +/- 15ms
^- ntp.tencent.com 2 6 377 35 +234us[ +123us] +/- 20ms
^*= 当前选中的最佳时间源^-= 候选时间源Stratum= 层级(越小越精确,1是原子钟)Reach= 最近8次探测的成功次数(八进制,377=全成功)
9 邮件服务——Postfix + Dovecot
生活类比
Postfix是"邮局分拣中心"(负责发送邮件),Dovecot是"你家信箱"(负责接收和读取邮件)。发邮件用SMTP协议(Postfix处理),收邮件用POP3/IMAP协议(Dovecot处理)。
安装
# RHEL系
yum install -y postfix dovecot
systemctl enable --now postfix dovecot
# Debian系
apt install -y postfix dovecot-core dovecot-imapd dovecot-pop3d
systemctl enable --now postfix dovecot
Postfix基本配置
vi /etc/postfix/main.cf
# 基本设置
myhostname = mail.example.com # 邮件服务器主机名
mydomain = example.com # 域名
myorigin = $mydomain # 发件人显示的域名
inet_interfaces = all # 监听所有网卡
mydestination = $myhostname, $mydomain # 接收邮件的目的地
# 中继设置
mynetworks = 192.168.1.0/24, 127.0.0.0/8 # 允许中继的网段
relay_domains = # 允许中继的域
# 邮箱设置
home_mailbox = Maildir/ # 使用Maildir格式
# mailbox_command = /usr/bin/procmail # 或指定投递程序
# 检查配置
postfix check
# 重启
systemctl restart postfix
# 测试发送
echo "Hello" | mail -s "Test" user@example.com
mailq # 查看邮件队列
Dovecot基本配置
# RHEL系
vi /etc/dovecot/dovecot.conf
vi /etc/dovecot/conf.d/10-mail.conf
# Debian系
vi /etc/dovecot/dovecot.conf
vi /etc/dovecot/conf.d/10-mail.conf
# dovecot.conf
protocols = imap pop3 # 启用的协议
listen = * # 监听地址
# 10-mail.conf
mail_location = maildir:~/Maildir # 邮件存储位置(与Postfix对应)
systemctl restart dovecot
互动提问:为什么现代邮件系统推荐IMAP而不是POP3?
答案:POP3把邮件下载到本地后通常会从服务器删除,多设备间不同步;IMAP邮件保存在服务器上,所有设备看到的邮件状态一致,更适合现代多设备使用场景。
各服务RHEL系 vs Debian系 安装命令速查表
| 服务 | RHEL系(yum/dnf) | Debian系(apt) |
|---|---|---|
| SSH服务端 | yum install openssh-server | apt install openssh-server |
| rsyslog | yum install rsyslog | apt install rsyslog |
| NFS服务端 | yum install nfs-utils | apt install nfs-kernel-server |
| NFS客户端 | yum install nfs-utils | apt install nfs-common |
| DHCP | yum install dhcp-server | apt install isc-dhcp-server |
| Apache | yum install httpd | apt install apache2 |
| BIND DNS | yum install bind | apt install bind9 |
| chrony | yum install chrony | apt install chrony |
| Postfix | yum install postfix | apt install postfix |
| Dovecot | yum install dovecot | apt install dovecot-core dovecot-imapd |
| rsync | yum install rsync | apt install rsync |
| tcpdump | yum install tcpdump | apt install tcpdump |
服务名差异提醒:同一个软件在RHEL和Debian中的服务名可能不同!如Apache在RHEL叫
httpd,在Debian叫apache2;SSH服务在RHEL叫sshd,在Debian叫ssh。
运维常用命令精选
# ===== 定时任务 =====
crontab -e # 编辑定时任务
crontab -l # 查看定时任务
systemctl status crond # 查看crond服务状态(RHEL)
systemctl status cron # 查看cron服务状态(Debian)
# ===== SSH =====
ssh-keygen -t ed25519 # 生成密钥对
ssh-copy-id user@host # 复制公钥到服务器
scp file user@host:/path/ # 远程复制文件
rsync -avz src/ user@host:dest/ # 智能同步
ssh -L 8080:localhost:80 user@host # 本地端口转发
# ===== 日志 =====
tail -f /var/log/messages # 实时跟踪日志
journalctl -u sshd -f # 实时跟踪某服务日志
journalctl --since "1 hour ago" # 查看最近1小时日志
logrotate -f /etc/logrotate.conf # 手动触发日志轮转
# ===== NFS =====
exportfs -rv # 重新导出NFS共享
showmount -e server_ip # 查看NFS共享
mount -t nfs server:/share /mnt # 挂载NFS
# ===== Web服务 =====
httpd -t # 检查Apache配置语法(RHEL)
apache2ctl -t # 检查Apache配置语法(Debian)
systemctl reload httpd # 重载配置不断连接(RHEL)
systemctl reload apache2 # 重载配置不断连接(Debian)
# ===== DNS =====
named-checkconf # 检查BIND配置语法
named-checkzone example.com zonefile # 检查区域文件
dig @server domain # 指定DNS服务器查询
# ===== 时间同步 =====
chronyc sources -v # 查看时间源状态
chronyc tracking # 查看同步详情
chronyc makestep # 强制立即同步
趣味命令
# 1. 用SSH创建一个反向隧道(让外网访问你内网的机器)
ssh -R 8888:localhost:80 user@公网服务器IP
# 然后从外网访问 公网服务器IP:8888 就能到达你内网的80端口
# 2. 把SSH当浏览器用(访问远程服务器的某个端口)
ssh -L 3307:localhost:3306 user@server
# 现在本机3307端口就是远程服务器的MySQL 3306端口
# 3. 用Apache搭建一个简单的文件共享站
# 在 /var/www/html 下放入文件,浏览器直接访问下载
# 4. 查看谁在偷偷尝试登录你的服务器
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head
# 显示尝试暴力破解的IP排名
# 5. 用logwatch生成日志摘要报告(RHEL)
yum install -y logwatch
logwatch --detail high --mailto admin@example.com --service all --range yesterday
# 6. 一行命令查看今天Apache被访问了多少次
grep "$(date +%d/%b/%Y)" /var/log/httpd/access_log | wc -l
# 7. 监控crontab执行情况
grep CRON /var/log/cron # RHEL
grep CRON /var/log/syslog # Debian
# 8. 让服务器"说话"(播放提示音,机房里找机器用)
# 需要先安装 beep
yum install -y beep || apt install -y beep
beep -f 1000 -l 500 -r 3 # 响3次,每次500ms,频率1000Hz
小结:Linux服务是运维的核心技能。每个服务的学习路径都是:安装 → 理解配置文件 → 修改配置 → 重启/重载服务 → 验证功能。记住RHEL和Debian在包名、服务名、配置文件路径上的差异,这是跨平台运维的基本功。