LINUX管理常用工具

psql 常用 \ 命令

1. 基本帮助

  • \? :显示所有可用的 psql 命令帮助
  • \h :显示 SQL 命令的语法帮助(如:\h SELECT

2. 数据库相关

  • \l\list :列出所有数据库
  • \c dbname\connect dbname :连接到数据库
  • \conninfo :显示当前连接信息

3. 表和模式

  • \dt :列出当前模式下的所有表
  • \dt *.* :列出所有模式下的所有表
  • \d tablename :描述表的结构(字段、类型、约束等)
  • \d+ tablename :详细描述表(包括存储、大小信息)
  • \ds :列出序列
  • \dv :列出视图
  • \df :列出函数
  • \di :列出索引

4. 查询结果显示

  • \x :切换扩展显示模式(横向/纵向显示结果)
  • \pset border 2 :设置表格边框样式
  • \pset pager off :禁用分页

5. SQL 执行与脚本

  • \e :打开外部编辑器编辑 SQL(默认 vim/nano)
  • \i filename.sql :执行 SQL 文件
  • \o filename :把查询结果输出到文件(再用 \o 关闭输出)
  • \! command :执行操作系统命令(例如 \! ls

6. 历史与变量

  • \s :查看命令历史
  • \s filename :保存命令历史到文件
  • \set :设置变量
  • \echo :var :输出变量值

7. 事务与连接管理

  • \password :修改当前用户密码
  • \q :退出 psql

常见组合示例

1
2
3
4
5
\c mydb          -- 连接到 mydb 数据库
\dt -- 列出当前数据库中的表
\d weather -- 查看 weather 表的结构
\h INSERT -- 查看 INSERT 语法帮助
\q -- 退出 psql

LINUX中常用命令

top

top是一个 实时系统监控工具,预装于大多数 Unix/Linux/macOS/BSD 系统中。它会持续刷新显示当前系统中运行的进程及资源占用情况,帮助你快速了解系统的整体负载和瓶颈。
进入 top 界面后,你会看到一个持续刷新的表格。
按下 q 可以退出。

常见用途:

  • 查看 CPU、内存、Swap 使用情况

  • 找出 占用资源最高的进程

  • 实时监控 PostgreSQL 或其他服务进程的运行状态

系统概要信息

说明:

  • load average:过去 1/5/15 分钟的系统平均负载
    (一般来说,低于 CPU 核心数属于正常)

  • Tasks:任务数量(运行中、睡眠、停止、僵尸)

  • %Cpu(s):CPU 各项占比

  • us:用户空间使用率

  • sy:内核空间使用率

  • ni:nice值调整后的进程

  • id:空闲

  • wa:等待IO

  • hi/si:硬中断、软中断

  • st:虚拟机被偷取时间(steal)

  • Mem/Swap:内存与交换分区使用情况

进程列表(后半部分)

列名 含义
PID 进程 ID
USER 进程所属用户
PR 优先级(Priority)
NI nice 值(影响调度优先级)
VIRT 虚拟内存总量(包含swap与映射文件)
RES 实际占用的物理内存
SHR 共享内存
S 状态(R=运行,S=睡眠,Z=僵尸)
%CPU CPU使用率
%MEM 内存使用率
TIME+ 占用CPU时间累计
COMMAND 进程名或命令

交互快捷键

快捷键 功能
q 退出
h 帮助
P 按 CPU 使用率排序
M 按内存使用率排序
T 按 CPU 时间排序
k 杀死进程(输入 PID)
r 修改进程 nice 值
1 显示每个 CPU 核心的使用率
Shift + E 切换内存显示单位(KB/MB/GB)
Shift + W 保存当前配置到 ~/.toprc

常用参数

1
2
3
4
top -u wqstage        # 只看 wqstage 用户的进程
top -p 1234,5678 # 只监控指定 PID
top -d 2 # 每2秒刷新一次
top -n 1 # 仅显示一次后退出

sysstat

sysstat是一个 Linux 性能监控工具集(package),
它包含多个命令行工具,用于 收集、记录、分析 CPU、内存、磁盘、网络等性能数据。
,远比单纯的 top 更全面、更持久。

功能介绍

1. 数据采集(由 sadc 和 cron 定时执行)
每隔一定时间(默认10分钟)收集一次系统性能数据。数据保存在 /var/log/sa/saXX 文件中(XX 为日期)。
2. 数据分析(由 sar, iostat, pidstat 等命令读取这些文件)
这让你能事后分析(例如:凌晨性能下降但没在线监控),绘制趋势图(CPU 使用率、IO、负载随时间变化),精确定位瓶颈(CPU、IO、内存、上下文切换等)

常用工具

1. sar —— System Activity Reporter
是一个综合性能统计工具。

1
2
3
4
5
6
7
sar -u 1 3           # 每1秒报告一次CPU使用率,共3次
sar -r # 显示内存使用统计
sar -n DEV # 网络接口流量
sar -q # 系统负载
sar -d # 磁盘I/O统计
sar -P ALL # 每个CPU核的统计
sar -f /var/log/sa/sa24 # 查看历史数据

2. iostat —— I/O 性能分析
主要用于分析磁盘和CPU性能(特别适合 PostgreSQL 数据库IO瓶颈分析)。

1
iostat -x 1 3

3. mpstat —— 多CPU核心分析

1
mpstat -P ALL 1 3

输出每个核心的利用率,帮助你判断是否单核瓶颈。
4. pidstat —— 按进程统计资源占用
比 top 更适合做进程级性能分析。

1
2
3
4
pidstat -u 1         # 查看每秒进程CPU使用率
pidstat -r 1 # 进程内存统计
pidstat -d 1 # 进程磁盘I/O统计
pidstat -p <pid> 1 # 监控指定进程

awk

Awk 是一款多功能的文本处理工具,广泛用于各种数据操作、日志分析和文本报告任务。它特别适合处理结构化文本数据,例如列中的数据。Awk 可以轻松提取特定字段或对其进行计算,使其成为日志分析的理想选择。
专门用于:逐行读取文本(如日志、CSV、配置文件),根据匹配条件提取字段,对数据进行计算、格式化输出

语法结构

基本语法结构

1
awk 'pattern { action }' filename

执行流程awk 从输入逐行读取文本,若行符合 pattern 条件 → 执行 { action },若不符合 → 跳过,直到文件结束。

常见内置变量:

变量 含义
$0 当前整行文本
$1$2、… 当前行的第1、第2、…列
NF 当前行字段数(Number of Fields)
NR 当前行号(Number of Records)
FS 输入字段分隔符(Field Separator)
OFS 输出字段分隔符(Output Field Separator)
RS 输入记录分隔符(Record Separator)
ORS 输出记录分隔符(Output Record Separator)

一些示例

1. 直接读取文件

1
awk '{print $1,$3}' /etc/passwd

2. 通过管道从前一个命令接收输入(最常用)

1
ps aux | awk '{print $1,$2,$3,$11}'

3.查看 CPU 使用率最高的进程

1
ps aux | awk 'NR>1 {print $1, $2, $3, $11}' | sort -k3 -nr | head

ps aux → 显示所有进程,NR>1 → 跳过第一行表头,$1 $2 $3 $11 → 用户、PID、CPU%、命令,sort -k3 -nr → 按第3列(CPU使用率)倒序,head → 取前10个
4. 提取 PostgreSQL 慢查询日志的执行时间

1
grep "duration:" postgresql.log | awk '{print $NF}' | sort -n | tail

grep “duration:” → 匹配执行时间行,$NF → 取最后一个字段(单位通常是 ms),sort -n | tail → 排序后取最长的几条
5. 查看磁盘使用率

1
df -h | awk 'NR>1 {print $1, $5}'

grep

grep(Global Regular Expression Print)是一种 文本搜索工具,可以在文件或输入流中查找匹配指定模式(字符串或正则表达式)的行。

基本语法

1
2
3
4
grep [选项] '模式' 文件名

或配合管道:
command | grep '模式'

常用选项:

选项 含义
-i 忽略大小写(ignore case)
-v 反向匹配,显示不包含该模式的行
-n 显示匹配的行号
-r-R 递归搜索目录
-l 仅显示匹配文件的文件名
-c 统计匹配的行数(count)
-o 只输出匹配的内容本身
-E 使用扩展正则表达式(等价于 egrep
-A NUM 显示匹配行 的 NUM 行(After)
-B NUM 显示匹配行 的 NUM 行(Before)
-C NUM 显示匹配行 前后 各 NUM 行(Context)

常见用法

  1. 在文件中搜索字符串
    1
    grep "ERROR" postgresql.log
  2. 多文件搜索
    1
    grep "timeout" /var/log/postgresql/*.log
  3. 与其他命令组合使用

grep 通常是 日志分析管道的第一步,后续再用 awk、sort、uniq、head 等继续处理。

1
2
3
4
5
6
# 查找错误类型出现频率
grep "ERROR" postgresql.log | awk '{print $6}' | sort | uniq -c | sort -nr

# 统计某天执行耗时大于100ms的SQL数量
grep "duration:" postgresql.log | awk '$2>100 {count++} END {print count}'

sed

sed 即 Stream EDitor(流编辑器)。它的作用是:从输入流(文件或管道)中逐行读取文本,根据你定义的规则(删除、替换、插入等)进行处理,再输出修改后的结果。

语法

1
2
3
4
sed [选项] '命令' 文件名

或通过管道:
command | sed '命令'

常用命令:

操作 示例 说明
替换 sed 's/old/new/' file 替换每行第一个匹配项
全部替换 sed 's/old/new/g' file 替换每行所有匹配项
忽略大小写 sed 's/old/new/gi' file 替换时不区分大小写
删除行 sed '/pattern/d' file 删除匹配行
删除空行 sed '/^$/d' file 删除空白行
仅打印匹配行 sed -n '/pattern/p' file 类似 grep
替换并写回原文件 sed -i 's/old/new/g' file 修改文件本身
在第 N 行插入 sed '3i\insert text' file 在第3行前插入内容
在第 N 行后追加 sed '3a\append text' file 在第3行后追加内容
替换第 N 行内容 sed '5c\new text' file 用“new text”替换第5行
显示行号 sed = file 输出行号

示例

  1. 替换文本
    1
    sed 's/error/ERROR/' postgresql.log
    将每行第一次出现的 error 替换为 ERROR。
  2. 修改原文件
    1
    2
    3
    4
    5
    sed -i 's/max_connections = 100/max_connections = 200/' /etc/postgresql/15/main/postgresql.conf
    ##⚠️ -i 表示直接修改文件(危险操作,建议加备份):

    sed -i.bak 's/100/200/' postgresql.conf
    ## → 生成备份文件 postgresql.conf.bak
  3. 查看最近错误上下文
    1
    2
    grep -n "ERROR" postgresql.log | tail -1 | awk -F: '{print $1}' | xargs -I{} sed -n '{}-5,{}+5p' postgresql.log
    ## 定位最后一条 ERROR,打印前后 5 行上下文。
  • Copyrights © 2023-2025 Hexo

请我喝杯咖啡吧~

支付宝
微信