linux中的基本操作

linux中的基本操作

linux中压缩解压

**zip/unzip,文件后缀为zip**
压缩:zip 123.zip *.txt
解压:unzip 123.zip
**gzip/gunzip,文件后缀为gz**
压缩:gzip 1.txt	     **会生成1.txt.gz压缩文件**
解压:gunzip 1.txt.gz
解压:gzip -d 1.txt.gz
**bzip2/bunzip2,文件后缀为bz2**
压缩:bzip2  123.txt
解压:bunzip2  123.txt.bz2
还一个解压:bzip2 -d 123.txt.bz2
tar: 打包解包工具,后缀为tar
选项:
  	-c:创建新文件
  	-x:解包
  	-t:查看(不解包)
  	说明:以上三个选项不能同时使用
  	-f:指定操作文件
  	-v:显示相信信息
  	-z:调用gzip/gunzip进行压缩解压
  	-j:调用bzip2/bunzip2进行压缩解压
  	-C:指定解压位置
  	--exclude:排除指定文件

示例:
  	tar -cvf 12.tar 1.txt 2.txt			# 将1.txt,2.txt打包成12.tar
  	tar -tf 12.tar						# 查看包内容
  	tar -xvf 12.tar						# 解包12.tar文件
  	tar -zcvf 12.tar.gz	12.tar			# 调用gzip进行压缩
      tar -jcvf 12.tar.bz2 12.tar			# 调用bzip2进行压缩
      tar -zcvf 12.tar.gz *.txt --exclude 3.txt	# 打包压缩除3.txt以外的所有txt文件
      
      tar -zxvf 12.tar.gz				# 解压
      tar -jxvf 12.tar.bz2			# 解压
  提示:
  	.tar.gz可以简写为:.tgz
  	.tar.bz2可以简写为:tbz2 或 .tbz

网络服务

ping:检查网络连通性,'-c'选项指定发送测试包的次数
ifconfig:查看或设置网卡信息-
ifup:启动网卡
ifdown:关闭网卡
控制:service networking start|stop|restart

服务监测

 netstat
  - 作用:查看网络端口占用情况
  - 使用:`netstat -tunpl`
- free
  - 作用:查看内存使用情况
  - 使用:`free -h`,-h人性化查看大小
- w
  - 作用:查看当前正在做的事情,what的一意思
- top
  - 说明:w的详细信息,3S会刷新一次,q退出查看
  - 结果:
    第一行:与w相同
    第二行:任务信息
    第三行:CPU使用
    第四行:内存使用
    第五行:交换分区
    其他行:系统进程信息

进程管理

ps:
作用:查看进行信息
使用:
	ps -ef
	ps aux | grep   
	(经常在查询进程号的时候结合grep进行过滤)

kill:
作用:杀死进程
使用:
	kill -9 PID  (PID代表你所执行的进程中的端口号)
	(强制杀死指定进程)

防火墙(ufw)

说明:简单版本的防火墙,底层依赖于iptables
安装:sudo apt-get install ufw
查看状态:sudo ufw status
开启和关闭:sudo ufw enable | disable
默认允许和禁止:sudo ufw default allow | deny
允许和禁止:sudo ufw allow | deny port/服务
	如:(sudo ufw allow 5900)
删除规则:sudo ufw delete allow 5900

远程连接:(ssh:22)

说明:默认ubuntu是没有自带得ssh服务,需要手动安装
安装:`sudo apt-get install openssh-server`
查看:ssh
查看现状:ssh status
开启:sudo service ssh start
(控制的几个状态:`sudo service ssh start|stop|restart`)
安装rz:sudo apt install lrzsz  
(也可以输入 rz -E,这时候会提示你安装sudo apt install lrzsz 这个命令)
安装好之后就可以拖拽文件了	

软件安装

apt-get安装:无需考虑复杂的软件依赖关系
  - install:安装
  - remove:卸载
  - update:取回更新软件包的类表信息
  - upgrade:进行一次更新

