Linux初学者必备:全面掌握核心命令

目录

Linux:

Linux的特点

查看系统版本信息

查看Ubuntu版本

查看内核版本

其他uname命令选项

Linux的分层结构

系统控制命令

Linux 软件包安装与管理

2.1 软件包的安装管理

2.1.1 不同Linux发行版的软件包管理机制

2.1.2 软件包分类

2.1.3 软件管理工具概览

2.2 dpkg工具详解

2.3 apt工具详解

2.4 yum工具详解

1. 更新软件包

2. 安装软件包

3. 删除软件包

4. 搜索软件包

5. 列出可用的软件包

6. 清理缓存

7. 检查更新

8. 信息查询

9. 配置YUM源

10. 安装YUM插件

Shell基础知识

3.1.1 概念

3.1.2 命令执行流程

3.1.3 Shell分类

3.2 历史记录命令

3.3 别名命令

3.4 Linux特殊字符

3.4.1 通配符

3.4.2 管道符 |

3.4.3 输入输出重定向

3.4.4 命令替换

3.5 echo命令

3.6 date命令

系统维护与用户管理命令

4.1 man 命令

4.2 su 命令

4.3 sudo 命令

4.4 df 命令

4.5 mount 命令

用户管理命令

6.1 ps 命令

6.2 top 命令

6.3 调整进程优先级

​编辑

6.4 文本搜索命令 grep

6.5 kill 命令

6.6 前后台进程切换

7.1 网络命令

特殊情况处理

7.2 Ubuntu网络配置

7.2.1 桥接模式

7.2.2 NAT 模式

设置步骤:

文件系统命令

8.1 文件系统分类

8.2 根文件系统结构

8.3 显示文件内容

8.4 连接文件

8.5 文件压缩解压

数据类型与分文件编程概览

10.1 存储类型

10.1.1 extern

10.1.2 register

10.1.3 static

10.1.4 auto

10.2 数据类型总结

11. 分文件编程

11.1 头文件(.h)

11.2 源文件(.c)

示例

12.1 GCC 编译工具

12.2 GDB 调试工具

12.3 make 编译工具

12.3.1 定义

12.3.2 Makefile 格式

12.3.3 用 make 管理多个文件

12.3.4 Makefile 变量

条件编译


Linux:

Linux是一种免费且开源的类Unix操作系统,由Linus Torvalds于1991年首次发布。Linux操作系统的核心部分被称为“内核”,它是操作系统的主要组件,负责管理硬件资源和提供基本服务,如内存管理、进程调度、文件系统管理和网络功能等。除了内核之外,Linux系统还包括各种工具、库、应用程序和服务,这些通常由GNU项目和其他开源软件项目提供,共同构成了完整的Linux操作系统环境。

Linux的特点

  1. 开源性:Linux的源代码是开放的,任何人都可以查看、修改和分发其源代码,这使得Linux能够得到全球开发者的持续改进和优化。

  2. 稳定性与安全性:Linux以其高稳定性和安全性著称,这使得它在服务器市场中占据主导地位,尤其是在Web服务器、数据库服务器和超级计算机等领域。

  3. 灵活性:Linux支持多种硬件架构,从嵌入式设备到大型机,几乎可以在任何类型的硬件上运行。此外,用户可以根据需要定制自己的Linux系统。

  4. 丰富的软件生态系统:由于其开源特性,Linux拥有庞大的软件生态系统,包括办公软件、图形界面、游戏、编程工具等各种应用,许多软件都是免费提供的。

  5. 社区支持:Linux有一个庞大的社区,包括开发者、用户和技术支持人员,他们共同维护和改进Linux系统,为用户提供技术支持和解决方案。

查看系统版本信息

查看Ubuntu版本
  1. 使用  lsb_release -a 命令来查看详细的Ubuntu版本信息。
  2. 使用  cat /etc/issue 命令也可以查看Ubuntu版本信息,这是系统启动时显示的发行版信息。
查看内核版本
  1. 使用  uname -r 命令查看当前正在运行的内核版本。
  2. 使用  cat /proc/version 命令可以获取更详细的内核版本信息。
其他uname命令选项
  • uname -a 显示系统的所有信息,包括系统名称、节点名、内核版本、操作系统版本、体系结构等。
  • uname -v 显示内核编译器的版本信息。

