1.创建pv

pvcreate -M2 –metadatasize 100M /dev/sda

pvcreate -M2 –metadatasize 100M /dev/sdb1

pvcreate -M2 –metadatasize 100M /dev/sdb2

pvcreate -M2 –metadatasize 100M /dev/sdc

物理卷可以是整个硬盘(lun),也可以是硬盘上的一个分区

2.创建vg

vgcreate vg_db /dev/sda /dev/sdb1 /dev/sdb2 /dev/sdc

-s128m

3.创建lv

lvcreate -L2048m -i4 -I64k vg_db -n lv_2g_001

lvcreate -L2048m -i4 -I64k vg_db -n lv_2g_002

4.绑定

raw /dev/raw/raw1 /dev/mapper/vg_db-lv_2g_001

raw /dev/raw/raw2 /dev/mapper/vg_db-lv_2g_002

使用raw命令绑定的裸设备在重启后会失效。所以需要修改/etc/sysconfig/rawdevices配置文件,在文件中加入如下内容(每个裸设备一行):

/dev/raw/raw1 /dev/mapper/vg_db-lv_2g_001

/dev/raw/raw2 /dev/mapper/vg_db-lv_2g_002

执行 /etc/init.d/rawdevices restart 使配置文件中的裸设备生效

执行 /sbin/chkconfig rawdevices on 保证机器启动的时候裸设备能够加载

5.授权

chown -R oracle.dba /dev/mapper

修改配置文件/etc/udev/permissions.d/50-udev.permissions