dpkg安装:文件后缀为.deb,可能需要进行依赖包的安装
  	i:安装
 	r:卸载
 	l:查看软件包信息
	L:查看软件安装目录
  示例:安装wps
    1.安装wps
    	sudo dpkg -i wps-office_10.1.0.5672~a21_amd64.deb
    2.安装字体库
    	unzip wps_symbol_fonts.zip
    	将字体库移动到/usr/share/fonts目录
    	sudo mv *.ttf *.TTF /usr/share/fonts
什么是桥接:
		虚拟机通过VMware创造出来的虚拟网络适配器   可以连通外界网络
		并且真实的存在于当前的局域网中
		就相当于是一台真正的物理机
什么是NAT:
		他一样存在于局域网中   但是他跟主机共用一个IP地址   而且
		他只能和主机进行ping操作   外部别的物理机链接不到此虚拟机
		他一样能够实现上网操作,但是他使用的物理机的网卡
什么是仅主机:
		他比NAT更加封闭   他根本就没法联网    他一般情况下作用在没有网络的情况下
		实现和主机之间的交互操作

linux的启动流程
		1.先进入BIOS(基本的输入输出系统) ,检查一遍硬件是否通电正常
		2.进入到/boot文件夹下,这里面存放的都是系统启动需要的映射信息
		3.进入到init进程里面,去启动该进程    祖宗进程
			类似于windows里面的服务,也就是后台进程
			相当于python中的object
		4.会再去到/etc包里面,这个包里面有这个几个包rc0.d  rc1.d  rc2.d
			运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
			运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
			运行级别2:多用户状态(没有NFS)
			运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
			运行级别4:系统未使用,保留
			运行级别5:X11控制台,登陆后进入图形GUI模式
			运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常
		5.跳转到linux的登录界面   
linux的目录结构
			第一级目录(根目录)	     /
			
			第二季目录(子目录)
			bin    core  home        lib64       mnt   root  snap  tmp  vmlinuz
			boot   dev   initrd.img  lost+found  opt   run   srv   usr
			cdrom  etc   lib         media       proc  sbin  sys   var

		bin:放的都是一些二进制文件   类似于windows  中的.exe文件    我们的那些linux常用的命令
		boot:里面放的都是操作系统的一些映射信息
		home:家目录  每一个用户都有一个自己的home目录
		lib:库文件    放的都是操作系统所依赖的一些库信息
		lib64:库文件
		media:所有的外部挂载点  都在此目录下
		mnt:我们可以通过此此文件夹查看你挂载的u盘   移动硬盘的内容
		root:超级用户的目录
		tmp:临时的文件目录
		usr:一般情况下   此目录下面放的都是我们用户安装的一些软件信息
		lost+found:一般为空   当你的linux不正常关机的情况下   他会保存一些的信息   供下次开机使用
		etc:这个文件夹下面放的都是我们的配置信息
		dev:设备的缩写    里面的咱们的硬件的映射信息
		run:这里面放的都是我们运行时的资源或者配置啊  或者进程信息啊
		sys:类似于boot
		sbin:这里面放的都是超级用户的启动所需的二进制文件
		proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
		opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的
		var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件

		重点需要记忆的:  etc   home   usr
		需要了解的:  root   boot   lib   tmp   bin

