linux命令

----------------------------------------------------------v2--------------------------------------------------------------------

大纲

在这里插入图片描述

虚拟文件系统

可能每个目录用来挂在的文件系统是不一样的,

在这里插入图片描述

//列出系统信息
[parallels@localhost /]$ uname -a
Linux localhost.localdomain 4.18.0-305.10.2.el8_4.x86_64 #1 SMP Tue Jul 20 17:25:16 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
//查看所有的系统调用
[parallels@localhost /]$ man 2 syscalls
//查询系统调用中的acct的说明
[parallels@localhost /]$ man 2 acct
//查看公共库函数
[parallels@localhost /]$ man 3

linux 中 man 1 man2 man3 …man N的区别
1、Standard commands (标准命令)
2、System calls (系统调用)
3、Library functions (库函数)
4、Special devices (设备说明)
5、File formats (文件格式)
6、Games and toys (游戏和娱乐)
7、Miscellaneous (杂项)
8、Administrative Commands (管理员命令)
9 其他(Linux特定的), 用来存放内核例行程序的文档。

//本机器支持的shell的版本
[parallels@localhost /]$ cat /etc/shells 
//切换到指定的shell上面
[parallels@localhost ~]$ chsh -s shell路径 
//列出根目录下的文件
[parallels@localhost ~]$ ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

tmp:存进程启动后的临时数据,这些数据有可能存在内容中,所以我们也称之为 内存文件系统
usr:并不是user,而是unix system resource的缩写 ,里面存放 系统资源 和命令的执行文件
proc:存放 unix下的进程及内核信息,通过 ls /proc 可查看到进程id
var:是 variable date file 即 可变数据文件,存储运行时的数据,通常会存日志文件
boot:存放和启动相关的文件
dev:设备信息

//echo为标准输出流文件,每个文件都有自己的标准输出流,当我们在终端执行 echo时,因为终端监听到了 这个输出流 所以会在控制台打印出来
[parallels@localhost bin]$ echo "aaa"
aaa
//>重定向输出符号
[parallels@localhost bin]$ echo "aaa" > 1.txt

Linux 常见特殊符号

//创建管道文件
[root@localhost /]# mkfifo aaa
//显示文件类型,“*”表示可执行的普通文件;“/”表示目录;“@”表示符号链接,软链接;“|”表示FIFOs 即管道;(aaa| 后面的| 表示aaa是管道文件)
[root@localhost /]# ls -F
aaa|  boot/  etc/   lib@    media/  opt/   root/  sbin@  sys/  usr/
bin@  dev/   home/  lib64@  mnt/    proc/  run/   srv/   tmp/  var/
//查看每个目录对应的文件系统
[parallels@localhost ~]$ df -T
Filesystem          Type     1K-blocks      Used Available Use% Mounted on
devtmpfs            devtmpfs   1880996         0   1880996   0% /dev
tmpfs               tmpfs      1909952         0   1909952   0% /dev/shm
tmpfs               tmpfs      1909952      9536   1900416   1% /run
tmpfs               tmpfs      1909952         0   1909952   0% /sys/fs/cgroup
/dev/mapper/cl-root xfs       41570476   5506144  36064332  14% /
/dev/mapper/cl-home xfs       20293632    233156  20060476   2% /home
/dev/sda1           ext4        999320    200412    730096  22% /boot                              
Home                prl_fs   244810132 153677008  91133124  63% /media/psf/Home
iCloud              prl_fs   244810132 153677008  91133124  63% /media/psf/iCloud
tmpfs               tmpfs       381988        36    381952   1% /run/user/1000
//树形展示目录结构, -L 表示深度为1 即只展示一层,(具体指令参数可以通过 man tree来查看)
[parallels@localhost ~]$ tree / -L 1
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
//删除根目录下文件,rm就是remove的意思,-r表示 递归 -f表示强制(不会提示) 很危险 慎用
[parallels@localhost ~]$ rm -rf /
//查看命令在那里,如下查询rm指令目录是在 /usr/bin/rm路径下
[parallels@localhost ~]$ which rm
/usr/bin/rm
//当前所在路径
[root@localhost bin]# pwd
/bin
//$是求值符号,=两边不能有空格
[root@localhost bin]# a=$(pwd)
[root@localhost bin]# echo $a
/bin
//touch都认为是创建文件用的,如下图中 通过 man touch 内容 可知是改变文件时间用的,但是发现没有这个文件 他会帮忙创建一个
[root@localhost /]# touch aaa.txt
[root@localhost /]# ls
aaa.txt  boot  etc   lib    media  opt   root  sbin  sys  usr
bin      dev   home  lib64  mnt    proc  run   srv   tmp  var

