Linux简易命令手册

linux基本知识:

1.linux中的库是以.so后缀结尾的。
2.用户接口。
GUI接口:图形化接口
CentOS:KDE
CLI接口:命令行接口
sh
bash
ksh
3.
~表示家目录
$:普通用户的命令提示符
#:root用户的命令提示符

4.命令格式:
命令 选项 参数
选项:短选项
-a -b = -ab
长选项:


参数:命令的作用对象。

5.虚拟终端:ctrl + Alt + F1 - F6

固件:date命令和hwclock命令时钟的统一。
date软件时钟
hwclock硬件时钟
从和hwclock –help从查找帮助。
命令:hwclock –hctosys

固件->自举程序(GRUB)->内核->init进程(驱动硬件程序)。

$$ 切换运行级别:runlevel 查看当前的运行级别。
telinit [0123456Ss]

基本命令:
clear 清屏

用户管理:
创建用户 useradd
设置密码: passwd
显示主机名称:hostname,设置主机名称:在hostname后面加上主机名称即可。
设置普通用户拥有root权限(永久)
vi /etc/sudoers
添加 yiyele ALL=(root)NOPASSWD:ALL

关机:halt
重启:reboot
nit 6

主机名与Ip地址映射:
修改/etc/hosts文件 ip地址在前 主机名在后,可以设置多个主机名。

四大远程工具
远程命令行:远程命令
secureCRT
远程FTP
FileZilla:上传文件到远程主机中。
远程编辑工具:
NotePad++,UltrlEdit
远程界面:
Xmanager4

用户命令:

用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage

组管理:
groupadd, groupdel, groupmod, gpasswd

权限管理:
chown, chgrp, chmod, umask(设置目录和目录里文件创建的默认权限)

/etc/passwd:
用户名:密码:UID:GID:注释:家目录:默认SHELL

/etc/group:
组名:密码:GID:以此组为其附加组的用户列表

/etc/shadow:
用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间:

用户管理:
useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage

useradd [options] USERNAME
-u UID
-g GID(基本组)
-G GID,… (附加组)
-c “COMMENT”
-d /path/to/directory
-s SHELL
-m -k
-M
-r: 添加系统用户

userdel:
userdel [option] USERNAME
-r: 同时删除用户的家目录

id:查看用户的帐号属性信息
-u
-g
-G
-n

finger: 查看用户帐号信息
finger USERNAME

修改用户帐号属性:
usermod
-u UID
-g GID
-a -G GID:不使用-a选项,会覆盖此前的附加组;
-c
-d -m:
-s
-l
-L:锁定帐号
-U:解锁帐号

chsh: 修改用户的默认shell

chfn:修改注释信息

密码管理:
passwd [USERNAME]
–stdin
-l
-u
-d: 删除用户密码

pwck:检查用户帐号完整性

组管理:
创建组:groupadd
groupadd
-g GID
-r:添加为系统组

groupmod
-g GID
-n GRPNAME

groupdel

gpasswd:为组设定密码

newgrp GRPNAME <–> exit

chage
-d: 最近一次的修改时间
-E: 过期时间
-I:非活动时间
-m: 最短使用期限
-M: 最长使用期限
-W: 警告时间

硬件管理

1.查看所有PCi设备的信息 lspci (经过测试这个命令在CentOS中无法使用在ubuntu中可以)
2.查看内核信息 uname uname -r 查看内核版本信息。
3.查看版本信息 lsb_release -a
4.查看内核加载的模块 lsmod(输出 模块名 模块大小 被那个进程使用)
5.查看USB设备 lsusb
6.查看网卡状态 ethtool sudo ethtool 网卡名 (在ubuntu中使用未被允许)
7.查看CPU的信息 注意一个特别的目录/proc,该目录存放各种系统信息。每一个文件对应不同的信息。存放CPU的信息文件是/proc/cpuinfo. 可以使用cat /proc/cpuinfo查看。
8.查看当前的硬件信息 lshw
9.查看当前的内存使用情况 free, free -m
10.显示内核输出信息 dmesg命令显示的信息很丰富,从开机自检的信息到系统运行时检测到的硬件信息均可包含。所以当硬件在使用时出现问题时,可以使用这个命令。
11.服务自启动脚本的编写:首先编写一个脚本,更改其权限为755,可运行的状态。然后在rc2.d里建立脚本的软连接。ln -s 文件 软链接名(软链接放到rc2.d里)
12.查看cpu信息,cat /proc/cpuinfo
13.查看内存信息,cat /proc/meminfo

Shell基本命令

1.起别名:alias 目的命令(自己定义的名称) = 源命令(系统命令)
A.交互式(只是在当前终端有效,关掉终端后,别名就失效了)
例如:alias welcome=’cd Examples; evince case_Welcome.pdf’ 命令内容是进入到Examples目录,并打开case_Welcome文件。
B.非交互式
将别名写到配置文件中。
别名适用特定用户:修改该用户主目录下.bashrc文件
别名适用全局性:可将别名写入/etc/basn.bashrc文档中。CentOS是在/etc/bashrc文件中。
2.查看使用过的历史记录。
history命令是查看命令记录。
调用历史命令:! !!调用最后一个命令
!^取得上个命令第一个参数
!$取得上个命令最后一个参数。
!历史命令编号 调用改编号的命令。

history使用技巧:命令历史时间戳 a.输入 export HISTTIMEFORMAT=’%F %T’ b.输入history

Ctrl + R 组合键 出现动态搜索提示,输入要搜索的内容,即可对命令历史记录进行搜索,按确认键执行该命令。
3.重定向和管道

