跳到主要内容

系统管理

本章介绍 Linux 系统管理相关的内容,包括服务管理、日志查看、用户管理等。

服务管理

systemctl (Systemd)

Systemd 是现代 Linux 发行版的标准初始化系统和服务管理器。

服务管理

# 启动服务
systemctl start nginx

# 停止服务
systemctl stop nginx

# 重启服务
systemctl restart nginx

# 重新加载配置
systemctl reload nginx

# 查看服务状态
systemctl status nginx

# 开机自启
systemctl enable nginx

# 禁用开机自启
systemctl disable nginx

# 查看是否开机自启
systemctl is-enabled nginx

查看服务

# 列出所有服务
systemctl list-units --type=service

# 列出正在运行的服务
systemctl list-units --type=service --state=running

# 列出所有已安装的服务
systemctl list-unit-files --type=service

# 查看服务详情
systemctl show nginx

系统管理

# 重启系统
systemctl reboot

# 关机
systemctl poweroff

# 挂起
systemctl suspend

# 休眠
systemctl hibernate

service (传统方式)

旧版本的 Linux 使用 service 命令:

# 启动服务
service nginx start

# 停止服务
service nginx stop

# 重启服务
service nginx restart

# 查看状态
service nginx status

日志管理

journalctl

journalctl 是 Systemd 的日志查看工具:

# 查看所有日志
journalctl

# 查看最新的日志
journalctl -n 100

# 实时查看日志
journalctl -f

# 查看特定服务的日志
journalctl -u nginx

# 查看特定时间的日志
journalctl --since "2024-01-01"
journalctl --since "2024-01-01 10:00:00"
journalctl --until "2024-01-02"
journalctl --since yesterday
journalctl --since "1 hour ago"

# 查看内核日志
journalctl -k

# 按优先级过滤
journalctl -p err # 错误级别
journalctl -p warning # 警告级别

# 显示日志来源
journalctl -o verbose

日志文件

传统日志文件存放在 /var/log/ 目录:

# 系统日志
/var/log/syslog # Ubuntu/Debian
/var/log/messages # CentOS/RHEL

# 认证日志
/var/log/auth.log # Ubuntu/Debian
/var/log/secure # CentOS/RHEL

# 其他常用日志
/var/log/kern.log # 内核日志
/var/log/dmesg # 启动日志
/var/log/cron # 定时任务日志
/var/log/mail.log # 邮件日志

查看日志文件

# 查看日志
cat /var/log/syslog

# 查看最近的日志
tail -f /var/log/syslog

# 搜索日志
grep "error" /var/log/syslog

# 查看登录记录
last
lastb # 失败的登录

# 查看当前登录用户
w
who

日志轮转

logrotate 自动管理日志文件大小:

# 配置文件
/etc/logrotate.conf
/etc/logrotate.d/

# 手动执行
logrotate -f /etc/logrotate.conf

# 测试配置
logrotate -d /etc/logrotate.conf

用户管理

用户操作

# 添加用户
useradd username

# 添加用户并创建主目录
useradd -m username

# 设置密码
passwd username

# 删除用户
userdel username

# 删除用户及其主目录
userdel -r username

# 修改用户
usermod -l newname oldname # 修改用户名
usermod -d /new/home username # 修改主目录
usermod -s /bin/bash username # 修改默认 shell
usermod -aG group username # 添加到附加组

用户信息查看

# 查看用户信息
id username

# 查看用户所属组
groups username

# 查看所有用户
cat /etc/passwd

# 查看当前用户
whoami

# 查看用户登录历史
last username

组管理

# 创建组
groupadd groupname

# 删除组
groupdel groupname

# 修改组名
groupmod -n newname oldname

# 查看所有组
cat /etc/group

# 添加用户到组
gpasswd -a username groupname

# 从组中移除用户
gpasswd -d username groupname

sudo 权限管理

# 添加用户到 sudo 组(Ubuntu/Debian)
usermod -aG sudo username

# 添加用户到 wheel 组(CentOS/RHEL)
usermod -aG wheel username

# 编辑 sudoers 文件
visudo

# sudoers 配置示例
username ALL=(ALL:ALL) ALL # 完全权限
username ALL=(ALL) NOPASSWD: ALL # 无需密码

磁盘管理

磁盘信息

# 查看磁盘使用情况
df -h

# 查看目录大小
du -sh /path/to/dir

# 查看目录下各子目录大小
du -h --max-depth=1 /path/to/dir

# 查看磁盘分区
fdisk -l

# 查看 block 设备
lsblk

# 查看磁盘 UUID
blkid

磁盘分区

# 分区工具
fdisk /dev/sda

# 常用 fdisk 命令
# p - 打印分区表
# n - 新建分区
# d - 删除分区
# w - 保存并退出
# q - 不保存退出

文件系统

# 格式化分区
mkfs.ext4 /dev/sda1
mkfs.xfs /dev/sda1

