运维课程第二周小结

运维课程第二周小结

第四天:系统管理和用户管理

4.1 openeuler的安装
  • 版本使用Red Hat Enterprise Linux 9 64位
  • 网络配置:ipv4中的地址,子网掩码,网关和DNS
  • 选择最小安装
  • 密码需要长密码,因此需要先设长密码后在root中更改
4.2 Ubuntu环境部署Nginx
  • 禁用防火墙 systemctl disable firewalld.service -- 移除防火墙服务
4.2.1 Rocky系统和Ubuntu环境的Nginx差异

在这里插入图片描述

  • 这几个都是导入的文件,可以用grep include /etc/nginx/nginx.conf进行查看
4.2.2 Nginx核心配置文件
  • 本目录中所有的操作都以Ubuntu为例

  • 在这里插入图片描述

  • 每个server配置段都负责一个站点,在Nginx中可以承接很多个不同的网站

  • 服务器中有很多文件,它们都属于web资源,而每个资源都有自己的url(e.g. https://eclick.baidu.com/se.jpg)

    • url由协议 + 地址(省略了:80)+ 文件组成
  • url的请求交给server后,由location来承载

  • 我们主要负责管理server配置段和location配置段

  • 在这里插入图片描述

    • server配置段有listen,用来控制端口
    • root中存放的文件,用来给网站用
  • root属性默认可以直接用不用改,除非要用自己的

  • 查看location中的内容:cat /etc/nginx/sites-enabled/default

  • 最精简的server:直接listen就可以,别的默认不用管

  • 每条有效命令后都有;

4.2.3 Nginx网站交互逻辑

提出问题:当我访问一个站点的时候,它的完整逻辑是什么?(客户端与服务端怎么交互?)

解决问题:

在这里插入图片描述

    1. 客户端输入网站域名:www.a.com
    2. DNS服务将域名解析为ip地址 e.g. 10.0.0.13
    3. 与暴露的80端口建立TCP/IP级别的连接,以进入应用程序
    4. 端口里面的web软件进行http请求处理,并且3步走
      • 3 - 1 发送请求头,发现末尾/自动补充了 curl -v www.a.com
        • 原因:curl -v 10.0.13 发现GET / , /是向10.0.0.13发送的请求的默认资源
      • 端口上通过server的listen进行监听,ip进入server中的location,web站点目录用server - root进行定制
      • 站点目录中的文件有很多,默认提供index.html 因此index用来定制默认文件名,一般我们不修改
        如果index后有三个文件,按顺序通过优先级依次返回
      • 3 - 2 处理请求, location / 的 / 就是待处理的请求关键字,匹配url的请求
        • $uri 是环境变量,其值为www.a.com/abc中的abc的值
      • 3 - 3 返回内容
        • 返回默认返回root目录中的同名文件
          • 以root /var/www/html为例
            • 如果目录下有名为abc的文件,则直接返回(在例子中是/目录)
            • 如果找不到同名文件,则去同名文件的目录下找index.html的文件(默认root目录下有一个abc/index.html的文件)(在例子中是/目录,所以返回了/var/www/html/目录下的index.html文件)
            • 如果前两种处理方式都不管用,返回404;
4.3 openeuler的初始设置
  • 同ubuntu,此处不进行重复回顾
4.4 Nginx web实践
  • 删除默认的目录 rm -f /etc/nginx/sites-enabled/default

  • 定制应用界面(创建新目录 + 定制index.html的内容)

    cd /tmp
    rm -rf ./* -- 把目录下的所有文件和目录清空
    mkdir -p /data/server/nginx/web{1..3}
    接下来对于这三个文件定制站点目录
    在定制配置的时候需要定制root属性,因为是自己创建的
    echo "nginx web1" > /data/server/nginx/web1/index.html
    echo "nginx web2" > /data/server/nginx/web2/index.html
    echo "nginx web3" > /data/server/nginx/web3/index.html
    
  • 找到用来定制的include文件在哪里

    grep include /etc/nginx/nginx.conf
    cat /etc/nginx/nginx.conf -- 去http中找,发现可以创建.conf文件(include /etc/nginx/conf.d/*.conf)
    vim /etc/nginx/conf.d/vhost.conf -- 用来在http配置段中定制server配置段
    其中:
    server {
      listen 80;
      root /data/server/nginx/web1;
    }
    server {
      listen 81; -- 端口不能共用一个
      root /data/server/nginx/web2;
    }
    server {
      listen 82;
      root /data/server/nginx/web3;
    }
    
    netstat -tnulp -- 查看端口
    
4.5 Nodejs项目了解

在这里插入图片描述

  • npm主要是用来维护下载的第三方模块之间的关联关系

  • Nodejs可以让html等运行在服务端

  • 部署环境

    systemctl stop nginx.service --解除nginx对于80端口的占用
    netstat -tnulp -- 检查端口
    apt install nodejs
    nodejs -v -- 查看nodejs版本
    小项目参考第三天 网络基础与网络搭建pdf中的1.5.3.2.3
    
4.6 文件系统

在这里插入图片描述

  • 了解性内容

  • 常见目录

    用户相关: /root/home -- 用户的家目录
    设备相关: /dev
    命令相关: /bin/sbin /usr/bin /usr/sbin -- binary目录存放最常使用的命令,/usr/bin系统用户使用的应用程序
    系统相关:
    	/var -- 经常变动的文件
    	/usr -- 和共享有关的文件
    	/etc -- 和配置有关的文件
    	/proc -- 和进程有关的文件
    
  • linux中的文件系统是ext4(主要)和XFS

  • Windows中的文件系统主要是ntfs

  • 其他fat、swap、iso9660(光盘)

  • 文件颜色

    蓝色:目录文件
    白色:普通文件
    浅蓝色:链接文件
    绿色:可执行文件
    红色:压缩文件
    黄色:设备文件
    红色闪烁:链接文件有问题
    
  • 确认文件属性信息

    精简的属性: ls -l 或 ll
    文件的元数据属性信息:file
    文件的状态信息:stat
    命令别名:alias
    
  • 环境变量

    PATH -- 系统上的命令路径
    LANG -- 系统语言
    LANG=EN -- 英文
    
  • 文件存储

    在这里插入图片描述

    • 磁盘区域有多个分区
      • 前端放属性信息
      • 中段标识区域inode
      • 后端数据区域block
    • 每个inode和data block一一对应
  • Linux下一切皆文件:

    找文件方法:stat命令找到inode信息,inode中存放着数据块所在的位置,从而找到数据

    在这里插入图片描述

    目录 -> inode ->找到文件 -> 拼接 -> inode…

  • 数据符号:

    * -- 匹配字符
    {a..z} -- 表示范围内所有内容
    [0-9] -- 匹配字符
    [^0-9] -- 上述命令的补集
    ls a* 
    ls [a-d]* -- 显示所有a-d的内容
    
  • 链接文件

    • 硬链接 + 软链接

    在这里插入图片描述

    • 硬链接文件指向同一inode,数据不变,硬链接数增加

    •   ln 源文件 目标文件 -- 创建硬链接
        ln -s 源文件 目标文件 -- 创建软链接,不仅可以在目录上操作,还可以在硬链接上操作
      
    • 在这里插入图片描述

  • 磁盘满了 可能是inode用完了或者空间满了

4.7 IO实践
重定向符号:
	> -- 覆盖式重定向(把文件内的东西覆盖了)
	>> -- 追加式重定向(在文件后面追加)
/dev/null 垃圾桶,放进去就再也拿不回来了
2>&1 -- 所有信息内容,采集所有程序运行的正确和错误输出
0 -- 输入
1 -- 标准正确输出
2 -- 标准错误输出
eof ... eof -- 内容范围边界
cat << eof
...
...
eof
cat > /path/to/file << eof
...
...
eof -- 通过eof把多行文件重定向到file里

cat > /path/to/file <<-eof -- 横杠考虑到最下面的eof前面有tab键导致文件错误
...
...
eof -- 通过eof把多行文件重定向到file里
4.8 Linux命令
systemctl start -- 仅限于当前OS运行的时候,OS重启后,需要再次执行
systemctl enable -- 仅限于当前OS运行的时候不生效,OS重启后才生效
systemctl disable firewalld.service -- 移除防火墙服务
touch file{1..4}.txt -- 大括号作用:创建连续的内容(此处从1到4)
echo "文件内容" > /path/to/file.txt -- 把文件放到>右边的文件里,无论文件存在与否都可以(如果不在就直接创建)
nginx -t -- 检测配置文件
systemctl restart 服务 -- 所有修改完成后都要重启(现阶段)
dos2unix -- 把文件从windows格式转换为Linux格式
4.9 vim快捷键
3yy -- 复制三行

第五天:系统管理和用户管理

5.1 rocky10的安装
  • 显示器中的加速3D图形一定要取消勾选
  • 内存8GB,处理器4
5.2 read的应用
  • 大规模自动化脚本 - 接受用户输入数据

    read -p "请输入用户名:" username -- 提示符:请输入登录用户名:
    echo $username
    
5.3 高级重定向
tr "a-z" "A-Z" <<< "jkhdasfjklahlh" -- 把内容全部大写
5.4 用户管理
  • 假设有一个公司,门禁卡是用户管理,保安室对标权限管理,保安室内的规章制度对标准入控制(access control)

  • rocky的SELinux会阻止用户自己编写的服务,因此需要禁用

    getenforce -- 查看SELinux的运行情况
    setenforce 0 -- 临时禁用
    永久禁用方法:
    vim /etc/selinux/config中把SELINUX=disabled
    reboot
    
  • 对于用户本身:

    • 用户操作 | 增删改查
    • 用户管理文件
     cat /etc/passwd -- 我们只需要关心用户名和登录后的shell环境
    

    在这里插入图片描述

5.4.1 用户组管理
groupadd -r group1 -- 创建group1并且加入随机的组中,但是建议不要乱用
groupadd -g 10086 group2 -- 创建group2并且赋予其10086的GID(只要记这个)
grep group /etc/group -- 查看组
groupdel group4 -- 删除group4
gpasswd -a lisi group1 -- 把lisi加入到group1组中
gpasswd -d lisi group1 -- 把lisi从group1组中移除
groupmems-g group1 -a rxliang -- 把rxliang添加到group1组
5.4.2 id命令
id rxliang -- 查看id等信息
5.4.3 用户创建
useradd -m xxx -- 创建用户家目录(为了保证在rocky和ubuntu主机上都有家目录创建)此命令重点记忆
useraded -g 1001 -m lisi1 -- 创建用户家目录的同时将用户加入指定的组里
useradd -u 10088 -- 指定创建用户的id
5.4.4 密码更改
echo 密码|passwd 用户名
echo 密码|passwd --stdin -- 仅限于rocky系列的os
echo "用户名;密码"| chpasswd
5.4.5 用户删除
userdel -r -- 删除的时候强制带着-r就行了
5.5 权限管理

需要知道,我们将权限管理分为两部分:文件的用户属性文件的操作权限

5.5.1 文件的用户属性
  • 文件所有者 owner 简称u
  • 文件归属组 group 简称g
  • 其他人 others 简称o

他们通过看,写,执行来操作文件,由此引出文件的操作权限

5.5.2 文件的操作权限

在这里插入图片描述

如图所示,输入ll linux.txt后,-rw-r--r--中:第一个- 表示文件类型,之后以---为一组,共三组

  • 第一组表示所有者u的权限
  • 第二组表示归属组g的权限
  • 第三组表示其他用户o的权限

rwx为例,r表示该文件可读(read),w表示该文件可写(write),x表示该文件可执行(execute),没有权限在各个位置上用 - 表示

  • 用二进制对rwx进行表示
    • 22 21 20 当各个位置没有权限时,用0表示;反之用1表示
    • rwx的二进制表示为4 + 2 + 1 = 7
    • 由于掩码022的存在:
      • 普通目录的默认权限为755,即 rwxrwxrwx的777减去022所得的值
      • 普通目录的默认权限为644,即rw-rw-rw-的666减去022所得的值
5.5.3 权限命令
前置准备:
cd
mkdir chown
cd chown/
mkdir dir{1..5}
echo file-a > a.txt
echo file-b > b.txt
echo file-c > c.txt
echo file-d > d.txt
echo file-e > e.txt

最最最核心的两条命令

  • chown 即 change owner 的简称
chown 所有者:用户组 file
chown 所有者:用户组 -R file -- 把目录和目录内的所有文件全部改变权限

e.g.
chown rxliang a.txt
ll -- 发现所有者变为rxliang

有些人喜欢用 chown 所有者.用户组 file ,但非常不推荐

  • chmod 即 change mode 的简称

    已知共有u,g,o三个组

chmod mode file
局部权限修改:
	chmod +x a.txt -- 为a.txt中的u,g,o全部添加x权限
	chmod u-x,g-x,o-x a.txt -- 为a.txt中的u,g,o分别减去x权限
	chmod u=rwx e.txt -- 把e.txt中u的权限改为rwx
整体权限修改:
	chmod 600 a.txt -- 把a.txt的总权限改成600,即rw-------

在这里插入图片描述

5.5.4 特殊权限(了解)

在这里插入图片描述

  • 特殊权限分为SUID,SGID和Sticky bit
    • SUID:表现为所有者u的rws,让所有普通用户在执行文件时拥有root用户的权限(要保证文件非敏感)
    • SGID:表现为归属组g的rws,假设目录是wubai,则普通用户在该目录下创建的文件,所属组是wubai,所有者是普通用户自己
    • Stick bit(粘滞位):表现为其他用户o的rwt,任何用户都可以对目录内自己的文件进行任何操作,但不可以动别人的
5.5.5 特殊属性
chattr -- 用于改变文件目录或目录的扩展属性
	chattr +a file -- 只允许追加数据,不能删除或修改文件内容
	chattr +i file -- 设置文件为不可修改,即不能删除、重命名、修改内容或添加链接

lsattr -- 查看文件或目录的扩展属性
5.6 文本(vim)管理

在这里插入图片描述

共有三个模式:默认模式,编辑模式,命令模式

  • 进入vim:

    vim nihao.txt +k -- 进入nihao.txt的第三行
    
  • 进入编辑模式:

    a -- 在光标所在处后面输入
    o -- 在当前光标所在行的下方打开一个新行
    
  • 查找关键字:

    /关键字 -- 会用黄色高亮
    
  • 扩展命令:

    :wq -- 写入并退出
    :q! -- 强制退出
    
  • 文件内容编辑

在这里插入图片描述

```powershell
:2d -- 删除第二行
:2,4d -- 删除第2行到第4行
:2;+3y -- 复制第2行到第5行,总共4行
```
  • 重要:内容替换方法

    :s/要查找的内容/替换为的内容/修饰符 -- 一般修饰符是g,表示范围内所有的都替换;不加表示只替换一个
    :%s -- 表示全文替换
    
    % -- 全文
    $ -- 最后一行
    起始,结束
    ,结束 -- 光标所在行,到 结束位置行
    常用示例:
    	:%s/原内容/替换后内容/g -- 从全文替换
    	:,$s/原内容/替换后内容/g -- 从当前行到最后一行进行替换
    	:/关键字/,$s/原内容/替换后内容/g -- 正则匹配内容进行全文替换
    	:3,6s/原内容/替换后内容/g -- 从第三行到第六行内容进行替换
    
  • 行光标跳转

    ^ -- 跳转至行首的第一个非空白字符
    $ -- 跳转至行尾
    
  • 其他操作

    yy -- 复制
    3yy -- 复制三行
    p -- 复制一次
    3p -- 粘贴三次
    u -- 撤销编辑
    
5.7 Linux命令
ll -d 列出目录本身的详细信息

第六天:文本管理和文件查找

6.1 vim高阶
6.1.1 常用属性
查看行号:
	:set nu -- 显示行号 (用的最多)
	:set nonu -- 取消显示行号

下面的这些都可以放在vimrc中,作为自动化程序保存
复制保留格式:
	:set paste
	
Tab用空格代替:
	:set et
6.1.2 可视化模式
v(小写) -- 面向字符
V(大写) -- 面向整行

多行同时编辑:
    ctrl-v(小写) -- 面向块 (用的最多)
    shift + i
    输入字符
    esc

6.1.3 内容处理
6.1.3.1 切割替换
cut命令:
-d+符号表示内容以什么形式分割,-f表示要切割后的哪一块
-d:
-d" "
	cut -d: -f1 1.txt -- 以:冒号分割,截取第一列内容 (用的最多)
	
	cut -d: -f1,6,7 1.txt -- 以:冒号分割,截取第1,6,7列内容
	cut -c4 1.txt -- 截取文件中每行第4个字符
	cut -c5- 1.txt -- 从第五个字符开始截取后面所有字符
	
tr命令:
tr -s " " -- 把空号内的东西聚合成一个
tr "A" "B" < test.txt -- 把test.txt中A的内容替换成B
6.1.3.2 信息排序
sort命令:
	sort -n file -- 以数字排序
	sort -r file -- 降序排序
	sort -nr file -- 以上两条命令结合
	
uniq命令:
连续信息的去重
	uniq -- 把重复的内容只保留一个
	uniq -c -- 去重。并统计重复行次数(count)
	uniq -i -- 忽略大小写(AA和aa看成一个东西)
	uniq -d -- 只显示重复的内容
6.1.3.3 内容合并
paste命令:
    paste a.txt b.txt -- 把a.txt和b.txt中的内容进行合并
    paste -d"@" a.txt b.txt -- 把a.txt和b.txt中的内容用@连接并进行合并
    
xargs命令:
	xargs -a num.txt -n1 -I {} echo {}--bak
	其中:
	-a num.txt -- 读取num.txt内容
	-n1 -- 逐行读取
	-I {} -- 将读取的内容放到临时空间中
	echo{}--bak -- 对临时空间内的内容进行处理
	输出:9--hello
6.2 kylin desktop安装
  • kylin desktop属于ubuntu系列
  • 选择现成的盘进行全盘安装
  • 格式化磁盘
  • 剩余步骤一样
6.3 三剑客
6.3.1 grep命令
grep 关键字 文件名 -- 从文件中获取关键字
命令 | grep 关键字 -- 从文件中获取关键字

常见命令:
grep -i -- 不区分大小写提取 (ignore)
grep -n -- 提取并显示行号
grep -nir -- 不知道范围时,直接输入这个命令,可以直接找到在哪里(小技巧,很重要) r代表一层一层搜索
grep -E -- 同时搜索多个内容 (grep -E "error|warn" log.txt)

其他命令:
grep '^root' file -- 提取以root为开头的行
grep -A -- 显示匹配行后面多少行 (包含关键字所在行) A3显示4行
grep -B -- 显示匹配行前面多少行 (包含关键字所在行) B3显示4行
grep -B -- 显示匹配行前后多少行 (包含关键字所在行) 
grep -v -- 匹配需求内容的补集
6.3.2 sed命令(Stream EDitor)
  • 非常强大的文本编辑工具,不需要进入到文本内部就可以修改
  • 把文件内的行内容逐行读取,并放到缓存空间
  • vim内文件的编辑思路可以直接平移
sed '2s/bin/BIN' passwd -- 把passwd中的bin全部替换为BIN
sed '2i\xxxxxxxx' file -- 在第二行开启空行并插入xxxxxxxx
sed '2a\xxxxxxxx' file -- 在第二行后的第三行开启空行并插入xxxxxxxx
sed -i -- 表示真正对文本进行编辑,不加的话就是纯逗你玩玩的

vim sed.txt -- 导入演示文本
nihao sed1 sed2 sed3
nihao sed4 sed5 sed6
nihao sed7 sed8 sed9

sed '2p' sed.txt -- 如果只是2p,不仅打印第二行,还会打印别的所有行
sed -n '2p' sed.txt -- 如果只想输出第二行,加一个-n(-n和p搭配在一起使用)
对于2p: 2是内容范围,p是动作
sed -n '/sed6/p' sed.txt -- 匹配关键字

sed -n -e '2p' -e '1p' sed.txt -- -e代表进行多个动作

最重要

替换动作:
	替换部分内容
	sed -i '行号(如果不写代表所有行)s#原内容#替换后内容#列号(如果不写代表第一列)' 文件名
	
	替换全部内容
	sed -i '行号s#原内容#替换后内容#g' 文件名
	
vim中替换:/原内容/替换后内容/
但是如果///内还有/,则我们需要换别的符号,最好用###
  • 有两种方法进行替换:指定行号(数字)或指定关键字(/ /)
追加动作:
sed -i '行号i\增加的内容' 文件名 -- 在指定行号处增加内容 

在这里插入图片描述

注意:4i表示在原内容基础上的第四行里面插入,即原来的第四行往下移动变成第五行

总结一下sed的增删改查:

  • 增:sed -i '行号i\增加的内容' 文件名,表示在原内容的当前行增加
  • 删:sed -i '行号d' 文件名, 表示删除第n行的内容
  • 改:sed -i '行号s#原内容#修改后内容#列号' 文件名, 表示修改相应内容
  • 查:
    • 按行号查询:sed -n '2p' 文件名
    • 按关键字查询:sed -n '/需要查找的内容/p' 文件名
6.3.3 awk命令

awd功能强大,不仅可以行编辑,还可以列编辑

读取原理:在这里插入图片描述

awk的命令格式:awk 参数 动作 文件名

其中参数主要表示-F(自定义列分隔符)

​ 动作主要表示{print $n}

在这里插入图片描述

$0 整列
$1 第一列
$NF 最后一列

前置准备:
vim awk.txt
nihao awk1 awk2 awk3
nihao awk4 awk5 awk6
nihao awk7 awk8 awk9

awk '{print $n}' awk.txt -- 输出第n列
awk '{print $(NF-1)}' awk.txt -- 打印倒数第二列
awk '{print $1,$3}' awk.txt -- 打印第一,三列

其中“,”表示默认的列分隔符 -- 空格
awk -F':' '{print $n}' 文件名 -- 把默认分隔符从空格改为':',并输出第n列内容

环境变量:
NF 最后一行
NR 显示行号 e.g. awk '{print NR,$1}' 文件名 -- 输出第一列的内容,并显示行号
OFS 输出格式的列分隔符,缺省的是空格

awk 'NR==1 {print $1}' 文件名 -- 输出第一行第一列的内容

特殊案例:在这里插入图片描述

总结一下awk命令

最主要记住的就是:
awk -F':' '{print $n}' 文件名
6.4 正则表达式

正则表达式,即REGEXP,接受大量数据来源,借助通配符等来标识数据流的信息,将匹配成功的数据留存下来以供使用

配合三剑客一起使用

6.4.1 通配符
  • 单字符匹配

    . -- 匹配任意单个字符
    [] -- 匹配范围内的任意一个符号
    [^] -- 上述取反
    
    grep 'st..d' 文件名 -- 表示匹配st..d,中间任意两个字符
    
  • 锚定匹配

    ^ -- 行首锚定
    $ -- 行尾锚定
    ^$ -- 空行
    {} -- 表示里面的所有范围
    
  • 其他匹配

    .* -- 单个字符重复n次
    () -- 分组匹配
    
6.4.2 限定符号
* -- 匹配前面的字符任意次
.* -- 任意长度的任意字符
? 匹配前面出现的单个字符0次或1次 e.g. hello hllo == he?llo
+ 匹配前面的字符至少出现一次

前置准备:
vim file.txt
ac
abbcd
abbbce
abbbbbc
abcf

egrep '^ab.*c$' file.txt -- 查找以ab开头c结尾的内容
6.5 文件查找

在这里插入图片描述

locate快而粗,find慢而准

  • locate:从数据库里找

    apt install plocate
    locate conf -- 找数据库
    updatedb
    
  • find:实时查找

    find -name 文件名 -- 指定文件名查找
    find -iname 文件名 -- 忽略大小写指定文件名查找
    find 路径 -name 文件名 -- 指定目录文件名查找
    
    grep 'st..d' 文件名 -- 表示匹配st..d,中间任意两个字符
    
  • 锚定匹配

    ^ -- 行首锚定
    $ -- 行尾锚定
    ^$ -- 空行
    {} -- 表示里面的所有范围
    
  • 其他匹配

    .* -- 单个字符重复n次
    () -- 分组匹配
    
6.4.2 限定符号
* -- 匹配前面的字符任意次
.* -- 任意长度的任意字符
? 匹配前面出现的单个字符0次或1次 e.g. hello hllo == he?llo
+ 匹配前面的字符至少出现一次

前置准备:
vim file.txt
ac
abbcd
abbbce
abbbbbc
abcf

egrep '^ab.*c$' file.txt -- 查找以ab开头c结尾的内容
6.5 文件查找

在这里插入图片描述

locate快而粗,find慢而准

  • locate:从数据库里找

    apt install plocate
    locate conf -- 找数据库
    updatedb
    
  • find:实时查找

    find -name 文件名 -- 指定文件名查找
    find -iname 文件名 -- 忽略大小写指定文件名查找
    find 路径 -name 文件名 -- 指定目录文件名查找
    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值