Linux

Linux的目录结构

  • /bin:[重要]是Binary的缩写,存放经常使用的命令(/usr/bin、/usr/local/bin)
  • /sbin:s就是超级用户的意思,存放系统管理员使用的系统管理程序
  • /home:[重要]存放普通用户的主目录
  • /root:[重要]该目录为系统管理员,也称作超级权限者的用户主目录
  • /lib:系统开机所需要的最基本的动态链接共享库
  • /lost+found:此目录一般情况下是空的,当系统非法关机后,这里存放一些文件
  • /etc:[重要]所有系统管理所需要的配置文件和子目录
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下
  • /boot:[重要]存放启动linux时使用的一些核心文件,包括一些链接文件和以及镜像文件
  • /proc:这个目录是虚拟目录,是系统内存的映射,访问这个目录来获取系统信息
  • /srv:service缩写,该目录存放一些服务启动之后需要提取的数据
  • /sys:该目录下安装了linux内核中新出现的一个文件系统
  • /tmp:这个目录用来存放一些临时文件
  • /dev:设备管理器,把所有的硬件用文件的形式存储
  • /media:[重要]系统会自动识别一些设备,将识别的设备挂载到这个目录下
  • /mnt:[重要]系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部的存储挂载在/mnt/上
  • /opt: 给主机安装软件所摆放的目录
  • /usr/local:[重要]这是另一个给主机安装软件所安装的目录
  • /var:[重要]存放不断扩充着的东西,习惯将经常被修改的目录放在这个目录下
  • /selinux:SELlinux是一种安全子系统,它能控制程序只能访问特定文件

远程登录linux系统

Xshell:远程登录到Linux服务器

XFtp:上传和下载文件

vi和vim编辑器

所有vi和vim都内建vi文本编辑器

三种常见模式

  • 正常模式
  • 插入模式
  • 命令行模式

(1) 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy,粘贴(p)

(2) 删除当前行 dd , 删除当前行向下的 5 行 5dd

(3) 查找某个单词,用/关键字

(4)设置行号set nu,取消行号set nonu

(5)最末行(G),首行(gg)

(6)撤销动作,在正常模式下输入 u

开机、重启和用户登录注销

关机&重启命令

shutdown -h now(1):立即关机/一分钟后关机

shutdown -r now:立即重启

halt:效果等价于 关机

reboot:重启系统

syn:把内存的数据同步到磁盘

关机前先执行sync,把内存写入磁盘

用户登录和注销

  • 登录时尽量少用root账号登录,因为它是系统管理员

​ 可以利用普通用户登录,再用“su- 用户名” 命令来切换成系统管理员身份

  • logout即可注销用户

用户管理

Linux是一个多用户多任务的操作系统,任何想使用资源的用户,都必须先向管理员申请一个账号,然后以此账号进入系统

Linux的用户至少属于一个组

添加用户

useradd [选项] 用户名

当创建完用户,会自动创建和用户同名的home目录

useradd -d 指定家目录 新用户名:给创建的用户指定家目录

给用户指定或修改密码

passwd 用户名:给用户指定或修改密码

删除用户

userdel 用户名:删除用户,保留家目录

usrdel -r 用户名:删除用户以及用户主目录

查询用户信息

id 用户名

uid: 用户id gid: 组id 组名

切换用户

su - 用户名

从高权限的用户切换到低权限用户,无需密码;反之,则需要密码

当需要返回到原来用户,使用exit

用户组

  • 增加组groupadd 组名
  • 删除组groupdel 组名

增加用户时直接加上组

useradd -g 用户组 用户名

修改用户组

usermod -g 用户组 用户名

/etc/passwd文件

用户的配置文件,记录用户的各种信息

每行的含义

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

/etc/shadow文件

口令的配置文件

每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

/etc/group文件

组的配置文件

每行含义:组名:口令:组标识号:组内用户列表

实用指令

指定运行级别

0 :关机

1 :单用户[找回丢失密码]

2:多用户状态没有网络服务

3:多用户状态有网络服务

4:系统未使用保留给用户

5:图形界面

6:系统重启

常用运行级别是3和5,修改默认的运行级别可改文件

/etc/inittab的id:5:initdefault这一行的数字,默认运行级别

切换到指定运行级别

init 运行级别

面试题

如何找回丢失的root密码