Linux的分层结构

Linux系统大致可以分为以下几层:

  1. 应用层:包括各种应用程序和命令,用户直接与之交互。
  2. 内核层:这是操作系统的核心,负责协调硬件和软件资源,主要功能包括:
    • 进程管理:处理进程的创建、调度和终止。
    • 设备管理:管理硬件设备,如I/O设备。
    • 内存管理:管理物理内存和虚拟内存。
    • 网络管理:处理网络通信。
    • 文件系统管理:管理文件和目录。
  3. 驱动层:包含对硬件设备的直接访问接口,如字符设备驱动、块设备驱动和网络设备驱动。
  4. 硬件层:包括所有物理设备,如CPU、内存、硬盘、键盘、鼠标等。

系统控制命令

  1. 关机

    • sudo shutdown -h now :立即关机。
    • sudo shutdown -h 时间 "提示语句":定义关机时间,并显示提示语句。
  2. 重启

    • sudo shutdown -r now :立即重启。
    • sudo reboot :这也是立即重启的命令。
    • sudo shutdown -r 时间 "提示语句":定义重启时间,并显示提示语句。
  3. 取消定时操作

    • sudo shutdown -c :取消正在进行的定时关机或重启操作。

Linux 软件包安装与管理

2.1 软件包的安装管理

2.1.1 不同Linux发行版的软件包管理机制
  • Debian系列: 使用.deb软件包格式,管理工具为dpkgapt
  • Red Hat系列: 使用rpm软件包管理机制(Red Hat Package Manager)。
  • CentOs系列: 使用rpm软件包管理机制(Red Hat Package Manager),管理工具为yum。
2.1.2 软件包分类
  • 二进制软件包:通常为.deb.rpm格式,可以直接安装而无需编译。
  • 源码包:包含源代码,需要编译后才能安装,文件扩展名可能为.dsc.tar.gz等。
2.1.3 软件管理工具概览

在Debian系的Linux发行版中,主要使用dpkgapt两种工具进行软件包管理。

  • dpkg: 主要用于离线安装本地软件包,不检查依赖关系。
  • apt: 在线安装工具,可以从远程仓库下载软件包,自动解决依赖关系。
  • yum: 在线安装工具,类似于apt。

2.2 dpkg工具详解

  • 安装软件:

    Bash
    1sudo dpkg -i 软件包全名.deb
  • 显示软件安装状态:

    Bash
    1sudo dpkg -s 软件包名
  • 显示软件安装路径:

    Bash
    1sudo dpkg -L 软件包名
  • 卸载软件:

    Bash
    1sudo dpkg -r 软件包名
  • 完全卸载软件(包括配置文件):

    Bash
    1sudo dpkg --purge 软件包名

2.3 apt工具详解

  • 安装软件:

    Bash
    1sudo apt-get install 软件包名
  • 卸载软件:

    Bash
    1sudo apt-get remove 软件包名
  • 更新软件包列表:

    Bash
    1sudo apt-get update
  • 升级已安装的软件包:

    Bash
    1sudo apt-get upgrade
  • 列出可用的软件仓库:

    Bash
    1cat /etc/apt/sources.list
  • 默认下载包的存放路径: /var/cache/apt/archives/

2.4 yum工具详解

1. 更新软件包

  • 更新所有已安装的软件包:
    Bash
    sudo yum update
  • 更新特定的软件包:
    Bash
    sudo yum update package-name

2. 安装软件包

  • 安装软件包:
    Bash
    sudo yum install package-name

3. 删除软件包

  • 删除软件包:
    Bash
    sudo yum remove package-name

4. 搜索软件包

  • 搜索软件包:
    Bash
    sudo yum search keyword

5. 列出可用的软件包

  • 列出所有可用的软件包:
    Bash
    sudo yum list available
  • 列出已安装的软件包:
    Bash
    sudo yum list installed

6. 清理缓存

  • 清理yum缓存:
    Bash
    sudo yum clean all

7. 检查更新

  • 检查是否有软件包更新:
    Bash
    sudo yum check-update

8. 信息查询

  • 显示软件包的详细信息:
    Bash
    sudo yum info package-name

