2-linux命令-系统信息与监控

38 阅读7分钟

大纲

文本查看与处理

直接用就行、head\tail\less\cat用的很多

命令功能典型场景
cat连接文件并打印cat file1 file2 > merged
tac倒过来看日志tac file.log
head显示文件开头部分head -n 20 file.log
tail显示文件末尾部分tail -f app.log (实时追踪)
less分页浏览文件(可回滚)less +F syslog
nl显示行号nl -b a file.py, 类似cat -n

系统信息与监控

命令功能关键参数
top动态进程监控top -c(显示完整命令)
ps进程快照ps aux(详列所有进程)
lsof进程监控lsof -i
uptime系统运行时间与负载uptime
date显示/设置系统时间date +"%Y-%m-%d %H:%M"

top

  • 常用启动参数

    参数功能描述示例
    -d设置刷新间隔(秒)top -d 2(每 2 秒刷新)
    -n指定刷新次数后退出top -n 5(刷新 5 次后退出)
    -p监控指定 PID 进程top -p 1234(查看 PID 1234 进程)
    -b批处理模式(输出到文件)top -b -n 10 > top.log
    -c显示完整命令路径top -c(默认仅显示命令名)
    -H线程模式top -H -p pidof mysqld
  • 交互快捷键(运行中使用)

    按键功能
    q退出 top
    P按 CPU 使用率排序(降序)
    M按内存使用率排序(降序)
    T按累计 CPU 时间排序
    f自定义显示列(按 a-z 切换列的显示/隐藏)
    k终止指定进程(需输入 PID 并确认信号)
    1切换显示单个/所有 CPU 核心信息
  • 栏位信息简介

    us      sy     ni         id    wa       hi     si            st
    用户空间 内核空间 调整nice时间 空闲 等待IO时间  硬中断  软中断(模式切换) 虚拟机偷走的时间
    
  • top 命令各列含义详解

    • PR: 进程调度优先级

      • 值越小优先级越高(实时优先级:099;普通优先级:100139 - 负值表示高优先级进程
      • 优先级由内核动态调整,nice 值影响普通优先级范围
    • NI:用户态优先级修正值

      • 范围:-20(最高)到 19(最低) - 通过 nice 命令调整,影响 CPU 时间分配权重
      • NI 值修改进程的调度竞争能力,非 root 用户只能调低优先级
    • VIRT:虚拟内存总量(KB)

      • 公式:VIRT = SWAP + RES
      • 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
    • RES:实际使用的物理内存(KB)

      • 公式:RES = CODE + DATA
      • 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
      • 关于库占用内存的情况,它只统计加载的库文件所占内存大小
    • s:进程状态

      • R=运行, S=睡眠, D=不可中断睡眠, Z=僵尸, T=暂停
      • 僵尸进程(Z)需手动清理;D 状态进程通常等待 I/O 操作
    • SHR:共享内存量(KB)

      • 除了自身进程的共享内存,也包括其他进程的共享内存
      • 共享库整体映射到 VIRT,但仅实际加载部分计入 RES
      • 计算某个进程所占的物理内存大小公式:RES – SHR
      • swap out后,它将会降下来
    • %CPU: CPU 时间占用百分比

      • 统计周期:上次刷新到当前的时间片占用多核环境下可能超过 100%(如 200%=占满 2 核)
    • %MEM:物理内存占用百分比

      • 公式:(RES / 总物理内存) * 100% 直接关联 RES
    • TIME+:累计 CPU 占用时间

      • 格式:分:秒.毫秒 ,精度为 1/100 秒(比 TIME 列更精确)
      • 统计进程生命周期内消耗的总 CPU 时间
    • COMMAND:进程名称/命令行

      • 默认显示程序名(如 java) - 按 c 键切换完整命令行路径(如 /usr/bin/java -Xmx2G
      • f 键可自定义显示列(如增加 PPIDUSER 等)
  • 物理内存 vs 虚拟内存

    • RES 是实际消耗的物理内存,直接影响系统性能;
    • VIRT 包含磁盘映射和预留空间,不直接占用物理资源

ps

  • 参数

    参数组合功能描述适用场景
    ps -e显示系统中所有进程快速查看整体进程数量
    ps -f全格式输出(含UID、PID、PPID等)需详细进程关系时使用
    ps -ef显示所有进程的全格式信息系统级进程排查
    ps -u 用户名查看指定用户的进程按用户维度监控资源
    ps aux显示所有用户进程(BSD风格)包含CPU/内存占用率
    ps -C 命令名列出指定命令的进程查找特定应用的运行状态
  • 状态码

    状态代码描述
    R运行中
    S休眠状态,可被信号唤醒
    D不可中断休眠(通常为IO等待)
    T进程被暂停(如收到SIGSTOP信号)
    Z僵死进程,需父进程释放资源
    +前台进程
    l多线程进程
    L内存分页并带锁
    N低优先级进程
    <高优先级进程
    s会话领导者(子进程发起者)
  • 示例

    # 查询你拥有的所有进程
    ~]# ps -x# 显示指定用户名(RUID)或用户ID的进程
    ~]# ps -fU root# 显示指定的进程ID对应的进程
     ~]# ps -fp 925
    UID         PID   PPID  C STIME TTY          TIME CMD
    root        925      1  0 20:52 ?        00:00:02 /usr/bin/dockerd -H fd:// --containerd=/run/contai
    