重定向:三个文件描述符:标准输入0(stdin) 标准输出1(stdout)标准错误输出2(stderr)。

:该重定向符使得标准输出改变方向,不输出到屏幕,而是输出到一个文件。

:如果文件存在,则将重定向的结果添加到文件的末尾。如果文件不存在则创建一个文件。
&:要捕获标准错误输出,就要用到这个命令。
&同>&,主要区别是如果文件存在,则将重定向的内容加到文件的末尾。
<:如果一个进程需要得到输入信息的话,可以用这个重定向符让进程从文件中读取。
<<+界定符. 当输入界定符是,表示输入结束。
完整的重定向命令:命令 %n%C file 例如:ls / 2> ls_error.

管道:可以用管道操作符‘|’来连接进程。管道的作用是把一个进程的标准输出通过管道变为另一个进程的标准输入。后面的命令你可以直接处理前面命令的输出。

三通命令:tee 既可以把输出显示到屏幕,也可以把输出写到文件里。
例如:xlsfonts | grep gb2312 | tee myfonts.cn

文件内容相关命令

(1)输出文本文件内容命令cat/more/less/head/tail/pg(显示文本,用命令进行操作)/od(二进制方式显示文本内容),tac与cat相反,从文件的尾部查看内容。
(2)文本文件比较:diff
23a34,45 : 将目标文件的34-45行内容添加到源文件的23行
12,23c26,36:将源文件的12-23行转换为26,36行
23d34:删除源文件的13-24行内容后就与目标文件第34行内容一致
diff三种模式:diff file file2 diff -c file file2 diff -u file file2
ps:file a a a a a a a
file2 a a a b a a a
第一种模式就是显示上面的内容
第二种模式,
 * f1 2012-08-29 16:45:41.000000000 +0800
  — f2 2012-08-29 16:45:51.000000000 +0800
  *****
  * 1,7 **
   a
   a
   a
  !a
   a
   a
   a
  — 1,7 —-
   a
   a
   a
  !b
   a
   a
   a
第三种模式:
  — f1 2012-08-29 16:45:41.000000000 +0800
  +++ f2 2012-08-29 16:45:51.000000000 +0800
  @@ -1,7 +1,7 @@
   a
   a
   a
  -a
  +b
   a
   a
   a
二进制文件比较命令cmp

文本处理:

A.nl 给文本文件每行加上行号,然后输出命令。
B.sort 给文件中的各行进项排序。
C.tr 将单字符替换或者删除的操作。
tr ‘a’ ‘A’ < myfile将myfile文件的所有a替换为A
只能进行单字符的替换,不能进行字符串的替换。
D.grep 文本查找命令。
E.file 显示文件格式命令
objdump 可阅读的形式了解二进制文件可能带有的附加信息。
strace 显示程序中系统调用和信号的命令。
(4)文件操作基本命令
A.ls 查看当前目录中的文件信息。
-l:长格式
文件类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件 (block)
c: 字符设备文件 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
文件权限:9位,每3位一组,3组 权限(U,G,O)每一组:rwx(读,写,执行), r– ,第一组:文件的属主用户权限。第二组:文件的属组用户权限,第三组:其他用户权限
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp):最近一次被修改的时间
访问:access
修改:modify,文件内容发生了改变
改变:change,metadata,元数据
-h:做单位转换
-a: 显示以.开头的隐藏文件
. 表示当前目录
.. 表示父目录
-A
-d: 显示目录自身属性
-i: index node, inode
-r: 逆序显示
-R: 递归(recursive)显示
B.mv 文件移动和重命名,可以修改文件名。
C.cp 可以将文件或目录复制到另一个位置 ,拷贝一个目录: -r

多个文件到一个目录
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
D.rm 文件删除命令,-r 递归删除,-f强制删除。
E.ln 创建文件链接
软链接:相当于一个Windows的快捷方式
硬链接:相当于一个副本。
软链接与硬链接的区别:
(1)软连接可以 跨文件系统 ,硬连接不可以 。实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 连接成功 。ln aa.txt /root/bb 失败。
(2)关于 i节点的问题 。硬连接不管有多少个,都指向的是同一个I节点,会把 结点连接数增加 ,只要结点的连接数不是 0,文件就一直存在 ,不管你删除的是源文件还是 连接的文件 。只要有一个存在 ,文件就 存在 (其实也不分什么 源文件连接文件的 ,因为他们指向都是同一个 I节点)。 当你修改源文件或者连接文件任何一个的时候 ,其他的 文件都会做同步的修改 。软链接不直接使用i节点号作为文件指针,而是使用文件路径名作为指针。所以 删除连接文件 对源文件无影响,但是 删除 源文件,连接文件就会找不到要指向的文件 。软链接有自己的inode,并在磁盘上有一小片空间存放路径名.
(3)软连接可以对一个不存在的文件名进行连接 。
(4)软连接可以对目录进行连接。
F.split 可以将文件分割成指定大小的若干块
  •-a : 指定后缀长度
  •-b : 每个文件多少字节
  •-d : 使用数字后缀而不是字母
  •-l : 指定每个文件的行数

PS:split -a 2 -d -b 10m /var/lib/mysql/general.log nowamagic
输出:nowamagic00
   nowamagic01
   nowamagic02
   nowamagic03
   nowamagic04
   nowamagic05