注释掉raw/*:root:disk:0660

添加新行raw/*:oracle:dba:0660

6.链接(可选)

ln -s /dev/raw/raw1 /oradata/ningoo/system01.dbf

ln -s /dev/raw/raw2 /oradata/ningoo/undo01.dbf

******************************************************************************************

1、裸设备定义:

一块没有分区的硬盘,称为原始设备(RAW DEVICE)

或者是一个分区,但是没有用EXT3,OCFS等文件系统格式化,称为原始分区(RAW PARTITION)

以上两者都是裸设备

2、裸设备的绑定

有文件系统的分区是采用mount的方式挂载到某一个挂载点的(目录)

而裸设备不能mount,只能绑定到/dev/raw/下的某一个设备名

比如/dev/raw/raw1

3、裸设备的绑定方法

有两种方法,这里介绍一种,另一种可以google搜索到

修改/etc/sysconfig/rawdevices,添加以下内容,

这里sdd1和sdd2是原始分区名或者原始设备(硬盘)名,

raw1和raw2是/dev目录下的原始设备名,编号从raw1到raw255,也就是最多可以绑定255个裸设备

/dev/raw/raw1 /dev/sdd1

/dev/raw/raw2 /dev/sdd2

然后修改裸设备的属主和访问权限

chown oracle:dba /dev/raw/raw1

chown oracle:dba /dev/raw/raw2

chmod 660 /dev/raw/raw1

chmod 660 /dev/raw/raw2

由于/dev下的文件都是动态建立的,所以在OS重启后,属主仍会变成root:disk,要解决这个问题,可以把上面的命令写入到/etc/rc.local文件中:

最后使得裸设备生效,并且在机器启动的时候就自动加载

执行 /etc/init.d/rawdevices restart 使裸设备生效

执行 /sbin/chkconfig rawdevices on 保证机器启动的时候裸设备能够加载,这一步很重要

4、裸设备的读写

不能用cp等命令操作,写入内容用dd命令,可以参阅相关资料

5、清空裸设备

相当于格式化啦bs是快的大小,block size

count是快的数量,这两者相乘大于裸设备的容量即可

dd if=/dev/zero of=/dev/raw/raw1 bs=8192 count=12800

dd if=/dev/zero of=/dev/raw/raw2 bs=8192 count=12800

-------

另外

rhel4使用udev来管理设备

手动修改/dev/raw/raw1 不能永久生效

要想使得权限持久生效

需要修改文件/etc/udev/permissions.d/50-udev.permissions 的第113行

raw/*:root:disk:0660

改成

raw/*:oracle:dba:0660

重启机器

如果/dev/下没有 /raw/ 目录,可以自己手工建立

**********************************************************************************************

什么是裸设备及其用途

所谓裸设备(raw

device)就是一种没有经过格式化的分区,也叫原始分区,是一种不需要通过文件系统来访问的特殊字符设备。在Linux下,通过块设备“绑定”到特殊字符设备得到裸设备。因为读写裸设备不需要像访问块设备那样经过内核的块缓冲,所有的I/O读写都是直接在进程的内存空间到物理的寻址空间进行。

此外,由于避免了文件系统处理的开销,所以使用裸设备对于读写频繁的应用(如Oracle、DB2等数据库系统)来说,可以很好地提升应用的性能。然而,随着计算能力的提高,当应用存取数据的I/O瓶颈出现在存储设备的控制器或驱动器上时,通过裸设备的数据访问性能反而不比文件系统的高,同时文件系统的数据组织能力也更强。

裸设备的创建

创建裸设备方式相对创建软RAID、LVM来说就比较简单了,只需用“raw”命令把裸设备与真实的物理磁盘或分区做一个映射即可。例如,在“/dev/raw/raw1”与“/dev/sdb”之间做一个映射,如下:

# raw /dev/raw/raw1 /dev/sdb

/dev/raw/raw1: bound to major 8, minor 16

但是以上这种方式创建的裸设备,在系统重启后将不再生效,若要永久生效需要将裸设备的映射关系写到“/etc/sysconfig/rawdevices”文件中,如下:

# vi /etc/sysconfig/rawdevices

/dev/raw/raw1 /dev/sdb

/dev/raw/raw2 /dev/sdc

/dev/raw/raw3 /dev/sdd

同时还需要启动“rawdevices”这个服务,这时所绑定的裸设备才生效,如下:

# /etc/init.d/rawdevices restart

Assigning devices:

/dev/raw/raw1 –> /dev/sdb

/dev/raw/raw1: bound to major 8, minor 16

/dev/raw/raw2 –> /dev/sdc

/dev/raw/raw2: bound to major 8, minor 32

/dev/raw/raw3 –> /dev/sdd

/dev/raw/raw3: bound to major 8, minor 48

done

使用“chkconfig”可以设置该服务在开机时自动启动,即系统启动时自动映射对应关系,对于已创建好的裸设备,可以通过如下命令来查看裸设备的映射信息:

# raw -q /dev/raw/raw1

/dev/raw/raw1: bound to major 8, minor 16

“-q”指定存在的裸设备名称,而“major 8”和“minor

16”分别时真实设备的主设备号与从设备号,如果需要查看所有的裸设备信息,那么可使用“raw -qa”,如下:

# raw -qa

/dev/raw/raw1: bound to major 8, minor 16

/dev/raw/raw2: bound to major 8, minor 32

/dev/raw/raw3: bound to major 8, minor 48

*****************************************************************************************************

1、什么是Linux裸设备?字符设备?块设备?

裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。

字符设备:对字符设备的读写不需要通过OS的buffer。它不可被文件系统mount。

块设备:对块设备的读写需要通过OS的buffer,它可以被mount到文件系统中。

2、一个系统可以有多少个裸设备?

这个与linux的版本相关,在旧版本中,最多只可以有256个裸设备,Linux 4下做多可以绑定8192个裸设备。

但是在linux下,最多只能有255个分区,所以,如果用裸设备绑定分区,最多只能绑定255个裸设备。

如果是用lvm,则没有这个限制。

3、Linux下单个磁盘最多可以有多少个分区?

15个。3个主分区 + 1个扩展分区 + 11个逻辑分区。

建议的分区方法是:先分3个主分区,第四个分区为扩展分区,然后在扩展分区中再分成11个逻辑分区。

注意,裸设备不要绑定在扩展分区上。

4、linux下是否需要绑定裸设备?unix呢?

linux下如果需要使用裸设备,则需要手工进行绑定。

unix下则不用。

因为Unix中每一个块设备都会有一个对应的字符设备用于非缓存(unbuffered)I/O,这就是他对应的裸设备了。

而Linux中rawio的则实现了一套非绑定(unbound)的裸设备/dev/rawN或者/dev/raw/rawN和一个控制设备/dev/rawct用来把他们绑定到块设备上。所以当需要使用一个裸设备的时候,就需要把他和一个真实存在的块设备对应起来,这一个步骤实际上就是完成了Unix里的自动对应一个非缓存字符设备。

5、linux如何绑定裸设备?

两种方式:

1)命令绑定

raw /dev/raw/raw[n] /dev/xxx

其中n的范围是0-8191。raw目录不存在可以创建。

执行这个命令,就会在/dev/raw下生成一个对应的raw[n]文件

用命令方式绑定裸设备在系统重启后会失效。

2)修改文件

修改/etc/sysconfig/rawdevices文件如下,以开机时自动加载裸设备,如:

/dev/raw/raw1 /dev/sdb1

这种方式是通过启动服务的方式来绑定裸设备。

也可以把这个命令写在/etc/rc.local上,使每次启动都执行这些命令。

6、如何把裸设备作为oracle数据文件?有什么需要注意的?

1)绑定裸设备

参考上文

2)改变裸设备属主

两种方法:

. 把命令卸载/etc/rc.local上

chown oracle:oinstall /dev/raw/raw1

. 修改/etc/udev/permissions.d/50-udev.permissions文件

将/etc/udev/permissions.d/50-udev.permissions的113行

raw/*:root:disk:0660

修改为

raw/*:oracle:oinstall:0660

这个的意思是修改裸设备的默认属主为oracle:oinstall,默认的mode是0660。

如果是用lvm,也需要把逻辑卷绑定到裸设备上,过程和绑定到普通分区类似。

7、使用裸设备作为oracle数据文件有什么需要注意的?

使用裸设备作为oracle的数据文件必须注意以下几点:

1)一个裸设备只能放置一个数据文件

2)数据文件的大小不能超过裸设备的大小

如果是日志文件,则裸设备最大可用大小=裸设备对应分区大小 - 1 * 512 (保留一个redo lock)

如果是数据文件,则裸设备最大可用大小=裸设备对应分区大小 - 2 * db_block_size(保留两个block)

为了简单起见,对所有的文件设置称比裸设备小1M即可。

3)数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把maxsize设置设置为比裸设备小

8、是否可以直接用逻辑卷作为oracle数据文件?

linux下oracle不能直接把逻辑卷作为裸设备,也要进行绑定。unix下就不需要。

9、如何知道当前绑定了什么裸设备?

raw -qa命令列出当前绑定的所有裸设备。

10、如何知道某个裸设备的大小

比较笨的办法是,找出看裸设备对应的是那个实际的块设备,然后用fdisk -l

/dev/[h,s]dXN看那个块设备的大小就好了。

比较简单的办法是用blockdev命令来计算,如:

#blockdev --getsize /dev/raw/raw1

11718750

11718750表示有多少OS BLIOCK。

一般一个OS BLOCK大小是512字节,所以11718750*512/1024/1024/1024 =

5722(m)就是裸设备的大小。

==============================================================================================

oracle使用裸设备

1.建立逻辑卷:

到root用户下执行 #lvcreate -L 100M -n vg30 vg0

2.绑定逻辑卷到裸设备: 在root用户下 #raw /dev/raw/raw1

/dev/vg01/oradta_life

3.给oracle用户赋裸设备的读写权限: #chown oracle:oinstall /dev/raw/raw1

4.建立连接以方便应用裸设备: 到oracle用户下建立连接 $ ln -s /dev/raw/raw1

/home/oracle/oradata/raw_test

5.用裸设备建立表空间: SQL> create tablespace raw_test datafile

'/home/oracle/oradata/raw_test' size 50m;

================================================================================================

裸设备概述

裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix/Linux通过文件系统来读取的特殊字符设备。裸设备可以绑定一个分区,也可以绑定一个磁盘。

字符设备:对字符设备的读写不需要通过OS的buffer。它不可被文件系统mount。

块设备:对块设备的读写需要通过OS的buffer,它可以被mount到文件系统中。

这个与linux的版本相关,在旧版本中,最多只可以有256个裸设备,Linux

4下做多可以绑定81Array2个裸设备。但是在linux下,最多只能有255个分区,所以,如果用裸设备绑定分区,最多只能绑定255个裸设备。如果是用lvm,则没有这个限制。

Linux下单个磁盘最多可以有15个分区。3个主分区 + 1个扩展分区 +

11个逻辑分区。

建议的分区方法是:先分3个主分区,第四个分区为扩展分区,然后在扩展分区中再分成11个逻辑分区。注意,裸设备不要绑定在扩展分区上。linux下如果需要使用裸设备,则需要手工进行绑定,unix下则不用。

因为Unix中每一个块设备都会有一个对应的字符设备用于非缓存(unbuffered)I/O,这就是他对应的裸设备了。而Linux中rawio的则

实现了一套非绑定(unbound)的裸设备/dev/rawN或者/dev/raw/rawN和一个控制设备/dev/rawct用来把他们绑定到块设

备上。所以当需要使用一个裸设备的时候,就需要把他和一个真实存在的块设备对应起来,这一个步骤实际上就是完成了Unix里的自动对应一个非缓存字符设备。

major和minor device number

在unix/linux系统中,一切都是文件。所有硬盘、软盘、键盘等设备都用文件来代表,对应

着/dev下面的文件。对于应用程序来说,可以像对待普通文件一样打开,关闭、读写这些设备文件。但是这种文件名,比如/dev/sda、/dev

/raw/raw1都是用户空间名称,OS Kernel根本不知道这个名称指的是什么。在内核空间是通过major、minor

device number 来区分设备的。

major device number可以看作是设备驱动程序,被同一设备驱动程序管理的设备有相同的major device

number.这个数字实际是Kernel中device driver table

的索引,这个表保存着不同设备驱动程序。而minor device

number用来代表被访问的具体设备。也就是说Kernel根据major device number

找到设备驱动程序,然后再从minor device number 获得设备位置等属性。所有这些major device number

是已经预先分配好的。详细信息可以从http://www.lanana.org/docs/device-list/devices-2.6+.txt查看。比如裸设备是162,scsi块设备是8/etc/udev/rules.d/60-raw.rules

Redhat平台对raw设备的配置在redhat 5之后有了变化。在redhat

5之前,直接配置/etc/sysconfig/rawdevices件,通过/etc/init.d/rawdevices来管理raw设备的启动和关

闭。在Redhat 5之后,原来的raw设备接口已经取消了,redhat 5中通过udev规则进行配置。

要配置,需要编辑/etc/udev/rules.d/60-raw.rules这个文件。

cat /etc/udev/rules.d/60-raw.rules

# Enter raw device bindings here.

#

# An example would be:

# ACTION=="add", KERNEL=="sda", RUN+="/bin/raw /dev/raw/raw1

%N"

# to bind /dev/raw/raw1 to /dev/sda, or

# ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw

/dev/raw/raw2 %M %m"

# to bind /dev/raw/raw2 to the device with major 8, minor

1.

其中ACTION=="add", KERNEL="",

RUN+="raw /dev/raw/rawX %N"

配置设备名称,用你需要绑定的设备名称替换 (如:/dev/sda1),X为裸设备号

主/次号码:ACTION=="add",

ENV{MAJOR}="A", ENV{MINOR}="B", RUN+="raw /dev/raw/rawX %M

%m""A" 和 "B"

是设备的主/次号码,X是系统使用的raw设备号码。

个人对redhat管理raw的过程理解为:在redhat

5中,是通过udev来管理raw设备的,而udev是通过MAJOR和MINOR来识别raw设备。故需要将设备号和裸设备号进行绑定,而主设备号和次设备号可以自行指定或者由系统自动分配。根据red

hat的官方文档中关于raw.rule的示例中说KERNEL==..或ENV{MAJOR}...只需要任意配置一个就可以,但有些网友经过试验,验证必须二者同时配置才可以。

配置/etc/udev/rules.d/60-raw.rules文件

查看磁盘分区情况

# fdisk -l /dev/sdb

Disk /dev/sdb: 4880 MB, 4880072704 bytes

255 heads, 63 sectors/track, 593 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/sdb1 1 25 200781 83 Linux

/dev/sdb2 26 50 200812+ 83 Linux

配置/etc/udev/rules.d/60-raw.rules文件# grep -v ^#

/etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1

%N"

ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2

%N"

ACTION=="add", ENV{MAJOR}=="3", ENV{MINOR}=="2", RUN+="/bin/raw

/dev/raw/raw1 %M %m"

ACTION=="add", ENV{MAJOR}=="7", ENV{MINOR}=="2", RUN+="/bin/raw

/dev/raw/raw2 %M %m"

启动raw设备

# start_udev

Starting udev: [ OK ]

查看配置情况# raw

-qa

/dev/raw/raw1: bound to major 8, minor 17

/dev/raw/raw2: bound to major 8, minor 18

这里笔者不清楚为什么主设备号和复设备号并不和我在/etc/udev/rules.d/60-raw.rules指定的一样,望了解的读者告知,系统内核信息如下# uname

-a

Linux rac1 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686

i686 i386 GNU/Linux

# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 5.4

(Tikanga)

可以通过如下方式指定主设备号和复设备号# raw

/dev/raw/raw1 1 1

/dev/raw/raw1: bound to major 1, minor 1

raw

/dev/raw/raw[n] /dev/xxx

其中n的范围是0-8191。raw目录不存在的话会被自动创建。执行这个命令,就会在/dev/raw下生成一个对应的raw[n]文件用命令方式绑定裸设备在系统重启后会失效。

删除裸设备# raw /dev/raw/raw2 0 0

/dev/raw/raw2: bound to major 0, minor

0

# raw -qa

/dev/raw/raw1: bound to major 1, minor 1

以上设置必须同时修改/etc/udev/rules.d/60-raw.rules才能保证重启后生效,否则重启后系统会重新读取/etc/udev/rules.d/60-raw.rules

如需设置raw设备的用户和权限信息,可在/etc/udev/rules.d/60-raw.rules文件里添加如下信息:

ACTION=="add", KERNEL=="raw1",

OWNER="dave", GROUP="tianlesoftware", MODE="660"

如果有多个raw设备,可以写成:

ACTION=="add",

KERNEL=="raw[1-4]", OWNER="dave", GROUP="tianlesoftware",

MODE="660"#chown oracle:oinstall /dev/raw/raw[1-4]

#chmod 775 /dev/raw/raw[1-4]注意:在内核2.6.9-89.5AXS2之前使用/etc/sysconfig/rawdevices和/etc/udev/permissions.d/50-udev.permissions进行raw设备的配置和权限管理。在内核

2.6.18-128.7AXS3以后则使用了本文介绍的/etc/udev/rules.d/60-raw.rules进行raw设备的管理

确定裸设备的大小比较笨的办法是,找出看裸设备对应的是那个实际的块设备,然后用fdisk -l

/dev/[h,s]dXN看那个块设备的大小就好了。比较简单的办法是用blockdev命令来计算,如:#blockdev

--getsize /dev/raw/raw1

11718750

11718750表示有多少OS BLIOCK。

一般一个OS BLOCK大小是512字节,所以11718750*512/1024/1024= 5722(m)

就是裸设备的大小。

使用裸设备作为oracle的数据文件的注意事项

1、一个裸设备只能放置一个数据文件

2、数据文件的大小不能超过裸设备的大小

如果是日志文件,则裸设备最大可用大小=裸设备对应分区大小 - 1 * 512 (保留一个redo lock)

如果是数据文件,则裸设备最大可用大小=裸设备对应分区大小 - 2 * db_block_size(保留两个block)

为了简单起见,对所有的文件设置称比裸设备小1M即可。

3、数据文件最好不要设置称自动扩展,如果设置称自动扩展,一定要把maxsize设置设置为比裸设备小

4、linux下oracle不能直接把逻辑卷作为裸设备,也要进行绑定。unix下就不需要。

oracle 裸设备使用方法,Linux上如何使用裸设备相关推荐

  1. linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

    目录 linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上 一.tun/tap设备简介 二.在linux上使用tun/tap设备模拟一个虚拟网卡 三. 创建网桥连接到 ...

  2. oracle EBS查进程,UNIX/LINUX 上针对Oracle EBS 11i的运行的所有进程状态的查询方法:

    ..........[@more@]UNIX/LINUX 上针对Oracle EBS 11i的运行的所有进程状态的查询方法: 查看Oracle db进程 ps –ef|grep ora_ 查看Net8 ...

  3. linux 裸设备使用,Linux上如何使用裸设备

    本文不涉及基础概念,只是简单列一下Redhat上创建lvm裸设备的步骤,以供查阅.各个命令的参数可以通过man获得. 1.创建pv pvcreate -M2 --metadatasize 100M / ...

  4. linux下使用 sb设备的方法,Linux虚拟文件系统概述(2)get_sb

    二.注册和加载文件系统 注册和注销一个文件系统时,使用下面的API: #include extern int register_filesystem(struct file_system_type * ...

  5. Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...

  6. linux 设备树 otg,linux下充电IC OTG设备供电控制

    linux下充电IC OTG设备供电控制 备注:下面提到的充电IC 用charger表示 1.     OTG VBUS 5V供电 接入OTG设备,比如U盘,具体是怎么通过charger驱动来给U盘供 ...

  7. oracle 安装oui 15038,SuSE Linux上的Oracle11g-x64-ent安装有许多检查错误

    我搜了很多资料,但没找到答案.请给点小费,谢谢!! Oracle11g-x64-ent 11.1.0.6.0版, SUSE Linux Enterprise Server 10 SP2(x86 U 6 ...

  8. oracle 安装oui 15038,SUSE Linux上的Oracle11g-x64-ent安装有很多检查错误

    我搜索了很多材料,但是得到了答案.请给出一些提示,谢谢! Oracle11g-x64-ent 11.1.0.6.0, SUSE Linux Enterprise Server 10 SP2(x86_6 ...

  9. 裸板烧写linux内核,嵌入式 hi3518c裸板uboot烧写、kernel烧写、fs烧写小结

    1.在uboot中我可以添加自己的命令,添加的方法是找到一个uboot的命令,然后模仿着去增加属于自己的命令代码以及实现函数就可以 2.记住在使用printf进行调试的时候,在遇到指针或者字符串的时候 ...

  10. linux安装数据库乱码,Linux上Oracle安装前汉字乱码和安装后创建数据库乱码的解决方法...

    相信每一位在Linux上安装过Oracle的朋友都受过汉字"口口"形乱码的困扰,在论坛上搜索了一下,没有找到完整的解决方案,大都是建议将Linux改成英文环境,有部分回复提到过更改 ...

最新文章

  1. RabbitMQ 七战 Kafka,差异立现!
  2. sysenter Hook
  3. 公众号滑动图代码_脱离模板!教你自己动手制作公众号封面图
  4. PMCAFF问答龙虎榜,大神云集,等你挑战
  5. boost::multiprecision模块mpfr相关的测试程序
  6. 【网络知识点】防火墙主备冗余技术
  7. 《大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享》_DCCI
  8. 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)
  9. Linux定时任务:crontab安装与检查
  10. ACM学习历程—HihoCoder1309任务分配(排序 贪心)
  11. ThinkPHP的RBAC(基于角色权限控制)详解
  12. jenkins-启动和关闭服务
  13. 调试ST电机库5.20遇到的问题
  14. 计算机操作系统(第四版)课后习题答案西电版
  15. Python学习002—python的安装以及pip
  16. 几款笔记软件的优缺点
  17. ubuntu搭建PHP网站完整实例教程
  18. 王者荣耀最低战力查询-王者战区修改
  19. 黑马程序员都到兄弟连兄弟会报名去了
  20. 微信小程序-实现上下、左右布局

热门文章

  1. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte xx in position xx: invalid continuation byte
  2. 结对项目—地铁出行路线规划
  3. docker容器获取宿主机IP
  4. STL之字符串类模板 string(一)、C++ string类库简介
  5. intel 服务器芯片型号怎么看,Intel CPU编号详解
  6. 博客美化——页面白天黑夜切换
  7. 斗魔之残龙纹 第一章
  8. cmd下迅速打开控制面板、计算机管理、设备管理器
  9. 数据结构课程设计——电话号码查询系统(C语言)
  10. Android Studio更新后导入项目报错问题解决(Minimum supported Gradle version is ×.×.×. Current version is ×.×.× )