第四周知识小分享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四周知识小分享相关的知识,希望对你有一定的参考价值。

第四周知识小总结
时间过得飞快,转眼间就到第四周了,我们又学了哪些新知识呢,下面让我们一起来看下。  

一 源码编译安装

1 程序包编译

程序包编译安装:

Application-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,然后再安装
源代码-->预处理-->编译-->汇编-->链接-->执行
源代码组织格式:
多文件:文件中的代码之间,很可能存在跨文件依赖关系
C、C++:make 项目管理器
configure脚本 --> Makefile.in --> Makefile
java: maven
编译安装
C语言源代码编译安装三步骤:
1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的
指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
2、make 根据Makefile文件,构建应用程序
3、make install 复制文件到相应路径
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in
注意:安装前查看README,INSTALL
编译安装
编译C源代码:
准备:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
实现:通过“包组”提供开发组件
Development Tools
Server Platform Development
生产实践:(基于最小化安装的系统)
yum install gcc gcc-c++ glibc glibc-devel
pcre pcre-devel
openssl openssl-devel systemd-devel
zlib-devel vim lrzsz tree screen lsof
tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
安装路径设定:
--prefix=/PATH:指定默认安装位置,默认为usr/local/
--sysconfdir=/PATH:配置文件安装位置
System types:支持交叉编译
Optional Features: 可选特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可选包
--with-PACKAGE[=ARG] 依赖包
--without-PACKAGE 禁用依赖关系
注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,
其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install
安装后的配置:
(1) 二进制程序目录导入至PATH环境变量中
编辑文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 导入帮助手册
编辑/etc/man.config|man_db.conf文件
添加一个MANPATH

二 磁盘分区

CHS和LBA

CHS
采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位表示sector
最大寻址空间8GB
LBA(logical block addressing)
LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
ATA-1规范中定义了28位寻址模式,以每扇区512位组来计算,ATA-1所定
义的28位LBA上限达到128 GiB。2002年ATA-6规范采用48位LBA,同样以
每扇区512位组计算容量上限可达128 Petabytes
由于CHS寻址方式的寻址空间在大概8GB以内,在磁盘容量小于大概8GB
时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则
只能使用LBA寻址方式
使用分区空间步骤
设备识别
设备分区
创建文件系统
标记文件系统
在/etc/fstab文件中创建条目
挂载新的文件系统
磁盘分区
分区的意义:
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
分区

两种分区方式:MBR,GPT

MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot loader
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,
使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使操作系统启动

管理分区

