linux常用命令

Axn_很优秀 2018-08-29 09:45:41 88305 收藏 1739
分类专栏: linux 文章标签: linux linux命令

字体颜色含义
浅蓝色:表示链接文件;
灰色:表示其他文件;
绿色:表示可执行文件;
红色:表示压缩文件;
蓝色:表示目录;
红色闪烁:表示链接的文件有问题了;
黄色:表示设备文件,包括block,char,fifo。

用"dircolors -p"命令可以看到缺省的颜色设置,包括各种颜色和"粗体",下划线,闪烁等的定义。

日常使用命令/常用快捷键命令

开关机命令

  1. shutdown --h now:立刻进行关机

  2. shutdown --r now:现在重新启动计算机

  3. reboot:现在重新启动计算机

  4. su -:切换用户;passwd:修改用户密码

  5. logout:用户注销

常用快捷命令

  1. tab = 补全

  2. ctrl + l -:清屏,类似clear命令

  3. ctrl + r -:查找历史命令(history);ctrl+c = 终止

  4. ctrl+k = 删除此处至末尾所有内容

  5. ctrl+u = 删除此处至开始所有内容

常用工具命令

  1. man:帮助命令

  2. wc:文本统计统计 (3 5 29 a.txt :行数 单词数 字符数 文件名)
    常见参数:-l:只查看行数
    -w: 只查看单词数
    -c:只查看字符数

  3. du:文件大小统计
    格式:du [选项参数] dir_path
    常见参数:-s:只统计该文件目录的大小,不递归
    -h:人性化的显示单位

  4. find:文件检索命令

语法:find path -option [ -print ] [ -exec -ok command ] {} \;

参数说明 :find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n :文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilobytes,w是二个位元组。-typec:文件类型是c的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件

你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2

实例
(1) 将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
find . -name “*.c”

(2) 将目前目录其其下子目录中所有一般文件列出
find . -type f

(3) 将目前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime -20

(4) 查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;

(5) 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;

(6) 为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;

常用目录/文件操作命令

展示目录列表命令ls(list)

ls 展示当前目录下的可见文件

ls -a 展示当前目录下所有的文件(包括隐藏的文件)

ls -l(ll) 展示当前目录下文件的详细信息

ll -a 展示当前目录下所有文件的详细信息

ll -h 友好的显示当前目录下文件的详细信息(其实就是文件的大小可读性更强了)

pwd 显示目前的目录

切换目录命令cd(change directory)

cd test 切换到test目录下

cd … 切换到上一级目录

cd / 切换到系统根目录下

cd ~ 切换到当前用户的根目录下

cd - 切换到上一级所在的目录

目录的创建(mkdir)和删除(rmdir)命令

mkdir test 在当前目录下创建一个test目录

mkdir -p test/a/b 在test/a目录下创建一个b目录,如果上一级目录不存在,则连它的父目录一起创建

rmdir test 删除当前目录下的test目录(注意:该命令只能够删除空目录)

文件的创建(touch)和删除(rm)命令

touch test.txt 在当前目录下创建一个test.txt的文件

rm test.txt 删除test.txt的文件(带询问的删除,需输入y才能删除)

rm -f test.txt 直接删除text.txt文件

rm -r test 递 归删除,即删除test目录以及其目录下的子目录(带询问的删除)

rm -rf test 直接删除test目录以及其目录下的子目录

文件打包或解压命令tar

Linux tar(英文全拼:tape archive )命令用于备份文件。

tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

  1. 语法
    tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][–after-date=<日期时间>][–atime-preserve][–backuup=<备份方式>]
    [–checkpoint][–concatenate][–confirmation][–delete][–exclude=<范本样式>][–force-local]
    [–group=<群组名称>][–help][–ignore-failed-read][–new-volume-script=<Script文件>]
    [–newer-mtime][–no-recursion][–null][–numeric-owner][–owner=<用户名称>]
    [–posix][–erve][–preserve-order][–preserve-permissions][–record-size=<区块数目>]
    [–recursive-unlink][–remove-files][–rsh-command=<执行指令>][–same-owner][–suffix=<备份字尾字符串>]
    [–totals][–use-compress-program=<执行指令>][–version][–volno-file=<编号文件>][文件或目录…]

  2. 参数
    -A或–catenate 新增文件到已存在的备份文件。
    -b<区块数目>或–blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
    -B或–read-full-records 读取数据时重设区块大小。
    -c或–create 建立新的备份文件。
    -C<目的目录>或–directory=<目的目录> 切换到指定的目录。
    -d或–diff或–compare 对比备份文件内和文件系统上的文件的差异。
    -f<备份文件>或–file=<备份文件> 指定备份文件。
    -F<Script文件>或–info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
    -g或–listed-incremental 处理GNU格式的大量备份。
    -G或–incremental 处理旧的GNU格式的大量备份。
    -h或–dereference 不建立符号连接,直接复制该连接所指向的原始文件。
    -i或–ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
    -k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
    -K<文件>或–starting-file=<文件> 从指定的文件开始还原。
    -l或–one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
    -L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
    -m或–modification-time 还原文件时,不变更文件的更改时间。
    -M或–multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
    -N<日期格式>或–newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
    -o或–old-archive或–portability 将资料写入备份文件时使用V7格式。
    -O或–stdout 把从备份文件里还原的文件输出到标准输出设备。
    -p或–same-permissions 用原来的文件权限还原文件。
    -P或–absolute-names 文件名使用绝对名称,不移除文件名称前的"/“号。
    -r或–append 新增文件到已存在的备份文件的结尾部分。
    -R或–block-number 列出每个信息在备份文件中的区块编号。
    -s或–same-order 还原文件的顺序和备份文件内的存放顺序相同。
    -S或–sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
    -t或–list 列出备份文件的内容。
    -T<范本文件>或–files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
    -u或–update 仅置换较备份文件内的文件更新的文件。
    -U或–unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
    -v或–verbose 显示指令执行过程。
    -V<卷册名称>或–label=<卷册名称> 建立使用指定的卷册名称的备份文件。
    -w或–interactive 遭遇问题时先询问用户。
    -W或–verify 写入备份文件后,确认文件正确无误。
    -x或–extract或–get 从备份文件中还原文件。
    -X<范本文件>或–exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
    -z或–gzip或–ungzip 通过gzip指令处理备份文件。
    -Z或–compress或–uncompress 通过compress指令处理备份文件。
    -<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
    –after-date=<日期时间> 此参数的效果和指定”-N"参数相同。
    –atime-preserve 不变更文件的存取时间。
    –backup=<备份方式>或–backup 移除文件前先进行备份。
    –checkpoint 读取备份文件时列出目录名称。
    –concatenate 此参数的效果和指定"-A"参数相同。
    –confirmation 此参数的效果和指定"-w"参数相同。
    –delete 从备份文件中删除指定的文件。
    –exclude=<范本样式> 排除符合范本样式的文件。
    –group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
    –help 在线帮助。
    –ignore-failed-read 忽略数据读取错误,不中断程序的执行。
    –new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
    –newer-mtime 只保存更改过的文件。
    –no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
    –null 从null设备读取文件名称。
    –numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
    –owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
    –posix 将数据写入备份文件时使用POSIX格式。
    –preserve 此参数的效果和指定"-ps"参数相同。
    –preserve-order 此参数的效果和指定"-A"参数相同。
    –preserve-permissions 此参数的效果和指定"-p"参数相同。
    –record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
    –recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
    –remove-files 文件加入备份文件后,就将其删除。
    –rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
    –same-owner 尝试以相同的文件拥有者还原文件。
    –no-same-owner 把当前用户当成拥有者还原文件(sudo就是root)
    –suffix=<备份字尾字符串> 移除文件前先行备份。
    –totals 备份文件建立后,列出文件大小。
    –use-compress-program=<执行指令> 通过指定的指令处理备份文件。
    –version 显示版本信息。
    –volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

  3. 实例
    压缩文件 非打包
    # touch a.c
    # tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
    a.c
    列出压缩文件内容
    # tar -tzvf test.tar.gz
    -rw-r–r-- root/root 0 2010-05-24 16:51:59 a.c
    解压文件
    # tar -xzvf test.tar.gz
    a.c

Linux的权限命令

权限是Linux中的重要概念,每个文件/目录等都具有权限,通过ls -l命令我们可以 查看某个目录下的文件或目录的权限。

文件的类型:d:代表目录
-:代表文件
l:代表链接(可以认为是window中的快捷方式)

后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的用户的权限,其他用户的权限。

r:代表权限是可读,r也可以用数字4表示
w:代表权限是可写,w也可以用数字2表示
x:代表权限是可执行,x也可以用数字1表示
在这里插入图片描述在这里插入图片描述
linux中用户的分类:
小李 小李对象 老王
所有者u 同组用户g 其他人o

linux中文件权限: r:读 w:写 x:执行 -:没有权限

