1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)
LVM管理和ssm存储管理器使用&磁盘配额 (二)
内容如下:
ü LVM快照
ü ssm存储管理器的使用
ü 磁盘配额
第1章 LVM快照
lvm快照:为了保持系统的一致性,我们先做一个快照冻结当前系统状态,这样快照里面的内容可暂时保持不变,系统本身继续运行,通过备份快照来实现不中断服务的备份。
当创建一个snapshot的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制COW(copy-on-write)。
在写操作写入块之前,原始数据被移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是没有修改过的块,那么会将读操作直接重定向到原始卷上,如果是已经修改过的块,那么就读取拷贝到snapshot中的块
1.1 首先准备一个LV并挂载
1.2准备测试文件
1.3 针对lv1创建一个300M快照
确保VG有空间
命令:lvcreate -s -n 快照名 -L 快照大小 创建快照的设备
1、 LVM快照其实也是一个逻辑卷,快照只能对逻辑卷LV进行备份,并且只能对同一个卷组的逻辑卷进行备份,
2、 在挂载快照时,尽量使用ro的方式进行,这样可以保证不破坏快照卷中的数据
3、 快照创建完成后是可以直接挂载的,不需要进行文件系统格式化
4、 lvm快照是不会增长和变化的,所以它没有永久存在的必要
[root@xuegod72 data]# lvcreate -s -n datalv_sp -L 300M /dev/datavg/data_lv
Logical volume "datalv_sp" created.
[root@xuegod72 data]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_lv datavg owi-aos--- 600.00m
datalv_sp datavg swi-a-s--- 300.00m data_lv 0.00
[root@xuegod72 data]# lvdisplay /dev/datavg/datalv_sp
--- Logical volume ---
LV Path /dev/datavg/datalv_sp
LV Name datalv_sp
VG Name datavg
LV UUID uRcoSc-FMYR-BRso-A5pf-0FCf-Tdig-QbU5ds
LV Write Access read/write
LV Creation host, time xuegod72, 2016-12-20 20:46:13 +0800
LV snapshot status active destination for data_lv
LV Status available
# open 0
LV Size 600.00 MiB
Current LE 150
COW-table size 300.00 MiB
COW-table LE 75
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
1.4 使用快照
对源LV做了快照后,我们再对这个源LV的文件系统进行一些数据读写操作
[root@xuegod72 ~]# cp /etc/hosts /datalv/
[root@xuegod72 datalv]# dd if=/dev/zero of=a.txt bs=1M count=20
恢复快照:
1、直接还原
[root@xuegod72 ~]umount /datalv
==============================================
umount不成功,判断的两种方法:
[root@panda ~]# lsof /lv1
[root@panda ~]# fuser -ks /lv1
===============================================
在用lvconvert做快照还原时,一定要把源LV和快照LV都卸载再进行
[root@xuegod72 ~]# lvconvert --merge /dev/datavg/data_lv_sp 后面跟的是快照LV
Merging of volume data_lv_sp started.
data_lv: Merged: 100.0%
[root@xuegod72 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_lv datavg -wi-a----- 600.00m
[root@xuegod72 ~]# mount /dev/datavg/data_lv /data
[root@xuegod72 ~]# ls /data
hosts passwd
2、挂载挂照后,进行需求还原
[root@xuegod72 ~]# mount –o nouuid,norecovery,ro /dev/datavg/data_lv_snap /data_snap
1.5 快照损坏
超出大小
[root@xuegod72 data]# dd if=/dev/zero of=aa.txt bs=10M count=1
记录了1+0 的读入
记录了1+0 的写出
10485760字节(10 MB)已复制,0.0391211 秒,268 MB/秒
[root@xuegod72 data]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data_lv datavg owi-aos--- 600.00m
datasp datavg swi-I-s--- 100.00m data_lv 100.00
[root@xuegod72 data]# lvdisplay /dev/datavg/datasp
--- Logical volume ---
LV Path /dev/datavg/datasp
LV Name datasp
VG Name datavg
LV UUID XKV0RX-AbJH-0AF1-wLtt-lwJl-7RdI-uAsTfM
LV Write Access read/write
LV Creation host, time xuegod72, 2016-12-20 21:11:30 +0800
LV snapshot status INACTIVE destination for data_lv
LV Status available
# open 0
LV Size 600.00 MiB
Current LE 150
COW-table size 100.00 MiB
COW-table LE 25
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
[root@xuegod72 ~]# lvconvert --merge /dev/datavg/datasp
Unable to merge invalidated snapshot LV "datasp".
Unable to merge LV "datasp" into its origin.
[root@xuegod72 ~]# mount /dev/datavg/datasp /data
mount: /dev/mapper/datavg-datasp:不能读超级块
LV快照的大小最好和源LV保持一致
第2章借助ssm管理LVM卷
2.3 操作
安装SSM
[root@xuegod72 Packages]# yum -y install system-storage-manager
检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、存储池、LVM卷和存储快照的信息。
命令:
ssm list 列出信息
2.3.1 查看磁盘信息
设备信息
存储池信息
卷的信息
快照信息
2.3.2 对VG扩容
[root@xuegod72 ~]# ssm add -p datavg /dev/sdb5
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 22600: /usr/bin/python
Volume group "datavg" successfully extended
2.3.3 对LV进行扩容
使用SSM扩容LV(针对创建了快照的lv无效)
通过resize进行扩容
[root@xuegod72 ~]# lvcreate -n applv -L 500M /dev/datavg
Logical volume "applv" created.
[root@xuegod72 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
applv datavg -wi-a----- 500.00m
data_lv datavg owi-a-s--- 600.00m
data_lv_sp datavg swi-a-s--- 100.00m data_lv 0.00
[root@xuegod72 ~]# ssm resize -s +500M /dev/datavg/applv
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 22907: /usr/bin/python
Size of logical volume datavg/applv changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
Logical volume applv successfully resized.
[root@xuegod72 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
applv datavg -wi-a----- 1000.00m
data_lv datavg owi-a-s--- 600.00m
data_lv_sp datavg swi-a-s--- 100.00m data_lv 0.00
比较文件系统容量的变化
[root@xuegod72 ~]# mkfs.xfs /dev/datavg/applv
meta-data=/dev/datavg/applv isize=256 agcount=4, agsize=64000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=256000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@xuegod72 ~]# mount /dev/datavg/applv /data
[root@xuegod72 ~]# df –Th /data
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/datavg-applv xfs 997M 33M 965M 4% /data
[root@xuegod72 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
applv datavg -wi-ao---- 1000.00m
data_lv datavg owi-a-s--- 600.00m
data_lv_sp datavg swi-a-s--- 100.00m data_lv 0.00
[root@xuegod72 ~]# ssm resize -s +200M /dev/datavg/applv
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 23017: /usr/bin/python
Size of logical volume datavg/applv changed from 1000.00 MiB (250 extents) to 1.17 GiB (300 extents).
Logical volume applv successfully resized.
meta-data=/dev/mapper/datavg-applv isize=256 agcount=4, agsize=64000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=256000, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 256000 to 307200
[root@xuegod72 ~]# df –Th /data
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/datavg-applv xfs 1.2G 33M 1.2G 3% /data
总结:使用ssm存储管理器扩容,不需要再针对文件系统进行扩容
2.3.4 创建一个卷
要求:创建一个名为mail 的存储池,并在其上创建一个名为mail-lv,大小为1G的lvm卷,格式化为xfs文件系统,并将其挂载/mail-lv目录下
硬盘准备:
1) 创建目录
[root@xuegod72 ~]# mkdir /mail-lv
用的命令如下:
ssm create –s lv大小 –n lv名称 --fstype lv文件系统类型 -p 卷组名 设备 挂载点
自动创建vg , lv ,格式化文件系统, 自动挂载
[root@xuegod72 ~]# ssm create -s 1G -n mail-lv --fstype xfs -p mail /dev/sdb[6-7] /mail-lv
Not enough space (1024000.0 KB) in the pool 'mail' to create volume! Adjust (N/y/q) ? Y
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 23153: /usr/bin/python
Volume group "mail" successfully created
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 23153: /usr/bin/python
Logical volume "mail-lv" created.
meta-data=/dev/mail/mail-lv isize=256 agcount=4, agsize=63488 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=253952, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
2)查看挂载状况
[root@xuegod72 ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 197G 2.9G 194G 2% /
devtmpfs devtmpfs 467M 0 467M 0% /dev
tmpfs tmpfs 481M 84K 481M 1% /dev/shm
tmpfs tmpfs 481M 7.1M 474M 2% /run
tmpfs tmpfs 481M 0 481M 0% /sys/fs/cgroup
/dev/sr0 iso9660 3.8G 3.8G 0 100% /media
/dev/sda1 xfs 297M 128M 169M 44% /boot
tmpfs tmpfs 97M 16K 97M 1% /run/user/42
tmpfs tmpfs 97M 0 97M 0% /run/user/0
/dev/mapper/datavg-applv xfs 1.2G 33M 1.2G 3% /data
/dev/mapper/mail-mail--lv xfs 989M 33M 957M 4% /mail-lv
[root@xuegod72 ~]# ssm list
--------------------------------------------------------------
Device Free Used Total Pool Mount point
--------------------------------------------------------------
/dev/fd0 4.00 KB
/dev/sda 200.00 GB PARTITIONED
/dev/sda1 300.00 MB /boot
/dev/sda2 2.93 GB SWAP
/dev/sda3 196.78 GB /
/dev/sdb 20.00 GB
/dev/sdb1 0.00 KB 496.00 MB 500.00 MB datavg
/dev/sdb2 0.00 KB 496.00 MB 500.00 MB datavg
/dev/sdb3 0.00 KB 496.00 MB 500.00 MB datavg
/dev/sdb4 1.00 KB
/dev/sdb5 84.00 MB 412.00 MB 500.00 MB datavg
/dev/sdb6 0.00 KB 496.00 MB 500.00 MB mail
/dev/sdb7 0.00 KB 496.00 MB 500.00 MB mail
--------------------------------------------------------------
-----------------------------------------------------
Pool Type Devices Free Used Total
-----------------------------------------------------
datavg lvm 4 84.00 MB 1.86 GB 1.94 GB
mail lvm 2 0.00 KB 992.00 MB 992.00 MB
-----------------------------------------------------
----------------------------------------------------------------------------------------
Volume Pool Volume size FS FS size Free Type Mount point
----------------------------------------------------------------------------------------
/dev/datavg/data_lv datavg 600.00 MB xfs 596.67 MB 586.54 MB linear
/dev/datavg/applv datavg 1.17 GB xfs 996.67 MB 996.54 MB linear /data
/dev/mail/mail-lv mail 992.00 MB xfs 988.67 MB 988.54 MB linear /mail-lv
/dev/sda1 300.00 MB xfs 296.67 MB 183.90 MB part /boot
/dev/sda3 196.78 GB xfs 196.68 GB 193.82 GB part /
----------------------------------------------------------------------------------------
---------------------------------------------------------------------
Snapshot Origin Pool Volume size Size Type
---------------------------------------------------------------------
/dev/datavg/data_lv_sp data_lv datavg 100.00 MB 0.00 KB linear
2.3.5 创建快照
ssm snapshot快照 -s 大小 -n 名称 创建快照的设备
2.3.6 删除快照
[root@xuegod72 ~]# ssm remove /dev/mail/mail-lv-sp
Device '/dev/mail/mail-lv-sp' is mounted on '/mail-sp' Unmount (N/y/q) ? Y
File descriptor 7 (/dev/urandom) leaked on lvm invocation. Parent PID 23860: /usr/bin/python
Do you really want to remove active logical volume mail-lv-sp? [y/n]: y
Logical volume "mail-lv-sp" successfully removed
第3章 磁盘配额
q 磁盘配额:
利用磁盘配额这种技术,系统管理员可以限制某个用户在某个硬盘分区可使用的大小,和可以创建文件数量的多少;目前Linux系统和Windows系统都支持这种技术
q 磁盘配额使用条件:
磁盘配额实施的对象是硬盘分区
磁盘配额只对一般身份用户有效,对root权限用户无效;
q 磁盘配额的限制类型
磁盘的容量:限制用户使用Blocks大小,限制磁盘空间的大小 默认单位是KB
文件的数量:限制用户能够拥有而文件个数,根据i节点的数量实现对文件数量的限制
q 磁盘配额的相关名词解释:
最低限制(软限制,soft):最低限制容量(可以被超过,但会出现警告,超过的部分会保存到宽限时间到期)
最高限制(硬限制,hard): 绝对禁止用户超过硬限制,当超过时系统会给出警告信息,并且禁止继续写入数据
宽限时间:当用户使用的空间超过了最低限制但还没到达最高限制时,在这个宽限时间到期前必须将超额的数据降低到最低限制以下(默认为7天),当宽限时间到期,系统将自动清除超出的数据
注意:硬限制的配额值应大于相应的软限制值,否则软限制将失效.
3.1 RHEL7磁盘配额
n 确认配额命令已经安装
[root@xuegod72 ~]# dmesg|grep quota
[ 1.943815] VFS: Disk quotas dquot_6.5.2
[root@xuegod72 ~]# rpm -q quota
quota-4.01-11.el7.x86_64
[root@xuegod72 ~]# mount|grep quota
/dev/sda3 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/datavg-applv on /data type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
l 首先创建新的测试分区/data
n 查看配额是否启动
n 启用配额
[root@xuegod72 ~]# umount /data
[root@xuegod72 ~]# mount -o uquota,gquota /dev/datavg/data_lv /data
[root@xuegod72 ~]# mount|grep datavg|grep quota
/dev/mapper/datavg-data_lv on /data type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
n 设置开机自动启动配额
n 设置目录权限,并创建配额用户
3.2 实验
3.2.1 查看配额状态
命令:xfs_quota
xfs_quota命令用于管理XFS文件系统的quota硬盘配额,格式为:“quota [参数] 配额 文件系统名称”
参数:
-x 使用配额模式,只有此模式才能设置配额
-c 启用命令模式
report 显示配额信息
limit 设置配额
bsoft 软限制 (硬盘)
bhard 硬配额
-u 用户
-g 组
3.2.2 查看用户和组的配额信息
3.2.3 设置配额
限制磁盘软限制为10m、磁盘硬限制为50m、文件软限制为3个且文件硬限制为6个
[root@xuegod72 ~]# xfs_quota -x -c 'limit bsoft=10M bhard=50M isoft=3 ihard=6 -u zhangsna' /data
[root@xuegod72 ~]# xfs_quota -x -c report /data
User quota on /data (/dev/mapper/datavg-data_lv)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 10248 0 0 00 [--------]
zhangsna 0 10240 51200 00 [--------]
Group quota on /data (/dev/mapper/datavg-data_lv)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 10248 0 0 00 [--------]
3.2.4 验证
3.2.5 修改磁盘配额
[root@xuegod72 ~]# edquota -u zhangsna
Disk quotas for user zhangsna (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/datavg-data_lv 20480 10240 51200 6 3 6
[zhangsna@xuegod72 data]$ ls
aa.txt bb.txt cc dd e f
[zhangsna@xuegod72 data]$ touch ee
[zhangsna@xuegod72 data]$ touch ff
[zhangsna@xuegod72 data]$ ls|wc -l
8
[zhangsna@xuegod72 data]$ touch gg
touch: 无法创建"gg": 超出磁盘限额
查看所有用户的配额信息:
[root@panda ~]# repquota -a
*** Report for user quotas on device /dev/mapper/vg2-applv
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 0 0 0 3 0 0
user1 +- 15360 10240 51200 4days 1 3 7
user2 -+ 0 0 0 6 3 6 6days
查看用户自己的配额限制信息:
[user2@panda lv1]$ quota
Disk quotas for user user2 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/vg2-applv
0 0 0 6* 3 6 6days
用root用户查看单个普通用户的配额信息:
[root@panda ~]# quota user1
Disk quotas for user user1 (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/vg2-applv
15360* 10240 51200 4days 1 3 7
[root@panda ~]# quota user2
Disk quotas for user user2 (uid 1002):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/vg2-applv
0 0 0 6* 3 6 6days
1-18-2 LVM管理和ssm存储管理器使用&磁盘配额 (二)的更多相关文章
- 1-18-1 LVM管理和ssm存储管理器使用&磁盘配额(一)
LVM管理和ssm存储管理器使用&磁盘配额(一) LVM逻辑卷的管理 问题:对于生产环境下的服务器来说,如果存储数据的分区磁盘空间不够了怎么办? 因为如果要把一个分区的内容都拷贝到另一个分区上 ...
- 1-16-2 LVM管理和ssm存储管理器使用&磁盘配额
ssm存储管理器使用&磁盘配额 ssm存储管理器使用 系统存储管理器的使用 系统存储管理器(又称ssm,即system-storage-manager),是RHEL7/CentOS7新增的功能 ...
- 1-16-1 LVM管理和ssm存储管理器使用&磁盘配额
大纲: 1-1- LVM逻辑卷的管理 1-2- SSM管理工具的使用 1-3- 磁盘配额技巧 ====================================== 问题描述: 当我们需要在一个 ...
- 第十五章 LVM管理和ssm存储管理器使用 随堂笔记
第十五章 LVM管理和ssm存储管理器使用 本节所讲内容: 15.1 LVM的工作原理 15.2 创建LVM的基本步骤 15.3 实战-使用SSM工具为公司的邮件服务器创建可动态扩容的存储池 LVM的 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- LVM与磁盘配额
LVM与磁盘配额 目录 一.LVM概述 1.1.LVM 概述 1.2.LVM机制的基本概念 二.LVM 管理命令 2.1.主要命令 2.2.LVM命令详解 三.设置磁盘配额 3.1.磁盘配额的概述 3 ...
- 微软Azure 存储管理器的简单介绍
Windows Azure存储用户经常希望能够在“管理器”中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我们将对此列表进行更新,使其 ...
- Windows Azure 存储管理器 (2014)
Windows Azure存储用户经常希望能够在"管理器"中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我 ...
- 二、存储管理器--SDRAM
2.1 硬件结构 2.1.1 硬件框图 CPU 通过存储管理器来读取 SDRAM 网卡 等外部设备,CPU不管外部设备是怎么样的,只是读存储管理器中的地址 CPU从0x30000000地址读取数据. ...
随机推荐
- Web服务器主动推送技术
HTTP协议遵循经典的客户端-服务器模型,客户端发送一个请求,然后等待服务器端的响应,服务器端只能在接收到客户端的请求之后进行响应,不能主动的发送数据到客户端. 客户端想要在不刷新页面的情况下实时获取 ...
- 一步一步pwn路由器之rop技术实战
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这次程序也是 DVRF 里面的,他的路径是 pwnable/She ...
- Requests的基础学习
官方文档链接:http://cn.python-requests.org/zh_CN/latest/ 安装: pip install requests 错误异常: 1.所有Requests显式抛出的异 ...
- vue 想关工具 及组件
vue-cli vue的脚手架工具 (1) 安装通过 npm install -g vue-cil (2)常用模板 browserify - 拥有高级功能的 Browserify ...
- P3474 [POI2008]KUP-Plot purchase
思路:单调栈 提交:>5次 错因:单调栈写法有问题+前缀和写错 题解: 若有\(>=k\ \&\&\ <=2\times k\)的点,显然直接选他就行了. 否则,我们 ...
- P3306 [SDOI2013]随机数生成器
思路:\(BSGS\) 提交:\(1\)次 题解: 原式可以化为\[x_{i+1}+\frac{b}{a-1}=a(x_{i}+\frac{b}{a-1})\mod p\] 这不是等比数列吗? \[x ...
- 富文本编辑器粘贴word
很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...
- luogu 4909 [Usaco2006 Mar]Ski Lift 缆车支柱 动态规划
可以出模拟赛T1? #include <bits/stdc++.h> #define N 5002 #define inf 1000000 #define setIO(s) freopen ...
- re匹配 [\s\S][\w\W]的使用.
本来想提取一个字符串写了一堆正则都提取不出来. 因为有特殊字符 后来使用 [\s\S]* 或 [\w\W]* 匹配出来. \s 空白字符 [ \t\n\r\f\v] \S 非空白字符 相当于 [^ \ ...
- instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...