G.touch 更改文件时间信息(可以使用vi/vim创建文件)
touch创建文件。
touch -r file2 file:用file2的时间信息来设置file1的时间信息。
touch -t 10252050 file:设置file的时间为10月25日20时50分。
H.pwd 输出当前目录.
I,cd 更改当前目录命令.
J.mkdir 创建目录。-p创建父目录。 创建多级目录:mkdir -p /home/xxq/jksjd/sdflj
K.rmdir 删除目录。
L.tree 显示树形目录结构
M.find 文件查找命令
find . -perm 755 查找当前目录或者子目录的所有文件权限为755的文件。
find ~/Music -type f -name “wanted*” -exec cp {} ./myfavoroty \;
N.locate 快速查找命令
O.which 查找可执行文件程序文件名。查找范围是环境变量$PATH中定义的目录。
chown :改变拥有者
chgrp:改变组
同时改变文件的用户组yiyele和用户xxq:chown xxq:yiyele 文件名

stat:查看文件的详细信息。

文件查看:cat,more,head,tail
(5)其他命令
A.sleep 让当前程序休眠一段时间。Smhd 秒分小时天
B.time 获得系统的运行时间
C.date 管理和设置日期时间,设置时间:date -s 2015-09-30 date -s 14:32:09
ntpdate 自动同步网络时间到系统时间
D.uptime 获得系统相关的信息
E.Cal 日历 cal 2015 显示2015年的日历。
F.Xargs 多行命令处理程序
ls | xargs vim 就会将ls列出的文件用vim全部打开。
find /tmp -name core -type f -print | xargs /bin/rm f 寻找tmp中的core名的文件,然后用rm -f 命令删除。
G.bc 计算器
H.man 强大的手册
I.type:显示指定属于那种类型。
j.

Vim快捷键:

dd删除行。
ZZ:保存内容。
x:删除单个字符。
Ioa:插入数据。

文件管理

在根目录’/’下有很多子目录。
/usr:包含所有命令、类库、系统帮助手册,即包含了系统运行中不会修改的内容。
/var:包含系统中会修改的内容,如打印队列,邮件列表,还有系统中软件的log信息。
/home:用户的主目录所在地,实际用户的主目录是该目录中的次级目录。
/dev:设备文件,如硬盘存储器、光驱USB设备。
/tmp:临时文件,该目录的文件会在每次启动后被清空。
/boot:系统内核所在地。
/mnt:临时加载文件系统的安装点。
/proc:其他文件系统的安装点。
/etc:目录包含很多文件,许多网络配置文件也在/etc中。
/bin:引导启动所需的命令及用户在使用过程中可能会用到的程序。
/sbin:与bin目录类似,但是给root用户使用。
/etc:大多数程序的配置文件。
/root:root用户的主目录。
/lib:根文件系统中程序所需的共享库。
/proc:由内核创建,只存在与内存中。而且只在需要时生成相关文件,用于提供关于系统的信息。

/etc:该目录包含了大部分的系统配置文件。
/etc/rc、/etc/rc.d、/etc/rc*.d:系统启动时读取自动运行程序与设置启动级别。
/etc/passwd:用户密码及相关信息。
/etc/group:用户组的相关信息。
/etc/issue:登陆提示信息。
/etc/mtab:当前挂载的文件系统列表。
/etc/profile:设置终端启动时运行的程序。
/etc/timezone:时区。
/etc/environment:环境变量。
/etc/updatedb.conf:文件检索数据库配置信息。
/etc/iftab:网卡MAC地址绑定.
/etc/hostname:主机名
/etc/resolv..cong:域名解析服务器地址。
/etc/network/interfaces:网卡配置文件。

/usr:包含了用户的相关信息。
/usr/include:C/c++编程所需要的头文件。
/usr/src:程序源代码。
/usr/local:用户安装的软件所在地。
/usr/bin:大多数命令
/usr/sbin:供用户使用的系统管理命令。

文件系统的数据结构:超级块,i节点,数据块,目录块的等
文件系统的格式:ext2,ext3.

ext2:主要性能指标:
分区类型号:0x83
最大文件大小:2-64TB
最大文件数量:1018
最大文件名长度:16-32TB
文件名不可使用’/’字符。
支持的日期范围:1901年12月14日~2038年1月18日。
支持的操作系统:Linux,BSD ,Windows,Mac OS X
ext2不是日志文件系统。
Ext3:内核及基本功能与ext2基本一样,只是多了日志的功能。
日志文件:
Linux文件系统提供了三种权限:以下权限安全性降低,速度依次提高。
Journal日记模式:将数据块和元数据的写入均记入日志中,是最安全但也是最慢的模式。因为所有的数据均要写两次,一次写到目标数据区,另一次写到日志中。
Orderd顺序模式:这是大多数发行版的默认模式。这种模式中,只记录元数据的修改情况,但在写元数据之前会先将数据块的内容写入磁盘中。
Writeback回写模式:只是简单的记录元数据,而不管是否已将数据写入数据块中。
将ext2文件系统转换为ext3文件系统。
tune2fs -j /dev/sda6
指定ext3日志的存放位置:
mke2fs -J device=/dev/hda7 /dev/hdb5
Ext3文件系统的修复:
mount /dev/hda7
E2fsck -fy /dev/hda7

加载与卸载文件系统:
mount 用来加载一个文件系统。
mount -t vfat /dev/sda1 /mnt/win2000
-t制定文件类型
文件类型:iso9660光盘或光盘镜像
msdos:fat16文件
vfat:fat32文件
ntfs:win2000和win XP使用。
nfs:类unix系统文件网络共享。
-o:描述设备的挂载方式。
Loop:把设备当做硬盘分区挂载,常用来挂载光盘/ISO文件。
ro:用只读方式挂载设备
rw:用读写方式挂载设备。
挂载光盘镜像文件:
mkdir /mndt/source
mount -o loop -t iso9660 ~/source.iso /mnt/source
制作镜像文件:
cp /dev/cdrom ~/source.iso