9. 配置YUM源

  • 编辑YUM源配置文件:
    Bash
    vi /etc/yum.repos.d/CentOS-Base.repo
    在这里可以添加或修改仓库的URL,以指向不同的软件包镜像站点。

10. 安装YUM插件

  • 安装YUM插件:
    Bash
    sudo yum install yum-plugin-*


Shell基础知识

3.1.1 概念

Shell,字面意思是“壳”,在Linux中扮演着关键的桥梁角色。它作为用户与操作系统之间的交互界面,负责解释用户输入的命令,并将其转化为操作系统可以理解的形式,再将执行结果呈现给用户。形象地说,Shell就像一道墙,保护着系统的核心部分不受用户误操作的影响,同时提供友好的命令行界面供用户使用。

3.1.2 命令执行流程

当用户在命令行输入指令时,Shell接收并解析该命令,将其转换为操作系统(内核)能够识别的指令,传递给硬件执行。硬件的响应结果再次通过Shell转换,最终以用户可理解的形式展示出来。

3.1.3 Shell分类

  1. Bourne Shell(sh)
    开发者:S.R. Bourne
    特点:Unix的第一个Shell,行业标准,但作业控制功能较弱,不支持别名和历史记录,常作为应急Shell使用。

  2. C Shell(csh)
    开发机构:加州大学伯克利分校
    特点:改进Bourne Shell的不足,编程风格类似C语言,受C程序员欢迎,但健壮性不及Bourne Shell。

  3. Korn Shell(ksh)
    开发者:David Korn
    特点:解决Bourne Shell的用户交互问题,避免C Shell的脚本编程缺陷,需许可证,应用范围受限。

  4. Bourne Again Shell(bash)
    开发机构:AT&T贝尔实验室
    特点:Bourne Shell的增强版,融合了Bourne Shell、Korn Shell的功能,并引入C Shell的部分特性,具备环境变量配置、历史记录、内置算术运算、通配符支持等功能,是最流行的Shell之一。

3.2 历史记录命令

  • .bash_history:位于用户主目录下的隐藏文件,存储用户的历史命令记录,默认最多保存2000条。

  • .bashrc:包含环境变量和函数定义的脚本,其中包括HISTSIZE(默认显示历史记录数量)和HISTFILESIZE.bash_history文件的最大记录数量)的设置。

  • history:显示历史命令,默认显示数量由HISTSIZE决定。

    • history n:显示最近的n条历史记录。
  • 修改历史记录设置

    • HISTSIZE=500:临时改变显示历史记录的数量。
    • 修改.bashrc文件中的HISTSIZEHISTFILESIZE值,然后退出并重新登录终端,实现永久更改。
    • echo $HISTSIZE:显示当前HISTSIZE的值。

3.3 别名命令

  • alias:查看已定义的命令别名。
  • 设置别名
    • alias 新名='原命令':为命令创建别名。
  • 取消别名
    • unalias 新名:移除命令的别名。

3.4 Linux特殊字符

3.4.1 通配符
  • *:匹配任意数量的任意字符。
  • ?:匹配单个任意字符。
  • [...]:匹配括号内任何一个字符。
  • [-]:匹配括号内指定范围内的字符。
  • [^]:匹配除括号内字符以外的任何字符。
3.4.2 管道符 |
  • 格式command1 | command2
  • 功能:将前一个命令的输出作为后一个命令的输入。
3.4.3 输入输出重定向
  • >:覆盖模式输出到文件。
  • >>:追加模式输出到文件。
  • 2>:仅重定向错误输出到文件。
  • &>:重定向所有输出(包括错误)到文件。
  • <:从文件读取输入。
3.4.4 命令替换
  • 格式command1 $(command2) 或 command1 \command2``
  • 功能:将command2的输出结果替换到command1中。

3.5 echo命令

  • 功能:向终端输出指定内容。
  • 选项
    • -n:输出时不自动换行。
    • 使用双引号"保持原样输出。

3.6 date命令

  • 功能:显示或修改系统日期和时间。
  • 格式
    • date:显示当前日期和时间。
    • sudo date -s 'YYYY-MM-DD':设置日期。
    • sudo date -s 'HH:MM:SS':设置时间。

系统维护与用户管理命令