在这里插入图片描述

//vim 编辑文件 但是有很多指令,需要一定学习成本,nano也可编辑但是相对简便,cat 全文输出内容,在线上服务器 要慎用
[root@localhost /]# vim aaa.txt
[root@localhost /]# nano aaa.txt
[root@localhost /]# cat aaa.txt 
fsjalk

UNIX文件内容显示命令cat、more、less、head和tail

管道:管道是进程间通信的手段
//通过管道链接两个指令
[root@localhost /]# man ls | less
//tee 如果什么也不做的话 就是一个输入输出,没有任何工作
[root@localhost /]# ls | tee | less
//但是tee 可以将内容保存在一个文件中,file 是自定义的文件名称
[root@localhost /]# ls | tee file | less
//我们也可以通过grep 查找 看到 file 被 tee创建好了
[root@localhost /]# ls | grep file
file
//我们可以通过grep 查找 
[root@localhost /]# ls | grep file
file
//管道前也可以是 cat 文件名,这样我们可以判断文件中是否存在某一个关键字,线上慎用cat
[root@localhost /]# cat aaa.txt | grep hellp
//同上,也是循环所以内容查询,线上慎用
[root@localhost /]# grep hellp aaa.txt
//查找指定格式的文件
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java"
/usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
//查询找到了多少个文件
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | wc -l
1
//查询找到文件的文件名字节数
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | wc -c
105

如果想查看找到的所有文件中内容的行数或字节数 需要用到xargs指令

//会把所有查询到的文件 都打印出来,xargs 后面的 -I 表示定义占位符 
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.security.AlgorithmParameters;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
。。。
//所有文件行号总和是 416行
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {} | wc -l
416
//所有文件字节数总和是 14456个字节
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} cat {} | wc -c
14456
//将查询到的 文件删除
[root@localhost /]# find /usr/share/doc/python3-cryptography -name "*.java" | xargs -I {} rm {}
网络
//远程登录到本机
[root@localhost /]# ssh localhost
//远程复制文件
[parallels@localhost ~]$ scp aaa.txt  parallels@localhost://home/parallels/1.txt 
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:bai3f25yg+BEvvOvhJ9O9Al9iTf5SuiDCuzAOJPOGyg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
parallels@localhost's password: 
aaa.txt                                       100%    0     0.0KB/s   00:00    
[parallels@localhost ~]$ ls
1.txt    Desktop    Downloads   Music     Public     Videos
aaa.txt  Documents  fontconfig  Pictures  Templates
//查询ip
[parallels@localhost ~]$ ip addr
[parallels@localhost ~]$ ifconfig
//查询网络状态,socket状态
[parallels@localhost ~]$ netstat
//- n表示显示端口号 t表示tcp协议 l只显示连接中的链接 p表示显示程序名称
[parallels@localhost ~]$ netstat -ntlp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 :::111                  :::*                    LISTEN      -    
//
[parallels@localhost ~]$ ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.    //看到百度响应的是那个ip,这个是会进行DNS查询的,DNS是逐级缓存的结构,之后可能在本机就完成了
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=18.8 ms //使用UDP协议 发送round trip事件 即 一个来回,没有做过多事情,通过计算来回响应 获得延迟 以及丢包率
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=16.8 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=128 time=19.1 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=128 time=16.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=128 time=14.9 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=6 ttl=128 time=18.7 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=7 ttl=128 time=18.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=8 ttl=128 time=50.3 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=9 ttl=128 time=21.7 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=10 ttl=128 time=28.6 ms