文件详情信息:
-rw-r–r--. 1 root root 5 Aug 28 02:27 a.txt
drwxr-xr-x. 2 root root 4096 Aug 27 08:52 test
root:文件所属者
root:文件所属组

  1. 修改文件/目录的权限的命令:chmod
    示例:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,
    其他用户只有读的权限:chmod u=rwx,g=rw,o=r aaa.txt
    上述示例还可以使用数字表示:chmod 764 aaa.txt

  2. 修改文件的所属用户和所属组 chown
    参数:-c 显示更改的部分的信息
       -f 忽略错误信息
       -h 修复符号链接
       -R 处理指定目录以及其子目录下的所有文件
       -v 显示详细的处理信息
       -deference 作用于符号链接的指向,而不是链接文件本身
       --reference=<目录或文件> 把指定的目录/文件作为参考,把操作的文件/目录设置成参考文件/目录相同拥有者和群组
       --from=<当前用户:当前群组> 只有当前用户和群组跟指定的用户和群组相同时才进行改变
       --help 显示帮助信息
       --version 显示版本信息
    实例
    chown username: groupName aa.txt 改变所属者和所属组
    chown username: aa.txt 改变所属者
    chown :groupName aa.txt 改变所属组

文件/文件夹的cp rm及文件的查看

  1. cp :(复制文件或目录)即拷贝文件和目录。
    语法
    [root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
    [root@www ~]# cp [options] source1 source2 source3 … directory
    选项与参数:
    -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
    -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
    -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
    -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
    -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
    -r:递归持续复制,用於目录的复制行为;(常用)
    -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
    -u:若 destination 比 source 旧才升级 destination !
    用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc
    [root@www ~]# cp ~/.bashrc /tmp/bashrc
    [root@www ~]# cp -i ~/.bashrc /tmp/bashrc
    cp: overwrite `/tmp/bashrc’? n <==n不覆盖,y为覆盖

  2. rm: (移除文件或目录)
    语法
    rm [-fir] 文件或目录
    选项与参数:
    -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
    -i :互动模式,在删除前会询问使用者是否动作
    -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
    将刚刚在 cp 的实例中创建的 bashrc 删除掉!
    [root@www tmp]# rm -i bashrc
    rm: remove regular file `bashrc’? y
    如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!

  3. mv: (移动文件与目录,或修改名称)
    语法
    [root@www ~]# mv [-fiu] source destination
    [root@www ~]# mv [options] source1 source2 source3 … directory
    选项与参数
    -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
    复制一文件,创建一目录,将文件移动到目录中
    [root@www ~]# cd /tmp
    [root@www tmp]# cp ~/.bashrc bashrc
    [root@www tmp]# mkdir mvtest
    [root@www tmp]# mv bashrc mvtest
    将某个文件移动到某个目录去,就是这样做!
    将刚刚的目录名称更名为 mvtest2
    [root@www tmp]# mv mvtest mvtest2

  4. Linux 文件内容查看(cat tac nl more less head tail)
    Linux系统中使用以下命令来查看文件的内容:
    cat 由第一行开始显示文件内容
    tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
    nl 显示的时候,顺道输出行号!
    more 一页一页的显示文件内容
    less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    head 只看头几行
    tail 只看尾巴几行
    你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

(1) cat:由第一行开始显示文件内容
语法:cat [-AbEnTv]
选项与参数
连接所有指定文件并将结果写到标准输出。
如果没有指定文件,或者文件为"-",则从标准输入读取。
-A, --show-all 等效于 -vET
-b, --number-nonblank 对非空输出行编号,同时取消 -n 选项效果
-e 等效于 -vE
-E, --show-ends 在每行结束处显示"$"
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t 与 -vT 等效
-T, --show-tabs 将跳格字符显示为^I
-u (被忽略)
-v, --show-nonprinting 使用^ 和M- 引用,除了LFD和 TAB 之外
–help 显示此帮助信息并退出
–version 显示版本信息并退出

示例1
cat f - g 先输出f 的内容,然后输出标准输入的内容,最后输出g 的内容。
cat 将标准输入的内容复制到标准输出。

示例2
EOF,多行追加或者写到文件(>写入,若有清空写入,>>追加)|与ctrl+d结束的效果一样
$ cat > test.tex << EOF
$ …
$ …
$ EOF #顶格,如果不顶格,首行为-EOF(EOF可以为任何的字符)
在这里插入图片描述
$ cat > test.tex
$ …
$ …(ctrl+d结束)

(2) tac:tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如
[root@www ~]# tac /etc/issue
Kernel \r on an \m
CentOS release 6.4 (Final)

(3) nl:显示行号
语法:nl [-bnw] 文件
选项与参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在荧幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。

实例一:用 nl 列出 /etc/issue 的内容
[root@www ~]# nl /etc/issue
1 CentOS release 6.4 (Final)
2 Kernel \r on an \m

(4) more:一页一页翻动
[root@www ~]# more /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
…(中间省略)…
–More–(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令

在 more 这个程序的运行过程中,你有几个按键可以按的:
空白键 (space):代表向下翻一页;
Enter :代表向下翻『一行』;
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
:f :立刻显示出档名以及目前显示的行数;
q :代表立刻离开 more ,不再显示该文件内容。
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

(5) less:一页一页翻动,以下实例输出/etc/man.config文件的内容
[root@www ~]# less /etc/man.config
#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.6d
…(中间省略)…
: <== 这里可以等待你输入命令!

less运行时可以输入的命令有:
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
q :离开 less 这个程序;

(6) head:取出文件前面几行
语法:head [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
[root@www ~]# head /etc/man.config
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
[root@www ~]# head -n 20 /etc/man.config

(7) tail:取出文件后面几行
语法:tail [-n number] 文件
选项与参数:
-n :后面接数字,代表显示几行的意思
-f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
[root@www ~]# tail /etc/man.config
# 默认的情况中,显示最后的十行!若要显示最后的 20 行,就得要这样:
[root@www ~]# tail -n 20 /etc/man.config

系统常用操作命令

  1. visudo:编辑sudo命令的配置**
    Allow root to run any commands anywhere
    root ALL=(ALL) ALL
    用户名 登录的主机=(以什么样的身份运行) 可以执行什么命令
    如果想让huadian用户也居于root相关权限。
    huadian ALL=(root) NOPASSWD:service iptables status
    huadian ALL=(root) NOPASSWD:service iptables start
    推荐用法
    huadian ALL=(root) NOPASSWD:ALL
    使用权限:sudo service iptables status ----(检查防火墙状态)

  2. ping、ifconfig:网络管理

  3. service:服务管理命令
    格式:service s_name start|stop|status|restart
    linux系统所有自带服务名称:/etc/init.d/
    常用:
    关闭防火墙服务:service iptables stop
    重启网络服务:service network restart
    mysql数据库服务的名称:mysql版本低于5.5 mysqld
    mysql版本高于5.5 mysql

  4. chkconfig:设置是否开机启动(ubuntu默认没有,需要安装组件)
    判定是否开机启动chkconfig iptables --list(2.3.4.5是on表示开机启动)
    设置:chkconfig iptables on|off

  5. ps:进程管理
    查看java的进程:ps -ef | grep java
    jps:==(ps -ef | grep java) 只有在linux中安装了JDK才能用

  6. kill:杀死某个进程
    kill -9 pid

  7. netstat:端口管理
    -a:表示列举所有的连接、服务器监听
    -t:列出所有tcp协议的服务
    -u:列出所有udp协议的服务
    -n:使用端口号来显示
    -l:列出所有的监听
    -p:列出所有服务的进程id(pid)
    常用:netstat -atunlp

  8. redhat的selinux安全机制
    关闭selinux安全机制:vim /etc/selinux/config
    SELINUX=disabled 重启机器生效

  9. date:日期 脚本之家
    [root@localhost source]# date --help
    用法:date [选项]… [+格式]
    或:date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
    (1) 以给定的格式显示当前时间,或是设置系统日期
    -d,–date=字符串 显示指定字符串所描述的时间,而非当前时间
    -f,–file=日期文件 类似–date,从日期文件中按行读入时间描述
    -r, --reference=文件 显示文件指定文件的最后修改时间
    -R, --rfc-2822 以RFC 2822格式输出日期和时间
    例如:2006年8月7日,星期一 12:34:56 -0600
    –rfc-3339=TIMESPEC 以RFC 3339 格式输出日期和时间。
    TIMESPEC=`date’,`seconds’,或 `ns’ 表示日期和时间的显示精度。
    日期和时间单元由单个的空格分开:2006-08-07 12:34:56-06:00
    -s, --set=字符串 设置指定字符串来分开时间
    -u, --utc, --universal 输出或者设置协调的通用时间
    –help 显示此帮助信息并退出
    –version 显示版本信息并退出
    (2) 给定的格式FORMAT 控制着输出,解释序列如下
    %% 一个文字的 %
    %a 当前locale 的星期名缩写(例如: 日,代表星期日)
    %A 当前locale 的星期名全称 (如:星期日)
    %b 当前locale 的月名缩写 (如:一,代表一月)
    %B 当前locale 的月名全称 (如:一月)
    %c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
    %C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
    %d 按月计的日期(例如:01)
    %D 按月计的日期;等于%m/%d/%y
    %e 按月计的日期,添加空格,等于%_d
    %F 完整日期格式,等价于 %Y-%m-%d
    %g ISO-8601 格式年份的最后两位 (参见%G)
    %G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
    %h 等于%b
    %H 小时(00-23)
    %I 小时(00-12)
    %c 按年计的日期(001-366)
    %k 时(0-23)
    %l 时(1-12)
    %m 月份(01-12)
    %M 分(00-59)
    %n 换行
    %N 纳秒(000000000-999999999)
    %p 当前locale 下的"上午"或者"下午",未知时输出为空
    %P 与%p 类似,但是输出小写字母
    %r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
    %R 24 小时时间的时和分,等价于 %H:%M
    %s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
    %S 秒(00-60)
    %t 输出制表符 Tab
    %T 时间,等于%H:%M:%S
    %u 星期,1 代表星期一
    %U 一年中的第几周,以周日为每星期第一天(00-53)
    %V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
    %w 一星期中的第几日(0-6),0 代表周一
    %W 一年中的第几周,以周一为每星期第一天(00-53)
    %x 当前locale 下的日期描述 (如:12/31/99)
    %X 当前locale 下的时间描述 (如:23:13:48)
    %y 年份最后两位数位 (00-99)
    %Y 年份
    %z +hhmm 数字时区(例如,-0400)
    %😒 +hh:mm 数字时区(例如,-04:00)
    %:😒 +hh:mm:ss 数字时区(例如,-04:00:00)
    %::😒 数字时区带有必要的精度 (例如,-04,+05:30)
    %Z 按字母表排序的时区缩写 (例如,EDT)
    默认情况下,日期的数字区域以0 填充。
    以下可选标记可以跟在"%"后:
    - (连字符)不填充该域
    _ (下划线)以空格填充
    0 (数字0)以0 填充
    ^ 如果可能,使用大写字母
    # 如果可能,使用相反的大小写
    在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。
    (3) 时间输出
    date是Linux系统里自带的一个系统命令,用来显示当前的系统时间,不过默认显示的结果里包括很多信息,特别是做为文件名输出时,不是很方便,好在date命令里包含格式化输出的选项
    [root@root ~]# date “+%Y-%m-%d”
    2013-02-19
    [root@root ~]# date “+%H:%M:%S”
    13:13:59
    [root@root ~]# date “+%Y-%m-%d %H:%M:%S”
    2013-02-19 13:14:19
    [root@root ~]# date “+%Y_%m_%d %H:%M:%S”
    2013_02_19 13:14:58
    [root@root ~]# date -d today
    Tue Feb 19 13:10:38 CST 2013
    [root@root ~]# date -d now
    Tue Feb 19 13:10:43 CST 2013
    [root@root ~]# date -d tomorrow
    Wed Feb 20 13:11:06 CST 2013
    [root@root ~]# date -d yesterday
    Mon Feb 18 13:11:58 CST 2013
    (4) 时间设置
    我们一般使用"date -s"命令来修改系统时间
    比如将系统时间设定成2011年7月13日的命令:date -s 07/13/2011
    将系统时间设定成11点12分0秒的命令:date -s 11:12:00
    注意:这里说的是系统时间,是linux由操作系统维护的。
    在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。
    如果要确保修改生效可以执行如下命令。
    #clock --w
    这个命令强制把系统时间写入CMOS。

getopts命令获取命令行参数

傲雪星枫 2017-07-30 13:20:47 36189 收藏 7

调用格式

getopts option_string variable

参数说明

option_string 选项名称
variable 选项的值
选项之间可以使用冒号:分隔,也可以直接连接, : 表示选项后面有传值。
当getopts命令发现冒号后,会从命令行该选项后读取该值。如该值存在,将保存在特殊的变量OPTARG中。
当option_string用:开头,getopts会区分invalid option错误和miss option argument错误。
invalid option时, varname会被设成?
miss option argument时,varname会被设成:
如果option_string不用:开头,invalid option错误和miss option argument错误都会使varname被设成?。
getopts包含两个内置变量,OPTARG和OPTIND
OPTARG 保存选项后的参数值
OPTIND 表示命令行下一个选项或参数的索引

实例1

#!/bin/bash
while getopts a:b:c:d opts; do
	case $opts in
		a) a=$OPTARG ;;
		b) b=$OPTARG ;;
		c) c=$OPTARG ;;
		d) d=$OPTARG ;;
		?) ;;
	esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0

执行输出
./test.sh -a 1 -b 2 -c 3 -d 4
a=1
b=2
c=3
d=

option_string a:\b:c:d
a,b,c后都有:,d后没有:
所以可以获取到a,b,c的值

例子2,option_string前加:
上例中,如果a,b,c任意一个没有传值,将会提示出错。例如 -c 不传值。
./test.sh -a 1 -b 2 -c
./test.sh: option requires an argument – c
a=1
b=2
c=
d=

我们在option_string前加上:,则可以屏蔽这个错误。

#!/bin/bash
while getopts :a:b:c:d opts; do
	case $opts in
		a) a=$OPTARG ;;
		b) b=$OPTARG ;;
		c) c=$OPTARG ;;
		d) d=$OPTARG ;;
		?) ;;
	esac
done
echo "a=$a"
echo "b=$b"
echo "c=$c"
echo "d=$d"
exit 0

执行输出
./test.sh -a 1 -b 2 -c
a=1
b=2
c=
d=

在option_string前加上:,可以屏蔽缺失传值的错误,但如果缺失的是前面选项的值,那么获取到的值将会错误。
例如缺失a的传值,命令会把-a后的-b作为了-a的值,导致错误。
./test.sh -a -b 2 -c 3
a=-b
b=
c=
d=

因此使用getopts命令时,对于没有传值的选项,选项名称也不要加入命令行中。
例如a不传值,则-a不要加入命令行。
./test.sh -b 2 -c 3
a=
b=2
c=3
d=

实例2

[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done

上面的例子显示了执行的效果和代码。

getopts的使用形式是:getopts option_string variable
getopts一共有两个参数,第一个是-a这样的选项,第二个参数是 hello这样的参数。
选项之间可以通过冒号:进行分隔,也可以直接相连接,:表示选项后面必须带有参数,如果没有可以不加实际值进行传递

例如:getopts ahfvc: option表明选项a、h、f、v可以不加实际值进行传递,而选项c必须取值。使用选项取值时,必须使用变量OPTARG保存该值。
[hello@Git shell]$ bash test.sh -a hello -b
this is -a the arg is ! hello
test.sh: option requires an argument – b
Invalid option: -
[hello@Git shell]$ bash test.sh -a hello -b hello -c
this is -a the arg is ! hello
this is -b the arg is ! hello
this is -c the arg is !
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:\b:cdef” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
b)
echo “this is -b the arg is ! $OPTARG”
;;
c)
echo “this is -c the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
[hello@Git shell]$

执行结果结合代码显而易见。同样你也会看到有些代码在a的前面也会有冒号,比如下面的

情况一,没有冒号:
[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ bash test.sh -a
test.sh: option requires an argument – a
Invalid option: -
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done
[hello@Git shell]$

情况二,有冒号:
[hello@Git shell]$ bash test.sh -a hello
this is -a the arg is ! hello
[hello@Git shell]$ bash test.sh -a
[hello@Git shell]$ more test.sh
#!/bin/bash
while getopts “:\a:” opt; do
case $opt in
a)
echo “this is -a the arg is ! $OPTARG”
;;
\?)
echo “Invalid option: -$OPTARG”
;;
esac
done

情况一输入 -a 但是后面没有参数的的时候,会报错误,但是如果像情况二那样就不会报错误了,会被忽略。
getopts option_string variable
当optstring以":“开头时,getopts会区分invalid option错误和miss option argument错误。
invalid option时,varname会被设成?,$OPTARG是出问题的option;
miss option argument时,varname会被设成:,$OPTARG是出问题的option。
如果optstring不以”:"开头,invalid option错误和miss option argument错误都会使varname被设成?,$OPTARG是出问题的option。

chroot 创建新的根目录

chroot命令用来在指定的根目录下运行指令。chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以/,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为/位置。
在经过 chroot 之后,系统读取到的目录和文件将不在是旧系统根下的而是新根下(即被指定的新的位置)的目录结构和文件,因此它带来的好处大致有以下3个:

(1) 增加了系统的安全性,限制了用户的权力

在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。

(2) 建立一个与原系统隔离的系统目录结构,方便用户的开发

使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。

(3) 切换系统的根目录位置,引导 Linux 系统启动以及急救系统等

chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。

示例

(1) 创建一个目录作为根目录
chroot MyRootDir默认会执行${SHELL} -i,即MyRootDir/bin/bash,所以需要拷贝bash到指定目录
在这里插入图片描述
直接执行chroot MyRootDir出现错误:chroot: failed to run command ‘/bin/bash’: No such file or directory,原因是缺少bash相关的库,使用ldd查看库并拷贝(此例子中为简化演示,直接拷贝/lib目录)
在这里插入图片描述
(2) 执行新根目录内的命令
在这里插入图片描述
也可以手动指定bash路径切换,这样就不需要将bash放入新根路径的/bin目录下
在这里插入图片描述
chroot的第三个参数为运行的指令,该指令位于新的root路径,从下面可以验证改命令执行的不是系统路径的命令
在这里插入图片描述
下面是chroot的命令说明:
在这里插入图片描述

安全性

从chroot的用法可以看出它的使用场景有一定的局限性,首先它依赖于一台现成的unix系统(根目录必须存在于某台现有系统上),其次chroot仅仅是在系统目录上进行了隔离,并没有对进程、网络等层面进行隔离。

首先检验一下进程空间,在pts/0端切换到新的根目录,执行ping 127.0.0.1操作,该操作属于新根目录下进行的。
在这里插入图片描述
新开一个终端界面,查看ping进程可以看到在原系统下面是可以看到新根目录下执行的进程。chroot并没有在进程层面上进行隔离。
在这里插入图片描述
同样地在新根目录下执行ifconfig等网络操作可以看到网络信息跟原系统是完全一样的。chroot并没有在网络层面上进行隔离。

chroot并不能完全保证系统安全,在很多层面上chroot并没有进行完全隔离。

wheris、which查找软件的安装路径

whereis用法
whereis [选项] [-BMS <dir>… -f] <名称>
定位某个命令的二进制文件、源码和帮助页文件。

选项:
-b 只搜索二进制文件
-B <目录> 定义二进制文件查找路径
-m 只搜索手册和信息
-M <目录> 定义 man 和 info 查找路径
-s 只搜索源代码
-S <目录> 定义源代码查找路径
-f 终止 <目录> 参数列表
-u 搜索不常见记录
-l 输出有效查找路径
-h, --help display this help
-V, --version display version
在这里插入图片描述
which用法
which [命令]
功能描述:搜索命令所在的目录及别名信息
在这里插入图片描述

passwd、chpasswd修改密码

命令passwd

passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [–stdin] [username]
passwd程序用于更新用户的身份验证令牌(口令/密码)。此任务是通过调用Linux-PAM和Libuser API实现的。实际上,它将自身初始化为Linux-PAM的"passwd"服务,并利用配置的密码模块进行身份验证,然后更新用户的密码。

1)选项
-k,–keep 此选项仅用于更新过期的身份验证令牌(口令/密码);用户希望保留没有过期的身份验证令牌(口令/密码)

-l,–lock 此选项用于锁定指定账户的密码,仅适用于root用户。通过将加密密码呈现为无效字符串(通过在加密字符串前加上!)来执行锁定。注意:该账户未完全锁定------用户仍可通过其他身份验证方式登录,例如ssh公钥身份验证。使用"chage --E 0 user(这里面是零)"命令代替完全账户锁定

–stdin 此选项用于指示passwd应从标准输入读取新密码,标准输入可以是管道(|)

-u,–unlock 这与-l选项相反------它通过删除字首!来解锁账户密码。一样仅适应于root用户。默认情况下,passwd将拒绝创建无密码账户(它不会解锁只有!作为密码的账户)。强制选项-f将废除此保护。

-d,–delete 这是删除账户密码的快捷方式。它将指定账户设置为无密码,仅适用于root用户。

-e,–expire 这是一个过期账户密码的快捷方式。在下次尝试登录期间,用户将被迫更改密码。仅适用于root用户。

-f,–force 强制指定的操作。

-n,–minimum DAYS 如果用户的账户支持密码生存期,这将设置最小密码生存期(单位天),仅适用于root用户。

-x,–maximum DAYS 如果用户的账户支持密码生存期,这将设置最长密码生存期(单位天),仅适用于root用户。

-w,–warning DAYS 如果用户的账户支持密码生存期,这将设置用户其密码将过期前DAYS天开始警告,仅适用于root用户。

-i,–inactive DAYS如果用户的账户支持密码生存期,这将设置此账户密码过期前经过的天数,这意味着账户将被视为不活动且应禁用,仅适用于root用户。

-S,–status 这将输出有关于给定账户的密码状态的简短信息,仅适用于root用户。

命令chpasswd

chapasswd [选项]
批量更新密码。注意:命令内没有用户名和密码,回车后以"用户名:密码"的格式输入(密码一般为明文),chpasswd根据选项加密

1)常用选项
-c,–crypt-method METHOD 使用指定的方法加密。加密方法有DES,MD5,NONE,SHA256,SHA512
-e,–encrypted 提供的密码已经加密
-h,–help 帮助
-m.–md5

(3).实例:非交互式修改密码
echo 123456 | passwd --stdin user002
echo “user003:123456” | chpasswd

网络命令netstat、ss

netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

执行netstat后,其输出结果为:
在这里插入图片描述
从整体上看,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。

Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

ss

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。

ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

ss [选项] [过滤]
选项:如果没有指定任何选项,ss 列出所有已经建立、并不处在listen的TCP 套接字。
-h, --help 列出选项概要
-V,–version 输出版本信息
-n, --numeric不尝试解析服务的名字
-r,–resolve 尝试解析数字地址/端口
-a,–all 显示处在listening 和 非listening 状态的套接字(对TCP来说,这意味所有已建立的连接)。
-l,–listening 只显示处在 listening 状态的套接字(默认情况下它们是被忽略的)
* -o, --options* 显示定时器信息
-e,–extended 显示详细的套接字信息
-m,–memory 显示套接字的内存使用信息
-p, --process 显示使用套接字的进程
-i, --info 显示TCP内部信息
-s,–summary 显示概要统计。该选项不分析来自不同来源的套接字概要信息。 当套接字的数量很大导致分析/proc/net/tcp 很痛苦时,它很有用。
-Z,–context 同 -p 选项,不过还显示进程的安全上下文
-z,–contexts 同 -Z, 不过还显示套接字的上下文。 该套接字上下文是从inode里取出的、并不是内核持有 的实际的socket上下文。 套接子通常以创建它的进程上下文标记, 但该上下文会反映已应 用上的policy role, type and/or range , 因此这是个很有用的参考。
-b,-bpf 显示套接字的BPF过滤(只有管理员能获取这些信息)
-4,–ipv4 只显示IPv4 套接字(-f inet的别名)
-6,–ipv6 只显示IPv6 套接字(-f inet6的别名)
-0,–packet 显示PACKET 套接字(-f link的别名)
-t,–tcp 显示 TCP 套接字
-u,–udp 显示UDP 套接字
-d,–dccp 显示 DCCP 套接字
-w,–raw 显示 RAW 套接字
-x,–unix 显示 Unix Domain 套接字(-f unix的别名)
-f FAMILY,–family=FAMILY 显示类型为FAMILY的套接字。 支持以下几个family: unix, inet,inet6,link,netlink
-A QUERY, --query=QUERY, --socket=QUERY 列出需要倒出的套接字列表,用逗号隔开。 支持以下标识 符: all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream, unix_seqpacket, packet_raw, packet_dgram
-D FILE, --diag=FILE 不显示任何内容,仅把原始TCP套接字信息存入文件FILE。 如果FILE为 - , 则 使用stdout作为输出。
-F FILE, --filter=FILE 从文件FILE中读取信息。 文件的每一行被认为是单个命令行参数。 如果FILE为 - , 则使用stdin。

命令行特殊显示效果\033

华硕他哥 2018-04-12 18:21:10 4713 收藏 18

使用格式

样式开始+被修饰字符串+样式结束

样式开始

\033[{para1};{para2};{para3}m

参数1:代表背景色
可选值及其含义:
40-49:背景色
40: 黑 41: 红 42: 绿 43: 黄 44: 蓝 45: 紫 46: 绿 47: 白

参数2:代表字体色
可选值及其含义:
30-39:字体颜色
30: 黑 31: 红 32: 绿 33: 黄 34: 蓝 35: 紫 36: 绿 37: 白
38:在缺省的前景颜色上设置下划线
39:在缺省的前景颜色上关闭下划线

参数3:代表显示效果 ,当不需要背景色,也可以用于参数1位置
0:不使用效果 1:高亮(加深)显示 2:低亮(减弱)显示
4:下划线 5:闪烁 7:反显(替换背景色和字体颜色)
8:消隐

样式结束

\033[0m

举例

在这里插入图片描述

script命令

script 是一个神奇命令,script 能够将终端的会话过程录制下来,然后使用 scriptreplay 就可以将其录制的结果播放给他人观看。script 的好处就在于你在终端中的所有操作、敲过的命令和打印出的结果它都可以原原本本地进行录制。可以应用于教学、演示、审计。一般来说,script 和 scriptreplay 在 Linux 发行版中都有默认安装。

script -t 2>demo.time -a demo.his            开始录像,ctrl+d或者exit结束
scriptreplay demo.time demo.his            回放

两个配置文件被当做script命令的参数。这两个文件可以随便命名,这里用demo.time和demo.his。其中demo.time用于存储时序信息,描述每一个指令在何时运行;demo.his用于存储命令信息输出。-t选项用于将时序数据导入stderr。2>用于stderr重定向到demo.time。

参数

-t     指明输出录制的时间数据
-f 如果需要在输出到日志文件的同时,也可以查看日志文件的内容,可以使用 -f 参数。
-a 输出录制的文件,在现有内容上追加新的内容
-q 可以使script命令以静默模式运行

利用script记录某人行为
vi ~/.profile script -t -f -q 2>$USER.time -a $USER.his

应用

1、演示教学
第一个命令框
script -f demo

其他命令框
scriptreplay -f demo

可以实现实时同步演示

2、服务器安全审计
直接操作线上的服务器有很大隐患,所以一般都是通过登录跳板机,然后连接线上服务器,跳板机可以访问控制和安全审计,查看记录每个人对线上服务器的操作
用户家目录下,修改环境变量,使得用户登录就会触发录像
vi ~/.profile script -t -f -q 2>/wow/$USER-$UID-`date +%Y%m%d%H%M%S`.time -a /wow/$USER-$UID-`date +%Y%m%d%H%M%S`.his

这样搞完后,发现有一个问题是每次退出,我习惯Ctrl+D,然后按第一遍停止录像,第二遍才能用户退出,如何解决在后面添加
if [ “$SHLVL” = 1 ]; then exit; fi
这样就可以一遍Ctrl+D停止录像(exit)和退出用户

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值