运维日志维护工具

1. 系统状态查看

1.1 w命令

[fangfc@node10011 ~]$ w
 21:18:24 up 54 min,  1 user,  load average: 0.00, 0.01, 0.04
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
fangfc   pts/0    192.168.10.1     21:18    0.00s  0.08s  0.00s w

1.1.1 内容解析: - 第一行: + 21:18:24 系统当前时间 + up 54 min, 系统开机到现在过去 多长时间 + 1 user, 当前在线用户人数 + load average: 1, 2, 3 系统平均负载状态, 1分钟, 5分钟, 15分钟 - 第二,三行: + User 表示已登陆的用户的用户名 + TTY 登陆的终端号 + FROM 远程主机的地址 + LOGIN@ 登陆的时间 + IDLE 空闲了多长时间, 这个世纪时期, 一旦用户执行了任何操作, 计时器被重置 + JCPU 和 tty 连接进程占用的时间, 这个时间不包括后台进程占用的时间
+ PCPU 值当前进程(在WHAT显示的进程) 占用的时间 + WHAT 当前正在执行的进程命令行

1.1.2 选项

-h  --no-neader     不显示头信息
-u  --no-current    统计忽略当前进程的用户
-s  --short         短格式显示
-o  --old-style     传统样式输出内容
-i  --ip-addr       显示IP地址, 不会进行域名解析

1.2 vmstat命令