//DNS查询
[parallels@localhost ~]$ host www.baidu.com
www.baidu.com has address 110.242.68.3
www.baidu.com is an alias for www.a.shifen.com.
www.baidu.com is an alias for www.a.shifen.com.
[parallels@localhost ~]$ host www.a.shifen.com
www.a.shifen.com has address 110.242.68.4
//dig 也可查询DNS信息
[parallels@localhost ~]$ dig www.a.shifen.com
;; Warning: Message parser reports malformed message packet.

; <<>> DiG 9.11.26-RedHat-9.11.26-4.el8_4 <<>> www.a.shifen.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13549
;; flags: qr; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;www.a.shifen.com.		IN	A

;; ANSWER SECTION:
.			0	CLASS4096 OPT	10 8 qLP4ga+UI5Y=

;; ADDITIONAL SECTION:
www.a.shifen.com.	55	IN	A	110.242.68.4

;; Query time: 14 msec
;; SERVER: 10.211.55.1#53(10.211.55.1)
;; WHEN: Sat Jun 18 10:19:39 CST 2022
;; MSG SIZE  rcvd: 73

[parallels@localhost ~]$ curl www.baidu.com  //会请求一次百度,并把响应内容打印出来
[parallels@localhost ~]$ curl www.baidu.com -I //获取响应的头信息
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Sat, 18 Jun 2022 02:22:11 GMT
Etag: "575e1f59-115"
Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

权限

三种权限:Read、Write、Execute (读、写、执行)
三种分组:User、Group、All(用户、组、所有人)

[parallels@localhost bin]$ ls -l
total 161180
-rwxr-xr-x. 1 root root      55040 Apr 27  2020 '['        //rwx 为当前用户 r-x为当前用户所在组 r-x为所有人
-rwxr-xr-x. 1 root root      33864 May 11  2019  ac
-rwxr-xr-x. 1 root root      25200 Jan 12  2021  aconnect
-rwxr-xr-x. 1 root root      34056 Mar  4  2021  addr2line

在这里插入图片描述

//r=4 w=2 x=1        rwx=4+2+1=7,该命令可以将文件权限全部放开
[parallels@localhost /]$ chmod 777 aaa.txt 
//使用管理员身份创建用户
[parallels@localhost bin]$ sudo useradd test1
//使用管理员身份给用户设置密码
[parallels@localhost bin]$ sudo passwd test1
Changing password for user test1.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
//切换到新用户
[parallels@localhost bin]$ su test1
//将用户test1 加入到 ramroll这个组里,我这里提示没有这个组
[parallels@localhost /]$ sudo usermod -a -G ramroll test1
usermod: group 'ramroll' does not exist

需要注意一点:删文件是 目录的权限,该文件是 文件的权限

----------------------------------------------------------v1--------------------------------------------------------------------

文件

1. vim fileName

这是⼀种最基本的⽅法,打开⽂件看⾏号

<这⾥有个快捷键 shift+g>⼀次跳到最后,同样的gg是跳到开始
**注意:**如果没有设置显⽰⾏号需要打开⽂件以后输⼊
;或者通过设置.vimrc,这种⽅式需要退出窗⼝重新
: set number<这中设置是⼀次性的>
登录⽣效。

2. cat -n fileName

[xiaodong@localhost ~]$ cat -n cat-demo 
     1  dsklnnsdklgh
     2  dfbmnsldkgnd
     3  fdsg

3. wc fimeName

  $wc error.log.2022-05-07 //可空格分割查询多个文件
  233919  1286288 16396952 error.log.2022-05-07 
  //233919:总行号; 1286288:单词数;16396952:字节数;error.log.2022-05-07:文件名
 
  //只展示行号
  $wc -l <error.log.2022-05-07
  233919

关于显⽰空⾏和不显⽰空⾏

显⽰所有⾏号包括空⾏显⽰所有⾏号不包括空⾏
cat -ncat -b
nl -banl -bt

4 linux查看文件指定某行/某几行的内容

https://blog.csdn.net/HYZX_9987/article/details/122989386

5find指令

find 语法:find path [options] params ,在指定目录下查找文件