进入单用户模式修改密码,因为进入单用户模式,root不需要密码,即可登录

开机->在引导时输入 回车键-> 看到一个界面输入 e -> 看到一个新的界面,选中第二行(编辑 内核)在输入 e-> 在这行最后输入 1 ,再输入 回车键->再次输入 b ,这时就会进入到单用户模式。

这时,我们就进入到单用户模式,使用 passwd 指令来修改 root 密码。

帮助指令

  • man [命令或配置文件]
  • help 命令

文件目录类

  • pwd:显示当前工作目录的绝对路径

  • ls [选项] [目录或是文件]

​ -a 显示当前目录的所有文件和目录

​ -l 以列表的方式显示信息

  • cd[参数]

​ 绝对路径:从根目录开始定位

​ 相对路径:从当前工作目录开始定位

cd ..:回到当前目录的上一级

cd ~:回到当前目录的上一级目录

  • mkdir [选项] :用于创建目录

​ -p:创建多级目录

  • rmdir [选项]:删除空目录

    -rf 删除非空目录

  • touch创建空文件

  • cp [选项] source dest

    -r 递归复制整个文件夹

  • rm [选项] 要删除的文件或目录

    -r:递归删除整个文件夹

    -f:强制删除不提示

  • mv

    mv oldFileName newFileName重命名

    mv source desc移动文件

  • cat [选项] 要查看的文件

    -n:显示行号

    只能以只读模式打开

    cat 文件名 |more[分页浏览]

  • more 要查看的文件

    空格:翻页

    enter:下一行

    ctrl+B:返回上一页

  • less 要查看的文件

    在显示文件内容的时候,不一次将整个文件加载后才显示,而是根据需要加载内容,对大文件具有较高的效率

    pagedown

    pageup

    /字串 向下搜索字串

    ?字串 向上搜索字串

  • >指令和>>指令

    >输出重定向:会将原来的文件覆盖

    >>追加:不会覆盖原来的文件的内容,而是追加到文件的尾部

    ls -l > 文件:列表的覆盖写入到文件

    ls -al >> 文件:列表内容追加写入到文件

    cat 文件1 > 文件2:把文件1内容覆盖写入文件2

    echo "内容" >> 文件:

  • echo [选项] [输出内容]

    输出内容到控制台

    echo $PATH

    echo 文件

  • head指令

    head 文件显示文件的开头部分,默认显示前10行

    head -n 5 文件:查看文件头5行内容

  • tail指令

    tail 文件:查看文件后10行

    tail -n 5 文件:查看文件后5行

    tail -f 文件:实时追踪该文档的所有更新

  • ln指令

    ln -s [原文件或目录] [软链接名]

    类似于windows的快捷方式,主要存放链接其他文件的路径

  • history指令

    查看已经执行过的历史命令

  • date 显示日期时间

    date+%Y显示当前年份

    date+%m显示当前月份

    date+%d显示当前是哪一天

    date -s 字符串日期时间设置系统当前时间

    cal [选项]查看日历指令

搜索查找类

  • find指令

    find [搜索范围] [选项]从指定目录向下递归遍历各个子目录,将满足条件的文件或目录显示在终端

    find -name 文件名:根据名称查找

    find 目录 -user 文件名:按拥有者查找

    find 目录 -size +/-/:文件大小

  • locate指令

    locate 搜索文件:可以快速定位文件路径,利用事先建立的系统中所有文件名及路径的locate数据库实现快速 定位给定的文件

    locate指令基于数据库,所以运行前,必须先使用updatedb创建locate数据库

  • grep [选项] 查找内容 源文件

    grep过滤查找,管道符"|",表示将一个命令的处理结果输出传递给后面的命令进行处理

    -n显示匹配行及行号

    -i忽略字母大小写

    例:cat hello.txt |grep -n yes

压缩和解压类

  • gzip用于压缩文件,gunzip用于解压文件

    使用gzip压缩后,不会保留原来的文件

  • zip用于压缩文件,unzip用于解压文件

    -r:递归压缩,压缩目录

    -d<目录>:指定解压后文件的存放目录

    zip -r name.zip 目录

    unzip -d /opt/tmp/ name.zip

  • tar指令

    tar [选项] name.tar.gz

组管理和权限管理

Linux组基本介绍

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

文件/目录 所有者