lsof

  • 参数

    参数含义示例
    -c <进程名>显示指定进程打开的文件lsof -c ssh(显示ssh进程相关文件)
    -u <用户名>显示指定用户打开的文件lsof -u root(root用户的打开文件)
    -p <PID>显示指定进程ID的文件lsof -p 1234(进程1234的打开文件)
    -i显示网络文件(TCP/UDP)lsof -i:8080(查看8080端口占用)
    -t <文件路径>仅输出占用文件的进程IDlsof -t /var/log/syslog(获取占用日志的PID)
  • 示例

    ~]# lsof -c ssh  # 这里要用进程名,而不是pid号
    ~]# lsof -p 1234 # 这里要用pid号~]# lsof -a -u root -p9534  # 查看全部进程用户为root pid=9534
    
  • lsof 命令各列含义详解

    • COMMAND:进程名称(如 pure-ftpdnginx)。表示打开文件的进程对应的程序名

    • PID:进程ID;

    • USER:进程所有者;

    • FD:文件描述符

      • 数字(如 4u):文件句柄编号,后缀表示模式(u=读写,r=读,w=写)
      • 特殊值cwd(当前工作目录)、txt(程序代码文件)、rtd(根目录)
    • TYPE:文件类型

      • REG:普通文件
      • DIR:目录
      • IPv4/IPv6:网络连接(TCP/UDP)
      • CHR:字符设备 • FIFO:管道文件
    • NAME:文件或资源的完整路径/标识

      • 本地文件/var/log/syslog
      • 网络连接TCP *:8080 (LISTEN)(监听8080端口的TCP连接)

date

  • 格式与选项

    标记含义示例(当前时间:2025-10-28 22:45:44)
    %Y4位年份2025
    %m月份(01-12)10
    %d日期(01-31)28
    %H24小时制小时(00-23)22
    %M分钟(00-59)45
    %S秒(00-60)44
    %F日期(%Y-%m-%d)2025-10-28
    %T时间(%H:%M:%S)22:45:44
  • 关键选项

    • 示例1:date -d "2025-10-28 +1 month" +%F → 2025-11-28

    • 示例2:date -d "2025-10-28 -1 year" +%Y → 2024

    • 示例3: date +%s # 转换为时间戳

      ~]# date -d "$(echo 20251029 23:59:59)"
      2025年 10月 29日 星期三 23:59:59 CST
      ​
      ~]# date -d "$(echo 20251029 23:59:59)" +%s
      1761753599
      
    • 示例4: 将时间戳转换为时间

      ~]# date -d @1761753599
      2025年 10月 29日 星期三 23:59:59 CST
      
    • 示例5: 显示日历

      ~]# cal -y 2025
      
    • 示例6:查看时区

      ~]# ll  /etc/localtime 
      ---- /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
      

uptime

  • 理论

    • 通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
    • 同学需要平均负载:指在特定时间间隔内运行队列中的平均进程数
    • 如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使 用
  • 示例

    # 显示当前时间以及系统负载
     ~]#   uptime
     21:32:32 up 40 min,  1 user,  load average: 0.09, 0.06, 0.05