Linux 高级命令使用指南
systemctl 守护进程管理命令
1. systemctl daemon-reload
用途
重新加载 systemd 管理器的配置文件。当你修改了 systemd 单元文件(.service 文件)后,需要使用此命令让 systemd 重新读取配置。
使用场景
- 修改了
/etc/systemd/system/或/usr/lib/systemd/system/中的 service 文件 - 新增了 systemd 单元文件
- 修改了服务的启动参数、环境变量、依赖关系等
语法
systemctl daemon-reload
示例
# 场景:修改了 nginx 服务配置后
sudo vim /etc/systemd/system/nginx.service
# 修改完成后,重新加载配置
sudo systemctl daemon-reload
# 然后重启服务使配置生效
sudo systemctl restart nginx
工作原理
- 不会重启任何服务
- 只是让 systemd 重新读取配置文件
- 服务的实际重启需要单独执行
systemctl restart
常见错误
# 错误示例:只 reload 不 restart
systemctl daemon-reload
# 此时服务仍在使用旧配置运行
# 正确做法
systemctl daemon-reload # 重新加载配置
systemctl restart service # 重启服务应用新配置
2. systemctl daemon-reexec
用途
重新执行 systemd 守护进程本身。这会让 systemd 重新启动,但不会影响已经运行的服务。
使用场景
- 升级了 systemd 软件包本身
- systemd 守护进程出现异常需要重启
- 应用 systemd 的核心配置更改
语法
systemctl daemon-reexec
示例
# 场景:升级 systemd 后
sudo yum update systemd
# 重新执行 systemd(不影响运行中的服务)
sudo systemctl daemon-reexec
# 查看 systemd 版本
systemctl --version
daemon-reload vs daemon-reexec
| 特性 | daemon-reload | daemon-reexec |
|---|---|---|
| 重新加载单元文件 | ✅ | ✅ |
| 重启 systemd 进程 | ❌ | ✅ |
| 影响运行中的服务 | ❌ | ❌ |
| 使用场景 | 修改服务配置 | 升级 systemd |
| 执行速度 | 快 | 较慢 |
| 使用频率 | 高 | 低 |
重要提示
# daemon-reexec 非常罕见使用,通常只在以下情况:
# 1. systemd 升级后
# 2. systemd 自身出现问题
# 3. 修改了 systemd 的全局配置(/etc/systemd/system.conf)
# 大多数情况下,你需要的是 daemon-reload
3. systemctl 常用命令汇总
服务控制命令
# 启动服务
systemctl start <service>
# 停止服务
systemctl stop <service>
# 重启服务
systemctl restart <service>
# 重新加载服务配置(不重启服务)
systemctl reload <service>
# 查看服务状态
systemctl status <service>
# 启用服务(开机自启动)
systemctl enable <service>
# 禁用服务(取消开机自启动)
systemctl disable <service>
# 查看服务是否启用
systemctl is-enabled <service>
# 查看服务是否运行
systemctl is-active <service>
系统管理命令
# 重新加载 systemd 配置
systemctl daemon-reload
# 重新执行 systemd
systemctl daemon-reexec
# 列出所有服务
systemctl list-units --type=service
# 列出所有正在运行的服务
systemctl list-units --type=service --state=running
# 列出所有失败的服务
systemctl list-units --type=service --state=failed
# 查看服务的依赖关系
systemctl list-dependencies <service>
系统状态命令
# 查看系统启动时间
systemctl show --property=UserspaceTimestamp
# 分析启动耗时
systemd-analyze
# 查看每个服务的启动耗时
systemd-analyze blame
# 查看启动的关键链
systemd-analyze critical-chain
文件查看命令
1. cat - 连接并显示文件内容
基本用法
# 显示文件内容
cat filename
# 显示多个文件内容
cat file1 file2 file3
# 显示内容并添加行号
cat -n filename
# 显示内容(非空行添加行号)
cat -b filename
# 显示特殊字符(制表符为 ^I,行尾为 $)
cat -A filename
高级用法
# 合并多个文件
cat file1 file2 > merged.txt
# 追加内容到文件
cat file1 >> existing_file.txt
# 创建文件(使用 heredoc)
cat > newfile.txt << EOF
Line 1
Line 2
Line 3
EOF
# 创建文件(使用 heredoc,保留制表符)
cat > script.sh <<'EOF'
#!/bin/bash
echo "Hello"
EOF
# 查看配置文件(去除注释和空行)
cat /etc/nginx/nginx.conf | grep -v "^#" | grep -v "^$"
实用示例
# 查看系统版本
cat /etc/os-release
# 查看 CPU 信息
cat /proc/cpuinfo
# 查看内存信息
cat /proc/meminfo
# 查看网络连接
cat /proc/net/tcp
# 查看系统负载
cat /proc/loadavg
# 查看内核版本
cat /proc/version
2. 其他文件查看命令对比
命令对比表
| 命令 | 用途 | 适用场景 | 特点 |
|---|---|---|---|
cat | 查看整个文件 | 小文件 | 简单,一次性输出全部内容 |
less | 分页查看文件 | 大文件 | 支持向前/向后翻页 |
more | 分页查看文件 | 大文件 | 只能向后翻页 |
head | 查看文件头部 | 查看开头 | 默认显示前 10 行 |
tail | 查看文件尾部 | 查看结尾/实时日志 | 默认显示后 10 行 |
grep | 搜索文件内容 | 查找特定内容 | 支持正则表达式 |
less 命令详解
# 基本用法
less filename
# 实时查看文件变化
less +F filename
# 从指定行开始查看
less +100 filename
# 显示行号
less -N filename
# 忽略大小写搜索
less -i filename
less 交互快捷键
空格键 - 向下翻一页
b - 向上翻一页
d - 向下翻半页
u - 向上翻半页
/pattern - 向下搜索
?pattern - 向上搜索
n - 重复上次搜索
N - 反向重复上次搜索
g - 跳到文件开头
G - 跳到文件结尾
q - 退出
h - 显示帮助
head 命令详解
# 显示文件前 10 行(默认)
head filename
# 显示文件前 20 行
head -n 20 filename
head -20 filename
# 显示文件前 100 字节
head -c 100 filename
# 显示多个文件的头部
head -n 5 file1 file2 file3
# 实用示例:查看大文件结构
head -n 100 /var/log/messages
# 查看日志文件的前几条记录
head -n 50 /var/log/mysql/audit.log
tail 命令详解
# 显示文件后 10 行(默认)
tail filename
# 显示文件后 20 行
tail -n 20 filename
tail -20 filename
# 实时查看文件变化(最重要的用法)
tail -f filename
# 实时查看并显示行号
tail -fn 100 filename
# 从第 100 行开始显示
tail -n +100 filename
# 实时查看多个文件
tail -f file1 file2
# 实用示例:实时查看日志
tail -f /var/log/messages
tail -f /var/log/mysql/error.log
# 查看最近的错误日志
tail -n 100 /var/log/mysql/error.log | grep ERROR
进程和服务管理
1. ps - 进程查看命令
基本用法
# 查看当前终端的进程
ps
# 查看所有进程
ps aux
# 查看所有进程(另一种格式)
ps -ef
# 查看进程树
ps auxf
pstree
常用选项组合
# 查看特定用户的进程
ps -u username
# 查看特定进程
ps aux | grep mysql
ps -ef | grep nginx
# 按内存使用排序
ps aux --sort=-%mem | head -10
# 按 CPU 使用排序
ps aux --sort=-%cpu | head -10
# 查看线程
ps -eLf
ps -T -p <pid>
自定义输出格式
# 自定义显示列
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem
# 显示特定列
ps -eo pid,user,cmd,stat,start
# 实用示例
# 查看 MySQL 进程的详细信息
ps -eo pid,ppid,cmd,%mem,%cpu | grep mysql
2. top / htop - 实时进程监控
top 命令
# 启动 top
top
# 按 CPU 使用率排序
top -o %CPU
# 按内存使用率排序
top -o %MEM
# 只显示特定用户的进程
top -u username
# 批处理模式(用于脚本)
top -b -n 1
top 交互快捷键
M - 按内存使用排序
P - 按 CPU 使用排序
T - 按运行时间排序
k - 杀死进程
r - 调整进程优先级
f - 选择显示的列
h - 显示帮助
q - 退出
1 - 显示所有 CPU 核心
htop 命令(更友好的界面)
# 启动 htop(需要安装)
htop
# 按 CPU 使用率排序
htop --sort-key PERCENT_CPU
# 按内存使用率排序
htop --sort-key PERCENT_MEM
# 只显示特定用户的进程
htop -u username
3. 进程管理命令
kill 命令
# 终止进程(SIGTERM,优雅关闭)
kill <pid>
# 强制杀死进程(SIGKILL)
kill -9 <pid>
# 重新加载进程配置(SIGHUP)
kill -HUP <pid>
# 查看所有信号
kill -l
# 按名称杀死进程
pkill nginx
killall nginx
# 按模式杀死进程
pkill -f "python.*script.py"
常用信号
| 信号 | 数字 | 说明 | 用途 |
|---|---|---|---|
| SIGTERM | 15 | 终止信号 | 优雅关闭(默认) |
| SIGKILL | 9 | 强制杀死 | 立即终止,无法捕获 |
| SIGHUP | 1 | 挂断信号 | 重新加载配置 |
| SIGINT | 2 | 中断信号 | Ctrl+C |
| SIGQUIT | 3 | 退出信号 | Ctrl+\ |
| SIGUSR1 | 10 | 用户自定义 | 自定义操作 |
| SIGUSR2 | 12 | 用户自定义 | 自定义操作 |
系统状态查询
1. 系统信息命令
# 查看系统版本
cat /etc/os-release
lsb_release -a
# 查看内核版本
uname -r
uname -a
# 查看主机名
hostname
hostnamectl
# 查看系统架构
arch
uname -m
# 查看系统运行时间
uptime
# 查看系统负载
uptime
cat /proc/loadavg
w
2. 资源使用命令
内存使用
# 查看内存使用
free -h
# 持续监控内存
watch -n 1 free -h
# 详细内存信息
cat /proc/meminfo
# 查看 swap 使用
swapon -s
磁盘使用
# 查看磁盘空间
df -h
# 查看目录大小
du -sh /path/to/dir
# 查看当前目录下各子目录大小
du -h --max-depth=1
# 查看磁盘 I/O
iostat
iotop
CPU 使用
# 查看 CPU 信息
lscpu
cat /proc/cpuinfo
# 查看 CPU 使用率
top
mpstat 1
# 查看每个核心的使用率
mpstat -P ALL 1
3. 网络状态命令
# 查看网络接口
ip addr
ifconfig
# 查看网络连接
netstat -tunlp
ss -tunlp
# 查看路由表
ip route
route -n
# 测试网络连接
ping <host>
telnet <host> <port>
nc -zv <host> <port>
# 查看网络流量
iftop
nethogs
日志管理命令
1. journalctl - systemd 日志查询
基本用法
# 查看所有日志
journalctl
# 查看最新日志
journalctl -n 100
# 实时查看日志
journalctl -f
# 查看特定服务的日志
journalctl -u nginx
journalctl -u mysql
# 查看特定时间范围的日志
journalctl --since "2025-10-14 00:00:00"
journalctl --since yesterday
journalctl --since "1 hour ago"
# 查看特定优先级的日志
journalctl -p err # 错误及以上
journalctl -p warning # 警告及以上
高级用法
# 查看内核日志
journalctl -k
# 查看启动日志
journalctl -b
journalctl -b -1 # 上次启动
# 按时间倒序查看
journalctl -r
# 输出为 JSON 格式
journalctl -o json
# 查看日志占用的磁盘空间
journalctl --disk-usage
# 清理旧日志
journalctl --vacuum-time=2d # 保留 2 天
journalctl --vacuum-size=500M # 保留 500MB
2. 传统日志文件
常见日志位置
# 系统日志
/var/log/messages # 系统主日志(CentOS/RHEL)
/var/log/syslog # 系统主日志(Ubuntu/Debian)
# 认证日志
/var/log/auth.log # 认证日志(Ubuntu/Debian)
/var/log/secure # 认证日志(CentOS/RHEL)
# 应用日志
/var/log/nginx/ # Nginx 日志
/var/log/mysql/ # MySQL 日志
/var/log/httpd/ # Apache 日志
# 内核日志
/var/log/dmesg # 内核启动日志
/var/log/kern.log # 内核日志
# 邮件日志
/var/log/mail.log # 邮件日志
# cron 任务日志
/var/log/cron # cron 日志
日志查看技巧
# 查看实时日志
tail -f /var/log/messages
# 查看最近的错误
grep -i error /var/log/messages | tail -50
# 查看特定时间的日志
sed -n '/Oct 14 10:00/,/Oct 14 11:00/p' /var/log/messages
# 统计错误次数
grep -i error /var/log/messages | wc -l
# 查看特定 IP 的访问
grep "192.168.1.100" /var/log/nginx/access.log
实用场景示例
场景 1:部署新服务
# 1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/myapp.service
# 2. 重新加载 systemd 配置
sudo systemctl daemon-reload
# 3. 启动服务
sudo systemctl start myapp
# 4. 检查服务状态
sudo systemctl status myapp
# 5. 查看服务日志
journalctl -u myapp -f
# 6. 启用开机自启动
sudo systemctl enable myapp
场景 2:排查服务问题
# 1. 查看服务状态
systemctl status <service>
# 2. 查看最近的日志
journalctl -u <service> -n 100
# 3. 实时查看日志
journalctl -u <service> -f
# 4. 查看错误日志
journalctl -u <service> -p err
# 5. 检查进程是否运行
ps aux | grep <service>
# 6. 检查端口是否监听
netstat -tunlp | grep <port>
ss -tunlp | grep <port>
# 7. 检查资源使用
top -p <pid>
场景 3:系统性能分析
# 1. 查看系统负载
uptime
# 2. 查看 CPU 使用情况
top
htop
# 3. 查看内存使用
free -h
# 4. 查看磁盘使用
df -h
du -sh /*
# 5. 查看磁盘 I/O
iostat -x 1
iotop
# 6. 查看网络流量
iftop
nethogs
# 7. 分析启动耗时
systemd-analyze
systemd-analyze blame
场景 4:查看和分析日志
# 1. 查看系统日志
tail -f /var/log/messages
# 2. 查看特定服务的日志
journalctl -u nginx -f
# 3. 查看特定时间的日志
journalctl --since "2025-10-14 10:00:00" --until "2025-10-14 11:00:00"
# 4. 搜索错误日志
grep -i error /var/log/messages | tail -50
# 5. 统计日志中的关键词
grep "error" /var/log/messages | wc -l
# 6. 查看日志文件大小
ls -lh /var/log/
# 7. 归档旧日志
gzip /var/log/oldlog.log
常见问题与解决方案
问题 1:修改服务配置后不生效
# 原因:忘记 reload systemd 配置
# 解决方案:
sudo systemctl daemon-reload
sudo systemctl restart <service>
问题 2:服务无法启动
# 排查步骤:
# 1. 查看服务状态
systemctl status <service>
# 2. 查看详细日志
journalctl -xe -u <service>
# 3. 检查配置文件语法
<service> -t # 如 nginx -t
# 4. 检查端口是否被占用
netstat -tunlp | grep <port>
问题 3:日志文件过大
# 方案 1:清理 journalctl 日志
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=7d
# 方案 2:轮转日志文件
sudo logrotate -f /etc/logrotate.conf
# 方案 3:手动清理
sudo truncate -s 0 /var/log/large.log
问题 4:系统负载高
# 排查步骤:
# 1. 查看负载
uptime
# 2. 查看 CPU 占用
top
# 3. 查看内存占用
free -h
# 4. 查看磁盘 I/O
iostat -x 1
# 5. 查看进程
ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10
# 6. 查看网络连接
netstat -tunp | wc -l
总结
最常用的命令组合
日常运维
systemctl status <service> # 查看服务状态
journalctl -u <service> -f # 实时查看日志
ps aux | grep <process> # 查看进程
top / htop # 监控系统
free -h # 查看内存
df -h # 查看磁盘
问题排查
systemctl status <service> # 服务状态
journalctl -xe -u <service> # 详细日志
tail -f /var/log/messages # 系统日志
netstat -tunlp # 网络连接
ps aux --sort=-%cpu # CPU 占用
dmesg | tail # 内核日志
性能分析
uptime # 负载
top # 实时监控
iostat -x 1 # 磁盘 I/O
iftop # 网络流量
systemd-analyze blame # 启动分析
快速参考卡片
systemctl 命令速查
systemctl start/stop/restart/reload <service>
systemctl status <service>
systemctl enable/disable <service>
systemctl daemon-reload # 重新加载配置
systemctl list-units --type=service # 列出服务
日志命令速查
journalctl -u <service> -f # 实时查看服务日志
journalctl --since "1 hour ago" # 最近 1 小时
tail -f /var/log/messages # 实时查看系统日志
grep -i error /var/log/messages # 搜索错误
进程命令速查
ps aux | grep <process> # 查找进程
top / htop # 实时监控
kill <pid> # 终止进程
kill -9 <pid> # 强制杀死
pkill <name> # 按名称杀死
文档版本: 1.0
最后更新: 2025-10-14
适用系统: CentOS/RHEL 7+, Ubuntu 16.04+, Debian 9+(使用 systemd 的系统)
Linux高级命令使用指南
7463

被折叠的 条评论
为什么被折叠?