工作模式:

  - 正常模式(命令模式):使用vim打开的默认模式
  
    | 命令/操作       | 说明             |
    | --------------- | --------------   |
    | vim filename    | 打开/新建一个文件|
    | ESC             | 切换到正常模式   |
    | ZZ(shift + zz)| 保存退出         |
    | !v              | 打开最后使用vim打开的文件 |
    | 光标定位        |					 |
    | vim filename +n | 打开文件,将光标定位到第n行 |
    | vim filename +  | 打开文件,将光标定位到尾行  |
    | gg              | 定位到首行          |
    | G               | 定位到尾行          |
    | ngg             | 定位到第n行         |
    | ^/0             | 定位到行首          |
    | $               | 定位到行尾          |
    | k               | ↑					|
    | j               | ↓					|
    | h               | ←					|
    | l               | →					|
    | ctrl + f        | 下翻一页           |
    | ctrl + b        | 上翻一页           |
    | ctrl + d        | 下翻半页           |
    | ctrl + u        | 上翻半页           |
    | 内容处理            |                |
    | x               | 向右删除一个字符       |
    | nx              | 向右删除n个字符,n表示个数 |
    | X               | 向左删除一个字符       |
    | nX              | 向左删除n个字符,n表示个数 |
    | dd              | 删除光标所在行        |
    | ndd             | 删除光标开始的n行      |
    | p               | 粘贴剪切板中的内容      |
    | yy              | 复制光标所在行        |
    | u               | 撤销             |
    | ctrl + r        | 反撤销            |

  - 插入模式(输入模式):可以完成文件内容的输入编辑等,输入一下字符可以进入该模式:

    | 命令   | 说明               |
    | ---- | ---------------- |
    | i    | 在光标位置插入          |
    | I    | 在第一个非空字符插入       |
    | a    | 在光标的下一个字符输入      |
    | A    | 在行尾插入            |
    | o    | 在光标所在的行下面插入空行    |
    | O    | 在光标所在的行上面插入空行    |
    | s    | 删除光标所在字符,并进入输入模式 |
    | S    | 删除光标所在行,并进入输入模式  |

  - 单行模式(编辑模式):可以完成文件的整体编辑保存等操作,输入':'即可进入

    | 命令                | 说明                          |
    | ----------------- | --------------------------- |
    | :w                | 保存                          |
    | :q                | 退出                          |
    | :wq               | 保存退出                        |
    | :x                | 保存退出                        |
    | :w!               | 强制保存                        |
    | :q!               | 强制退出,不保存修改                  |
    | :e!               | 放弃修改,恢复到修改之前的状态             |
    | :w newfile        | 文件另存为                       |
    |                   |                             |
    | :set nu[mber]     | 显示行号                        |
    | :set nonu[mber]   | 隐藏行号                        |
    | :set tabstop=4    | 设置一个tab缩进4个字符               |
    | :set mouse=a      | 启用鼠标的点击功能                   |
    |                   |                             |
    | [:]/内容            | 查找指定内容,n下翻,N上翻              |
    | [:]?内容            | 查找指定内容,N下翻,n上翻              |
    | :%s/原内容/新内容/[g]   | 所有行内容替换,g表示全局(默认只能替换一行中第一处) |
    | :m,ns/原内容/新内容/[g] | m到n行内容替换,g用法同上              |
    | 光标定位              |                             |
    | :n                | 将光标定位到第n行,n表示行号             |

基础概念

线程:线程是进程的一个实体,是CPU调度和分派的基本单位,
     它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,
     只有一点在在运行中必不可少的资源,
     但是它可以与同属一个进程的多个线程共享进程所拥有的全部资源

进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,
     进程是系统进行资源分配和调度的一个独立单位
同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,
     那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去
异步:异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。
     当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率
并行:并行是指两个或者多个事件在同一时刻发生,是在不同实体上的多个事件
并发:并发是指两个或多个事件在同一时间间隔发生,是在同一实体上的多个事件

socket  http  tcp/udp三个的相关性以及区别
	socket:socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)
   	http:HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
	      由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息  
	tcp/udp:CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
1.命令格式:
	命令 [选项] [参数]

	例子:ls -a /etc