//在指定路径下搜索,全局搜索路径为 /
[parallels@localhost /]$ find usr/share/doc/python3-cryptography -name "*.java"
usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
//-iname 为忽略大小写
[parallels@localhost /]$ find usr/share/doc/python3-cryptography -iname "*.java" 
usr/share/doc/python3-cryptography/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java
[parallels@localhost /]$ 
//在所有匹配的文件中查找 内容包含 moo关键字的 行
[parallels@localhost /]$ grep "moo" target*
//在当前标准输入流中查找,即 等待我们的输入
[parallels@localhost /]$ grep "haha"
fhksajjfhjas
fknsalfkjaks
hahahah
hahahah
hahahahahh
hahahahahh
^Z
[5]+  Stopped                 grep --color=auto "haha"
[parallels@localhost /]$
//列出home目录下所有的目录和文件 并 通过管道符 传给 grep 查询 包含book关键字的内容
[parallels@localhost /]$ find ~ | grep "book"
/home/parallels/.mozilla/firefox/0ukth4vr.default-default/bookmarkbackups
/home/parallels/.config/gtk-3.0/bookmarks
/home/parallels/.local/share/evolution/addressbook
/home/parallels/.local/share/evolution/addressbook/trash
/home/parallels/.local/share/evolution/addressbook/system
/home/parallels/.local/share/evolution/addressbook/system/contacts.db
/home/parallels/.local/share/evolution/addressbook/system/photos
/home/parallels/.cache/evolution/addressbook
/home/parallels/.cache/evolution/addressbook/trash
/home/parallels/.cache/mozilla/firefox/0ukth4vr.default-default/safebrowsing/social-tracking-protection-facebook-digest256.sbstore
/home/parallels/.cache/mozilla/firefox/0ukth4vr.default-default/safebrowsing/social-tracking-protection-facebook-digest256.vlpset
/home/parallels/.parallels/gtk-bookmarks.orig
/home/parallels/.parallels/gtk-bookmarks
[parallels@localhost /]$ 

使用管道注意要点:
1、只处理前一个命令正确输出,不处理错误输出
2、右边的命令必须要能够接收标准输入流,否则传递过程中数据会被抛弃
3、常用来接收管道数据的命令有:sed,awk,grep,cut,head,top,less,more,wc,join,sort,split等

//grep -o 支持输入表达式 进一步进行过滤
[parallels@localhost /]$ grep "partical\[true\]" log.txt | grep -o "engine\[[0-9a-z]*\]"
//grep -v 支持过滤掉执行内容,如下为 过滤掉本身
[parallels@localhost /]$ ps -ef | grep -v "grep"

6、awk

语法:awk [options] ‘cmd’ file

一次读取一行文本,按输入分隔符进行切片,切成多个组成部分
将切片直接保存在内建的变量中,$1,$2… ($0表示行的全部)
支持对单个切片的判断,支持循环判断,默认分隔符为空格

[root@localhost /]# cat aaa.txt 
total 28
-rw-r--r--.   1 root root    0 Jun 18 12:31 aaa.txt
lrwxrwxrwx.   1 root root    7 Nov  3  2020 bin -> usr/bin
dr-xr-xr-x.   6 root root 4096 Jul 27  2021 boot
drwxr-xr-x.  20 root root 3200 Jun 18 08:28 dev
//默认分割符为空格,打印出 第一列和第四列的数据
[root@localhost /]# awk '{print $1,$4}' aaa.txt 
total 
-rw-r--r--. root
lrwxrwxrwx. root
dr-xr-xr-x. root
drwxr-xr-x. root
//匹配第二列为1 第六列为Nov的结果 并打印行所有内容
[root@localhost /]# awk '$2==1 && $6=="Nov" {print $0}' aaa.txt 
lrwxrwxrwx.   1 root root    7 Nov  3  2020 bin -> usr/bin
//NR为换行符分割获取行信息,如下为 匹配第二列为1 第六列为Nov的结果 或者 第一行的结果 打印
[root@localhost /]# awk '($2==1 && $6=="Nov") || NR==1 {print $0}' aaa.txt 
total 28
lrwxrwxrwx.   1 root root    7 Nov  3  2020 bin -> usr/bin
//定义分隔符,-F ,如下为定义 "-" 为分隔符
[root@localhost /]# awk -F "-" '{print $1}' aaa.txt 
total 28