4.1 man 命令

  • 功能:查看命令的手册页。
  • 使用示例
    • man man:查看man命令的帮助文档。
  • 手册页分类
    • 1:可执行程序或shell命令。
    • 2:系统调用(内核提供的函数)。
    • 3:库函数(程序库中的函数)。

4.2 su 命令

  • 功能:切换用户身份。
  • 使用示例
    • sudo su root:切换到root用户。
    • sudo su 用户名:切换到指定的普通用户。
  • 退出:使用exit命令退出当前用户回到原用户。

4.3 sudo 命令

  • 功能:以管理员权限执行命令,需要输入密码。

4.4 df 命令

  • 功能:查看磁盘分区的使用情况。
  • 使用示例
    • df -Th:以人类易读的格式显示磁盘使用情况,包括文件系统类型。

4.5 mount 命令

  • 功能:挂载文件系统。
  • 使用示例
    • sudo mount -t 设备类型 设备名称 挂载点:挂载设备。
    • sudo umount 挂载点:卸载设备。
  • 注意事项:卸载时应确保挂载点无正在运行的进程依赖。

用户管理命令

  • 增加/删除用户
    • sudo adduser 用户名:创建新用户。
    • sudo deluser --remove-home 用户名:删除用户及其家目录。

6.1 ps 命令

  • ps aux:显示系统中所有进程的详细信息。
  • ps ef:显示系统中所有进程的信息,包括父进程ID(PPID)。

进程状态代码

  • D:不可中断的睡眠状态(通常为I/O操作)。
  • R:运行或可运行状态(在运行队列中)。
  • S:可中断的睡眠状态(等待事件完成)。
  • T:被作业控制信号停止。
  • t:因调试而暂停。
  • X:已死状态(不应出现)。
  • Z:僵尸状态,进程已终止但未被父进程回收。
  • <:高优先级(对其他用户不友好)。
  • N:低优先级(对其他用户友好)。
  • L:有页面锁定在内存中(实时或自定义I/O)。
  • s:会话领导者。
  • l:多线程(使用CLONE_THREAD,如NPTL线程)。
  • +:在前台进程组中。

6.2 top 命令

  • 功能:实时显示系统中各个进程的资源占用状况。
  • 快捷键
    • Shift + >:向下翻页。
    • Shift + <:向上翻页。
  • 列说明
    • PR:进程优先级。
    • VIRT:虚拟内存大小。
    • SHR:共享内存大小。

6.3 调整进程优先级

  • renice:改变正在运行的进程的优先级。
    • sudo renice NI PID:调整指定进程的优先级。
  • nice:以指定优先级运行新进程。
    • sudo nice -n NI值 进程:以指定的优先级运行进程。

6.4 文本搜索命令 grep

  • 基本用法
    • grep "查找的字符串" 文件名:在文件中搜索字符串。
    • grep "\<要查找的字符串\>" 文件名:精确匹配整个单词。
    • grep -r "查找的字符串" 路径/目录:递归搜索目录下的文件。
  • 文件查找
    • find 路径 -name "文件名":查找路径下符合条件的文件。

6.5 kill 命令

  • 功能:向进程发送信号。
  • 查看信号列表
    • kill -l:列出系统定义的所有信号。
  • 常用信号
    • 2:SIGINT(Ctrl+C),终止进程。
    • 3:SIGQUIT(Ctrl+\),终止进程。
    • 9:SIGKILL,强制杀死进程。
    • 15:SIGTERM(默认信号),请求进程终止。
    • 18:SIGCONT,继续暂停的进程。
    • 20:SIGTSTP(Ctrl+Z),暂停进程。
  • 发送信号
    • kill -num PID:向PID指定的进程发送信号。

6.6 前后台进程切换

  • 步骤
    • 运行进程。
    • Ctrl + Z:将进程暂停并送入后台。
    • bg 编号:将暂停的进程置于后台继续执行。
    • jobs:查看当前终端中后台运行的进程。
    • fg 编号:将后台进程切换到前台继续执行。

​​​​​​

​​​​​

7.1 网络命令

  • ifconfig:在Linux系统中用于查看网络接口的IP地址和配置信息。
  • ipconfig:在Windows系统中用于查看网络配置信息,包括IP地址。
  • Ping测试
    • ping 域名/IP地址:测试与远程主机的网络连通性。
    • Windows下,ping -n 包数 域名/IP地址:发送指定数量的数据包进行测试。