# 挂载分区
mount /dev/sda1 /mnt

# 卸载分区
umount /mnt

# 查看挂载信息
mount
findmnt

# 开机自动挂载(编辑 /etc/fstab)
/dev/sda1 /mnt ext4 defaults 0 2

LVM 逻辑卷

# 创建物理卷
pvcreate /dev/sda1

# 创建卷组
vgcreate vg01 /dev/sda1

# 创建逻辑卷
lvcreate -L 10G -n lv01 vg01

# 扩展逻辑卷
lvextend -L +5G /dev/vg01/lv01

# 扩展文件系统
resize2fs /dev/vg01/lv01 # ext4
xfs_growfs /mount/point # xfs

系统监控

top 和 htop

# 动态查看进程
top

# htop(增强版,需要安装)
htop

# top 快捷键
# P - 按 CPU 排序
# M - 按内存排序
# T - 按时间排序
# q - 退出

free - 内存查看

# 查看内存使用
free -h

# 持续显示
free -s 1

vmstat - 系统统计

# 查看系统统计
vmstat

# 持续监控
vmstat 1 5 # 每秒显示,共 5 次

iostat - IO 统计

# 查看 IO 统计
iostat

# 持续监控
iostat -x 1

uptime - 系统运行时间

# 查看系统运行时间和负载
uptime

系统信息

# 查看内核版本
uname -r
uname -a

# 查看系统版本
cat /etc/os-release

# 查看 CPU 信息
lscpu
cat /proc/cpuinfo

# 查看内存信息
cat /proc/meminfo

定时任务

crontab

# 编辑当前用户的定时任务
crontab -e

# 查看定时任务
crontab -l

# 删除定时任务
crontab -r

# 编辑指定用户的定时任务
crontab -u username -e

cron 表达式

*    *    *    *    *    command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └───── 星期几 (0-7, 0 和 7 都表示周日)
│ │ │ └────────── 月份 (1-12)
│ │ └─────────────── 日期 (1-31)
│ └──────────────────── 小时 (0-23)
└───────────────────────── 分钟 (0-59)

常用示例

# 每分钟执行
* * * * * /path/to/command

# 每小时执行
0 * * * * /path/to/command

# 每天凌晨 2 点执行
0 2 * * * /path/to/command

# 每周一凌晨 3 点执行
0 3 * * 1 /path/to/command

# 每月 1 号凌晨执行
0 0 1 * * /path/to/command

# 每 5 分钟执行
*/5 * * * * /path/to/command

# 每小时第 0 分和第 30 分执行
0,30 * * * * /path/to/command

# 工作日每天早上 9 点执行
0 9 * * 1-5 /path/to/command

at - 一次性任务

# 在指定时间执行
at 10:00
at> /path/to/command
at> Ctrl+D

# 在指定日期时间执行
at 10:00 2024-12-25

# 查看待执行任务
atq

# 删除任务
atrm job_number

系统备份

tar 归档

# 创建归档
tar -cvf archive.tar /path/to/dir

# 创建压缩归档
tar -czvf archive.tar.gz /path/to/dir
tar -cjvf archive.tar.bz2 /path/to/dir

# 解压归档
tar -xvf archive.tar
tar -xzvf archive.tar.gz

# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/path

# 查看归档内容
tar -tvf archive.tar

rsync 备份

# 本地备份
rsync -avz /source/ /backup/

# 远程备份
rsync -avz /source/ user@backup-server:/backup/

# 增量备份
rsync -avz --backup --backup-dir=/backup/incremental /source/ /backup/current/

# 定时备份(配合 cron)
0 2 * * * rsync -avz /important/data/ /backup/daily/

环境变量

查看和设置

# 查看所有环境变量
env
printenv

# 查看特定变量
echo $PATH
echo $HOME

# 设置临时变量
export MY_VAR="value"

# 设置永久变量(写入配置文件)
echo 'export MY_VAR="value"' >> ~/.bashrc
source ~/.bashrc

配置文件

# 系统级
/etc/environment # 系统环境变量
/etc/profile # 登录时执行
/etc/bash.bashrc # 非登录 shell 执行

# 用户级
~/.profile # 登录时执行
~/.bashrc # 非登录 shell 执行
~/.bash_profile # 用户登录时执行

小结

本章我们学习了:

  1. 服务管理:systemctl 管理系统服务
  2. 日志管理:journalctl 和日志文件查看
  3. 用户管理:用户和组的创建、修改、删除
  4. 磁盘管理:分区、格式化、挂载
  5. 系统监控:top、free、vmstat 等工具
  6. 定时任务:crontab 和 at
  7. 系统备份:tar 和 rsync
  8. 环境变量:查看和配置

练习

  1. 创建一个新用户并赋予 sudo 权限
  2. 配置一个每天凌晨执行的定时备份任务
  3. 查看系统日志找出最近的错误信息
  4. 使用 tar 创建一个压缩备份并恢复