列出块设备
? lsblk
创建分区使用:
? fdisk 创建MBR分区
? gdisk 创建GPT分区
? parted 高级分区操作
重新设置内存中的内核分区表版本
? partprobe
parted命令
parted的操作都是实时生效的,小心使用
用法:parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos(mklabel:标签,类型)(gpt和msdos两种类型)
parted /dev/sdb print(显示当前硬盘分区情况
parted /dev/sdb mkpart primary 1 200 (默认M)(表示分出199M大的分区来)
parted /dev/sdb rm 1(表示删除分出来的sdb1分区)
parted –l 列出分区信息
分区工具fdisk和gdisk
gdisk /dev/sdb 类fdisk 的GPT分区工具
fdisk -l [-u] [device...] 查看分区
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
如果分完后未显示,需要用partprobe命令新分区,然后就可以看到了。
但此命令在centos6上不好使,
得用partx -a /dev/sda,然后就可以看到了。
(-a :是对增加分区的识别)
如果是识别删除分区:得用partx -d --nr 5-7 /dev/sda(假设删除了5-7分区)才能识别
注意:分区时不要多加数字,无效

三 文件系统管理

1 文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
支持的文件系统:/lib/modules/uname –r/kernel/fs(查看系统中支持的文件系统)
各种文件系统:
https://en.wikipedia.org/wiki/Comparison_of_file_systems此网站可以浏览下

2 文件系统类型

Linux文件系统:
ext2(Extended file system):适用于那些分区容量不是太大,更新也不频繁的情况,
例如 /boot 分区
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统
ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs:SGI,支持最大8EB的文件系统
btrfs(Oracle), reiserfs, jfs(AIX), swap(虚拟分区)
光盘:iso9660
Windows:FAT32, NTFS,exFAT
Unix:FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统(裸盘
lsmod:系统中目前加载的文件系统的模块
用户通过vfs访问硬盘文件系统(virutal file system:虚拟文件系统,统一标准,所以一个命令可以访问不同文件系统的文件,且效果无差别)
/proc/fliesystem:系统中支持的文件系统类型
日志型文件系统: ext3, (ext4, xfs:不支持共享

3 创建文件系统

mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4 xfs btrfs vfat
列如:mkfs.ext4 /dev/sda6 (对sda6创建文件系统是而ext4的分区)
或者:mkfs -t ext4 /dev/sda6 (创建完之后,会分配唯一的UUID编号)
blkid:查看文件系统的列表和uuid
(2) mkfs -t FS_TYPE /dev/DEVICE
-L: ‘LABEL‘ 设定卷标:标签 (e2label -l :查看标签,也可直接修改,仅限ext系列)
-b :块大小(mkfs.ext4 /dev/sda6 -b 1024,表示创建一个1k大的文件系统)
默认4096=4k,也可以指定。tune2fs -l /dev/sda6:查看块大小
列如:mkfs -t ext4 -L /date/mysql /dev/sda6(标签就是/date/mysql)
(1)创建ext文件系统
(只能创建ext文件系统
mke2fs:ext系列文件系统专用管理工具
-t ext2|ext3|ext4 指定文件系统类型
-b 1024|2048|4096 指定块大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i # 为数据空间中每多少个字节创建一个inode;不应该小于block大小(>=4096)
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m # 默认5%,为root预留空间占总空间的百分比也可以改:(mkfs.ext4 -m 1 /dev/sda6,表示预留1%
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
dd if=/dev/zero of=/dev/sdb1 bs=1M :破坏磁盘分区
(2)文件系统标签
指向设备的另一种方法
与设备无关
blkid:块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs :查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
tune2fs
tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L ‘LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
(在centos上创建的分区文件系统默认不带ACL权限的,如果需要,自己加)
-U UUID 修改UUID号
dumpe2fs:显示ext文件系统信息,将磁盘块分组管
-h:查看超级块信息,不显示分组信息
xfs_info:显示已挂载的 xfs 文件系统信息
xfs_info mountpoint
(3)文件系统检测和修复
文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下执行下面命令修复
fsck: File System Check(只是修复文件系统,数据不保证)
fsck.FS_TYPE
fsck -t FS_TYPE
注意:FS_TYPE 一定要与分区上文件类型相同
-a 自动修复
-r 交互式修复错误
e2fsck:ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair:xfs文件系统专用检测修复工具
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

4 挂载mount

lsof /dev/mysql:查看正在访问此目录的用户
fusr -v /date/mysql:正在用此目录的用户
fusr -km /date/mysql:剔除用户
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
mount
卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空
一个设备可以挂载到多个文件夹中
一个文件夹只能挂载一个设备,后挂载的设备会挤掉第一个挂载的设备。
1,一般是设备忘文件夹里挂载
2, 也可以文件往文件夹里挂载(在文件上创立文件系统后便可挂载到目录上,建立好文件夹挂载后,会出现loop0,自动挂载到loop0上,centos7上会自动挂载,不限制。losetup命令可以看到。centos6上默认只有8个,不自动挂载到loop0上,得加 -o ioop 选项。可在/root/grub/grub.conf 中加上max +数字 然后重启生效即可。
3,也可以目录往目录上挂载 会显示不让挂载,需要加 -B 选项。(在加 -n 表示隐藏挂载,在7上无效)
mount常用命令选项
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write, 读写挂载
-n 不更新/etc/mtab,mount不可见(在7上无效)
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL‘ 以卷标指定挂载设备
-U ‘UUID‘ 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
查看内核追踪到的已挂载的所有设备
cat /proc/mounts
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式 sync 同步模式,内存更改时,同时写磁盘
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro 只读 rw 读写
user/nouser 是否允许普通用户挂载此设备,/etcfstab使用
acl 启用此文件系统上的acl功能
loop 使用loop设备
_netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统
defaults 相当于rw, suid, dev, exec, auto, nouser, async

RAID

提高IO能力
磁盘并行读写
提高耐用性
磁盘冗余来实现
级别:多块磁盘组织在一起的工作方式有所不同
RAID实现的方式
外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器,安装OS前在Bios里配置
软件RAID:通过OS实现
RAID级别
RAID-0:条带卷,strip
RAID-1:镜像卷,mirror
RAID-2
..
RAID-5
RAID-6
RAID-10
RAID-01

RAID-0:

(如果3块硬盘,每个硬盘均匀的存放1/3的数据,但坏一块,就无法使用)
读、写性能提升
可用空间:N;利用率:100%
无容错能力
最少磁盘数:2, 2+(若空间大小不同,只能使用相同大小的分区空间)

RAID-1:

(加入两块硬盘,两块数据一样,类似于镜像,可接受一块硬盘损坏,若数据人为删除,无法找回)
读性能提升、写性能略有下降
可用空间:n/2;利用率:50%
有冗余能力
最少磁盘数:2, 2N

RAID-4:

至少三块硬盘;利用率:n-1/n
多块数据盘异或运算值存于专用校验盘

RAID-5:

读、写性能提升
利用率:n-1/n
有容错能力:允许最多1块磁盘损坏
最少磁盘数:3, 3+

RAID-6:

读、写性能提升
可用空间:n-2/n
有容错能力:允许最多2块磁盘损坏
最少磁盘数:4, 4+

AID-10:(生产中用的最多)

读、写性能提升
可用空间:50%
有容错能力:每组镜像最多只能坏一块(可允许坏两块
最少磁盘数:4, 4+

RAID-01:

(利用率50%,n-2/n,)
最少四块
多块磁盘先实现RAID0,再组合成RAID1
JBOD:(磁盘累加,单纯扩内存)
功能:将多块磁盘的空间合并一个大的连续空间使用
可用空间:sum(S1,S2,...)

以上是关于第四周知识小分享的主要内容,如果未能解决你的问题,请参考以下文章

初学LINUX,一些自己的小分享

函数式编程小分享

校招面试经验小分享,阿里腾讯美团字节实习offer

Js模型和封装(没毕业的孩子,一点拙劣的小分享,欢迎批评和补充)

unity3d俯视角简易移动控制脚本及其易错点小分享

python简单爬虫