Linux 高级命令使用指南

Linux高级命令使用指南

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-reloaddaemon-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"
常用信号
信号数字说明用途
SIGTERM15终止信号优雅关闭(默认)
SIGKILL9强制杀死立即终止,无法捕获
SIGHUP1挂断信号重新加载配置
SIGINT2中断信号Ctrl+C
SIGQUIT3退出信号Ctrl+\
SIGUSR110用户自定义自定义操作
SIGUSR212用户自定义自定义操作

系统状态查询

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 的系统)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值