2.常识命令:
	ls:查看指定目录的内容,不指定目录时查看当前工作目录

  | 选项   | 说明               |
  | ---- | ---------------- |
  | -a   | 显示所有文件,包括隐藏文件    |
  | -l   | 列表显示,详细信息        |
  | -h   | 人性化的显示大小,如:K/M/G |

  -l选项显示的结果:类型及权限 | 引用数 | 用户 | 用户组 | 大小 | 月 | 日| 年/时间 | 名称 

  文件类型:(-l显示结果中的第一部分的第一列)

  | 符号   | 类型     |
  | ---- | ------ |
  | -    | 普通文件   |
  | d    | 目录文件   |
  | l    | 链接文件   |
  | c    | 字符设备文件 |
  | b    | 块设备文件  |
  | s    | 套接字文件  |
  | p    | 管道文件   |



  cd:切换工作目录

  | 符号   | 说明          |
  | ---- | ----------- |
  | .    | 当前目录        |
  | ..   | 上一级目录       |
  | ~    | 当前用户的家目录    |
  | -    | 表示上次切换之前的目录 |
  | /    | 表示根目录       |

  > 1. 使用cd时,不指定目标地址,会切换到家目录
  > 2. 凡是以/开头的目录都是绝对目录
  > 3. 凡是以.或..开头的目录都是相对目录


  pwd:查看当前工作目录

  whereis python   找到你的所有的python路径

	sudo apt-get install  安装
	sudo apt-get upgrade 升级
	sudo apt-get update  更新


  alias:给命令起别名

  l、la、ll等
  查看文件

 相关命令
  | 命令 | 说明                                     |
  | ---- | ---------------------------------------- |
  | cat  | 从上到下,显示文件全部内容                         |
  | tac  | 从下到上,显示文件全部内容                         |
  | head | 查看开头指定行数的内容,不指定时默认10行,如:head -20 filename |
  | tail | 查看文件末尾指定行数的内容,不指定时默认10行,如:tail -5 filename |
  | nl   | 功能与cat相同,但是多显示了行号                        |
  | wc   | 统计显示,内容:行数 单词数 字符数 文件名  7038  28304 220475 vmware-install.pl                 |
  | more | 一点一点查看内容                                 |
  | less | 一点一点查看内容
  
  more/less使用说明
  - 显示一屏就停止
  - q退出查看
  - enter下翻一行
  - 空格下翻一屏
  - more查看完毕会自动退出,less不会
  - less可以使用上下按钮上下翻看,more不可以
  - 经常结合管道使用:ls /etc | more

  文件及目录
- 相关命令
  | 命令    | 说明                      |
  | ----- | ----------------------- |
  | touch | 新建文件,可以是多个              |
  | rm    | 删除文件或目录(删除目录时要传递'-r'选项) |
  | cp    | 拷贝文件或目录(拷贝目录是要传递'-r'选项) |
  | mv    | 移动文件或目录                 |
  | mkdir | 创建目录,可以是多个              |
  | rmdir | 删除空目录                   |

- 选项说明

  - -r:删除或拷贝目录时需要添加,表示递归操作
  - -f:表示强制操作,没有提示信息
  - *:表示模糊匹配,如:`rm *.py`,表示删除所有的py文件
  - -p:创建目录时若需要创建中间目录,可以添加此选项

