Linux 第10章 - 第17章 大数据定制篇shell编程

Linux 第10章 ~ 第17章 大数据定制篇shell编程

文章目录

第10章 实操篇 组管理和权限管理

10.1 Linux组基本介绍

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念。

  • 所有者
  • 所在组
  • 其他组
  • 改变用户所在的组

10.2 文件/目录 所有者

一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。

10.2.1 查看文件的所有者

指令:ls –ahl

10.2.2 修改文件所有者

chown 用户名 文件名

10.3 组的创建

基本指令

groupadd 组名

10.4 文件/目录 所在组

当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。

10.4.1 查看文件/目录所在组

基本指令
ls –ahl

10.4.2 修改文件所在的组

chgrp 组名 文件名

10.5 其他组

除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。

10.6 改变用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某
个用户所在的组。

10.6.1 改变用户所在组
  • usermod –g 组名 用户名
  • usermod –d 目录名 用户名 改变该用户登陆的初始目录。

10.7 权限的基本介绍

ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 ab

0-9位说明

  • 第0位确定文件类型(d, - , l , c , b)
    • d目录
    • -普通文件
    • l 软链接
    • c 字符设备
    • b 块文件、硬盘
  • 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
  • 第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
  • 第7-9位确定其他用户拥有该文件的权限 —Other

10.8 rwx权限详解