特殊情况处理

  • 如果虚拟机无法ping通宿主机(Windows),尝试反向ping(宿主机ping虚拟机),若成功,则可能是虚拟机的防火墙设置问题,需要检查并可能禁用防火墙。
  • 解决虚拟机网络配置问题的步骤:
    1. 卸载虚拟机软件。
    2. 安装系统清理工具,如CCleaner,清理注册表。
    3. 关闭防火墙和杀毒软件。
    4. 以管理员身份重新安装虚拟机软件(如VMware)。

7.2 Ubuntu网络配置

7.2.1 桥接模式
  • 设置步骤
    1. 打开虚拟机软件,进入虚拟网络编辑器。
    2. 选择vmnet0网络适配器。
    3. 更改为桥接模式。
    4. 选择桥接到宿主机的网络适配器(通常是物理网络接口)。

7.2.2 NAT 模式

设置步骤:
  1. 打开虚拟机软件,进入“虚拟网络编辑器”。

    • 选择vmnet8网络适配器。
    • 更改为NAT模式。
    • 点击“确定”完成设置。
  2. 进入虚拟机设置。

    • 选择“网络适配器”。
    • 设置模式为NAT

文件系统命令

8.1 文件系统分类
  • 磁盘文件系统:本地主机上可访问的文件系统,如硬盘、CD-ROM、USB存储器等。
    • 格式:Ext2, Ext3, Ext4, VFAT等。
  • 网络文件系统:允许远程访问的文件系统。
    • 格式:NFS, Samba (SMB/CIFS)等。
  • 专有/虚拟文件系统:非磁盘驻留的文件系统。
    • 格式:TMPFS, PROCFS, LOOPBACKFS等。
8.2 根文件系统结构
目录含义
/bin最常用命令的二进制文件
/sbin系统管理和目录查询的二进制文件
/boot内核和系统启动文件
/opt非系统相关应用的安装目录
/etc系统配置文件
/dev设备文件
/lib共享库文件
/mnt文件系统的挂载点
/proc进程和系统信息
/usr用户相关的文件和目录
8.3 显示文件内容
  • cat 文件:显示文件内容。
  • head -n 文件名:显示前n行。
  • tail -n 文件名:显示后n行。
8.4 连接文件
  • 硬链接:基于inode的链接。
  • 软链接:基于路径的链接。

命令:

  • ln 源文件 链接文件名:创建硬链接。
  • ln -s 源文件 链接文件名:创建软链接。
8.5 文件压缩解压
  • zip: 压缩多个文件至单个压缩文件。
  • unzip: 解压.zip文件。
  • gzip: 单文件压缩,后缀.gz。
  • gunzip: 解压.gz文件。
  • bzip2: 类似gzip,后缀.bz2。

选项:

  • -x: 解压。
  • -c: 压缩。
  • -v: 显示过程信息。
  • -f: 强制。
  • -j: 生成.bz2压缩文件。
  • -z: 生成.gz压缩文件。

组合命令:

  • tar -cjf: bz2格式压缩。
  • tar -czf: gz格式压缩。
  • tar -xvf: 解压压缩包。

数据类型与分文件编程概览

10.1 存储类型
10.1.1 extern
  • 用途:声明外部定义的函数或变量,表明其定义位于其他源文件中。
10.1.2 register
  • 描述:建议编译器将变量存储在寄存器中以优化访问速度。但实际效果取决于编译器优化。
10.1.3 static
  • 作用域
    • 函数内部:局部作用域,但生存期贯穿整个程序。
    • 全局变量:限于当前源文件。
  • 存储位置:全局区(静态区)。
  • 初始化:默认初始化为0,初始化状态保存于.data区,未初始化的存于.bss区。
10.1.4 auto
  • 默认类型:局部变量默认类型,位于栈区。
10.2 数据类型总结
  • 基本数据类型:不可分解的类型,如charintfloat等。
  • 构造数据类型:通过基本类型构造而成,包括structunionenum和数组。
  • 指针类型:存储变量地址的特殊类型。
  • 空类型void:用于定义无类型指针和无返回值的函数。