一般谁创建了文件,就是该文件的所有者

  • 查看文件的所有者

    ls -l

  • 修改文件所有者

    chown 用户名 文件名

组的创建

groupadd 组名

文件/目录所在组

  • 查看文件/目录所在组

    ls -l

  • 修改文件所在组

    chgrp 组名 文件名

其他组

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

改变用户所在组

user mod -g 组名 用户名

usermod -d 目录名 用户名:改变该用户登录的初始目录

权限的基本介绍

  • 第0位确定文件类型

    - 普通文件

    d 目录

    1 软链接

    c 字符设备

    b 块文件

  • 第1-3位表示所有者拥有该文件的权限

  • 第4-6位确定所属组拥有该文件的权限

  • 第7-9位表示其他组拥有该文件的权限

  • .空格后面的数字,如果是文件,表示硬链接数,如果是目录,表示该目录的子目录数

  • 拥有者

  • 所属组

  • 表示文件大小,如果是目录,就是4096

  • 文件最后修改的时间

rwx权限详解

  • 作用于文件

    r:可以读取,查看

    w:表示可写,可以修改,但不一定能删除,除非对文件所在目录具有写权限

    x:代表可执行

  • 作用于目录

    r:可读,ls查看目录内容

    w:可以修改,在目录内创建、删除、重命名

    x:可执行,可以进入该目录

修改权限-chmod

  • +、-、=变更权限

    u:所有者 g:所有组 o:其他人 a:所有人

    chmod u=rwx,g=rx,o=x 文件目录名

    chmod o+w 文件目录名

    chmod a-x 文件目录名

  • 通过数字变更权限

    规则r=4 w=2 x=1

    chmod u=rwx,g=rx,o=x 文件目录名

    相当于chmod 751 文件目录名

修改文件所有者

chown newowner file改变文件的所有者

chown newowner:newgroup file改变用户的所有者和所在组

修改文件的所在组

chgrp new group file改变文件的所有组

定时任务调度

概述

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

任务调度分类:

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

基本语法

crontab [选项]

-e:编辑crontab定时任务

-b:查询crontab任务

-r:删除当前用户所有的crontab任务

快速入门案例

如果是简单的任务,可以不写脚本,直接在crontab中加入任务即可

对于比较复杂的任务,需要编写脚本(Shell编程)

1、crontab -e

2、编写指令

3、保存并退出

  • 五个占位符的说明

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

    特殊符号说明
    *代表任何时间,比如第一个"*"表示一小时中每分钟都执行一次
    代表不连续时间,比如"0 8,12,16 * * *"表示每天的8点0分、12点0分、16点0分都执行一次
    -代表连续的时间范围,比如"0 5 * * 1-6"表示周一到周六的凌晨5点0分执行命令
    */n代表每隔多久执行一次,比如"*/10 * * * *",命令,代表每隔10分钟执行一次命令

Linux磁盘分区、挂载

分区基础知识

1、分区的方式

  • mbr分区

    最多支持4个主分区

    系统只能在主分区上

    扩展分区要占一个主分区

    MBR最大只支持2TB,但拥有最好的兼容性

  • gtp分区

    支持无限多个主分区,但操作系统会限制,比如windows下最多128个分区

    最大支持18EB的大容量

    Win7 64后支持gtb

Linux分区

  • 原理介绍

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

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

  • 硬盘说明

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

  • lsblk指令查看当前系统的分区情况

    [外链图片转存失败(img-y7hfeusd-1567988550345)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908105049400.png)]

磁盘情况查询

  • df -h查询系统整体磁盘的使用情况

  • du -h /目录查询指定目录的磁盘占用情况,默认是当前目录

    -s 指定目录占用大小汇总

    -h 带计量单位

    -a 含文件

    –max-depth=1 子目录深度

网络配置

Linux网络配置原理图

[外链图片转存失败(img-EIjyOaPn-1567988550346)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908110656422.png)]

ping测试主机间网络连通

ping 目的主机

linux网络环境配置

  • 自动获取的ip地址每次都不一样,不适用于做服务器

  • 指定固定的ip

    直接修改配置文件

    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    [外链图片转存失败(img-yibZNNXp-1567988550346)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908132123712.png)]

进程管理