[fangfc@node10011 ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 3590068   2108 153460    0    0     7     0   18   16  0  0 100  0  0

1.2.1 内容解析 - 第一类 procs + r 表示正在运行的进程数, 如果该数值超过了CPU数,就可能出现CPU瓶颈 + b 被阻塞了的进程

- 第二类 memory
    + swpd  已使用的虚拟内存, 如果该值超过了 0, 表示物理内存不足了, 已近使用了swap
    + free  空闲的物理内存大小.
    + buff  用作缓冲区的内存数
    + cache     用作缓存的内存数

- 第三类 swap 
    + si    从磁盘交换到内存的交换也数量(kb/s)
    + so    从内存交换到磁盘的交换页数据(kb/s)

- 第四类 io
    + bi    IO 发送到块设备的块数(/s)
    + bo    IO 从块设备接收的块数(/s)

- 第五类 system
    + in    每秒中断数a,包括时钟中断
    + cs    每秒上下文交换次数

- 第六类 cpu
    + us    用户进程使用的 CPU 时间(%)
    + sy    系统进程使用的 CPU 时间(%)
    + id    CPU 空闲 时间(%)
    + wa    等待IO操作消耗的CPU 空闲 时间(%)
    + st    从虚拟设备中获得的时间(%)

1.2.2 vmstat 选项

-a:     显示活跃和非活跃内存
-f:     显示从系统启动到现在的 fork 数量
-m:     显示slabinfo
-n:     只需在开始显示一次各字段名称
-s:     显示内存相关统计信息以及多种系统活动数量
-d:     磁盘相关读写信息
-D:     统计磁盘信息
-p:     显示磁盘分区信息
-S:     显示指定单位显示 有 k,K,m,M

1.3 top 命令

top - 21:59:45 up  1:35,  1 user,  load average: 0.01, 0.03, 0.05
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3863568 total,  3589656 free,   117848 used,   156064 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  3525736 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                   
     6 root      20   0       0      0      0 S   0.3  0.0   0:00.44 kworker/u256:0                                                            
    20 root      20   0       0      0      0 S   0.3  0.0   0:02.64 kworker/2:0                                                               
    59 root      20   0       0      0      0 S   0.3  0.0   0:07.79 kworker/0:2                                                               
  1456 fangfc    20   0  154588   2260    956 S   0.3  0.1   0:00.29 sshd                                                                      
  1505 fangfc    20   0  161964   2208   1544 R   0.3  0.1   0:00.03 top 

1.3.1 内容解析 + 第一行: * 与w命令一样 + 第二行: Tasks * Ntotal: 当前多少个进程 * N running: 当前运行的进程数 * N sleeping: 睡眠状态的进程数 * N stopped: 停止的进程数 * N zombie: 僵死的进程数 + 第三行: %Cpu(s) * 0.1%us 用户的进程占用CPU时间百分比 * 0.2%sy 内核的占用CPU时间百分比 * 0.2%ni renice 值为负的用户进程占用CPU时间百分比, nice 是优先级的意思 * 0.2%id 空闲CPU时间百分比 * 0.2%wa 等待I/O 的 CPU时间百分比 * 0.2%hi CPU硬中断时间百分比 * 0.2%si CPU软中断 时间百分比 + 第四行: Kib * 0k total 交换空间总量 * 0k used 使用的交换空间 * 0k free 空闲的交换空间 * 10000k cached: 缓存的交换空间 + 第五行: (后面的内容都是第五行的) * PID 进程ID * USER 进程所有者 * PR 进程优先级 * NI nice 值 * VIRT 占用的虚拟内存 * RES 占用的物理内存 * SHR 使用的共享内存 * S 进行状态S 休眠, R运行, Z僵死, N nice为负 * %CPU 占用的 CPU 百分比 * %MEM 占用内存百分比 TIME+ 占用CPU 时间累加值 COMMAND 启动进程的命令

1.3.2 选项和命令

  • 选项
-d      指定刷新的时间间隔
-p      通过指定监控进程ID 来仅仅监控某个进程状态
-s      是top 在安全模式中运行, 去除交互中的潜在危险
-S      使用累计模式
-i      不显示闲置或僵死进程
-c      显示命令行, 而不是命令名

  • 命令
# top 命令显示结果是窗口模式, 可以使用top 的交互命令操作
Ctrl+L:     擦写屏幕
K:          使用kill 功能, 可以终止进程号, 如果不能正常终止, 可以使用信号9 强制结束.
i:          忽略闲置和僵尸进程
q:          退出
r           重新安排一个进程优先级, 会提示用户输入进程PID 以及优先级, 默认是10
S           切换到累计模式
s           改变刷新时间
f/F         从当年前闲置中添加/删除 项目
o/O         改变显示项目顺序
l           切换平均负载, 启动时间信息
m           切换内存显示信息
t           切换进程和cpu 状态信息
c           切换命令名称完整度

M           根据占用内存大小排序
P           根据占用CPU 百分比排序
T           根据累计时间排序
W           将设置写入 top /.toprc 文件中, 下次打开使用该配置的设置

1.4 sar 命令

  • sar 命令是用于对系统的活动进行报告, 包括读写, 系统调度, 磁盘I/O, CPU 效率, 内存使用率, 进程活动, IPC 有关活动等等.

1.4.1 命令格式以及选项 sar [options] [-O] [-o file] t [n]

t:      采样间隔, 
n       采样次数
-o file     将结果放在文件中
  • 常用选项
-A:     报告所有信息
-u:     输出CPU 统计信息
-v:     输出 inode, 文件, 以及内核统计信息
-d:     输出每一块设备的活动信息
-r:     输出内存交换空间统计信息
-b:     统计I/O 相关信息
-a:     文件读写情况
-c:     输出 进程信息, 
-R:     输出内存页面的统计信息
-y:     终端活动情况
-w:     输出系统交换活动信息

1.4.2 统计CPU信息

[fangfc@node10011 sa]$ sar 1 3 -u
Linux 3.10.0-862.el7.x86_64 (node10011.localdomain)     11/15/2018  _x86_64_    (4 CPU)

11:06:06 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:06:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
11:06:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
11:06:09 PM     all      0.00      0.00      0.00      0.25      0.00     99.75
Average:        all      0.00      0.00      0.00      0.08      0.00     99.92
[fangfc@node10011 sa]$ 

  • 第一行
    • 系统内核版本,以及主机名
  • 第二行 CPU
    • %user: 用户级别占比
    • %nice: 用级别nice操作 占比
    • %system 系统内核 占比
    • %iowait 用于等待 I/O操作 占比
    • %steal 管理员虚拟金城提供服务占比
    • %idle 空闲占比
  • 最后一行
    • 平均信息

1.4.3 统计网络流量信息

[fangfc@node10011 sa]$ sar 1 1 -n DEV
Linux 3.10.0-862.el7.x86_64 (node10011.localdomain)     11/15/2018  _x86_64_    (4 CPU)

11:16:36 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
11:16:37 PM     ens34      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:16:37 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:16:37 PM     ens33      0.00      0.00      0.00      0.00      0.00      0.00      0.00

  • 显示分析:

  • 第二行:

    • 11:12:45 PM 统计时间
    • IFACE 设备名
    • rxpck/s 每秒接受数据包
    • txpck/s 每秒发送数据包
    • rxkB/s 每秒接收 数据字节
    • txkB/s 每秒发送 数据字节
    • rxcmp/s 每秒接收 压缩数据包
    • txcmp/s 每秒发送 压缩数据包
    • rxmcst/s 每秒接收 多播数据包
  • 网络设备

DEV:    网络接口信息
EDEV    网络错误信息
NFS     网络文件系统客户端信息
NFSD    网络文件系统
SOCK    套接字信息
ALL     所有

1.5 nload

1.5.1 nload 是用来监视网络状态和各ip使用速率, nload 显示有上下两块, 上版本分显示 Incoming(流入流量) 下半部分Outgoing 网卡出口流量

1.5.2 选项:

-a:     全部数据的刷新周期,单位是s, 默认300
-i:     进入网卡流量图, 显示比例最大值设置, 默认10240 kBit/s
-m:     不显示流量图, 只显示统计信息
-o:     出口网络流量图的显示最大比例社设置, 默认 10240 kBit/s
-t:     显示数据刷新时间间隔, 单位 ms, 默认500
-u:     右侧 curr, Avg, Min,Ma数据单位
        h,b,k,m,g: auto, Bit/s, kBit/s, MBit/s
        H,B,K,M,G: auto,Byte/s, kByte/s, MByte/s
-U      社会中右侧 Ttl 耽误额数据, 默认是自动变化的, 
DEVICES:    指定监控的网卡设备

1.5.3 内容详解

Curr: 当前部分(上传和下载分开计算), 流量. Avg: 平均流量 Min: 最小流量 Max: 最大流量 Ttl: 流量总和

1.6 磁盘状态命令

iotstat -x 磁盘使用 iotop 磁盘使用

iostat 工具可以查看到系统IO 状态信息

[fangfc@node10011 sa]$ iostat
Linux 3.10.0-862.el7.x86_64 (node10011.localdomain)     11/15/2018  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.11    0.00    0.10    0.01    0.00   99.78

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdb               0.01         0.37         0.00       4312          0
sdc               0.01         0.18         0.00       2128          0
sda               0.73        31.84        73.12     374658     860256
dm-0              0.71        29.31        72.94     344871     858167
dm-1              0.01         0.19         0.00       2228          0
  • 常用选项
-c:     可用来插入部分cpu 状态信息
-k:     某些使用 block 强制使用 kilobytes 为单位
-d:     显示磁盘状态
-x:     输出更多信息

1.7 free 命令

free 命令用于查看系统内存相关信息

              total        used        free      shared  buff/cache   available
Mem:        3863568      128860     2591292       12008     1143416     3462852
Swap:       2097148           0     2097148

1.7.1 显示分析

  • 第一行:
    • total 总量
    • used 已使用
    • free 剩余
    • shared 共享使用的
    • buffer/cache 用于buffer和cache的
    • available 包含buffer和cache 的剩余内存

1.7.2 选项

-h:     人性化显示
-b:     以 Byte 为单位
-k:     以 KB 为单位
-m:     以 MB 为单位
-o:     不显示缓冲区调节
-s <间隔> :持续观察
-t:     显示内存总和列

1.8 ps 命令

1.8.1 概述 ps 命令是 Process Status 的缩写, 用于列出系统的当前运行的进程, 如果需要动态显示可以使用 top 命令. ps 命令常用于分析和配合kill 终结进程使用.

  • ps 命令支持三种语法格式
    • UNIX 风格: 选项可以组合在一起, 并且选项前必须有 `-`` 连接字符
    • BSD: 选项可以组合在一起, 但是不能有 - 连接字符
    • GUN: 选项前面要有两个 --连接字符, 且选项时完整的长输出

1.8.2 命令选项

这的是常用的Unix 风格选项

-d:     显示所有进程,不包括当前会话的用户的
-e:     显示所有进程
-f:     全格式显示
-H:     显示树状结构, 表示程序之间关系
-l:     长格式显示
-w:     宽输出

BSD 风格的选喜感

a       所有进程
c       显示进程的真实名称
f       显示进程间关系
r       显示执行进程的 终端号
T       显示当前终端的所有进程
u       以用户为主显示程序状况
x       显示所有程序, 不用终端来区分

1.8.3 显示解析

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
  • USER: 进程运行用户
  • PID: 进程PID 号
  • %CPU 进程占用 CPU 百分比
  • %MEM 进程占用 内存百分比
  • VSZ 进程占用 虚拟内存
  • RSS 进程占用 虚拟内存
  • TTY 启动进程的 终端
  • STAT 当前进程的状态
  • START 启动进程的时间
  • TIME 进程运行的时间
  • COMMAND 启动进程的命令

1.9 网络管理命令

1.9.1 概述 ss 命令是用于显示网络状态信息, 可以显示PACKET socket, TCP,UDP, DCCP,RAW, 等等呢个统计, 比其他工具展示跟多信息, 非常实用快速有效.

1.9.2 选项

-n:     不根据IP 反解主机名
-r:     解析主机名
-a:     显示所有套接字
-l:     显示被监听的 socekts
-o:     显示计时器信息
-e:     显示详细的 sockets 信息
-m:     显示socket 的内存使用
-p:     显示进程号
-i:     显示tcp 内部信息
-s:     显示socket 使用汇总

-4:     只显示ipv4 相关的sockets
-6:     只显示 IPv6 相关 sockets
-0:     显示包经过的网络接口
-t:     显示 tcp
-u:     显示 udp
-d:     显示 dccp
-w:     显示 raw 
-x:     显示 Unix 套接字
-f:     显示指定的类型的套接字
        FAMILY := {inet|inet6|link|unix|netlink|vsock|help}

-k:     关闭指定的sockets 
-H:     不显示 首行

1.9.3 输出解析

[fangfc@node10011 ~]$ ss -tan
State      Recv-Q Send-Q    Local Address:Port     Peer Address:Port 
LISTEN      0      128          *:22                    *:*                  
LISTEN     0        100         127.0.0.1:25           *:*                  
ESTAB      0        52          192.168.10.11:22     192.168.10.1:2105
LISTEN     0        128         :::22                   :::*                  
LISTEN     0        100         ::1:25                  :::*      
  • State : 该套接字的状态,
    • LISTNE 表示正在监听
    • ESTAB establish 表示已建立连接
    • syn-sent 请求连接
    • syn-recv 请求最后等待对方确认
    • fin-wait-1 主动关闭, 主机发起
    • fin-wait-2 主动关闭, 主机已确认关闭连接确认, 等待对方关闭
    • time-wait 完成双向连接关闭, 等待分组消失
    • closed 已被关闭了的
    • close-wait 被动关闭, 收到对方发起关闭, 并已确认
    • last-ack 被动关闭, 等待最后一个确认,
    • closing 双方同时尝试关闭,
  • Recv-Q: 显示网络接收队列, 爱表饰收到数据以在本地接受缓冲, 但是还有多少没有被进程取走
  • Send-Q: 网络发送队列, 对方没有收到的数据, 或者没有 ACK 的, 还是本地缓冲区
  • Local Address:Port: 本地的IP地址和端口/ 或UNIX套接字地址
  • Peer Address:Port: 远程的地址和端口

1.10 tcpdump 命令

1.10.1 概述 tcpdump 是用于 dump the traffic on a network, 根据定义的网络数据包获取方式来截获包的分析工具, 支持对网络层, 协议, 主机, 网络, 端口, 进行过滤 并且提供 and | or | not 等 逻辑判断.

1.10.2 格式 和选项 tcpdump [-DenNqvX] [-c count] [ -F file ] [ -i interface ] [ -r file ] [ -s snaple ] [ -w file ] [ expression ]

  • 常用选项
# 抓包选项
-c:     指定抓取包的数量, 注意是最终获取这么多个包, 中间可能处理了 N个包才获得了 指定的数量
-i interface:   指定给你监听的设备接口, 
-n:             对地址 以ip方式显示, 不过不指定, 则会对 ip进行解析
-nn:            除了-n , 对端口也进行 数值显示
-N:             不打印 host 的域名部分, 例如 tcphost 或则打印 host 而不是 'xx.xxx.xx'
-P:             指定要抓的是流入还是流出, in, out, inout 默认是 Inout
-s len:         指定抓取的包长度是 len, 不设置的话是 65536字节, 对于过大的包可能会断裂
            输入行出现[!proto] 标志(proto 实际是 协议名), 但是 抓取len 越长, 包处理时间越长, 

# 输出选项
-e:         输出美行中都包括数据链路头部信息, 例如源MAC, 目标MAC
-q:         快速打印输出, 即答应很少的协议相关信息, 从而输出行都比较简短
-X:         输出包的头部数据, 以16进制和 ASCII 两种方式同时输出
-XX:        输出包的头部数据, 以16进制和 ASCII 两种方式同时输出, 更加详细
-v:         当分析和打印的时候, 产生更加详细输出
-vv:        产生 比-v 更加详细输出
-vvv:       产生 比-vvv 更加详细输出

# 其他功能性选项
-D:     列出可用于抓包的接口, 会列出 接口数量和接口号
-F:     从文件中读取抓包的表达式, 
-w:     抓包输出到文件, 可以配合 -G time 选项输出文件每time 秒自动切换文件, 
-r:     从 -w 写入的文件中读取数据, 

1.10.2 显示

[fangfc@node10011 ~]$ sudo tcpdump -i ens33 tcp port 80 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
01:38:27.262365 IP 192.168.10.1.3882 > 192.168.10.11.80: Flags [S], seq 1194152086, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
01:38:27.262455 IP 192.168.10.11.80 > 192.168.10.1.3882: Flags [S.], seq 2043345935, ack 1194152087, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
01:38:27.262768 IP 192.168.10.1.3882 > 192.168.10.11.80: Flags [.], ack 1, win 2053, length 0
01:38:27.267583 IP 192.168.10.1.3680 > 192.168.10.11.80: Flags [P.], seq 872129039:872129497, ack 1174294605, win 2053, length 458: HTTP: GET / HTTP/1.1
01:38:27.268427 IP 192.168.10.11.80 > 192.168.10.1.3680: Flags [P.], seq 1:239, ack 458, win 287, length 238: HTTP: HTTP/1.1 200 OK
01:38:27.268765 IP 192.168.10.11.80 > 192.168.10.1.3680: Flags [P.], seq 239:851, ack 458, win 287, length 612: HTTP
01:38:27.269019 IP 192.168.10.1.3680 > 192.168.10.11.80: Flags [.], ack 851, win 2049, length 0
01:38:27.357732 IP 192.168.10.1.3680 > 192.168.10.11.80: Flags [P.], seq 458:883, ack 851, win 2049, length 425: HTTP: GET /favicon.ico HTTP/1.1
01:38:27.357957 IP 192.168.10.11.80 > 192.168.10.1.3680: Flags [P.], seq 851:1577, ack 883, win 296, length 726: HTTP: HTTP/1.1 404 Not Found
01:38:27.399419 IP 192.168.10.1.3680 > 192.168.10.11.80: Flags [.], ack 1577, win 2053, length 0
01:39:12.263573 IP 192.168.10.1.3882 > 192.168.10.11.80: Flags [.], seq 0:1, ack 1, win 2053, length 1: HTTP
  • 第一行: 提示可以使用 -v或-vv 显示更详细信息

  • 第二行: 说明抓取的接口(ens33), 连接烈性, 以及总抓取的字节数

  • 第三行:

    • 01:38:27.262365 抓取到的时间
    • IP 192.168.10.1.3882 > 192.168.10.11.80: :包的发起IP > 接收IP
    • Flags []: S表示(SYN), F(FIN), p(PSUH), R(RST), W(ECT CWT), E(ENC-ECHO)
    • seq 1:239 seq 表示序列号, 是一个随机的数字, 第一个是对方发过来的seq, 第二个是自己创建的 seq, 当下一个包发送的时候对方需要携带本机创建的seq
    • length 238: 包长度
    • HTTP: HTTP/1.1 200 OK 包的内容
  • 使用-v 在抓http 请求时还可以获取到更多信息:

01:55:58.401045 IP (tos 0x0, ttl 128, id 30148, offset 0, flags [DF], proto TCP (6), length 562)
    192.168.10.1.5555 > 192.168.10.11.80: Flags [P.], cksum 0x53cb (correct), seq 3671249986:3671250508, ack 927332015, win 2052, length 522: HTTP, length: 522
    GET / HTTP/1.1
    Host: 192.168.10.11
    Connection: keep-alive
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate
    Accept-Language: zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6
    If-None-Match: "5bd19726-264"
    If-Modified-Since: Thu, 25 Oct 2018 10:12:54 GMT
  • 这里就获取了 http请求的 协议, 以及版本, 主机地址, 请求连接类型, 等等信息.

1.11 ip 命令

用于管理网络设备, 可以管理网络接口, 路由表, apr, 显示不同统计数据等等设置. ip命令可以操作等功能非常多, 这里只做对 网卡的操作

1.11.1 ip地址相关操作

  • ip address {add|change|replace} IFADDR dev IFNAME {LTFETIME}

    • 用于添加/修改/替换 IP地址 在对应的 网卡上
  • ip address del IFADDR dev IFNAME [mngtmpname]

    • 删除ip地址, 在对应的网络设备
  • ip address show [dev IFNAME] [ scope SCOPE-ID ] [ master DEVICE ]

    • 显示IP地址, 可以指定对应的 网络设别
  • 显示ip

  • 添加ip

  • 删除ip

1.11.2 网卡相关操作

  • 使用 ip link 的相关操作, 可以对网络接口设备进行管理.

  • ip link add [link DEV] [name] NAME

    • 添加一个网络设备
  • ip link delete [DEVICE | dev DEVICE | group DEVGROUP} type TYPE [ARGS]

    • 用于删除一个网络设备
  • ip link set {DEVICE | dev DEVICE | group DEVGROUP}

    • 用于设置一个网络设备
  • 常用操作

  • 显示一个网络设备现相关信息, 使用-s 可以查看该设备流量情况

  • 停用一个网络设备, ip link set DEVICE down

  • 启用 ip link set DEVICE up

  • 重命名 ip link ste DEVICE name NEWNAME

END

转载于:https://my.oschina.net/nikoF/blog/2876962

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值