Linux 运维核心知识点 + 实操全总结(面试 + 实操双版)

0 阅读15分钟

1. 搭建时间同步服务器(Chrony 版,CentOS7/8/RHEL 首选)

核心说明

Chrony 替代传统 NTP,同步更快、精度更高、断网恢复更快,分为服务端(授时)*和*客户端(同步)

一、服务端配置(授时服务器)

  1. 安装
yum install -y chrony
  1. 编辑配置文件 /etc/chrony.conf
# 注释默认公网服务器,添加本地授时(离线环境)
# server 0.centos.pool.ntp.org iburst
server 127.0.0.1 iburst  # 本地时钟作为源
local stratum 10          # 本地作为层级10授时服务器
allow 192.168.1.0/24      # 允许同步的客户端网段
bindcmdaddress 0.0.0.0    # 监听所有IP
  1. 启动并开机自启
systemctl start chronyd
systemctl enable chronyd
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

二、客户端配置(同步时间)

  1. 安装 chrony
  2. 编辑 /etc/chrony.conf
server 192.168.1.100 iburst  # 指向服务端IP
# 注释其他server

3.重启服务并验证

systemctl restart chronyd
chronyc sources -v  # 查看同步状态
timedatectl set-ntp true  # 开启时间同步
date  # 验证时间

2. 常见日志服务管理

  1. rsyslog

    标准系统日志服务,兼容 syslog,支持 TCP/UDP、数据库、远程集中日志,默认接管/var/log/messages等。

  2. systemd-journald

    systemd 自带日志系统,二进制存储,配合journalctl使用,可与 rsyslog 联动。

  3. syslog-ng

    高级日志管理,比 rsyslog 更灵活,支持复杂过滤、多输出。

  4. logrotate

    日志切割工具,防止日志文件过大,自动切割、压缩、删除旧日志。


3. 日志分类、优先级 + rsyslog 工作原理

一、日志分类(Facility 设施)

分类说明
auth认证相关(登录、su)
authpriv权限 / 安全认证(ssh、sudo)
cron定时任务日志
kern内核日志
mail邮件服务
user用户程序日志
local0~local7自定义日志

二、日志优先级(Priority 等级,从低到高)

debug < info < notice < warning < err < crit < alert < emerg

三、rsyslog 工作流程

应用程序(SSH/nginx)
    ↓(发送日志到 /dev/log 套接字)
rsyslog 服务(监听输入)
    ↓(按 Facility+Priority 过滤规则)
输出目标(文件/远程服务器/数据库)
  1. 应用调用 syslog 接口,将日志写入 /dev/log
  2. rsyslog 监听该套接字,读取日志;
  3. 按配置文件规则匹配,写入本地文件 / 发送远程 rsyslog。

4. 三台主机 SSH 日志集中到 rsyslog 服务器(/var/log/all-ssh.log)

环境约定

  • 服务端:192.168.1.100(主机名 = IP)
  • 客户端 1:192.168.1.101、客户端 2:192.168.1.102、客户端 3:192.168.1.103

一、服务端配置(192.168.1.100)

  1. 编辑 /etc/rsyslog.conf
# 开启UDP/TCP接收
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")

# 自定义规则:所有客户端ssh日志写入 /var/log/all-ssh.log
authpriv.* /var/log/all-ssh.log

2.创建日志文件并授权

touch /var/log/all-ssh.log
chown root:root /var/log/all-ssh.log
systemctl restart rsyslog
firewall-cmd --add-port=514/udp --add-port=514/tcp --permanent
firewall-cmd --reload

二、客户端配置(所有 3 台主机)

  1. 编辑 /etc/rsyslog.conf,添加
# 将authpriv(ssh日志)发送到服务端
authpriv.* @192.168.1.100:514  # @=UDP,@@=TCP

2.重启服务

systemctl restart rsyslog

3.验证:客户端执行 ssh localhost,服务端查看 tail -f /var/log/all-ssh.log


5. /var/log/ 常用日志文件作用

日志文件作用
messages系统核心日志,服务启动、系统信息、错误
secure安全认证日志(ssh 登录、su、sudo)
cron定时任务 crontab 执行日志
dmesg内核硬件检测、驱动加载日志
boot.log系统启动过程日志
maillog邮件服务日志
yum.logyum 安装 / 卸载软件日志
firewalld防火墙日志
all-ssh.log自定义集中 SSH 日志

6. journalctl 命令选项及示例