dd
Mkisofs
卸载文件系统:
umount + mount命令的加载点。无法卸载的时候可以使用 -l 这个指令。
开机自动加载:
系统中自动管理加载文件为:/etc/fstab
dump 备份的频率 单位是天
pass 设置启动时扫描的顺序。其他目录应该设置为2,如果在启动时不需要扫描,可以将其设置为0.
option:user.非root用户可以挂载。
nouser:只有root用户可以挂载。
type:要挂载的文件类型。
命令设置权限:chmod
chmod u+x test.sh
chmod a+w ./*
chmod 754 ./*

压缩文件管理:

tar包的处理:
解包:tar xvf package.tar
打包:tar cvf package.tar directory

gz压缩文件的处理:
解压:gunzip -d zipfile.gz
压缩:gzip filename

Tar.gz or tgz 文件的处理。
解压:tar zxvf tarfile.tar.gz -C 指定目录 : 解压到指定的目录
压缩:tar zcvf tarfile.tar.gz orderFolder

bz2文件的处理
解压:bzip2 -d bzfile.bz2
压缩:bzip2 -z bzfile

tar.bz2文件的处理:
解压:tar jxvf tarbzfile.tar.bz2
压缩:tar jcvf tarbzfile.tar.bz2 orderFolder
bz文件的处理
解压:bzip2 -d bzfile.bz
压缩:

tar.bz文件的处理:
解压:tar jxvf file.tar.bz

tar.Z文件的处理:
解压:tar Zxvf file.tar.Z
压缩:tar Zcvf File.tar.Z Foleder

zip文件的处理:
解压:unzip File.zip
压缩:zip File.zip Folder

rar文件的处理:
解压:rar a File.rar
压缩:erar e file.rar

deb文件的处理:
解压:arp file.deb debfile.tar.gz | tar zxf -

Z 文件的处理:
解压:uncompress all.Z.
文本处理:
cut、sort,join、sed、awk

文本文件:
Tom:23:male:2013/05/06

cut:
-d: 指定字段分隔符,默认是空格
-f: 指定要显示的字段
-f 1,3
-f 1-3

文本排序:sort
-n:数值排序
-r: 降序
-t: 字段分隔符
-k: 以哪个字段为关键字进行排序
-u: 排序后相同的行只显示一次
-f: 排序时忽略字符大小写

文本统计:wc (word count)
-l
-w
-c
-L

sed基本用法:
sed: Stream EDitor
行编辑器 (全屏编辑器: vi)

sed: 模式空间
默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;

sed [options] ‘AddressCommand’ file …
-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r: 表示使用扩展正则表达式

Command:
d: 删除符合条件的行;
p: 显示符合条件的行;
a \string: 在指定的行后面追加新行,内容为string
\n:可以用于换行
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中;
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符
g: 全局替换
i: 忽略字符大小写
s///: s###, s@@@
(), \1, \2

l..e: like-->liker
      love-->lover

      like-->Like
      love-->Love

&: 引用模式匹配整个串

sed练习:
1、删除/etc/grub.conf文件中行首的空白符;
sed -r ‘s@^[[:space:]]+@@g’ /etc/grub.conf
2、替换/etc/inittab文件中”id:3:initdefault:”一行中的数字为5;
sed ‘s@(id:)[0-9](:initdefault:)@\15\2@g’ /etc/inittab
3、删除/etc/inittab文件中的空白行;
sed ‘/^$/d’ /etc/inittab

awk:
awk是一个强大的文本分析工具,
相对于grep的查找,sed的编辑,
awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk ‘{pattern + action}’ {commands}
其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。
花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
pattern就是要表示的正则表达式,用斜杠括起来。

案例:
显示最近登录的5个帐号
#last -n 5 | awk ‘{print 1}’  
读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域
0则表示所有域, 1, n表示第n个域。默认域分隔符是”空白键” 或 “[tab]键”,
所以 1 3表示登录用户ip,以此类推。

如果只是显示/etc/passwd的账户

#cat /etc/passwd |awk -F ‘:’ ‘{print 1}’  
root  
daemon  
bin  
sys  
这种是awk+action的示例,每行都会执行action{print
1}。

-F指定域分隔符为’:’。

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

#cat /etc/passwd |awk -F ‘:’ ‘{print 1"\t" 7}’

 root    /bin/bash
 daemon  /bin/sh
 bin     /bin/sh
 sys     /bin/sh

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加”blue,/bin/nosh”。

复制代码
cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name,shell”} {print 1"," 7} END {print “blue,/bin/nosh”}’
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
….
blue,/bin/nosh

awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域, 0, 1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

搜索/etc/passwd有root关键字的所有行

#awk -F: ‘/root/’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索支持正则,例如找root开头的: awk -F: ‘/^root/’ /etc/passwd

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

# awk -F: ‘/root/{print 7}’ /etc/passwd  
/bin/bash  
 这里指定了action{print
7}

awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符

0 1表示当前行的第一个域,$2表示当前行的第二个域,……以此类推。

统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

#awk -F ‘:’ ‘{print “filename:” FILENAME “,linenumber:” NR “,columns:” NF “,linecontent:”$0}’ /etc/passwd
filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

使用printf替代print,可以让代码更加简洁,易读

awk -F ‘:’ ‘{printf(“filename:%s,linenumber:%s,columns:%s,linecontent:%s\n”,FILENAME,NR,NF,$0)}’ /etc/passwd

print和printf
awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

awk编程
变量和赋值

除了awk的内置变量,awk还可以自定义变量。

下面统计/etc/passwd的账户人数

awk ‘{count++;print $0;} END{print “user count is “, count}’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
……
user count is 40
count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:

awk ‘BEGIN {count=0;print “[start]user count is “, count} {count=count+1;print $0;} END{print “[end]user count is “, count}’ /etc/passwd
[start]user count is 0
root:x:0:0:root:/root:/bin/bash

[end]user count is 40

统计某个文件夹下的文件占用的字节数

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size}’
[end]size is 8657198

如果以M为单位显示:

ls -l |awk ‘BEGIN {size=0;} {size=size+$5;} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.25889 M
注意,统计不包括文件夹的子目录。

条件语句

awk中的条件语句是从C语言中借鉴来的,见如下声明方式:

复制代码
if (expression) {
statement;
statement;
… …
}

if (expression) {
statement;
} else {
statement2;
}

if (expression) {
statement1;
} else if (expression1) {
statement2;
} else {
statement3;
}

统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):

ls -l |awk ‘BEGIN {size=0;print “[start]size is “, size} {if(5!=4096){size=size+5;}} END{print “[end]size is “, size/1024/1024,”M”}’
[end]size is 8.22339 M

循环语句

awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。

数组

因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

显示/etc/passwd的账户

awk -F ‘:’ ‘BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}’ /etc/passwd
0 root
1 daemon
2 bin
3 sys
4 sync
5 games
……

这里使用for循环遍历数组

linux 引号
1、反引号:“ ,命令替换
2、单引号:” ,字符串
3、双引号: “” ,变量替换

软件包的管理

命令:
apt-get:可以完成软件的安装/卸载/系统升级的功能。
apt-get [选项] 命令ss
-h:显示帮助文档。
-qq:只显示错误信息。
-d:仅从源服务器上下载软件包,但是不进行实际的安装。
-s:模拟执行命令,但不实际运行。
-y:对于所有提示yes/no的操作。
-f:强制安装软件包,即使没有通过完整性的验证。
-m:当缺少某些包时,仍然继续安装。
-u:显示升级了的软甲包列表。
-b:下载源码包后,自动编译,并生成相应的软件包。

apt管理命令列表:
sudo apt-get update :刷新系统中的软件信息,在源文件/etc/apt/sources.list被修改后使用。
sudo apt-get install package:安装软件,下载的deb包在/var/cache/apt/archives/
sudo apt-get install –reinstall package:强制重新安装软件。
sudo apt-get -f install : 修复安装中出现的错误。
sudo apt-get build-dep package:安装编译该包所需的编译依赖环境。
sudo apt-get remove package:卸载软件。
sudo apt-get autoremove:自动清理系统中不用的软件包。
sudo apt-get autoclean:删除系统中旧版本的软件包。
apt-get –purge remove package:卸载软件,并删除配置文件。
sudo apt-get upgrade:对所有软件进行自动升级。
sudo apt-get dist-upgrade:对系统进行升级。
sudo apt-get source package:获得软件的源代码。
sudo apt-get clean:清楚从源服务器上下载的软件包,但是并不卸载已安装的文件。
sudo apt-get check:更新缓冲区并检查损坏的软件包。

apt-cache命令:查询软件包缓存区信息的程序。可以得到系统中软件包的各种信息。
apt-cache [选项] 命令
命令:
Show:简单介绍该软件包的相关信息。
depends:显示软件包的依赖信息。
pkgnames:显示所有软件包的名字。

一些常用的apt-cache:
apt-cache show package:显示软件包的相关信息,如说明,大小,版本等。
apt-cache show -a package:显示软件包的描述信息。
apt-cache showsrc package:显示软件源码包的信息。
apt-cache showpkg package:显示软件包的全部信息。
apt-cache rdepends package:显示该软件被哪些软件依赖。
apt-cache dumpavail:可用软件包列表。
apt-cache depends package:显示软件包的依赖情况。

(redhat系列)
rpm:已经编译后的应用程序

安装软件的步骤:
1、检查是否已经安装
rpm -qa | grep jdk
2、下载软件包
3、安装
依赖
安装:
软件来源于CentOS社区的镜像站点或者从官网上下载。
-h: 以#显示进度;每个#表示2%;
-v: 显示详细过程
-vv: 更详细的过程
-i:表示安装
1.从官网上下载的rpm格式的软件包,首先放到Linux文件中去
2.rpm -ivh 软件包名
例子:
检查java软件是否更新:rpm -qa | grep java
卸载软件:rpm -e –nodeps 软件名1 软件名2…
安装软件:rpm -ivh XXX.rpm

查询
rpm -q PACKAGE_NAME: 查询指定的包是否已经安装
rpm -qa : 查询已经安装的所有包

rpm -qi PACKAGE_NAME: 查询指定包的说明信息;
rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表;
rpm -qc PACEAGE_NEME:查询指定包安装的配置文件;
rpm -qd PACKAGE_NAME: 查询指定包安装的帮助文件;

rpm -q –scripts PACKAGE_NAME: 查询指定包中包含的脚本

rpm -qf /path/to/somefile: 查询指定的文件是由哪个rpm包安装生成的;

如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件;
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl

升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE: 如果装有老版本的,则升级;否则,则安装;
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;
–oldpackage: 降级

卸载
rpm -e PACKAGE_NAME
–nodeps

校验
rpm -V PACKAGE_NAME

重建数据库
rpm
–rebuilddb: 重建数据库,一定会重新建立;
–initdb:初始化数据库,没有才建立,有就不用建立;

压缩包的软件安装 例如:tar

yum:需要配置源
yum install zsh

yum源配置
配置yum源到本地:/etc/yum.repos.d/CentOS-media.repo,利用这个模板配置CentOS-Base.repo文件相关内容。
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=

yum [options] [command] [package …]

-y: 自动回答为yes
–nogpgcheck

list: 列表
支持glob
all
available:可用的,仓库中有但尚未安装的
installed: 已经安装的
updates: 可用的升级

clean: 清理缓存
[ packages | headers | metadata | dbcache | all ]

repolist: 显示repo列表及其简要信息
all
enabled: 默认
disabled

install: 安装
yum install PACKAGE_NAME

update: 升级
update_to: 升级为指定版本

remove|erase:卸载

info:

provides| whatprovides: 查看指定的文件或特性是由哪个包安装生成的;

groupinfo
grouplist
groupinstall
groupremove
groupupdate

源码安装:
源码安装步骤:
1、下载
2、查看源码
3、准备编译环境
4、检查(依赖,兼容),预编译
5、编译
6、安装

编译安装的三步骤:
前提:准备开发环境(编译环境)
安装”Development Tools”和”Development Libraries”

yum groupinstall Development Tools Development Libraries

tar -zxvf 压缩包 ,tar.gz
# tar
# cd
# ./configure
–help
–prefix=/path/to/somewhere
–sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1、让用户选定编译特性;2、检查编译环境;
# make
# make install

# tar xf tengine-1.4.2.tar.gz
# cd tegnine-1.4.2
# ./configure –prefix=/usr/local/tengine –conf-path=/etc/tengine/tengine.conf
# make
# make install

磁盘管理

命令:
分区命令:
删除原有分区:

使用fdisk命令:
(1)使用root权限,运行fdisk命令。
sudo fdisk /dev/sda(分区)
可以使用sudo fdisk -l查看
(2)输入m,然后回车查看帮助菜单。
(3) 查看当前磁盘分区的情况。在fdisk提示命令符后输入:p
(4) 删除旧的分区,方法是在fdisk命令提示符后输入d
(5) 输入删除的分区编号。
(6) 在fdisk命令提示符中输入命令w,将刚才所做的更改写入磁盘。

 在新磁盘建立分区:

(1)(2)(3)同上
(4)在fdisk命令提示符后输入n
(5)选择分区类型,类型有extended拓展分区 和 primary partition主分区
(6)输入主分区编号
(7)输入磁盘大小:输入结束柱面或者磁盘大小(+10000M = 10G)
(8)回到命令提示符状态,此时应输入n继续创建分区,本次创建的是拓展分区。
(9)一般拓展分区编号应该输入2,其他与主分区一样。
(10)创建逻辑分区,输入n,选择创建分区类型选择l
(11)设置逻辑分区的大小。
(12)显示创建的分区信息。输入p。

更改分区格式:更改系统的分区编号
(1)进入fdisk,输入t
(2)输入修改的分区编号,例如1.
(3)修改分区编号,可以输入l查看。
(4)NTFS的分区编号是7,输入7.
(5)输入p,显示当前的磁盘分区信息。

格式化命令:
sudo mkfs -t ext3 /dev/sdb1
sudo mkfs -t reiserfs /dev/sdb5

查看磁盘的使用情况:
sudo fdisk -l

查看/dev/disk目录相关的内容:
显示系统中磁盘的信息。
查看/proc/partitions中分区的信息。
/proc目录中记录了许多系统重要的信息。通过查看/proc/partitions文件可以获取磁盘的分区信息。

修复磁盘:fsck
查看磁盘已挂载分区的情况:df,经常使用的命令:df -lh
查看目录信息:du, du -sh 目录名称
查看及设置磁盘信息:hdparm
查看磁盘的各种参数。
sudo hdparm -tT /dev/sda : 测试磁盘传输速度。
sudo hdparm -c /dev/sda : 测试磁盘是否打开32位I/O支持。
sudo hdparm -C /dev/sda : 检查磁盘的能耗模式。
sudo hdparm /dev/sda : 不加参数的Hdparm 会输出许多有用的信息,包括上面介绍的。

sudo hdparm -g /dev/sda : 可以获取相关的物理信息,,如柱面,磁头等信息。
sudo hdparm -i /dev/sda : 可以获取基本所有磁盘相关的信息。

磁盘内容复制:dd
If= :输入文件名,也就是dd要操作的原文件名。
of=:输出文件名,指定dd命令将源文件输出到什么位置。
ibs=n:一次性读入n个字节,相当于设置读取块的大小。
obs=n:一次性写入n个字节,设置写入块的大小。
bs=n:设置读写块的大小,同时设置了ibs和obs
cbs=n:转换缓存区的大小。
skip=n:从输入文件开头跳跃n个块后再开始操作。
Seek=n:从输入文件跳跃n个块后再开始操作。
Count=n:仅复制n个块。
Conv=参数:参数可取ascii,ebcdic,ibm,Icase。Ucase,swab

例子:
dd if= ebc_1.file of= asc_1.file conv=ascii:将ebc_1.file转换为ASCII格式文件asc_1.file
dd if=/dev/sda1 of=/dev/sdb5:将sda1分区备份到sdb5
dd if=/dev/sda1 of=/dev/sda5/disk1.file:将sda1分区备份到disk.file文件中
dd if=/dev/sda1 | gzip >/dev/sdb5/disk1_image.gz:将sda1分区压缩备份到disk1_image.gz。
dd if=/dev/sda of=/dev/sda:修复磁盘。

进程管理

守护进程:仅运行在后台,不与用户进行交互操作的一些进程,一般以字母d作为名称的结尾。
僵尸进程:父进程推出后,子进程由于某种原因却没有被父进程正常回收,这时失去父进程的子进程称为僵尸进程。
进程显示命令:ps,jps
ps -e | head -n 2:输出当前系统所有进程,用head命令控制只输出两个命令。
ps -ef | head -n 2:加上f显示更详细的信息。
ps -eF | head -n 2:加上F显示更更详细的信息。
ps -ely | head -n 2:显示一些状态信息。

输出进程树:
ps axjf

获取线程的信息:
ps axms

获取进程状态信息:
ps axZ | head -n 5

查看特定用户的进程信息:
ps -l -U yiyele | head -n 5

查看特定名称的进程:
ps -C XXX -0 pid=

查看特定PID的进程:
ps -p 7855 -0 comm=

输出参数的意义:
VSZ:进程占用的虚拟内存。
RSS:进程使用的物理内存大小。
TTY:终端号码。
STAT/S:进程的状态。
D:不可中断
R:运行状态;
S:睡眠状态。
T:暂停状态。
Z:僵尸进程。
W:内存不足。
<:优先级别高。
N:优先级别低。
START:进程开始运行的时间。
STIME:进程开始运行的时间。
SZ:进程的内存占用数量。以页为单位,如果内存不断增加,则是出现了内存泄漏。
TIME:进程被CPU执行的时间。
PRI:进程的优先级,数值越小,优先级越高。
NI:进程的nice值,nice值表示系统优先级的静态系统变量。
COMMAND:进程实际执行的程序名。
WCHAR:进程在睡眠时发出的信号值,用以表示唤醒该进程所需的操作。

显示共享库的内存占用:memstat

以树形方式显示进程:pstree

进程筛选命令:pgrep
pgrep -f ‘mlte*’ -u westnorth -l
查找用户为westnorth,进程名以mlte开头的进程

动态监视进程命令:top
-M 显示详细信息。
终止进程:kill
kill -15 10232
kill -s 15 10232
Kill -s 15 -p 10232
kill -SIGTERM 10232
常用信号:
HUP:可以使用-1,HUP,SIGHUP。让进程重新启动。
KILL:可以使用-15,-KILL,SIGKILL,发送中止信号给今晨恶搞,非强制性的。
TERM:可以使用-9,-TERM,SIGTERM,强制中止进程的信号。

按进程名中断进程:pkill
可以根据进程名字来中断进程。
pkill vim

关闭某个端口的程序:sudo fuser -k 80/tcp

进程高级管理:

进程后台运行符&。在执行的程序后加上&。

nohup命令:Shell退出时,后台运行的程序不退出,可以和&搭配使用。
setsid与nohup命令一样。
如果进程已经运行,要使之后天运行则需使用disown.
Ctrl+z进程挂起。
Screen

进程的优先级:
nice -n 10 FireFox:范围从-20(最高)~19(最低)。
进程已经运行:renice
renice +1 -u yiyele -p 2305 10623:将进程为2305,10623,属于用户yiyele的进程优先级+1.

进程的自动调度:
at :at 4pm + 3 days :三天后下午四点运行特定的命令。
at 10am Jul 31:七月三十一号上午十点运行命令。
at 1am tomorrow :明天上午一点运行命令。
(只在指定的时间运行一次程序)

crontab
周期性的运行程序。
Crontab -l:显示用户目录的crontab
Crontab -e:进入crontab编辑模式。
crontab -r:删除所有的定时命令。

crontab的基本格式:
语法: * command
注意:所有的六个字段之间使用空格隔开。
字段含义:


          • 1)分钟:1-59 例:每十分钟执行一次:/10
            2)小时:0-23 例:每两个小时执行一次:/2
            (*3)日:1-31
            (*4)月:1-12
            (*5)星期:0-6

例子:1.每天晚上的九点三十执行。
30 21 * * * command

  1. 每个月的1号,11号,21号02:30执行
    30 2 1,11,21 * * command

3.每周六、周日早上的1:45分执行
45 1 * * 6,0 command

4.每天的20:00 至 23:00 之间每半个小时执行一次。
0,30 20-23 * * * command

5.每一个小时执行一次。
* /1 * * command

6.每分钟执行一次

/1 * * * command

网络配置管理:

Iptables:定义了IP包的的传输规则,如哪些包可以通过/哪些包被拒绝,以及本机的哪些端口是开放的。

监视网络性能:
使用ping检测网络性能:ping localhost
使用netstat检测网络性能:netstat 参数1 参数2
参数1:指定显示的内容。
(空):显示打开套接字
–route -r:显示核心路由信息。
–group -g:显示多播组成员信息。
–interfaces: -i:显示所有网络接口。
–statistics -s:显示各种协议的统计信息。

参数2:
-a –all:显示所有的套接字,包括监听与非监听的。
-c –continuous:持续每秒显示一次相关信息。
-e –extend:显示附加信息,使用本参数两次可以显示全部细节。
-o –timers:显示网络时间相关的信息。
-p –progran:显示套接字的属主程序的PID号。
-l –listening:仅显示监听的套接字。
–numeric,-n:显示数值形式的域名/端口/用户名等。
-C:显示从路由缓冲中得到的路由信息。
-F:显示从FIB得到的路由信息。

ps:显示所有的套接字:
netstat -a -n

显示内核路由信息:
netstat -nr

显示使用TCP/UDP协议的传输状态。
netstat -t
netstat -nplt
配置TCP/IP:ifconfig
显示特定的网络设备状态:ifconfig eth0

设置网络设备的TCP/IP参数
sudo ifconfig eth0 192.168.2.2 netmask 255.255.255.0 :设置eth0 的IP和子网掩码
sudo ifconfig eth0 hw ether 00:03:0d:5e:e3:8f:设置eth0的mac地址
sudo ifconfig dynamic:TCP/IP 改为DHCP模式
sudo ifconfig eth0 down:关闭网卡
sudo iwconfig wlan0 essid “west”:使无线网链接到west
sudo iwconfig wlan0 channel auto:设置无线网wlan0自动选择连接频道
sudo route add default gw 192.168.1.1:使192.168.1.1成为默认网关。

给网络设备取别名:
可以给一个网卡同时设置几个不同的IP地址,而且几个IP地址属于不同的网段,这样在一个机器要使用不同的网段时比较有用。
PS:ifconfig eth0:1 192.168.155.2 netmask 255.255.255.0
给eth0设置别名eth0:1

查看DNS:命令nslookup,dig
nslookup www.google.com

路由管理简介:
路由查询:tracepath
PS:tracepath www.google.com
route:
route -n:显示核心路由器详细信息。

nc 命令打开端口
nc -lp 10000&

查看防火墙的状态:sudo service iptables status
关闭防火墙:sudo service iptables stop
启动防火墙:sudo service iptables start
重启防火墙:sudo service iptables restart

centos 7:
systemctl stop firewalld.service #停止
systemctl disable firewalld.service #禁用

永久性关闭/开启防火墙:
sudo chkconfig iptables on/off、

检查是否开启httpd
sudo chkconfig –list | grep httpd

Shell编程:

第一行指定用哪个程序来编译和执行脚本。
#!/bin/bash #!/bin/sh

注释行:使用‘#’

变量:
变量名以字母下划线开头,后面跟上字符下划线和数字。任何其它字符标志变量结束。变量名大小写敏感。

根据变量的作用域,变量可以分为本地变量和环境变量
本地变量只能在创建他的shell脚本中使用,而环境变量则可以在任何的用户进程中使用。

变量赋值:name=123,=两边不能有空格。如果给变量赋空值,可以在=后面加上换行符。

显示变量:echo nameecho {name}
清除变量:unset name
显示所有的变量:set

环境变量也称为全局变量。按惯例是大写。

位置参量:是一组特殊的内置变量,通常被shell脚本用来从命令行接受参数,或被函数用来保存传递给他的参数。
跟在脚本名后面的用空格隔开的每个字符串都称为位置参量。
在脚本中使用这些位置参量则需使用 1, 2... {10},分别表示使用第一到第十的位置参量。
如果位置参数中有空格,则需要使用双引号。

0 #表示位置参量的个数。
!最后一个后台运行的进程的进程号。
$?显示前面最后一个命令的退出状态。0表示没有错误,其他的值表示有错误。

退出码:shell脚本退出码取决于最后一个命令的返回码。

程序控制返回码:exit N
退出状态0,成功,无错误
退出状态>0,某处有错误

执行脚本:1. ./xx.sh 2 . xx.sh 3.sh xx.sh 三种方式。

定义数组:arr=(zhangsan lisi wangwu)

     使用:${arr[0]}   显示所有的数组元素:${arr[*]}   显示数组元素个数:${#arr[*]}

数组的赋值:arr[0]=zhanglong

在shell中显示时间:$(date)
date +%Y-%m-%d:显示当前的年月日日期。
date –date=’2 days ago’ +%Y-%m-%d :显示两天前的年月日日期。
date –date=’-1 days ago’ +%Y-%m-%d:显示一天后的年月日日期;
date –date=’1 days ’ +%Y-%m-%d:显示一天后的年月日日期。

cal:显示日期,
cal 12 2015:显示2015年12月份的日期。

判断:[]或者test,在使用[]进行判断的时候,[]两端要有空格。
1.关于文件的文件类型判断:test -e filename表示存在否?
-e:表示该文件是否存在
-f:表示该文件是否存在且为文件类型?
-d:表示该文件是否存在且为目录类型?

    2.关于文件的权限判断:test -r filename表示可读否?

-r:表示文件是否存在且具有可读权限?
-w:表示文件是否存在且具有可写权限?
-x:表示文件是否存在且具有可执行权限?

3.两个整数之间的判断:
-eq:两数值相等。
-ne:两数值不等。
-gt:n1 > n2 (greater than)
-lt:n1 < n2(less than)
-ge:大于等于(greater than or equal)
-le:小于等于(less than or equal)

    4.判断字符串的数据。

test -z string : 判定字符串是否为0,若为空则返回true。
test -n string:判定字符串是否不为0,若为空,则返回false。
test s1 = s2:判定字符串是否相等,若相等,则返回true。
test s1 != s2:判断字符串是否不想等,若相等,则返回false。

if语句:
语法:if[条件判断式]; then
执行语句;
fi

============================================
if[条件判断式]; then
执行语句;
else
执行语句
fi

===========================================
if[条件判断式]; then
执行语句;
elif[条件判断式2]
执行语句;
else
执行语句
fi

循环:
for var in 1 2 3 4 5
do
echo ${var}
done

num=10
for((i-0;i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一夜了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值