10.8.1 rwx作用到文件
  • [ r ]代表可读(read): 可以读取,查看
  • [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.
  • [ x ]代表可执行(execute):可以被执行
10.8.2 rwx作用到目录
  • [ r ]代表可读(read): 可以读取,ls查看目录内容
  • [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
  • [ x ]代表可执行(execute):可以进入该目录

10.10 修改权限 - chmod

10.10.1 基本说明

通过chmod指令,可以修改文件或者目录的权限。

10.10.2 第一种方式:+、-、=变更权限

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)

  • chmod u=rwx,g=rx,o=x 文件目录名
  • chmod o+w 文件目录名
  • chmod a-x 文件目录名
10.10.3 第二种方式:通过数字变更权限

r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名

10.11 修改文件所有者 - chown

10.11.1 基本介绍

chown newowner file 改变文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效

10.12 修改文件所在组 - chgrp

10.12.1 基本介绍

chgrp newgroup file 改变文件的所有组

第11章 实操篇 crond任务调度

11.2 概述

任务调度:是指系统在某个时间执行的特定的命令或程序。

任务调度分类:

  1. 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
  2. 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

11.3 基本语法

crontab [选项]

-e编辑crontab定时任务
-l查询crontab任务
-r删除当前用户所有的crontab任务

11.4 快速入门

11.4.1 任务要求

设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab –e命令。
接着输入任务到调度文件
如:*/1 * * * * ls –l /etc/ > /tmp/to.txt
意思说每小时的每分钟执行ls –l /etc/ > /tmp/to.txt命令

11.4.2 步骤
  1. cron -e
  2. /1***ls -l / etc >> /tmp/to.txt
  3. 当保存退出后就启动程序
  4. 每一分钟都会自动的调用ls - l /etc >> /tmp/to.txt
11.4.3 参数细节说明
  • 5个占位符

    项目含义范围
    第一个*一小时当中的第几分钟0-59
    第二个*一天当中的第几小时0-23
    第三个*一个月当中的第几天1-31
    第四个*一年当中的第几月1-12
    第五个*一周当中的星期几0-7(0、7都表示星期日)
  • 特殊符号的说明

    特殊符号含义
    *代表任何时间
    代表不连续的时间
    -代表连续的时间范围
    */n代表每隔多久执行一次
  • 特定时间执行任务案例

    时间含义
    4522***命令在22点45分执行命令
    017**1命令每周一的17点0分执行命令
    051,15**命令每月1号和15号的凌晨5点0分执行命令
    404**1-5命令每周一到周五的凌晨4点40分执行命令
    */104***命令每天的凌晨4点,每隔10分钟执行一次命令
    001,15*1命令每月1号和15号,每周一的0点0分就会执行命令

11.6 crond相关指令

  • conrtab –r:终止任务调度。
  • crontab –l:列出当前有那些任务调度
  • service crond restart [重启任务调度]

第12章 实操篇 Linux磁盘分区、挂载

12.1 分区基础知识

12.1.1 分区的方式
  1. mbr分区
    • 最多支持四个主分区
    • 系统只能安装在主分区
    • 扩展分区要占一个主分区
    • MBR最大只支持2TB,但拥有最好的兼容性
  2. gtp分区
    • 支持无限多个主分区(但操作系统可能限制,比如 windows下最多128个分区)
    • 最大支持18EB的大容量(1EB=1024 PB,1PB=1024 TB )
    • windows7 64位以后支持gtp
12.1.2 Windows下的磁盘分区

12.2 Linux分区

12.2.1 原理介绍

Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。

Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

12.2.2 硬盘说明

Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。

对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。

12.2.3 使用lsblk指令查看当前系统的分区情况

命令 :lsblk 或者 lsblk -f

12.3 挂载

给Linux系统增加一个新的硬盘,并且挂载到/home/newdisk

12.3.1 如何增加一块硬盘
  1. 虚拟机添加硬盘

  2. 分区

    分区命令 fdisk /dev/sdb

  3. 格式化

    格式化磁盘 分区命令:mkfs -t ext4 /dev/sdb1
    其中ext4是分区类型

  4. 挂载

    挂载: 将一个分区与一个目录联系起来,
    mount 设备名称 挂载目录
    例如: mount /dev/sdb1 /newdisk
    umount 设备名称 或者 挂载目录
    例如: umount /dev/sdb1 或者 umount /newdisk

    【用命令行挂载重启后会失效】

  5. 设置可以自动挂载 。

    通过修改/etc/fstab实现挂载
    添加完成后 执行mount –a 即刻生效

12.5 磁盘情况查询

12.5.1 查询系统整体磁盘使用情况

基本语法 df -h

12.5.2 查询指定目录的磁盘占用情况

基本语法 du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录

  • -s 指定目录占用大小汇总
  • -h 带计量单位
  • -a 含文件
  • –max-depth=1 子目录深度
  • -c 列出明细的同时,增加汇总值

12.6 磁盘情况 - 工作实用指令

  • 统计/home文件夹下文件的个数

    ls -l /home | grep “^-” | wc -l

  • 统计/home文件夹下目录的个数

    ls -l /home | grep “^d” | wc -l

  • 统计/home文件夹下文件的个数,包括子文件夹里的

    ls -lR /home | grep “^-” | wc -l

  • 统计文件夹下目录的个数,包括子文件夹里的

    ls -lR /home | grep “^d” | wc -l

  • 以树状显示目录结构

    tree

第13章 实操篇 网络配置

13.3 ping测试主机之间网络连通

13.3.1 基本语法

ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)

13.4 Linux网络环境配置

13.4.1 第一种方式 : 自动获取

特点:linux启动后会自动获取IP

缺点是每次自动获取的ip地址可能不一样。

13.4.2 第二种方式 : 指定固定的ip

直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑 vi /etc/sysconfig/network-scripts/ifcfg-eth0

【重启网络服务或者重启系统生效 service network restart 、reboot】

第14章 实操篇 进程管理

14.1 进程的基本介绍

在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。

每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。

每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。

一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

14.2 显示系统执行的进程

14.2.1 说明

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。

显示信息

字段说明
PID进程识别号
TTY终端机号
TIME此进程所消CPU时间
CMD正在执行的命令或进程名
  • ps -a:显示当前终端的所有进程信息
  • ps -u:以用户的格式显示进程信息
  • ps -x:显示后台进程运行的参数
14.2.2 ps指令详解

指令:ps –aux|grep xxx
指令说明

  • System V展示风格
  • USER:用户名称
  • PID:进程号
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用物理内存的百分比
  • VSZ:进程占用的虚拟内存大小(单位:KB)
  • RSS:进程占用的物理内存大小(单位:KB)
  • TT:终端名称,缩写 .
  • STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
  • STARTED:进程的启动时间
  • TIME:CPU时间,即进程使用CPU的总时间
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