常用选项

  • -f:实时刷新日志
  • -n:显示最后 N 行
  • -u:查看指定服务
  • -p:按优先级过滤
  • --since/--until:按时间过滤
  • -k:内核日志
  • -b:本次启动日志

实操示例

journalctl -f  # 实时日志
journalctl -n 20  # 最后20行
journalctl -u sshd  # sshd日志
journalctl -p err  # 仅错误日志
journalctl --since "10 min ago"  # 10分钟内日志
journalctl -k  # 内核日志

7. 多主机 logger 日志集中写入 MySQL

一、服务端配置(192.168.1.100)

  1. 安装依赖
yum install -y mariadb-server mariadb rsyslog-mysql

2.启动数据库并初始化

systemctl start mariadb
mysql_secure_installation

3.创建库表(rsyslog 默认表结构)

mysql -uroot -p < /usr/share/doc/rsyslog-8.24/mysql-createDB.sql
# 授权rsyslog访问
mysql -uroot -p
GRANT ALL ON Syslog.* TO 'rsyslog'@'192.168.1.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

4.配置 rsyslog 输出到 MySQL编辑**/etc/rsyslog.conf**

module(load="ommysql")
*.* :ommysql:127.0.0.1,Syslog,rsyslog,123456

5.重启 rsyslog

二、客户端配置

*.* @192.168.1.100:514

​ 6.测试:客户端执行 logger "test log to mysql",服务端数据库查询验证。


8. logrotate 切割 message 日志(每天、≤3M、存 90 天、时间后缀、压缩)

  1. 编辑 /etc/logrotate.d/messages
/var/log/messages {
    daily  # 每天切割
    size 3M  # 超过3M强制切割
    rotate 90  # 保留90天
    dateext  # 时间后缀
    compress  # 压缩
    delaycompress  # 延迟压缩
    missingok  # 日志不存在不报错
    notifempty  # 空日志不切割
    create 0644 root root  # 新建日志权限
}

2.手动测试切割

logrotate -f /etc/logrotate.d/messages

9.Apache相关知识

一、 定制端口实践(Apache 多端口配置)

核心概念

Apache 默认监听 80(HTTP)、443(HTTPS)端口,通过修改配置文件可以让服务同时监听多个端口,实现不同业务 / 站点的隔离。

关键配置步骤

  1. 修改主配置文件/etc/httpd/conf/httpd.conf(CentOS)或 /etc/apache2/ports.conf(Debian)

    # 开启监听
    Listen 80
    Listen 8080
    Listen 8081
    
  2. 配置虚拟主机(每个端口对应一个站点)

    <VirtualHost *:8080>
        DocumentRoot "/var/www/port8080"
        ServerName site1.example.com
    </VirtualHost>
    
    <VirtualHost *:8081>
        DocumentRoot "/var/www/port8081"
        ServerName site2.example.com
    </VirtualHost>
    
  3. 验证与排错

    • 语法检查:apachectl configtest
    • 重启服务:systemctl restart httpd
    • 防火墙放行端口:firewall-cmd --add-port=8080/tcp --permanent

常见问题

  • 端口被占用:用 netstat -tulnp | grep 8080 检查
  • 权限不足:确保 /var/www/xxx 目录对 apache 用户可读

二、Alias 别名配置(路径映射)

核心概念

Alias 是 Apache 的路径别名指令,作用是将 URL 路径映射到服务器上的非默认目录,实现灵活的资源挂载,比如把 http://xxx.com/files/ 指向 /data/share/

两种 Alias 实践

1. 基础别名配置(Alias 指令)
# 主配置或虚拟主机内添加
Alias "/files" "/data/share/files"

# 必须配置目录权限,否则403
<Directory "/data/share/files">
    Require all granted
    Options Indexes FollowSymLinks
</Directory>
  • 效果:访问 http://服务器IP/files/ 即可查看 /data/share/files 下的文件。
2. 带正则的别名(AliasMatch 指令)

支持正则匹配 URL 路径,适合批量映射:

AliasMatch "^/images/(.*)" "/data/imgs/$1"
  • 效果:/images/1.jpg/data/imgs/1.jpg

核心注意事项

  1. 别名目录必须配置 <Directory> 权限,否则会报 403 禁止访问。
  2. 别名路径要区分大小写(Linux 系统)。
  3. 别名不能与真实目录名冲突,否则 Apache 会优先匹配真实目录。

三、虚拟主机(Apache 多站点部署核心)

核心概念

