Linux 就该这么学 CH06 存储结构与磁盘划分
1、一切从"/"开始
linux系统中一切都是文件,而且一切文件的路径都是从根目录(/)开始的。系统中的根目录和文件名称都是严格区分大小写的,并且文件名中不能包含/符号。
- 绝对路径: 从根目录开始。
- 相对路径:相对当前目录开始路径;相对路径不具备普适性。
2、物理设备的命名规则
udev设备管理器的服务会自动把硬件设备规范起来;udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。
一般的硬盘设备都是以“/dev/sd”开头的,编号从a-p,最多16个不同的硬盘。
硬盘的分区编号的规则如下:
3. 主分区或扩展分区的编号从1开始,到4结束。
4. 逻辑分区从编号5开始。
需要注意的点:
- /dev 目录中的ada设备后面的a不是由插槽决定的,而是由系统内核的识别顺序来决定的。
- 分区的数组编码不一定是强制顺延下来的,可能是手工指定的。
其中5表示这个设备是一个逻辑分区。
/dev/sda5表示:这是系统中第一块被识别到的硬件设备中分区编码为5的逻辑分区的设备文件。
硬盘有许多扇区组成,每个扇区大小为512字节,其中第一个扇区最重要,她保存着主引导记录和分区信息。主引导记录需要446个字节,分区表为64字节,结束符占用2字节,其中分区表中每记录一个分区信息就需要16字节,这样最多只有4个分区信息写到第一个扇区中,这4个分区就是主分区。
为了解决分区不够的问题,可以将第一个扇区中的分区表中的16个字节的空间拿出来指向另外一个分区。即:扩展分区其实并不是一个真正的分区,而更像是一个占有16字节分区表空间的指针–一个指向另外一个分区的指针。这样用户一般会选择3个主分区和1个扩展分区的方法,然后在扩展分区中再创建出几个逻辑分区,从而满足多分区的需求。
3、文件系统与数据资料
用户在硬件存储设备中执行文件的建立、读取、修改、转存和控制操作都是依靠文件系统完成的。文件系统的作用是合理规划硬盘,以保证用户的正常使用需求。
linux系统中常见的文件系统有:
Ext3: Ext3是一种日志文件系统,当系统异常宕机是能够避免文件系统资料丢失,并能自动修复数据的不一致与错误,但当数据量大时会需要很长的时间。
Ext4:Ext3的改进版,是RHEL6的默认文件管理系统,支持存储容量高达1EB。Ext4文件系统能够批量分配block块,从而极大提高了读写效率。
XFS: 是一种高性能的日志文件系统,而且是RHEL7中的默认文件管理系统。优势是:发生以外宕机时可以快速回复可能被破坏的文件,强大的日志功能只用花费极低的计算和存储功能,最大支持18EB。
在使用新的硬盘存储时,需要先分区,再格式化文件系统,最后才能挂载并正常使用。硬盘可以不分区,但是必须格式化才能用。
linux把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格大小为128字节,里面记录如下的信息:
例子:
对于存储文件内容的block块,以4kB的block大小进行存储为例:
- 情况1:文件很小(1KB),但依然会占用一个block,因此会浪费3KB。
- 情况2: 文件很大(5KB),那么会占用两个block(1个4KB+1个1KB)。
查看某个分区的文件系统类型方法:
[root@RHEL Desktop]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2
# 第一种方法,使用file
[root@RHEL Desktop]# file -s /dev/sda1
/dev/sda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
#第二种方法,使用mount:
[root@RHEL Desktop]# mount | grep sda1
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
#第三种方法,使用df(Disk Free):
[root@RHEL Desktop]# df -hT |grep sda1
/dev/sda1 xfs 497M 119M 379M 24% /boot
4、挂载硬件设备
挂载就是将硬盘与某个目录做关联的动作。挂载的目的是:为了能够通过目录使用到相关的硬盘资料的效果。
一个文件夹只能挂载一个硬盘!
1) 、mount
mount命令用于挂载文件系统,格式为:mount 文件系统 挂载目录。参数如下:
- -t:指定文件系统的类型。
- -a:在执行之后自动检查/etc/fstab文件中有无疏漏被挂载的设备文件,有则进行自动挂载操作。
例程: 把设备/dev/sdb2挂载到/backup目录。
[root@linuxprobe ~]# mount /dev/sdb2 /backup
上面的挂载是临时的,重启系统则会丢失。如果要长期自动挂载则需要把挂载信息按照指定的填写格式“设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检”写入到/etc/fstab文件中。
例程: 把设备/dev/sdb2永久的挂载到/backup目录。
2)、umount
umount命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”。
例如:卸载/dev/sdb2设备文件:
[root@linuxprobe ~]# umount /dev/sdb2
5、添加硬盘设备
添加硬盘的思路:先在虚拟机中添加一块新的硬盘存储设备,然后进行分区,格式化,挂载等操作,最后通过检查系统的挂载状态并真实的使用硬盘来验证硬盘设备是否已经成功添加。
注意:添加硬盘必须关机,因为热插拔的原因,容易出现问题。
添加新硬盘步骤省略。
1)fdisk
fdisk命令用于管理磁盘分区,格式为:fdisk [磁盘名称] 。它可以添加、删除、转换分区等功能。
2)partprobe
partprobe 命令用于手动将分区信息同步到内核,格式为:partprobe。 一般推荐连续两次,效果很好。
3) mkfs
mkfs命令用于格式化分区系统。格式为: mkfs.XXX 磁盘分区。
其中mkfs.XXX 可以是:mkfs.ext3 mkfs.fat mkfs.xfs mkfs.ext4 mkfs.vfat 等。
例如将/dev/sdb1格式化为xfs系统。
mkfs.xfs /dev/sdb1
4) df 查看挂载状态
df用于查看挂载之后是否成功的状态,格式为 df -h 。
磁盘分区、格式化、挂载步骤:
1、fdisk /dev/sdb 来尝试管理磁盘sdb.
2、看到提示后输入p来查看硬盘设备内已经有的分区信息。
3、再看到提示后输入n来添加新的分区,输入p或e来选择创建主分区还是扩展分区。
4、输入分区号,在fist sector处直接敲击回车,因为不需要指定起始位置。
5、在last sector处,输入指定该分区的大小,如+2G或+512M。
6、最后可以再次输入p查看分区情况,然后再输入w来保存分区。
7、接着使用mkfs命令来格式化分区。
[root@RHEL Desktop]# fdisk /dev/sdb ## 管理硬盘
Welcome to fdisk (util-linux 2.23.2).
...
Command (m for help): p #查看分区情况
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
....
Command (m for help): n #新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #建立主分区
Partition number (1-4, default 1): 1 #指定分区号
First sector (2048-10485759, default 2048): ##直接回车
Last sector, +sectors or +size{K,M,G} (4194304-10485759, default 10485759): +2G ##输入分区大小
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
...
Device Boot Start End Blocks Id System
/dev/sdb1 4194304 8388607 2097152 83 Linux
Command (m for help): n #新建分区sdb2,主分区,1G
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): +1G
Partition 2 of type Linux and of size 1 GiB is set
Command (m for help): n ##新建sdb4,扩展分区,512M。
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): e
Partition number (3,4, default 3): 4
First sector (2099200-10485759, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-4194303, default 4194303): +512M
Partition 4 of type Extended and of size 512 MiB is set
Command (m for help): p ##查看分区情况
....
Device Boot Start End Blocks Id System
/dev/sdb1 4194304 8388607 2097152 83 Linux
/dev/sdb2 2048 2099199 1048576 83 Linux
/dev/sdb4 2099200 3147775 524288 5 Extended
Command (m for help): w ##保存分区信息
The partition table has been altered!
...
[root@RHEL Desktop]# partprobe #将分区信息手动同步到内核。推荐连续两次
[root@RHEL Desktop]# partprobe
[root@RHEL Desktop]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
[root@RHEL Desktop]# mkfs.xfs /dev/sdb1 ##格式化分区
...
[root@RHEL Desktop]# mkfs.ext4 /dev/sdb2
...
Writing superblocks and filesystem accounting information: done
[root@RHEL Desktop]# mkfs.xfs /dev/sdb4
...
mkfs.xfs: Use the -f option to force overwrite.
[root@RHEL Desktop]# file -s /dev/sdb1 ##查看分区系统格式
/dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
[root@RHEL Desktop]# file -s /dev/sdb2
/dev/sdb2: Linux rev 1.0 ext4 filesystem data, UUID=5b7b0944-9981-4977-bd82-8af5639845e4 (extents) (64bit) (large files) (huge files)
[root@RHEL Desktop]# file -s /dev/sdb4
/dev/sdb4: x86 boot sector, code offset 0x0
##挂载信息
[root@RHEL Desktop]# mount /dev/sdb1 Share
##查看挂载成功与否状态
[root@RHEL Desktop]# df -h
Filesystem Size Used Avail Use% Mounted on
...
##看到下面这个则表示成功
/dev/sdb1 2.0G 33M 2.0G 2% /root/Desktop/Share
注:
- 分区之后必须挂载,下次开机之后才会有效果。
- 使用mount挂载的设备文件会在系统下一次重启的时候失效。如果想让这个设备文件的挂载永久有效,则需要把挂载的信息写入到配置文件/etc/fstab中。
5) du
du命令用于查看文件数据占有量,即一个或多个文件占用了多大的磁盘空间,格式为: du [选项] [文件]。
du -sh /Share/ ##查看Share目录下所有文件的占用空间大小。
6、添加交换分区
SWAP(交换)分区是一种通过在硬盘中预先规划一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。即SWAP是将一部分硬盘空间临时充当内存来使用,目的是降低物理内存的负载能力。
只有当真实的物理内存耗尽才会调用交换分区的资源。
在生产环境中,交换分区的大小一般是真实内存的1.5~2倍。
1)mkswap
mkswap命令用于在一个文件或设备上建立交换分区。格式为:mkswap 文件或目录。
在建立完之后要用sawpon命令开始使用这个交换分区。
2) sawpon
swapon命令用于激活Linux中的交换空间。
3) sawpoff
swapoff命令用于关闭指定的交换空间(包括交换文件和交换分区)。
例程:改变/dev/sdb2的文件格式,然后将其制作成swap。
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 848 3090 10 0 248
-/+ buffers/cache: 599 3339
Swap: 2047 0 2047 ##old swap size
[root@RHEL Desktop]# mkswap /dev/sdb2
mkswap: /dev/sdb2: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=931cec62-22a5-455c-aa8f-72ab61f08dab
[root@RHEL Desktop]# file -s /dev/sdb2
/dev/sdb2: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=931cec62-22a5-455c-aa8f-72ab61f08dab
[root@RHEL Desktop]# swapon /dev/sdb2
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 859 3079 10 0 251
-/+ buffers/cache: 606 3332
Swap: 3071 0 3071 ##new swap size
[root@RHEL Desktop]# swapoff /dev/sdb2 ##off swap
[root@RHEL Desktop]# free -m
total used free shared buffers cached
Mem: 3939 861 3077 10 0 251
-/+ buffers/cache: 608 3330
Swap: 2047 0 2047
如果要让新的交换分区设备在重启之后依然有效,则需要按格式写到fstab中。
[root@RHEL Desktop]# vim /etc/fstab
/dev/sdb2 swap swap defaults 0 0
7、磁盘容量配额
磁盘容量配额服务是用来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。
1)quota 命令
quota 命令用于显示用户或者工作组的磁盘配额信息。输出信息包含磁盘使用或配额限制。格式为:quota [参数] [用户名]。
参数:
- -g:列出群组的磁盘空间限制;
- -q:简明列表,只列出超过限制的部分;
- -u:列出用户的磁盘空间限制;
- -v:显示该用户或群组,在所有挂入系统的存储设备的空间限制;
例程:
查看当前用户(root)的磁盘限额情况。
[root@RHEL Desktop]# quota -guvs
查看felix的磁盘限额情况
[root@RHEL Desktop]# quota -uvs felix
磁盘容量配额服务有软限制和硬限制的功能:
- 软限制:当达到软限制之后会提示用户,但是仍然允许用户在限定的额度内继续使用。
- 硬限制:当达到硬限制时会提示用户,且强制终止用户操作。
要想让硬盘设备支持quota磁盘容量配额服务,修改/etc/fstab文件,在UUID行defaults参数后增加uquota参数. 在RHEL7中使用的是uquota参数。
[root@RHEL Desktop]# vim /etc/fsta
/dev/mapper/rhel_rhel-root / xfs defaults 1 1
UUID=7900b793-7a09-4f89-855a-906039562f51 /boot xfs defaults,uquota 1 2
[root@RHEL Desktop]# reboot
## reboot finished,use mount commond to check ,and will find usrquota.
[root@RHEL Desktop]# mount | grep boot
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
2) xfs_quota
xfs_quota 命令是一个专门针对xfs文件系统来管理quota磁盘容量配额服务而设计的命令,格式为:xfs_quota [参数] 配额 文件系统。
参数:
- -c : 用于以参数的形式设置要执行的命令。
- -x :专家模式,让运维人员能够对quota服务进行更多复杂的配置。
例程: 用xfs_quota 命令来设置用户felix 对/boot目录的quota磁盘容量配额。具体配额为:硬盘使用量的软限制和硬限制分别为3MB和6MB,创建文件的个数为:软限制和硬限制分别为3个和6个。
#先更改root目录权限
[root@RHEL Desktop]# chmod -Rf o+w /boot
#按下面的格式来设置, 使用limit来限制,命令要用单引号(' ').
[root@RHEL Desktop]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 felix' /boot
#查看设置的结果
[root@RHEL Desktop]# xfs_quota -x -c report /boot
User quota on /boot (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 95348 0 0 00 [--------]
felix 0 3072 6144 00 [--------]
#用户尝试创建
[root@RHEL Desktop]# su - felix
Last login: Sun Sep 15 20:56:38 EDT 2019 on pts/0
#大于限制,报错
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=8M count=1
dd: error writing ‘/boot/test.txt’: Disk quota exceeded
1+0 records in
0+0 records out
6291456 bytes (6.3 MB) copied, 0.00433282 s, 1.5 GB/s
#小于限制,正常。
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB) copied, 0.00399135 s, 1.3 GB/s
[felix@RHEL ~]$ exit
logout
3) edquota
edquota命令用于编辑用户的quota配额限制,格式为 edquota [参数] [用户]。
- -u表示对哪个用户设置。
- -g表示对哪个用户组进行设置。
例程:修改hard的限制。
#更改限制,将hard值改为8192
[root@RHEL Desktop]# edquota -u felix
sk quotas for user felix (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 8192 3072 8192 1 3 6
[root@RHEL Desktop]# su - felix
Last login: Thu Sep 19 20:55:14 EDT 2019 on pts/0
[felix@RHEL ~]$ dd if=/dev/zero of=/boot/test.txt bs=8M count=1
1+0 records in
1+0 records out
8388608 bytes (8.4 MB) copied, 0.0187356 s, 448 MB/s
8、软硬方式链接
linux中有软链接和硬链接两种文件。
- 硬链接:指的是指向原始文件inode的指针,系统不为他分配独立的inode文件。所以硬链接和原始文件是同一个文件,只是名字不同。每添加一个硬链接inode就会增加一,而只有当该文件的inode连接数为0时,才算彻底删除它了。硬链接不能对目录进行操作,不能跨硬盘来做。
个人理解,当一个文件被写入时,内容被写入到存储的一个区域,同时建立一个源指针来指向该内存(源文件),当加硬链接之后,就是将增加了指针,所以即使源指针被删除,还有其他指针执行这块内存,所以文件还在。当指针都被删除时,其实内容还在内存中,只是没有了访问该内存的入口(指针文件)。硬盘数据恢复大概也是这个道理。 - 软链接:仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行连接。但是当原始文件被删除之后,链接文件也将失效。软链接inode不会增加。
个人理解:软链接就是window上的快捷方式。
1) ln
ln命令用于创建链接文件,格式为: ln [选项] 目标。
例程:软链接的设置。
[root@RHEL Desktop]# cat test.txt
i love linux.
i love linux.
#创建软链接
[root@RHEL Desktop]# ln -s test.txt readme.txt
[root@RHEL Desktop]# cat readme.txt
i love linux.
i love linux.
[root@RHEL Desktop]# cat test.txt
i love linux.
i love linux.
#查看inode 不会增加,还是1.
[root@RHEL Desktop]# ls -l readme.txt
lrwxrwxrwx. 1 root root 8 Sep 19 21:37 readme.txt -> test.txt
[root@RHEL Desktop]# ls -l test.txt
-rwSrwxrwx+ 1 root root 28 Aug 26 23:51 test.txt
#删除源文件
[root@RHEL Desktop]# rm -f test.txt
#软链接文件的名称还在,但是不能读取内容了
[root@RHEL Desktop]# cat readme.txt
cat: readme.txt: No such file or directory
[root@RHEL Desktop]# ls -l readme.txt
lrwxrwxrwx. 1 root root 8 Sep 19 21:37 readme.txt -> test.txt
[root@RHEL Desktop]# rm -f readme.txt
[root@RHEL Desktop]# ls -l readme.txt
ls: cannot access readme.txt: No such file or directory
例程:创建硬链接。
#创建硬链接
[root@RHEL Desktop]# ln test.sh readme.txt
[root@RHEL Desktop]# ls -l test.sh
-rw-rwxr--+ 2 root root 46 Aug 29 21:02 test.sh
[root@RHEL Desktop]# cat test.sh
#!/bin/bash
#for example by root
pwd
ls -al
[root@RHEL Desktop]# cat readme.txt
#!/bin/bash
#for example by root
pwd
ls -al
#删除源文件
[root@RHEL Desktop]# rm -f test.sh
#硬链接文件还可以被读取
[root@RHEL Desktop]# cat readme.txt
#!/bin/bash
#for example by root
pwd
ls -al
[root@RHEL Desktop]#
Linux 就该这么学 CH06 存储结构与磁盘划分的更多相关文章
- 《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分
<Linux就该这么学>培训笔记_ch06_存储结构与磁盘划分 文章最后会post上书本的笔记照片. 文章主要内容: Linux系统的文件存储结构(FHS标准) 物理设备命名规则(udev ...
- 《linux就该这么学》第八节课:第六章存储结构与磁盘划分
笔记 (借鉴请修改) 6.3.文件系统与数据资料 目前linux最常见的文件系统: ext3:日志文件系统.宕机时可自动恢复数据资料,容量越大恢复时间越长,且不能保证百分百不丢失. ext4:e ...
- 《linux就该这么学》课堂笔记09 存储结构、磁盘划分
Linux一切都是文件 "/"为根目录(万物起始) **挂载后要想永久生效,需要修改开机启动项 vim /etc/fstab
- 7Linux存储结构和磁盘划分
FHS yum的.repo的配置文件多个的话,是依次生效吗? /boot 开机所需文件—内核.开机菜单以及所需配置文件等/dev 以文件形式存放任何设备与接口/etc 配置文件/home 用户主目录/ ...
- Linux就该这么学 20181004(第六章磁盘管理)
参考链接https://www.linuxprobe.com/ /boot 开机锁需要文件-内核.开机菜单以及所需配置文件 /dev 以文件形式存放的任何设备与接口 /etc 配置文件 /home 用 ...
- Linux就该这么学 20181005(第七章磁盘管理)
参考链接https://www.linuxprobe.com lsblk检测硬盘使用情况 RAID 技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入 ...
- 《Linux就该这么学》
参加了第19期课程的培训,感谢刘老师的辛苦付出,课程讲的很好,真心推荐老刘的这本书真是<Linux就该这么学>!!! 本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的 ...
- 《Linux就该这么学》第二期视频
Linux就该这么学--第二期学习笔记... ------------- 你的未来取决于你现在点点滴滴的努力 需要用到的一些工具: Vm11激活码 ---------- root在Linux系统中相当 ...
- LInux 就该这么学 笔记分享
看了Linux就该这么学的前部分书,觉得写的还可以,就在网上找了下面这个同学写的笔记,觉得很详细,所以保存地址,供以后查阅参看.这里对作者表示感谢!!! 博客地址: https://www.cnblo ...
随机推荐
- 深入挖崛:mysql主从复制原理
一.基本原理 MySQL复制过程分成三步: 1).master将改变记录到二进制日志(binary log).这些记录过程叫做二进制日志事件,binary log events: 2).slave将m ...
- 设计模式之(十二)享元模式(Flyweight)
享元模式思想 就以小时候导锅来说吧(导锅是我家乡的方言,就是用细沙把一个模型锅的形状拓下来,然后把铝水倒进模型中,就导好一个锅了.小时候很喜欢看的,可惜现在看不到了.上个图片回忆下)了解了这个过程后就 ...
- linux命令之——grep详解
grep命令用于查找文件里符合条件的字符串:也可以用于查找内容包含指定的范本样式的文件.它能使用正则表达式搜索,用于在文件中搜索指定的字符串模式,列出含有匹配模式子符串的文件名,并输出含有该字符串的文 ...
- ES6入门系列 ----- 对象的遍历
工作中遍历对象是家常便饭了,遍历数组的方法五花八门, 然而很多小伙伴是不是和我之前一样只会用for ...in.... 来遍历对象呢, 今天给大家介绍五种遍历对象属性的方法: 1, 最常用的for ...
- XSS相关有效载荷及绕道的备忘录(下)| 文末有打包好的负载
前言: 今天发布的是下半部分 进入正题 过滤的绕过和一些奇异的有效载荷 大小写绕过 <sCrIpt>alert(1)</ScRipt> 绕过标签黑名单 <script x ...
- Java 之 Stack 集合
一.Stack:栈 概述 栈是一种先进后出(FILO)或后进先出(LIFO:Last in first out)的数据结构. Stack是Vector的子类,比Vector多了几个方法,它的后进先出的 ...
- MySQL Error--InnoDB Table mysqlinnodb_index_stats has length mismatch in the column
使用MySQL 5.7.24版本的安装文件替换MySQL 5.7.19版本的安装文件,数据库复制频繁中断,查看error日志发现下面错误: [Warning] InnoDB: Table mysql/ ...
- Centos 7 解决free -m 下buff/cache缓存很高
Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是linux内存管理中 ...
- 使用log4Net输出调试信息
在上一篇搭建服务器端的项目基础上,使用log4Net进行调试信息输出 http://www.cnblogs.com/fzxiaoyi/p/8439769.html 1.先分析下Photo 自带的服务器 ...
- UiPath: Send SMTP Mail Message 发送带附件的邮件
Tips:关于Hotmail的server和port的获取方式,请参考以下链接 https://support.office.com/en-us/article/Server-settings-you ...