用户及用户组
-相关命令
  | 命令       | 说明                                       |
  | -------- | ---------------------------------------- |
  | whoami   | 查看当前登录的用户名                               |
  | useradd  | 新建用户,-d指定家目录,-m不存在,-s指定shell             |
  | userdel  | 删除用户,-r会删除用户家目录                       |
  | passwd   | 设置指定用户的密码,没有指定用户时设置时当前用户的密码            |
  | su -     | 切换用户,一定要加上'-',否则只会切换家目录,但是环境没有切换,不指定用户时默认切换到root用户(记得先给root用户设置密码) |
  | sudo     | 以指定用户(root)身份执行命令                        |
  | visudo   | 专门用于编辑/etc/sudoers文件的命令,需要将指定用户添加进去才可以使用sudo命令,如:test ALL=(ALL:ALL) ALL;使用sudo update-alternatives --config editor可以修改系统默认编辑器(nano)  |
  | groupadd | 新建用户组									 |
  | groupdel | 删除用户组                                    |
  | gpasswd  | 向指定组添加/删除指定的用户,如:gpasswd -a/-d  user group |
  | groups   | 查看指定用户的组信息                               |
  | chsh     | 修改指定用户的shell解析器,如:sudo chsh test -s /usr/sbin/nologin (禁止登陆) |
  | chown    | 修改文件所属用户[及用户组],如: sudo chown test[:test] 1.py,递归操作需要加'-R'选项 |
  | chgrp    | 修改文件所属用户组,如:sudo chgrp test 1.py         |
 
  涉及文件
  - /etc/passwd:系统中的用户信息
  - /etc/group:系统中的用户组信息
  - /etc/shadow:系统中的用户密码信息

  相关名词
  - uid:用户唯一标识
  - gid:用户组唯一标识

  文件权限
- 说明:在linux下,所有的文件都涉及权限,分为三组:所有者、所属组、其他
- 权限:所有文件的权限可以分为:可读(r)、可写(w)、可执行(x),'-'表示没有改权限
- 原理:ls -l的结果,三位一组,分为三组,刚好对应:所有者、所属组、其他
- 修改权限:chmod,格式:`chmod [身份] [操作] [权限] 文件`
  | 选项 | 说明         |
  | ---- | ---------- |
  | 身份 |            |
  | u    | 所有者(user)  |
  | g    | 所属组(group) |
  | o    | 其他(other)  |
  | 操作 |              |
  | +    | 添加         |
  | -    | 去掉         |
  | =    | 设置         |
  | 权限   |            |
  | r    | 可读         |
  | w    | 可写         |
  | x    | 可执行        |

  > sudo chmod o+w 1.py,给其他用户添加可写的权限
	
本质:使用一组(3位)八进制的数据来表示权限,如:0755,展开如下:
  转换为二进制:0755 => 111 101 101
  对应三组身份:     所有者 所属组 其他
  每一组的权限:都包括 可读、可写、可执行
  示例解析:所有者可读可写可执行,所属组可读可执行,其他可读可执行
  
- 简化操作:sudo chmod 0755 1.py
  > 若要进行递归操作,则需要添加'-R'操作
- umask
  作用:用来限定新建文件的默认权限,权限与该值相反
  命令:umask [value],查看或设置掩码
  分析:
  	掩码:0002 => 000 000 010
  	新建目录:	 111 111 101
  	新建文件:	 110 110 100
文件搜索

- find
  - 作用:用于任意文件的搜索,功能非常强大
  - 格式:find [目录] 条件选项
  - 选项:
    -name:指定名字    sudo find / -name passwd
    -maxdepth:指定最大层级深度		sudo find / -maxdepth 2 -name passwd
    -type:指定类型(d/l/s/p/c/b)
    -size:指定大小,单位:k/m/g,+表示大于,-表示小于,如:find -size +5k,查找大于5k的文件
    -mtime/-atime/-ctime:指定修改/访问/创建时间,单位是天,+表示几天前,-表示几天内
    -mmin/-amin/-cmin:功能同上,单位是分
    -user:指定用户
    -group:指定用户组

ubuntu的定时任务命令:
https://blog.csdn.net/a295277302/article/details/78143010

- whereis
  - 作用:显示命令的详细信息,如:whereis ls,结果如下:
    ls: /bin/ls /usr/share/man/man1/ls.1.gz
    命令名  命令位置  帮助文档

- grep
  - 作用:正则表达式搜索(文件内容)
  - 选项:
    -i:忽略大小写
    -n:显示行号
  - 示例:
    grep -n /bin/bash /etc/passwd		查找/etc/passwd文件中包含/bin/bash的行,并显示行号
    grep -i abc 2.py					在2.py中查找包含abc的行,不考虑大小写
    ls /bin | grep '^m'					查看/bin下以'm'开头的命令