虚拟主机(VirtualHost)是 Apache 实现一台服务器部署多个网站的核心技术,支持三种方式:

  • 基于 IP
  • 基于端口
  • 基于域名(最常用)

关键配置步骤(基于域名)

  1. 确保 Apache 已开启虚拟主机功能(默认开启)

  2. 编辑配置文件,添加多个虚拟主机块:

    # 站点1:www.a.com
    <VirtualHost *:80>
        DocumentRoot "/var/www/a.com"
        ServerName www.a.com
        ServerAlias a.com
        ErrorLog "/var/log/httpd/a.com-error.log"
        CustomLog "/var/log/httpd/a.com-access.log" combined
    </VirtualHost>
    
    # 站点2:www.b.com
    <VirtualHost *:80>
        DocumentRoot "/var/www/b.com"
        ServerName www.b.com
        ServerAlias b.com
        ErrorLog "/var/log/httpd/b.com-error.log"
        CustomLog "/var/log/httpd/b.com-access.log" combined
    </VirtualHost>
    
  3. 本地 hosts 解析测试(/etc/hosts)

    192.168.1.100 www.a.com
    192.168.1.100 www.b.com
    
  4. 重启服务,访问域名验证

三种虚拟主机对比

类型配置方式适用场景
基于域名不同 ServerName单 IP 单端口,多个网站(最常用)
基于端口不同 Listen 端口不同业务隔离,如后台服务
基于 IP不同 IP 的 <VirtualHost>多网卡服务器,不同业务用不同 IP

10. HTTP 协议高频面试题(背诵版)

1)HTTP 协议请求方式(详细版)

HTTP 定义了一套请求方法,用来表明客户端要对服务器资源执行什么操作。

HTTP/1.0 定义 3 种

  • GET:请求获取服务器上的某个资源(网页、图片、接口数据)。

  • POST:向服务器提交数据,用于新增、修改、登录、表单提交。

  • HEAD:和 GET 一样,但只返回响应头,不返回响应体。

    作用:先获取文件大小 / 类型,再决定是否下载,节省带宽。

HTTP/1.1 新增 5 种

  • PUT:用提交的数据完整覆盖 / 替换目标资源,全量更新
  • PATCH:对资源进行部分修改,只传要改的字段。
  • DELETE:请求服务器删除指定资源。
  • OPTIONS:查询服务器支持哪些请求方法、跨域许可
  • TRACE:回显服务器收到的请求路径,用于测试、诊断网络链路。
  • CONNECT:用于代理服务器建立隧道连接(HTTPS 代理场景)。

2)GET 和 POST 的详细区别(面试高频口述版)

① 数据传输位置不同

  • GET:数据拼接在 URL 后面,可见。
  • POST:数据放在 请求体(body) 中,不可见。

② 安全性不同

  • GET:URL 会被浏览器历史、缓存、日志记录,极不安全
  • POST:数据在请求体内,不会直接暴露,相对安全

③ 数据类型与长度限制

  • GET:只允许 ASCII 字符,长度受浏览器 / 服务器限制。
  • POST:支持 二进制、多表单、文件上传,无字符限制。

④ 刷新 / 后退行为

  • GET:刷新、后退无害、无影响
  • POST:刷新 / 后退可能重复提交表单

⑤ 标准特性(面试必说)

  • GET:安全(只读) + 幂等
    • 安全:不会修改服务器数据状态。
    • 幂等:执行 1 次和 100 次效果一样。
  • POST:非安全 + 非幂等
    • 会修改服务器数据,多次执行可能产生多条数据。

⑥ 缓存

  • GET:默认可被浏览器缓存。
  • POST:默认不缓存。

3)什么是无状态协议?HTTP 是不是?怎么解决?

什么是无状态协议

无状态 = 协议本身不 “记住” 任何请求信息。

服务器不知道你上一次请求做了什么,也不知道你是谁。

每一次请求都是完全独立的。

HTTP 是无状态协议吗

是。

HTTP 本身不保存任何客户端状态。

为什么我们登录后不用重复登录?

不是 HTTP 记住了你,而是 Cookie / Session 帮你记录了状态。

解决方案(3 种)

  1. Cookie

    状态存在客户端浏览器,服务器通过 Cookie 识别用户。

  2. Session

    状态存在服务器,客户端只存一个 SessionID。

  3. Token / JWT

    无状态认证,适合分布式、微服务。


4)UDP 和 TCP 详细对比(面试必考)