lrwxrwxrwx.   1 root root    7 Nov  3  2020 bin 
dr
drwxr

//词频统计,先获取文件内容,{arr[$6]++} :定义一个数组叫arr,下标存内容 数组存次数,END表示扫描完后继续执行,for(i in arr)print i "\t" arr[i] :对arr进行遍历,打印 下标 即内容,以及 数组信息 即 词频
[root@localhost /]# cat aaa.txt | awk '{arr[$6]++}END{for(i in arr)print i "\t" arr[i]}'
Nov	1
Jul	1
Jun	2

7、sed

语法:sed [option] ‘sed command’ filename
全名:stream editor,流编辑器
适合用于对文本的行内容进行处理

[root@localhost /]# cat bbb.txt 
Str a = "import com.baidu.aaa.a.java"
Str b = "import com.baidu.aaa.b.java"
Str c = "import com.baidu.aaa.c.java"
//替换匹配的内容(Str开头)为指定的内容(String),此命令只会将替换结果输出在终端,如果保存在文件需要 -i 参数
[root@localhost /]# sed 's/^Str/String/' bbb.txt 
String a = "import com.baidu.aaa.a.java"
String b = "import com.baidu.aaa.b.java"
String c = "import com.baidu.aaa.c.java"
[root@localhost /]# cat bbb.txt 
Str a = "import com.baidu.aaa.a.java"
Str b = "import com.baidu.aaa.b.java"
Str c = "import com.baidu.aaa.c.java"
//替换匹配的内容(Str开头)为指定的内容(String),并保存在文件
[root@localhost /]# sed -i 's/^Str/String/' bbb.txt 
[root@localhost /]# cat bbb.txt 
String a = "import com.baidu.aaa.a.java"
String b = "import com.baidu.aaa.b.java"
String c = "import com.baidu.aaa.c.java"
//替换文中baidu字符串为taobao,这样只会替换第一个匹配的内容,全局生效需要加上 g
[root@localhost /]# sed -i 's/baidu/taobao/' bbb.txt 
//替换文中baidu字符串为taobao,并全局替换
[root@localhost /]# sed -i 's/baidu/taobao/g' bbb.txt 
[root@localhost /]# cat bbb.txt 
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
//插入空行
[root@localhost /]# echo " " >> bbb.txt 
[root@localhost /]# echo " " >> bbb.txt 
[root@localhost /]# echo " " >> bbb.txt 
//插入数字
[root@localhost /]# echo "12134567" >> bbb.txt 
[root@localhost /]# cat bbb.txt 
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
 
 
 
 
12134567
[root@localhost /]#
//参数空行  sed -i '/^ *$/d' 文件名 d表示删除行
[root@localhost /]# sed -i '/^ *$/d' bbb.txt 
[root@localhost /]# cat bbb.txt 
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"
12134567
[root@localhost /]# 
//删除 7 所在行
[root@localhost /]# sed -i '/7/d' bbb.txt 
[root@localhost /]# cat bbb.txt 
String a = "import com.taobao.aaa.a.java"
String b = "import com.taobao.aaa.b.java"
String c = "import com.taobao.aaa.c.java"

文件编辑

vi text.txt

释义:编辑文件(不存在则创建)

vi 后 输入 i 进入编辑模式;按下 esc ,再输入 : ,再输入 wq 则可以保存并推出

vi后 输入 / 进行内容查找,按 n 键跳到下一个匹配的关键字上

vi后 先输入 / ,再输入 set nu 则可以在控制台显示 行号,输入行号可以直接到跳转到该行

vi后 在命令模式下将光标放置在要复制的那一行,然后按两下 y键,则会复制该行,然后再按 p键 则会粘贴

vi后 在命令模式下将光标放置在要删除的那一行,然后按两下 d键,则会删除该行

vi后 在命令模式下将光标放置在要删除的那一行,先按三下 9键,然后按两下 d键,则会删除该行和该行下所有行

文件远程同步SCP命令:

https://blog.csdn.net/m0_63748493/article/details/126322977

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值