链接文件
- 命令:ln
- 作用:创建一个文件或目录的链接
- 格式:`ln [-s] 原文件 新文件`
- 查看:ls -l结果集中的第一列就是文件类型,为'l'的就是链接文件

- 软链接与硬链接
  硬链接:使用ln时不加-s选项创建的链接,相当于一个文件多起了一个名字而已,极少用到
  	1.不能给目录创建
  	2.不能跨文件系统
  软链接:使用ln是添加-s选项创建的链接,相当于windows中的快捷方式,比较常用
  	1.可以给目录创建
  	2.可以跨文件系统

uri:(Universal Resource Identifier)统一资源标识符是标识某一互联网资源的字符串    
url:(Uniform Resource Name)统一资源定位符,URL是URI命名机制的一个子集

管道

符号:' | '
	将前面命令的输出作为后面命令的参数      ps -aux | grep nginx
	bin下面所有的以m开头的命令              ls /bin | grep '^m'
	但是有些命令不接受管道参数   比如 rm命令
	所有就有了第二种解决方案   find -name | xargs rm -rf

重定向

1.标准输入(stdin)  标准输出(stdout)   标准错误(stdrr)
	在linux中,只要创建任意进程,系统都会自动创建三个上面的数据流,其实就是三个文件。
	看不见的原因是因为系统做了重定向,三个文件的描述符分别是  0   1   2,都指向了终端。

    所谓的重定向就是改变原来默认的表现位置   比如由小黑屏改为其他地方
	输入重定向几乎不用
	输出重定向是使用最多的
	演示:
		输出重定向
		如果你这个时候又去查询其他的 , 那么他们会做覆盖操作
		ls /etc/ > 1.txt   新建文件
		ls /etc/ >> 1.txt  追加

		错误重定向
		ls /xxx 2> 1.txt   将标准错误重定向到1.txt
		ls /home  /xxx &>  1.txt   将输出和错误输出一起重定向至1.txt

shell简介

什么是shell:
		Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

什么是shell脚本:
		Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

shell的种类:
		Linux 的 Shell 种类众多,常见的有:
		Bourne Shell(/usr/bin/sh或/bin/sh)
		Bourne Again Shell(/bin/bash)
		C Shell(/usr/bin/csh)
		K Shell(/usr/bin/ksh)
		Shell for Root(/sbin/sh)
我们要学习是Bash,因为易用和免费,在日常工作中被广泛使用
最简单的shell脚本:先从终端创建一个文件,如:vim hello.sh,进去之后就可以使用下面的命令了
		#!/bin/bash    这是告诉我们用/bin/bash解释器执行
		echo "HelloWorld"
		:wq     保存
		然后退出,回到终端小黑屏
		通过使用'bash'命令执行shell脚本  'bash hello.sh'
		
		其中#!是一个约定标记,他告诉系统脚本需要什么解释器来执行
		echo命令 用于向窗口输出文本
		
		如果你想让你的shell文件像脚本文件一样运行
		需要添加一下可执行权限
		'chmod +x hello.sh'

变量的定义:

例子:my_name="dahua"
注意事项:
		等号两边不能有空格
		变量名只能使用英文字符,数字和下划线,首个字符不能以数字开头
		名字中间不能有空格 可以使用下划线
		不能使用标点符号
		不能使用bash里面的关键字

使用变量时,需要在变量前面加上$符号
例子:echo ${my_name}  
花括号可加可不加  加上是为了帮助解释器识别变量的边界
例子:echo ${my_name}is huguanyu
推荐加上{}
为变量加上readonly my_name   变成只读状态,运行的时候不显示
		删除变量:
			unset my_name
		变量类型: 运行shell时,会同时存在三种变量:
				1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
				2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
				3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值