【缓慢笔记】我的运维小笔记

由于说本人目前手头上有10+台服务器在运维,每台服务器(配置都不高)都搭建了不同的服务。所以在多服务器运维的情况下,我稍微记一下笔记本,以后想找东西的时候就来看自己的博客!

这边附上自己的探针:https://status.mclzyun.com/

一、基础必备工具

1、htop

➀入门

安装代码:

apt install htop

虽然说市面上还有一个叫 btop 的,但是有点花哨似乎不太合适专业的运维使用,当我们安装完htop之后输入以下命令就可以打开了:

htop
这是打开之后的页面

➁主页面分解

Ⅰ主页面分解
主要分成了三大部分(以三个红框标识)

左上角:主要显示了CPU、运行内存和交换分区(SWAP)的占用情况

右上角:主要显示任务数量、平均负载以及系统的运行时间

下面部分:显示了所有的进程

操作提示区(也就是最下面那一行):显示F1-F10的快捷功能

Ⅱ进程列表分解
所谓的进程列表的标头就是此图,具体的相关内容如下(转载于:https://www.sysgeek.cn/htop-command/
列名全称描述
PIDProcess ID进程 ID 号
USERUser进程所有者
PRIPriority进程优先级
NINice进程的「友好度」(Nice 值)。友好值越高,进程越容易让出资源给其他进程
VIRVirtual Memory进程使用的虚拟内存
RESResident Memory进程使用的物理内存
SHRShared Memory进程使用的共享内存
SState当前进程状态
CPU%CPU Percentage进程使用的 CPU 时间百分比
MEM%Memory Percentage进程使用的内存百分比
TIME+CPU Time进程启动以来使用的总 CPU 时间
CommandCommand启动进程的命令行
Ⅲ操作提示区分解
. 常用功能
  • 常用功能快捷键如下:
快捷键功能描述
F1查看帮助,解释计量器颜色含义、进程状态和键盘快捷键等信息
F3/按名称搜索进程(F3查找下一个匹配项,Shift+F3查找上一个)
F4过滤进程
F5切换树状显示,显示进程父子关系
F10q退出 htop
U按用户筛选进程

当我们点击F1时(查看帮助):

可以查看每一个按键的帮助

当我们点击F3时(搜索进程):(转载于:https://cloud.tencent.com/developer/article/1115041

可以搜索某一个进程

当我们点击F4时(进程过滤器):

从上面的结果可以看出search和filter的区别:

  • search会将光标定位到符合条件的进程上,通过F3键进行逐个查找;
  • 而filter会直接将符合条件的进程筛选出来。
  • search和filter都使用ESC键来取消功能。

当我们点击F5(切换树状显示):

你看右边的部分就变成了树状图,显示每一个文件之间的关系

当我们点击F10或q时:(退出htop页面)

就退出了(废话)

.. 针对进程快捷键
  • 针对选中进程的快捷键:
快捷键功能描述
F7降低进程优先级(提高 Nice 值)
F8提高进程优先级(降低 Nice 值)
F9k终止进程

啊 前面已经说明了 NICE值是:进程的「友好度」(Nice 值)。友好值越高,进程越容易让出资源给其他进程

当我们选择项目并且按下F9时(终止进程):

图片分成两个部分 左边的kill信号 以及上面你自己选中的进程

我们常用的就这两个:

  • 15(TERM):安全退出(推荐)
  • 9(KILL):强制杀掉(最后手段)
… 补充

你会发现我并没有讲F2是什么东西,这是一个设置用的,点击之后你会发现(Meters项):

我们可以根据自己的需要修改显式模式以及想要显示的内容,比如:以LED的形式显示CPU的使用情况,并且在左边的区域添加hostname,在右边的区区域添加clock

光标移到隔壁可以选择需要添加的新项目上下左右就可以把这个新添加的内容迁移到某个部分

然后到达Display options部分:

感兴趣的可以自己翻译看看

剩下的的Colors 就是设置颜色方案,还有一个Columns就是显示进程行列中的具体内容

最后给大家讲解下点击F6能显示什么:(整理)

是的 就是进程顺序根据什么来进行显示而已 你可以很方便的直接看谁CPU用最多,谁运行内存用最多?

⓷按键&命令讲解

Ⅰ按键

U:取消所有选中的进程;

s:显示光标所在进程执行的系统调用; 下面显示的为init的系统调用信息:

I:对排序的结果进行反转显示:

例如,对PPID进行排序后,按‘I’键将会对PPID的排序结果进行反向排序。

a:绑定进程到指定的CPU

u:显示指定用户的进程

可以选择用户
Ⅱ命令

显示指定用户进程:

htop -u xxxx

设置刷新时间:

htop -d 时间(10=1秒)

默认单位是十分之一秒

基本上就这一些命令

2、Vim

➀入门

输入以下命令即可安装:

apt -y install vim

打开即可编辑文件:

vim 文件名.txt

基本上市面上的所有文件(除了不正常的)都能阅读!

Vim 主要有三种基本模式

  1. Normal 模式(默认模式)
    • 用来浏览文件、删除、复制、移动光标等操作。
    • 进入 Vim 默认就是这个模式。
  2. Insert 模式
    • 用来输入文本。
    • 进入方法:
      • i :在光标前插入
      • I :行首插入
      • a :在光标后插入
      • A :行尾插入
  3. Command 模式
    • 用来执行保存、退出、查找、替换等命令。
    • 进入方法:按 :,例如 :w 保存、:q 退出。

那如何在这三个模式中相互切换模式呢:

  • Normal → Insert:i / a / I / A
  • Insert → Normal:Esc
  • Normal → Command::
这是打开文件后的主页面(什么文本都无法输入 就是Normal模式

当我们点击键盘上的 i 时,就进入了Insert模式,这时候你就可以随便输入你想要输入的文本了

点击键盘上的 i 之后左下角会出现的提示,这代表你进入了 Insert 模式。如果说你想要回到 Normal 模式的话你只需要按键盘上的 ESC 就可以回到 Normal 格式了。

那如果说切换到 Command模式如何操作呢?在Normal模式的前提下在键盘上按下 :

目前就是成功切换到 Command 模式了

注意一个问题:注意 中/英 切换,以及大小写问题!

➁Normal模式操作

移动光标

功能Normal 模式快捷键
左右上下h j k l (我觉得正常键盘上的上下左右也够用了)
行首/行尾0 / $
跳到文件首尾gg / G
跳到指定行数字G

插入文本

  • i :光标前插入
  • a :光标后插入
  • o :在下一行插入新行
  • O :在上一行插入新行

删除与修改

功能Normal 模式快捷键
删除一个字符x
删除一行dd
删除到行尾d$
删除一个单词dw
修改一个字符r + 字符
改整行cc
改单词cw
当你输入 d$ 之后就是:
在此处输入 cc 之后:
就会自动清空此行 并且直接切换到 Insert 模式

说句实话和单词相关的还是少用,我感觉识别的和我想象的不太一样

复制与粘贴

功能Normal 模式快捷键
复制一行yy
复制一个单词yw
粘贴p(光标后) / P(光标前)
撤回u
重做Ctrl + r
重做上一次操作.
匹配到下一个括号%
当你光标丢到这里的时候,你按下 % 的时候就可以匹配到对应的花括号

查找与替换

  • 查找单词:/关键词 → 按 n 查找下一个,N 查找上一个
  • 替换:
    • 当前行::s/旧/新/g
    • 全文件::%s/旧/新/g
键入 /+ 关键词 这样你就可以找到你要找的东西了

➂Command模式操作

保存与退出

功能命令
保存:w
保存并退出:wqZZ
退出不保存:q!

! 的意思就是强制(一般用作于普通用户组没权限的时候强制)

分屏与窗口切换(进阶)

  • 垂直分屏::vsplit 文件名
  • 水平分屏::split 文件名
  • 切换窗口:Ctrl + w 然后按 h/j/k/l
分屏的时候 按下 TAB 键就可以展示文件目录了
两下 Ctrl + w 就可以切换到另一个窗口

➃Insert模式

就是直接输入文本嘛 这有什么好说的(

3、nano

nano的话也是一款文本的编辑,但是的话用得很少。因为vim足够使用了!

但是的话我还是稍微记录下,因为你在设置 crontab(执行定期计划) 的时候默认就是用的nano

但是也不是不能选就是了!

输入以下命令就可以打开计划任务的编辑文件:

crontab -e
这个就是nano基本页面
和 vim 不一样的是就是可以直接输入内容
输入完想要输入的内容后键入 Ctrl + O 就可以保存内容,他会显示保存的路径默认回车即可!
这样就可以直接写入文件了!

接着键入 Ctrl + X 就可以退出 nano 页面

其实的话有用的部分可能就这一点吧?毕竟我在操作 crontab 的时候才会使用到

然后到话可以看看这些东西 这个是按键的操作指南(细心的你会发现 ^ 其实就是Ctrl键M-其实就是 Alt键

4、zellij

zellij是什么?Zellij 是一个现代终端工作空间(terminal workspace),与 tmux 相似,但更易用、更直观、配置更简单、UI 更友好。它基于 Rust 开发,支持插件、布局文件、窗口浮动、内置状态栏、鼠标操作……

⚠️内存占用有点多(100MB左右)超小内存主机慎重!

➀入门

输入以下命令即可试用,关闭后软件也消失:(官网地址:https://zellij.dev/

bash <(curl -L https://zellij.dev/launch)

完整安装可以输入以下代码来直接实现安装:

wget https://github.com/zellij-org/zellij/releases/download/v0.43.1/zellij-no-web-x86_64-unknown-linux-musl.tar.gz
tar -zxvf zellij-no-web-x86_64-unknown-linux-musl.tar.gz
mv zellij /usr/local/bin/

输入以下命令就可以呼唤 zellij了:

zellij
安装完后就是这个页面

➁基础命令操作

接下来是基础的命令操作:

创建新的会话:

zellij -s <session name>            

列出活动的会话:

zellij ls

连接到指定会话:

zellij a <session name> 

杀死指定会话:

zellij k <session name>

删除指定会话:

zellij d <session name>

杀死所有会话:

zellij ka

➂基础按键操作:

这是基础页面的按键操作,作用如下:

Ctrl + <操作>作用
<g> Lock激活锁定模式(防快捷键冲突)
<p> PANE切换到 PANE 中(窗口)
<t> TAB切换到 标签模式(相当于 tmux 的Window)
<n> RESIZE编辑窗口大小
<h> MOVE移动窗口
<s> SEARCH搜索会话
<o> SESSION
<q> QUIT退出 zellij
ⅠPANEL页面

我们随便创建了一个叫 1 的会话:

首先的话我们先教大家如何创建新的会话页面,首先键入 Ctrl + P 进入面板模式:

随即之后按下 n 键来创建新的会话框

此时亮黄色的会话就是我们的聚焦会话框

如果说我们想要切换会话框如何操作?同样的还是键入 Ctrl + P 进入面板模式,可以按键盘上的上下左右来进行切换会话,当选择好回话之后按下回车键就可以选中所选回话了!

选择会话框的页面

鉴于这些会话框大概给大家解释下其中的作用:

Ctrl+P 进入面板模式后的分支操作作用
n创建新的会话框
⬅️⬇️⬆️➡️选择聚焦会话框
x关闭聚焦会话框
c重新命名聚焦对话款
重新命名后的对话款
ⅡRESIZE页面
主要内容

按下 + – 两个键可以对所选的聚焦会话框进行变大变小。而⬆️⬇️⬅️➡️可以调整会话框大小

另外的话键入 Alt + [ 或 ] 可以将会话框调整成水平或者垂直

ⅢMOVE页面

就一个调整会话框的位置的作用

⬆️⬇️↔️可以对所聚焦的会话框调整位置

ⅥTAB页面

既然说PANE是在同一个标签创建多个会话,那TAB就是可以创建多个标签

那我们解剖下在 Ctrl + t 下的分支的作用:

Ctrl + t 页面下的分支操作作用
n创建新的标签
↔️在标签中切换到另一个标签
x关闭标签
r重新命名标签
s同步?(我操作的时候就是复制标签过来)
Ⅳ设置进入ssh就打开zellij

输入打开 Shell 配置文件:

nano ~/.bashrc

将这些内容复制到文件末尾:

if [ -n “$SSH_CONNECTION” ] && [ -z “$ZELLIJ” ] && command -v zellij >/dev/null 2>&1; then
zellij attach –create
return
fi

Ctrl + O 保存 后 按回车 后按Ctrl+X退出,重新登陆SSH回话后就会发现自动打开 zellij 了!

二、系统网络监控与诊断

1、nethogs

nethogs 是 Linux 下非常实用的按进程显示网络带宽使用情况的工具。
iftopnload 等工具只显示整体带宽不同,nethogs 可以直接告诉你是哪个进程在占网速!

➀入门

安装方式:

apt -y install nethogs

输入这个命令即可安装!那如何使用呢:

nethogs
输入这个命令就可以进入主页面了给大家解释下顶部导航栏的意思:
  • PID:进程 ID
  • PROGRAM:程序名称
  • DEV:网卡名称
  • SENT:上传速度
  • RECEIVED:下载速度
这个就不用解释了 就是总的上传和下载

➁命令详解

常用命令选项

选项说明
-d设置刷新间隔时间(秒)
-c刷新指定次数后退出
-t追踪模式(显示累计流量)
-p混杂模式(监听所有流量)
-V显示版本信息
-h显示帮助信息

监控特定网络接口:

nethogs eth0

也可以指定检测多个网卡:

nethogs eth0 eth1

刷新间隔设置(秒)

nethogs -d 5  # 每5秒刷新一次

追踪特定进程:

nethogs -p | grep "进程名"

监控特定用户进程:

nethogs -u <username>

➂交互按键

进入程序后,可使用以下快捷键

按键功能
m切换显示单位:KB/s、B/s 等
r按接收速度排序
s按发送速度排序
q退出 Nethogs

2、iftop

iftop 是 Linux 下实时网络流量监控工具,可以让你快速看到当前服务器与外部各个 IP 之间的实时带宽占用情况,是排查网络问题的神器。

➀入门

输入以下命令即可安装

apt -y install iftop

输入以下命令就可以打开 iftop

iftop
主要页面,页面解读:
区域说明
左侧你的服务器 IP 和端口
右侧对端 IP 和端口
=>上传流量(Outgoing)
<=下载流量(Incoming)
上方标尺流量可视化刻度
右上角三个数字2 秒平均、10 秒平均、40 秒平均

下面内容的解释:

TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

➁命令操作

帮助页面:

翻译:

基本参数

参数说明
-h显示帮助信息
-n不进行主机名解析(只显示 IP,推荐,性能更好)
-N不将端口号转换为服务名(如 80 → http)
-p混杂模式,显示同一网段中其他主机的流量
-b不显示底部的流量柱状图
-B字节(Bytes) 为单位显示带宽(默认是 bit/s)

网卡与过滤相关

参数说明
-i <interface>指定监听的网卡(如 eth0ens33
-f <filter>使用 BPF 过滤表达式 过滤数据包
-F <net/mask>显示指定 IPv4 网段 的进出流量
-G <net6/mask6>显示指定 IPv6 网段 的进出流量
-l显示并统计 IPv6 本地链路流量(默认关闭)

📌 示例:

iftop -i eth0 -n
iftop -F 192.168.1.0/24

显示内容相关

参数说明
-P同时显示 端口号 + 主机
-m <limit>设置带宽显示的最大刻度(如 100M1G
-c <config>指定自定义配置文件
-t文本模式输出(不使用 ncurses,适合脚本)

排序方式(Sorting orders)

排序参数说明
-o 2s2 秒平均流量 排序
-o 10s10 秒平均流量 排序(默认)
-o 40s40 秒平均流量 排序
-o source源地址 排序
-o destination目标地址 排序

仅在 -t(文本模式)下可用的参数

⚠️ 以下参数 必须配合 -t 使用

参数说明
-s <num>运行 num 秒后输出一次结果并退出
-L <num>指定输出的最大行数

📌 示例:

iftop -t -s 10 -L 20

➂按键操作

运行后可以直接按键操作:(参考来源:https://cloud.tencent.com/developer/article/1806462

按键功能说明
P暂停 / 继续刷新显示
h交互参数界面状态输出界面 之间切换
b显示 / 隐藏 平均流量图形条(bar graph)
B切换显示 2 秒 / 10 秒 / 40 秒 内的平均流量
T显示 / 隐藏 每个连接的总流量
j / k向下 / 向上滚动当前连接列表
l打开 输出过滤器(输入 IP 或条件,仅显示匹配流量)
L切换 流量刻度范围(影响图形条比例)
q退出 iftop
nIP 地址 / 主机名(DNS) 显示之间切换
s显示 / 隐藏 本地源主机信息
d显示 / 隐藏 远端目标主机信息
t切换显示格式:① 两行显示发送/接收② 一行显示发送/接收③ 仅显示发送或接收
N切换显示 端口号 / 端口对应的服务名称
S显示 / 隐藏 本地源端口
D显示 / 隐藏 远端目标端口
p显示 / 隐藏 端口信息(总开关)
1最近 2 秒 平均流量排序
2最近 10 秒 平均流量排序
3最近 40 秒 平均流量排序
<本地主机名 / IP 地址 排序
>远端目标主机名 / IP 地址 排序
o固定 / 取消固定 当前选中的连接

我让AI生成了一个新手建议:

新手推荐组合用法:

  • n + p:看清楚 IP + 端口
  • 1 / 2 / 3:快速定位 瞬时 / 稳定流量来源
  • l:过滤某个 IP,专注排查

3、vnstat

vnStat 是一个基于 网卡接口 的网络流量统计工具,它最大的特点是:

  • 可以记录历史流量
  • 后台常驻、资源占用极低
  • 不抓包、不分析进程,纯统计
  • 非常适合服务器长期运行

和我们之前介绍的两个工具相比差别就是在:nethogs / iftop 看实时,vnStat 看历史

➀入门

输入以下命令即可安装:

apt install -y vnstat

然后确定下你安装的版本

然后确定下你安装的 vnstat 的版本:
2.X 以上算是新版本
Ⅰ初始化数据库(新版本的跳过了):

然后的话我们要先初始化监控数据库:

# 先查看所有的可监控网口
vnstat --iflist
# 然后再绑定网口
vnstat -u -i eth0

⚠️ 注意:
vnStat 2.x 版本已移除 -u 初始化参数,数据库会在服务启动后自动创建。

Ⅱ基本用法

输入以下命令即可打开 vnstat:

vnstat

主页面四个统计数据的含义:

字母含义
rx服务器接收的流量总量
tx服务器发送出去的流量总量
totalrx + tx 的总和
estimated按当前统计周期的使用趋势,推算整个周期结束时的预计总流量

estimated有什么作用?

✔ 判断 这个月会不会超流量
✔ 提前预警 VPS 流量爆表
✔ 运维做容量评估

算是相当于预测下你这个月流量够不够用(无限流量当我没说)

➁命令操作

Ⅰ命令列表详解(AI翻译)

时间维度统计参数

参数长参数含义典型用途
-5--fiveminutes显示 5 分钟统计查看短时间流量变化
-h--hours按小时统计分析某时间段异常
-hg--hoursgraph小时流量图(ASCII)博客配图、趋势观察
-d--days按天统计排查哪一天流量异常
-m--months按月统计对账 VPS 流量
-y--years按年统计长期趋势分析
-t--top流量最高的几天找流量峰值日期

时间范围筛选参数

参数含义示例
-b设置开始日期-b 2025-12-01
-e设置结束日期-e 2025-12-10

输出格式参数(脚本 / 自动化)

参数含义适用场景
--oneline单行输出Shell 脚本
--jsonJSON 格式输出API / 监控系统
--xmlXML 格式输出旧系统对接

实时与计算类参数

参数含义说明
-tr计算指定时间段流量非数据库统计
-l实时流量显示精度一般,不如 iftop
Ⅱ操作实践

查看每天的流量统计:

vnstat -d

查看每月流量统计:

vnstat -m

查看每小时的流量统计:

vnstat -h

查看前10的流量统计:

你也可以看实时的流量数据(但是感觉不如我们前面说的nethogs 和 iftop):

vnstat -l

你也可以直接看流量统计简要:

vnstat -s

可以输入以下命令更改输出格式(方便阅读?)

vnstat --style 0

以下是可用的样式编号:(参考来源:https://bbs.huaweicloud.com/blogs/354286

  • 0 – 窄输出
  • 1 – 启用条形列
  • 2 – 启用条形栏,并在摘要中显示平均流量率
  • 3 – 在所有输出中显示平均流量
  • 4 – 与实时模式 (vnstat -l) 结合使用时,禁用终端控制字符

4、mtr

什么叫做 mtr?

mtr = traceroute + ping 的合体进阶版,用来定位网络抖动、丢包、延迟异常

在运维场景里,我们关心的不是“能不能连上”,而是:

  • 🧠 卡在哪里
  • 📉 哪一跳开始丢包
  • 🕒 延迟是不是突然暴涨
  • 🌍 是我服务器的问题,还是运营商/对方的问题

👉 mtr 就是专门干这个的

①入门

安装 mtr 只需以下命令即可:

apt -y install mtr

查看软件版本(验证安装)

mtr -version

查看实时模式(交互模式):

mtr 8.8.8.8

页面内容解释:

  • 主机名或IP地址
  • 丢包率(Loss%)
  • Snt = Sent(已发送的探测包数量)
  • 最近延迟(Last)
  • 平均延迟(Avg)
  • 最佳延迟(Best)
  • 最差延迟(Wrst)
  • 标准差(StDev) – 传统说法叫做抖动 越大越卡

➁命令参考

常用选项参数说明(选自:https://www.runoob.com/linux/linux-comm-mtr.html

选项说明
-4强制使用 IPv4
-6强制使用 IPv6
-c COUNT设置发送的ping包数量
-i SECONDS设置ping间隔时间(秒)
-n不解析主机名,显示IP地址
-r生成报告模式(非交互式)
-s BYTES设置ping包大小(字节)
-w宽输出模式,显示完整主机名
-z显示AS(自治系统)编号
--report等同于 -r,生成报告后退出
--report-wide宽格式报告

接下来给大家介绍几个经常用的命令:

报告模式:

mtr -r 8.8.8.8

一条命令输出问题所在:

mtr -r -c 100 -n -w 8.8.8.8
参数含义
-r报告模式
-c 100发送 100 个包(默认 10 太少)
-n不解析域名(更快 + 更干净)
-w宽表格,避免换行

当然也可以写入文件当中:

mtr -r -c 10 google.com > mtr_report.txt

设置ping包大小和间隔:

mtr -s 100 -i 0.5 example.com

这样可以设置每个 ping 包之间间隔 0.5 秒

查看AS自治系统编码:

mtr -z example.com

通过TCP的方式来mtr(防止有一些服务器禁用ICMP):

mtr --tcp 8.8.8.8

指定某端口:

mtr --port 8080 example.com

➂使用场景

场景 1️⃣:用户说“偶尔很卡”

mtr -r -c 200 -n 用户IP

看点:

  • 是否 StDev 很大
  • 是否 Wrst 特别高

📌 结论模板:

链路存在明显抖动,非应用层问题

场景 2️⃣:怀疑是机房 / 运营商问题

mtr -r -c 100 -n 目标IP > mtr.txt

mtr.txt 发工单
⚠️ 这是标准运维证据

场景 3️⃣:国内 → 国外延迟高

mtr -r -c 100 -n 1.1.1.1

如果:

  • 国内段延迟低
  • 出国后暴涨

👉 国际出口拥堵(不是你服务器的问题)

5

5、

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