UDP(用户数据报协议)

  • 无连接:不需要握手,直接发数据包。
  • 不可靠:不保证一定送达、不保证顺序、丢包不重传。
  • 头部小:8 字节。
  • 速度快、延迟低
  • 适用:直播、视频通话、游戏、DNS。

TCP(传输控制协议)

  • 面向连接:必须三次握手建立连接。
  • 可靠传输:有序、确认应答、丢包重传、拥塞控制、错误校验。
  • 头部大:20 字节。
  • 速度慢
  • 适用:网页、文件、邮件、支付。

核心区别总结(可直接背)

  1. TCP 面向连接;UDP 无连接。
  2. TCP 可靠;UDP 不可靠。
  3. TCP 有序;UDP 无序。
  4. TCP 重传 / 拥塞控制;UDP 没有。
  5. TCP 慢;UDP 快。
  6. TCP 头部 20B;UDP 头部 8B。
  7. TCP 用于重要数据;UDP 用于实时业务。

5)HTTP 302 状态码详细解释

302 Found:临时重定向

  • 含义:你请求的资源临时换到另一个地址。
  • 服务器会在响应头里返回 Location 字段。
  • 浏览器自动跳转到 Location 里的 URL。
  • 特点:临时,搜索引擎不会更新权重。

同类对比:

  • 301:永久重定向
  • 304:缓存未修改(使用本地缓存)
  • 307:临时重定向(严格保留请求方法)

6)HTTP 协议由什么组成?

HTTP 通信分为 请求报文响应报文

请求报文组成(4 部分)

  1. 请求行

    请求方法 + URL + HTTP 版本

    例:

    GET /index.html HTTP/1.1
    
  2. 请求头

    Host、User-Agent、Cookie、Content-Type 等。

  3. 空行

    固定分隔符,表示请求头结束。

  4. 请求体

    POST/PUT 提交的数据。

响应报文组成(4 部分)

  1. 响应行

    HTTP 版本 + 状态码 + 描述

    例:

    HTTP/1.1 200 OK
    
  2. 响应头

    Server、Set-Cookie、Content-Type、Location 等。

  3. 空行

  4. 响应体

    HTML、JSON、图片、文件等返回数据。


7)Cookie 和 Session 详细区别

  1. 存储位置
    • Cookie:客户端浏览器
    • Session:服务器端
  2. 安全性
    • Cookie:容易被劫持、伪造、篡改。
    • Session:更安全,ID 不易伪造。
  3. 服务器压力
    • Cookie:不占服务器资源。
    • Session:占用服务器内存 / 存储。
  4. 容量限制
    • Cookie:很小,约 4KB。
    • Session:无严格限制。
  5. 生命周期
    • Cookie:可长期保存。
    • Session:默认关闭浏览器失效。

8)HTTP 协议的 5 大特点

  1. 无连接

    处理完一个请求就断开连接(HTTP/1.1 支持长连接)。

  2. 无状态

    不记录任何请求上下文。

  3. C/S 模型

    客户端(浏览器 / App)请求,服务器响应。

  4. 简单快速

    头部简洁,服务器处理快。

  5. 灵活可扩展

    可传输文本、图片、视频、JSON 等任意类型。


9)HTTP 和 HTTPS 详细区别

  1. 端口不同
    • HTTP:80
    • HTTPS:443
  2. 传输方式
    • HTTP:明文,易窃听、篡改、劫持。
    • HTTPS:SSL/TLS 加密,安全。
  3. 证书
    • HTTP:不需要证书。
    • HTTPS:需要 CA 机构颁发的证书。
  4. 性能
    • HTTPS 多一次加密解密,略慢。
  5. SEO
    • 搜索引擎优先收录 HTTPS。

10)为什么有 HTTP 还要 HTTPS?

HTTP 是明文传输,存在三大风险:

  1. 窃听:第三方可获取账号密码。
  2. 篡改:网页被植入广告、木马。
  3. 伪造:钓鱼网站冒充官方。

HTTPS 解决这三点:

  • 加密:别人看不到内容。
  • 校验:内容不被篡改。
  • 认证:确保访问的是真实服务器。

11)HTTP keep-alive 详细作用

早期问题

HTTP/1.0 默认短连接

每请求一次 → 建立连接 → 传输 → 断开。

频繁握手非常消耗资源、延迟高。

keep-alive 解决方案

长连接 / 复用连接

一次连接可以处理多个请求,不用反复断开重建。

配置

  • HTTP/1.0:需要手动加头 Connection: keep-alive
  • HTTP/1.1:默认开启