11. 分文件编程
11.1 头文件(.h
  • 内容:宏定义、typedef、结构体、联合体、枚举和函数声明。
  • 避免:通常不直接定义全局变量。
11.2 源文件(.c
  • 包含main函数和子函数的定义。
示例
  1. 创建头文件 head.h,用于声明函数。
  2. 编写函数源文件 add.c,定义函数。
  3. 编写主源文件 main.c,引入头文件并调用函数。
  4. 编译:将多个.c文件编译链接成可执行文件。

特别注意:记住需要同时编译两个文件!!!

12.1 GCC 编译工具

GCC(GNU Compiler Collection)是广泛使用的开源编译器集合,用于C、C++等多种语言的编译工作。GCC的编译过程分为四个主要阶段:

  1. 预处理 (gcc -E):

    • 展开所有#include指令,合并头文件内容。
    • 替换所有的宏定义。
    • 删除所有的注释。
    • 预处理器不进行语法检查,输出文件扩展名为.i
  2. 编译 (gcc -S):

    • 进行语法和词法检查,将预处理后的文件转换为汇编代码。
    • 输出文件扩展名为.s
  3. 汇编 (gcc -c):

    • 将汇编代码转换为机器码,生成目标文件。
    • 输出文件扩展名为.o
  4. 链接 (gcc):

    • 链接库文件,将多个目标文件组合成可执行文件。
    • 默认输出文件名为a.out,可以通过-o指定其他名称。
12.2 GDB 调试工具

GDB(GNU Debugger)是功能强大的调试工具,用于动态调试GCC编译的程序。

  • 启动调试:

    • 使用gcc -g编译源代码,生成包含调试信息的可执行文件。
    • 运行gdb a.out启动GDB调试器,加载可执行文件。
  • 常用命令:

    • r: 运行程序直到遇到断点或正常结束。
    • l: 查看源代码。
    • b 行号或函数名: 设置断点。
    • info b: 显示所有断点信息。
    • d 断点编号: 删除指定断点。
    • p 变量名: 打印变量的当前值。
    • s: 单步进入函数内部执行。
    • n: 单步执行,但不会进入函数调用。
    • help: 显示帮助信息。
    • q: 退出GDB。

注意: 当遇到printf等函数时,使用s命令可能被嵌入到系统库的内部实现中,此时使用n命令可以避免进入库函数内部。

 
 

12.3 make 编译工具

12.3.1 定义

make 是一个自动化构建工具,用于管理项目中多个文件的编译与链接。通过解析 Makefile 文件,make 能够追踪文件的修改时间,仅对更新的源文件进行重新编译,从而节省时间和资源。

12.3.2 Makefile 格式

基本结构遵循以下模式:

Make

1目标 : 依赖
2    命令
  • 目标:通常指的是需要构建的对象,如可执行文件。
  • 依赖:目标构建所必需的文件,通常是源代码文件或其他目标文件。
  • 命令:用于构建目标的具体指令。
12.3.3 用 make 管理多个文件

示例:

Make

1main: main.o fun.o
2    gcc main.o fun.o -o main
3
4main.o: main.c
5    gcc -c main.c -o main.o
6
7fun.o: fun.c
8    gcc -c fun.c -o fun.o
9
10.PHONY: clean
11clean:
12    rm -rf *.o main
  • PHONY 目标clean 是一个伪目标,它不会产生任何文件,仅用于执行清理操作。
12.3.4 Makefile 变量
  • 自定义变量:用户可以定义变量,通过 $() 来引用它们。
    • =:递归展开变量。
    • :=:直接赋值。
    • +=:追加新值。
    • ?=:如果未定义,则赋值。

示例:

Make

1VAR = hello
2SUM := $(VAR) world
3
4all:
5    echo $(VAR)
6    echo $(SUM)
7
8SUM += 456
9SUM ?= 789
条件编译

Makefile 中,条件编译基于宏的定义与否:

Make

1ifdef MACRO_NAME
2    # 如果宏已定义,则执行此段代码
3else
4    # 否则,执行此段代码
5endif

此外,条件编译也用于防止头文件的重复包含:

Cpp

1#ifndef __HEAD_H__
2#define __HEAD_H__
3
4// 头文件内容
5
6#endif // __HEAD_H__

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笨笨小乌龟11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值