Linux服务篇

瑞克 0 阅读 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安全加固清单

  1. 修改默认端口为高位端口(如 Port 52222
  2. 禁止root直接登录(PermitRootLogin no
  3. 使用密钥认证,禁用密码认证(PasswordAuthentication no
  4. 限制允许登录的用户(AllowUsers
  5. 设置登录超时(LoginGraceTime
  6. 配合fail2ban防暴力破解
  7. 使用防火墙限制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

日志级别(优先级从低到高)

级别数字含义说明
debug7调试开发调试信息
info6信息一般性信息
notice5注意值得注意但不报错
warn4警告潜在问题
err3错误功能出错
crit2严重严重问题
alert1告警需要立即处理
emerg0紧急系统不可用

互动提问:如果配置了 *.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-serverapt install openssh-server
rsyslogyum install rsyslogapt install rsyslog
NFS服务端yum install nfs-utilsapt install nfs-kernel-server
NFS客户端yum install nfs-utilsapt install nfs-common
DHCPyum install dhcp-serverapt install isc-dhcp-server
Apacheyum install httpdapt install apache2
BIND DNSyum install bindapt install bind9
chronyyum install chronyapt install chrony
Postfixyum install postfixapt install postfix
Dovecotyum install dovecotapt install dovecot-core dovecot-imapd
rsyncyum install rsyncapt install rsync
tcpdumpyum install tcpdumpapt 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在包名、服务名、配置文件路径上的差异,这是跨平台运维的基本功。