14.3 终止进程kill和killall

14.3.1 介绍

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

基本语法:
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

常用选项:
-9 :表示强迫进程立即停止

14.4 查看进程树pstree

14.4.1 基本语法

pstree [选项] ,可以更加直观的来看进程信息

常用选项:

  • -p :显示进程的PID
  • -u :显示进程的所属用户

14.5 服务(Service)管理

14.5.1 介绍

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。

14.5.2 service管理指令

service 服务名 [start | stop | restart | reload | status]
在CentOS7.0后 不再使用service ,而是 systemctl

14.5.5 查看服务名
  • 方式1:使用setup -> 系统服务 就可以看到。
  • 方式2: /etc/init.d/服务名称
14.5.6 服务的运行级别(runlevel)

查看或者修改默认级别: vi /etc/inittab
Linux系统有7种运行级别(runlevel):常用的是级别3和5

  • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS),不支持网络
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5:X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
14.5.7 开机的流程说明

开机 → BIOS → /boot → init进程1 → 运行级别 → 运行级对应的服务

14.5.8 chkconfig指令

通过chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭

基本语法

  • 查看服务 chkconfig --list|grep xxx
  • chkconfig 服务名 --list
  • chkconfig --level 5 服务名 on/of

14.6 动态监控进程

14.6.1 介绍

top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。

基本语法:
top [选项]

选项说明

选项功能
-d 秒数指令top命令每隔几秒更新。默认3秒
-i使top不显示任何闲置或者僵尸进程
-p通过指定监控进程ID来仅仅监控某个进程的状态

交互操作说明

操作功能
P以CPU使用率排序,默认就是此项
M以内存的使用率排序
N以PID排序
q退出top
14.6.5 查看系统网络情况 netstat

netstat [选项]
选项说明

  • -an 按一定顺序排列输出
  • -p 显示哪个进程在调用

第15章 实操篇 RPM和YUM

15.1 rpm包的管理

15.1.1 介绍

一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。

15.1.2 rpm包的简单查询指令

查询已安装的rpm列表 rpm –qa|grep xx

一个rpm包名:firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统: el6.centos.x86_64
表示centos6.x的64位系统
如果是i686、i386表示32位系统,noarch表示通用。。

15.1.4 rpm包的其他查询指令
  • rpm -qa :查询所安装的所有rpm软件包
  • rpm -q 软件包名 :查询软件包是否安装
  • rpm -qi 软件包名 :查询软件包信息
  • rpm -ql 软件包名 :查询软件包中的文件
  • rpm -qf 文件全路径名 查询文件所属的软件包
15.1.5 卸载rpm包

基本语法
rpm -e RPM包的名称

15.1.6 安装 rpm包

基本语法
rpm -ivh RPM包全路径名称
参数说明

  • i=install 安装
  • v=verbose 提示
  • h=hash 进度条

15.2 yum

15.2.1 介绍

Yum 是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

15.2.2 yum的基本指令
  • 查询yum服务器是否有需要安装的软件
    yum list|grep xx软件列表
  • 安装指定的yum包
    yum install xxx 下载安装

第17章 大数据定制篇shell编程

17.1 为什么要学习shell编程

  • Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
  • 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
  • 对于大数据程序员来说,需要编写Shell程序来管理集群。

17.2 Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

17.3 shell编程快速入门 - shell脚本的执行方式

17.3.1 脚本格式要求
  • 脚本以#!/bin/bash开头
  • 脚本需要有可执行权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DhRQISJ-1657760625303)(C:\Users\DingJiaxiong\AppData\Roaming\Typora\typora-user-images\1657759668627.png)]

17.4 shell的变量

17.4.1 shell变量的介绍
  • Linux Shell中的变量分为,系统变量和用户自定义变量。
  • 系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等等
    比如: echo $HOME 等等…
  • 显示当前shell中所有变量:set
17.4.2 shell变量的定义