优点

  1. 减少 CPU / 内存消耗。
  2. 减少 TCP 握手,降低延迟。
  3. 支持请求管线化。
  4. 减少网络拥塞。

12)HTTP 请求报文详细结构

  1. 请求行

    方法 + 路径 + 版本

  2. 请求头

    • Host:目标主机名(虚拟主机必备)
    • User-Agent:浏览器 / 设备信息
    • Accept:可接受的数据类型
    • Cookie:身份凭证
    • Content-Type:请求体类型
  3. 空行

  4. 请求体

    表单、JSON、文件等。


13)HTTP 响应报文详细结构

  1. 响应行

    版本 + 状态码 + 描述

  2. 响应头

    • Server:服务器信息
    • Location:重定向地址
    • Set-Cookie:种下 Cookie
    • Content-Type:返回数据类型
  3. 空行

  4. 响应体

    页面、数据、图片。


14)HTTP 常用首部字段(详细分类)

通用首部(请求 / 响应都用)

  • Cache-Control:缓存控制
  • Connection:keep-alive 开关

请求首部

  • Host:目标主机
  • User-Agent:客户端信息
  • If-Modified-Since:缓存时间对比
  • If-None-Match:Etag 对比

响应首部

  • Server:服务器信息
  • Location:重定向地址

实体首部

  • Last-Modified:资源最后修改时间
  • Expires:过期时间
  • Content-Type:内容类型
  • Content-Length:长度

15)HTTP 状态码详细分类(必背)

2XX 成功

  • 200 OK:成功返回
  • 201 Created:创建成功
  • 204 No Content:成功但无返回体
  • 206 Partial Content:断点续传 / 范围请求

3XX 重定向

  • 301:永久重定向
  • 302:临时重定向
  • 304:未修改,使用缓存
  • 307:临时重定向(保留方法)

4XX 客户端错误

  • 400:请求参数错误
  • 401:未登录 / 未认证
  • 403:权限不足,拒绝访问
  • 404:资源不存在
  • 408:请求超时

5XX 服务器错误

  • 500:服务器内部错误
  • 502:网关错误
  • 503:服务不可用
  • 504:网关超时

16)TCP 三次握手 + 四次挥手

三次握手(建立连接)

  1. 客户端 → 服务端:SYN

    我想连接,我的初始序号是 X。

  2. 服务端 → 客户端:SYN+ACK

    收到,同意连接。我的序号是 Y,确认号 X+1。

  3. 客户端 → 服务端:ACK

    收到确认,连接建立,确认号 Y+1。

目的:确保双方收发能力都正常。


四次挥手(关闭连接)

因为 TCP 是全双工,双方都要单独关闭。

  1. 客户端 → 服务端:FIN

    我发完了,请求关闭。

  2. 服务端 → 客户端:ACK

    收到,我知道了。

  3. 服务端 → 客户端:FIN

    我也发完了,可以关闭。

  4. 客户端 → 服务端:ACK

    收到,关闭。

客户端最后会进入 TIME_WAIT,等待 2MSL 确保对方收到 ACK。


17)高频扩展题(面试常问)

(1)什么是幂等性?

多次请求和一次请求效果一样 = 幂等。

  • 幂等:GET、HEAD、PUT、DELETE、OPTIONS
  • 非幂等:POST

(2)HTTP/1.0 / 1.1 / 2.0 区别

  • 1.0:短连接、串行
  • 1.1:长连接、管道、Host
  • 2.0:多路复用、二进制帧、头部压缩、服务器推送

(3)HTTPS 握手流程

  1. 客户端请求,支持加密套件。
  2. 服务端返回证书。
  3. 客户端验证证书。
  4. 客户端生成随机密钥,用服务器公钥加密。
  5. 双方用对称密钥加密通信。

11. inotify+rsync 与 sersync 文件同步(配置 + 优缺点)

一、inotify+rsync 实现实时同步

1.安装

yum install -y inotify-tools rsync

2.同步脚本

#!/bin/bash
inotifywait -mrq -e create,delete,modify,move /data | while read file; do
    rsync -avz /data/ root@192.168.1.100:/data/
done

3.后台运行脚本

二、sersync 实现实时同步

  1. 下载 sersync,解压配置 confxml.xml
  2. 配置远程目标、同步目录、过滤规则
  3. 启动 ./sersync -d -n 10

三、优缺点对比

方式优点缺点
inotify+rsync轻量、免费、自定义强无多线程、断点续传、配置繁琐
sersync多线程、自带过滤、断点续传、稳定依赖第三方工具、配置简单