进程的基本介绍

  • 在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号
  • 每个进程都对应一个父进程,而这个父进程可以复制多个子进程,例如www服务器
  • 每个进程都可能以两种方式存在。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
  • 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束

显示系统执行的进程

  • ps

    ps -aux

    字段说明
    PID进程识别号
    TTY终端机号
    TIME此进程所消CPU时间
    CMD正在执行的命令或进程名

    ps -a:显示当前终端所有进程信息

    ps -u:以用户的格式显示进程信息

    ps -x:显示后台进程运行的参数

[外链图片转存失败(img-FHkKFmm3-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908133344202.png)]

ps指令详情

System V 展示风格

USER 用户名称

PID 进程号

%CPU 进程占用CPU的百分比

%MEM 进程占用物理内存的百分比

VSZ 进程占用虚拟内存大小

RSS 进程占用物理内存大小

TT 终端名称,缩写

STAT 进程状态,S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等待等等

STARTED:进程的启动时间

TIME:CPU时间,即进程使用CPU的总时间

COMMAND:启动进程所用的命令和参数,如果过长会截断显示

终止进程kill和killall

  • kill [选项] [进程号]

  • killall 进程名称

    -9:表示强迫进程立即停止

    不带-9表示正常终止进程

查看进程树

pstree [选项]

-p:显示进程的PID

-u:显示进程所属用户

服务管理

  • 介绍

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

  • service管理指令

    service 服务名 [start|stop|restart|reload|status]

    在CentOS7.0后,不再使用service,而是systemctl

    systemctl [start|stop|restart|reload|status] 服务名

  • 细节讨论

    关闭或启用防火墙,立即生效[telnet测试某个端口]

    这种只是临时生效,当重启系统后,还是回归以前对服务的设置

    如果希望某个服务永久生效,要使用chkconfig指令

  • 查看服务名

    steup ->系统服务

    /etc/init.d/服务名称

  • 服务运行级别

    vi /etc/init.d

  • 开机的流程说明

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

  • chkconfig指令

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

    chkconfig --list|grep 服务名查看服务

    chkconfig 服务名 --list和上面功能一样

    chkconfig --level 5 服务名 on/off

动态监控进程

  • 介绍

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

  • top [选项]

    选项功能
    -d 秒数指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
    -i使top不显示任何闲置或者僵死进程
    -p通过指定监控进程ID来仅仅监控某个进程的状态
    操作功能
    p以CPU的使用率排序
    M以内存的使用率排序
    N以PID排序
    q退出top

    [外链图片转存失败(img-DGT3njWy-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908143751037.png)]

  • 查看系统网络情况

    netstat [选项]

    netstat -anp

    -an 按一定顺序排列输出

    -p 显示哪个进程在调用

RPM和YUM

rpm包的管理

  • 介绍

    一种用于互联网下载包的打包及安装工具,它包含在Linux分发版中。它生成,RPM扩展名的文件,RPM是RedHat Package Manager的缩写,类似于windows的setup.exe

  • rpm包的简单查询指令

    rpm -qa | grep firefox

  • rpm包名基本格式

    firefox-45.0.1-1.el6.centos.x86_64.rpm

    名称:firefox

    版本号:45.0.1-1

    适用操作系统:el6.centos.x86_64

  • rpm包的其他查询指令

    rpm -qa:查询所安装的所有rpm软件包

    rpm -qa|more[分页显示]

    rpm -q 软件包名查询软件是否安装

    rpm -qi 软件包名查询软件包中的信息

    rpm -ql 软件包名查询软件包中的文件

    rpm -qf 文件全路径名:查询文件所属的软件包

  • 卸载rpm包

    rpm -e RPM包的名称

    rpm -e --nodeps foo

    –nodeps强制删除

  • 安装rpm包

    rpm -ivh RPM包全路径名称

    i=install安装

    v=verbose提示

    h=hash进度条

yum

  • 介绍

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

  • yum的基本指令

    yum list|grep 软件包列表

    yum install 软件包下载安装

大数据定制篇Shell编程

为什么要学习Shell编程

  • Linux运维工程师在进行服务器集群管理时,需要写Shell程序来进程服务器管理
  • 对于JavaEE和Python程序员,需要编写一些Shell脚本进行程序或者服务器维护
  • 对于大数据程序员,需要编写Shell来管理集群

Shell是什么

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