基本语法

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly变量,注意:不能unset
17.4.3 定义变量的规则
  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
  • 等号两侧不能有空格
  • 变量名称一般习惯为大写
17.4.4 将命令的返回值赋给变量
  • A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
  • A=$(ls -la) 等价于反引号

17.5 设置环境变量

17.5.1 基本语法
  • export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
  • source 配置文件 (功能描述:让修改后的配置信息立即生效)
  • echo $变量名 (功能描述:查询环境变量的值)

17.6 位置参数变量

17.6.1 介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。

17.6.2 基本语法
  • $n (功能描述:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9{10})
  • ∗ ( 功 能 描 述 : 这 个 变 量 代 表 命 令 行 中 所 有 的 参 数 , * (功能描述:这个变量代表命令行中所有的参数, *把所有的参数看成一个整体)
  • @ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @@把每个参数区分对待)
  • $#(功能描述:这个变量代表命令行中所有参数的个数)

17.7 预定义变量

17.7.1 基本介绍

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用。

17.7.2 基本语法
  • $$ (功能描述:当前进程的进程号(PID))
  • $! (功能描述:后台运行的最后一个进程的进程号(PID))
  • $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

17.8 运算符

17.8.2 基本语法
  • ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ (())[运算式]”
  • expr m + n
    注意expr运算符间要有空格
  • expr m - n
  • expr *, /, % 乘,除,取

17.9 条件判断

17.9.1 基本语法

[ condition ](注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)

17.9.3 常用判断条件
  • 两个整数的比较
    = 字符串比较
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
  • 按照文件权限进行判断
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
  • 按照文件类型进行判断
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录

17.10 流程控制

17.10.1 if判断

基本语法

if [ 条件判断式 ];then 
	程序
fi 
或者
if [ 条件判断式 ] 
	then 
		程序
	elif [条件判断式]
	then
	程序
fi

注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格 (2) 推荐使用第二种方式

17.10.2 case语句

基本语法

case $变量名 in 
"值1")
如果变量的值等于值1,则执行程序1 
;; 
"值2")
如果变量的值等于值2,则执行程序2 
;; 
…省略其他分支… 
*)
如果变量的值都不是以上的值,则执行此程序
;; 
esac
17.10.3 for循环

基本语法1

for 变量 in 值1 值2 值3… 
do 
	程序
done

基本语法2

for (( 初始值;循环控制条件;变量变化 )) 
do 
	程序
done
17.10.4 while循环

基本语法1

while [ 条件判断式 ] 
do 
	程序
done

17.11 read读取控制台输入

17.11.1 基本语法

read(选项)(参数)
选项:

  • -p:指定读取值时的提示符;
  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
  • 参数
    变量:指定读取值的变量名

17.12 函数

17.12.1 函数介绍

shell编程和其它编程语言一样,有系统函数,也可以自定义函数。

17.12.2 系统函数
  • basename基本语法
    功能:返回完整路径最后 / 的部分,常用于获取文件名
    basename [pathname] [suffix]
    basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
    选项:
    suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
  • dirname基本语法
    功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
    dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
17.12.4 自定义函数

基本语法

基本语法

[ function ] funname[()]
{
	Action;
	[return int;]
}

本语法1

while [ 条件判断式 ] 
do 
	程序
done

17.11 read读取控制台输入

17.11.1 基本语法

read(选项)(参数)
选项:

  • -p:指定读取值时的提示符;
  • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
  • 参数
    变量:指定读取值的变量名

17.12 函数

17.12.1 函数介绍

shell编程和其它编程语言一样,有系统函数,也可以自定义函数。

17.12.2 系统函数
  • basename基本语法
    功能:返回完整路径最后 / 的部分,常用于获取文件名
    basename [pathname] [suffix]
    basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
    选项:
    suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
  • dirname基本语法
    功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
    dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
17.12.4 自定义函数

基本语法

基本语法

[ function ] funname[()]
{
	Action;
	[return int;]
}

调用直接写函数名:funname [值]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ding Jiaxiong

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

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

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

打赏作者

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

抵扣说明:

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

余额充值