Linux 命令(top/ps/netstat/vmstat/grep/sed/awk)及服务管理(systemd)
top、ps、netstat这些都属于系统监控和网络工具,grep、sed、awk则是文本处理三剑客,加上systemd服务管理
top动态实时监控系统进程
动态实时的运行中系统的完整视图。它可以显示系统摘要信息(负载、CPU、内存等)和当前正在由内核管理的进程列表
P
(大写): 按CPU使用率排序M
(大写): 按内存使用率排序N
(大写): 按PID(进程ID)降序排序k
(小写): 终止一个进程。会提示输入要终止的进程PIDq
(小写): 退出top
1
(数字): 显示所有CPU核心的详细使用情况
ps
- 查看进程快照
用于报告当前时刻的进程状态快照。常用于查看进程的详细信息(如PID、启动命令、占用资源等)。
ps aux # 查看系统所有进程的详细信息
ps aux | grep nginx # 配合grep,查找与nginx相关的进程
ps -ef | grep java # 同上,另一种风格
ps -p 1234 -o pid,pcpu,pmem,comm # 查看指定PID(1234)的进程的CPU、内存等信息
netstat
- 查看网络状态(逐渐被ss
取代)
用于显示各种网络相关信息,如网络连接、路由表、接口统计、伪装连接、多播成员等。但更推荐使用ss
命令,因为它更快更高效。
-t
: 显示TCP连接-u
: 显示UDP连接-l
: 仅显示监听状态的套接字-n
: 以数字形式显示地址和端口号(不进行DNS解析)-p
: 显示正在使用套接字的进程/程序PID和名称-a
: 显示所有选项(监听+非监听)
ss 是 Linux 中用于查看套接字统计信息的命令,功能类似于 netstat,但速度更快,提供更详细的网络连接状态信息。
1. 查看所有的套接字连接
ss -a
2. 查看 TCP 连接
ss -t
3. 查看 UDP 连接
ss -u
4. 查看正在监听的套接字
ss -l
5. 显示与套接字关联的进程信息
ss -p
6. 显示网络连接的摘要信息
ss -s
7. 显示 IPv4 套接字
ss -4
8. 显示 IPv6 套接字
ss -6
9. 查看详细的 TCP 套接字状态和计时器信息
ss -o
实例
1. 查看所有 TCP 连接并显示进程
ss -t -a -p
2. 查看正在监听的 TCP 端口
ss -t -l
3. 查看所有 UDP 连接
ss -u -a
4. 查看指定端口的连接
ss -t '( dport = :80 or sport = :80 )'
5. 查看每个套接字的内存使用情况
ss -m
6. 查看 IPv6 网络连接
ss -6 -t -a
7. 简单的套接字统计摘要
ss -s
vmstat
- 查看虚拟内存状态
报告关于进程、内存、分页、块IO、陷阱(中断)和CPU活动的虚拟内存统计信息。
vmstat 1 # 每1秒刷新一次,直到按Ctrl+C中断
vmstat 2 5 # 每2秒刷新一次,一共输出5次
grep/sed/awk-文本三剑客
这三个命令的强大之处在于它们可以通过管道(|
)组合使用。
grep
- 文本搜索工具
强大的文本搜索工具,使用正则表达式搜索文本,并把匹配的行打印出来。
常用命令选项:
-i
: 忽略大小写-v
: 反向选择,即显示不包含匹配文本的所有行-n
: 显示匹配行的行号-c
: 只输出匹配行的总数-r
或-R
: 递归搜索目录下的所有文件-E
: 使用扩展正则表达式
grep "error" /var/log/syslog # 在syslog文件中搜索包含"error"的行
ps aux | grep sshd # 在进程列表中搜索sshd进程
grep -rn "config" /etc/nginx/ # 递归搜索/etc/nginx/目录下所有文件中的"config"
grep -E "error|fail|warning" log.txt # 使用扩展正则,匹配error或fail或warning
sed
- 流编辑器
用于对输入流(文件或管道)进行基本的文本转换。
常用命令选项:
-e
: 指定要执行的sed命令-i
: 直接修改文件内容(慎用! 最好先不加-i
测试无误后再用)s/替换目标/替换内容/[flags]
: 替换命令,最核心的功能。
# 将file.txt中的old替换为new,但只输出到屏幕,不修改原文件
sed 's/old/new/g' file.txt# 直接修改原文件(-i),并将所有#开头的行(注释)删除
sed -i 's/^#.*//g' file.cfg
sed -i '/^#/d' file.cfg # 另一种写法:删除所有以#开头的行# 显示文件的第10到20行
sed -n '10,20p' file.txt# 在每一行的行首添加一个字符串
sed 's/^/prefix /' file.txt
awk
- 文本和数据处理编程语言
它擅长处理结构化文本(如日志、CSV),尤其是按列处理。它会自动将每行按空格(或指定分隔符)分割成多个字段,用$1
, $2
...表示。
常用命令选项:
-F
: 指定输入字段的分隔符,默认为空格或制表符。
# 打印/etc/passwd文件中以冒号分隔的第一和第三列(用户名和用户ID)
awk -F: '{print $1, $3}' /etc/passwd# 打印ls -l输出中文件大小(第5列)和文件名(第9列)
ls -l | awk '{print $5, $9}'# 有条件的处理:打印文件长度大于100字节的文件名
ls -l | awk '$5 > 100 {print $9}'# 使用内置变量:NR代表行号,NF代表每行的字段数
awk '{print NR, NF, $0}' file.txt # 打印每行的行号、列数和整行内容# 计算第一列的数字之和
awk '{sum += $1} END {print sum}' data.txt
文本三剑客组合
# 查找nginx进程,提取其PID,并传递给kill命令
ps aux | grep nginx | grep -v grep | awk '{print $2}' | xargs kill# 分析日志:统计404错误的出现次数
grep '404' access.log | awk '{print $7}' | sort | uniq -c | sort -nr
服务管理 (systemd
)
systemd
作为初始化系统和服务管理器。
作用 | 命令 |
---|---|
启动一个服务 | sudo systemctl start service_name |
停止一个服务 | sudo systemctl stop service_name |
重启一个服务 | sudo systemctl restart service_name |
重新加载配置文件(不重启服务) | sudo systemctl reload service_name |
查看服务状态 | sudo systemctl status service_name |
设置开机自启 | sudo systemctl enable service_name |
禁用开机自启 | sudo systemctl disable service_name |
查看是否开机自启 | sudo systemctl is-enabled service_name |
查看所有已启动的服务 | sudo systemctl list-units --type=service |
常用服务名举例:
nginx
/httpd
(Apache)ssh
mysql
/mysqld
docker
firewalld
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx# 查看Nginx的状态
sudo systemctl status nginx
# 输出中如果看到 "active (running)" 和 "enabled" 就表示服务正常运行且开机自启。# 修改防火墙配置后,重新加载使其生效
sudo systemctl reload firewalld