[外链图片转存失败(img-ReJrWT23-1567988550347)(/Users/orihgc/Library/Application Support/typora-user-images/image-20190908151511226.png)]

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

  • 脚本格式要求
  • 脚本以#!bin/bash开头
  • 脚本需要可执行权限
  • 脚本的常用执行方式
    • 相对路径执行./myShell.sh
    • 绝对路径/home/shell/myShell.sh

shell变量

  • Linux中的变量分为系统变量和用户自定义变量

    系统变量:$HOME、$PWD 、$SHELL、$USER等等

​ 显示当前所有变量:set

  • shell变量的定义

    • 定义变量:变量=值

    • 撤销变量:unset 变量

    • 声明静态变量:readonly变量,不能unset

  • 定义变量的规则

    变量由字母数字下划线,不能以数字开头

    等号两侧不能有空格

    变量名称一般习惯为大写

  • 将命令的返回值赋给变量

    A=`ls -la`反引号,运行里面的命令,并把结果返回给A

    A=$(ls -la)等价于反引号

设置环境变量

  • 基本语法
    • export 变量名=变量值
    • source配置文件
    • echo $变量名

位置参数变量

  • 介绍

    当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如./myShell.sh 100 200这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息

  • 基本语法

    $nn代表第n个参数

    $*命令行中所有参数

    $@也代表所有参数,但区分对待

    $#代表参数个数

预定义变量

  • 就是shell设计者事先定义好的变量,可以直接在shell脚本中使用

  • 基本语法

    $$当前进程的进程号

    $!后台运行的最后一个进程的进程号

    $?最后一次执行命令的返回状态,若为0,则上一个指令执行正确,否则,表示上一个命令执行不正确

运算符

  • $((运算式))$[运算式]

  • expr m+n

  • expr m-n

  • expr \*,/,%乘、除、余

条件判断

  • [ condition ]注意condition前后要有空格

  • 非空返回true,可用$?验证

  • 常用判断条件

    • 两个整数比较

      = 字符串比较

      -lt 小于

      -le 小于等于

      -eq 等于

      -gt 大于

      -ge 大于等于

      -ne 不等于

    • 安装文件权限进行判断

      -r 有读权限

      -w 有写权限

      -x 有执行权限

    • 按照文件类型进行判断

      -f 文件存在并且是一个常规文件

      -e 文件存在

      -d 文件存在并是一个目录

流程控制

  • if判断
if [条件判断式]
then
    程序
elif [条件判断式]
then
    程序
fi
  • case语句
case $变量名 in
"1")
程序1
;;
"2")
程序2
;;
esac
  • for循环
for 变量 in 值1 值2 值3
do
  程序
done
for((初始值;循环控制条件;变量变化))
do
  程序
done
  • while循环
while [ 条件判断式 ]
do
  程序
done

read读取控制台输入

read(选项)(参数)

-p指定读取值时的提示符

-t指定读取值时等待的时间

read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的数是num1=¥NUM1"

函数

  • 系统函数

    • basename返回完整路径最后/的部分,常用于获取文件名

      basename [pathname] [suffix]

      basename [string] [suffix]

      suffix为后缀,如果被指定了,basename会将pathname或string中的suffix去掉

    • dirname返回完整路径最后/的前面部分,常用于返回路径部分

  • 自定义函数

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

    例子:

    function getSum(){
       SUM=$[$n1+$n2]
       echo "和是=$SUM"
    }
    
    read -p "请输入第一个数n1" n1
    read -p "请输入第一个数n2" n2
    
    getSum $n1 $n2
    

apt软件管理

apt介绍

apt是Advanced Packaging Tool的简称,是一款安装包管理工具

Ubuntu软件操作的相关命令

sudo apt-get update 更新源

sudo apt-get install package 安装包

sudo apt-get remove package 删除包

sudo apt-cache search package 搜索软件包

sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等

sudo apt-get install package --reinstall 重新安装包

sudo apt-get -f install 修复安装

sudo apt-get remove package --purge 删除包,包括配置文件等

sudo apt-get build-dep package 安装相关的编译环境

sudo apt-get upgrade 更新已安装的包

sudo apt-get dist-upgrade 升级系统

sudo apt-cache depends package 了解使用该包依赖那些包

sudo apt-cache rdepends package 查看该包被哪些包依赖

sudo apt-get source package 下载该包的源代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值