第四周
九阳
处理文本的工具sed
- Stream EDitor, 行编辑器
- sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时 缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的 内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。 如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清 空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重 定向存储输出。
- 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
- 参考: http://www.gnu.org/software/sed/manual/sed.html
sed [option]… ‘script’ inputfile…
常用选项:
- -n 不输出模式空间内容到屏幕,即不自动打印
- -e 多点编辑
- -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
- -r 支持使用扩展正则表达式
- -i.bak 备份文件并原处编辑
script: ‘地址命令’
地址定界:
- (1) 不给地址:对全文进行处理
- (2) 单地址:
#:指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行 - (3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/ - (4) ~:步进
1~2 奇数行
2~2 偶数行
编辑命令:
-
d 删除模式空间匹配的行,并立即启用下一轮循环
-
p 打印当前模式空间内容,追加到默认输出之后
-
a []text 在指定行后面追加文本,支持使用\n实现多行追加
-
i []text 在行前面插入文本
-
c []text 替换行为单行或多行文本
-
w /path/file 保存模式匹配的行至指定文件
-
r /path/file 读取指定文件的文本至模式空间中匹配到的行后
-
= 为模式空间中的行打印行号
-
! 模式空间中匹配行取反处理
-
s/// 查找替换,支持使用其它分隔符,s@@@,s###
-
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/FILE 将替换成功的行保存至文件中
高级编辑命令:
- P: 打印模式空间开端至\n内容,并追加到默认输出之前
- h: 把模式空间中的内容覆盖至保持空间中
- H:把模式空间中的内容追加至保持空间中
- g: 从保持空间取出数据覆盖至模式空间
- G:从保持空间取出内容追加至模式空间
- x: 把模式空间中的内容与保持空间中的内容进行互换
- n: 读取匹配到的行的下一行覆盖至模式空间
- N:读取匹配到的行的下一行追加至模式空间
- d: 删除模式空间中的行
- D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环
软件包管理
包和包管理器
- 最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在 GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来 管理这些软件,当Debian诞生时,这样一个管理工具也就应运而生,它 被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux 系统中,稍后Red Hat才开发自己的“rpm”包管理系统
- 包的组成: 二进制文件、库文件、配置文件、帮助文件
程序包管理器:
- debian: deb文件, dpkg包管理器
- redhat: rpm文件, rpm包管理器
- rpm:Redhat Package Manager
RPM Package Manager
包命名 - 源代码:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release - rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release release:release.OS
常见的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc
跟平台无关:noarch
包命名和工具
- 包:分类和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包 - 包之间:可能存在依赖关系,甚至循环依赖
- 解决依赖包管理工具
yum:rpm包管理器的前端工具
apt:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rpm包管理器前端管理工具
库文件
- 查看二进制程序所依赖的库文件
ldd /PATH/TO/BINARY_FILE - 管理及查看本机装载的库文件
ldconfig 加载配置文件中指定的库文件
/sbin/ldconfig –p 显示本机已经缓存的所有可用库文件名及文件路径 映射关系 - 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
- 缓存文件:/etc/ld.so.cache
程序包的来源
- 管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
获取程序包的途径
(1) 系统发版的光盘或官方的服务器
- CentOS镜像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目官方站点
(3) 第三方组织:
- Fedora-EPEL:
Extra Packages for Enterprise Linux - Rpmforge:RHEL推荐,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建议要检查其合法性 来源合法性,程序包的完整性
rpm包管理
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
- 安装: rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose
-vv:
-h: 以#显示程序包管理执行进度 - rpm -ivh PACKAGE_FILE …
rpm包安装
- [install-options]
–test: 测试安装,但不真正执行安装,即dry run模式
–nodeps:忽略依赖关系
–replacepkgs | replacefiles
–nosignature: 不检查来源合法性
–nodigest:不检查包完整性
–noscripts:不执行程序包脚本
%pre: 安装前脚本 --nopre
%post: 安装后脚本 --nopost
%preun: 卸载前脚本 --nopreun
%postun: 卸载后脚本 --nopostun
rpm包升级
- 升级:
- rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
- rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”
如果不存在旧版程序包,则不执行升级操作 - rpm -Uvh PACKAGE_FILE …
- rpm -Fvh PACKAGE_FILE …
- –oldpackage:降级
- –force: 强制安装
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文 件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后 保留
包查询
- rpm {-q|–query} [select-options] [query-options]
- [select-options]
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-p rpmfile:针对尚未安装的程序包文件做查询操作
–whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供
–whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖 - rpm2cpio 包文件|cpio –itv 预览包内文件
- rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
- [query-options]
–changelog:查询rpm包的changelog
-c:查询程序的配置文件
-d:查询程序的文档
-i:information
-l:查看指定的程序包安装后生成的所有文件
–scripts:程序包自带的脚本
–provides:列出指定程序包所提供的CAPABILITY
-R:查询指定的程序包所依赖的CAPABILITY - 常用查询用法
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …
-qa - 包卸载
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
包校验
- rpm {-V|–verify} [select-options] [verify-options]
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ - 包来源的合法性验证及完整性验证
完整性验证:SHA256
来源合法性验证:RSA - 公钥加密
对称加密:加密、解密使用同一密钥
非对称加密:密钥是成对儿的
public key: 公钥,公开所有人
secret key: 私钥, 不能公开 - 导入所需要公钥
rpm -K|checksig rpmfile 检查包的完整性和签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
rpm数据库
- 数据库重建: /var/lib/rpm
- rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在数据库,则新建之
否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录
yum源
- 阿里云repo文件 http://mirrors.aliyun.com/repo/
- CentOS系统的yum源 阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
- 清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
- EPEL的yum源
- 阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
- 阿里巴巴开源软件 https://opsx.alibaba.com/
yum-config-manager
- 生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo yum-config-manager --add-repo= http://172.16.0.1/cobbler/ks_mirror/7/
- yum-config-manager --disable “仓库名" 禁用仓库
- yum-config-manager --enable “仓库名” 启用仓库
yum命令
-
yum命令的用法:
yum [options] [command] [package …] -
显示仓库列表: yum repolist [all|enabled|disabled]
-
显示程序包: yum list yum list [all | glob_exp1] [glob_exp2] […] yum list {available|installed|updates} [glob_exp1] […]
-
安装程序包: yum install package1 [package2] […] yum reinstall package1 [package2] […] (重新安装)
-
升级程序包: yum update [package1] [package2] […] yum downgrade package1 [package2] […] (降级)
-
检查可用升级: yum check-update
-
卸载程序包: yum remove | erase package1 [package2] […]
-
查看程序包information:
yum info […] -
查看指定的特性(可以是某文件)是由哪个程序包所提供: yum provides | whatprovides feature1 [feature2] […]
-
清理本地缓存:
清除/var/cache/yum/releasever缓存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] -
构建缓存: yum makecache
-
搜索:yum search string1 [string2] […]
以指定的关键字搜索程序包名及summary信息 -
查看指定包所依赖的capabilities:
yum deplist package1 [package2] […] -
查看yum事务历史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6 -
日志 :/var/log/yum.log
-
安装及升级本地程序包
yum localinstall rpmfile1 [rpmfile2] […]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] […]
(用update替代) -
包组管理的相关命令
yum groupinstall group1 [group2] […]
yum groupupdate group1 [group2] […]
yum grouplist [hidden] [groupwildcard] […]
yum groupremove group1 [group2] […]
yum groupinfo group1 […] -
yum的命令行选项:
–nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
–disablerepo=repoidglob:临时禁用此处指定的repo --enablerepo=repoidglob:临时启用此处指定的repo
–noplugins:禁用所有插件
系统安装光盘作为本地yum仓库:
- (1) 挂载光盘至某目录,例如/mnt/cdrom
*<<开起autofs服务 systemctl start autofs
开机启动autofs服务 systemctl enable autofs
开启autofs服务后根目录下出现misc目录, cd /misc/cd cd目录会自动挂载光盘。从而可以将/misc/cd目录作为yum仓库>>
关闭linux防火墙 systemctl
mount /dev/cdrom /mnt/cdrom
- (2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled= - 创建yum仓库:
createrepo [options]
DNF
- DNF 介绍:新一代的RPM软件包管理器。DNF 发行日期是2015年5月11日,DNF 包管 理器采用Python 编写,发行许可为GPL v2,首先出现在Fedora 18 发行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶颈,提升 了包括用户体验,内存占用,依赖分析,运行速度等
- 安装所需软件包,依赖epel源
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.42.sdl7.noarch.rpm
wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.42.sdl7.noarch.rpm
yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.42.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.83.el7.x86_64.rpm - 配置文件:/etc/dnf/dnf.conf
- 仓库文件:/etc/yum.repos.d/ *.repo
- 日志: /var/log/dnf.rpm.log
*<<将上述rpm包制作成yum仓库,baseurl=仓库文件地址>>
DNF使用
dnf 用法:与yum一致
dnf [options] […]
dnf --version dnf repolist
dnf install httpd
dnf remove httpd
dnf clean all
dnf makecache
dnf list installed
dnf list available
dnf search nano
dnf history undo 1
编译安装
C语言源代码编译安装三步骤:
- 1、./configure
(1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的 指定以及Makefile.in文件生成Makefile
(2) 检查依赖到的外部环境,如依赖的软件包
安装后的配置 - 2、make 根据Makefile文件,构建应用程序
- 3、make install 复制文件到相应路径
开发工具:
autoconf: 生成configure脚本
automake:生成Makefile.in 文件
- 注意:安装前查看README,INSTAL
- 开源程序源代码的获取:
官方自建站点:
apache.org (ASF:Apache Software Foundation) mariadb.org
…
代码托管:
SourceForge.net
Github.com
code.google.com - c/c++编译器: gcc (GNU C Complier)
编译C源代码:
准备:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
实现:通过“包组”提供开发组件
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
磁盘存储和文件系统
机械硬盘和固态硬盘
- 机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘 片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘 中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有 一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制 器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每 分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数 据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。 硬盘为精密设备,进入硬盘的空气必须过滤
- 固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控 制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、 功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
- 相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传 输速率性能是HDD的2倍
- 相较于SSD,HDD在价格、容量占有绝对优势
- 硬盘有价,数据无价,目前SSD不能完全取代HHD
设备文件
- 磁盘设备的设备文件命名:/dev/DEV_FILE
SCSI, SATA, SAS, IDE,USB: /dev/sd
虚拟磁盘:/dev/vd 、/dev/xvd
不同磁盘标识:a-z,aa,ab… /dev/sda, /dev/sdb, …
同一设备上的不同分区:1,2, … /dev/sda1, /dev/sda5 - 硬盘存储术语
head:磁头
track:磁道
sector:扇区,512bytes
cylinder:柱面
管理分区
- 列出块设备 • lsblk
- 创建分区使用
• fdisk 创建MBR分区
• gdisk 创建GPT分区
• parted 高级分区操作 - 重新设置内存中的内核分区表版本
• partprobe
parted命令
- parted的操作都是实时生效的,小心使用
- 用法:parted [选项]… [设备 [命令 [参数]…]…]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted –l 列出分区信息
分区工具fdisk和gdisk
- gdisk /dev/sdb 类fdisk 的GPT分区工具
- fdisk -l [-u] [device…] 查看分区
- fdisk /dev/sdb 管理分区
- 子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
同步分区表
- 查看内核是否已经识别新的分区
cat /proc/partations - centos6通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
partx -d --nr M-N /dev/DEVICE - CentOS 5,7: 使用 partprobe
partprobe [/dev/DEVICE]
文件系统
- 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即 在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结 构称为文件管理系统,简称文件系统
- 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文 件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立 文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压 缩,加密等
mkfs命令 - (1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat - (2) mkfs -t FS_TYPE /dev/DEVICE
-L ‘LABEL’ 设定卷标
创建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大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128—4096
-m # 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,…] 启用指定特性
-O ^FEATURE 关闭指定特性
文件系统标签
- 指向设备的另一种方法
- 与设备无关
- blkid:块设备属性信息查看
blkid [OPTION]… [DEVICE]
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备 - e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL] - findfs :查找分区
findfs [options] LABEL= - tune2fs:重新设定ext系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L 'LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, –O ^has_journal
-o 调整文件系统的默认挂载选项,–o ^acl
-U UUID 修改UUID号 - dumpe2fs:显示ext文件系统信息,将磁盘块分组管理
-h:查看超级块信息,不显示分组信息 - xfs_info:显示已挂载的 xfs 文件系统信息
xfs_info mountpoint
文件系统检测和修复
- 文件系统夹故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“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
挂载mount
- 挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此 目录做为其它文件访问入口的行为
- 卸载:为解除此关联关系的过程
- 把设备关联挂载点:mount Point
mount - 卸载时:可使用设备,也可以使用挂载点
umount 设备名|挂载点 - 挂载点下原有文件在挂载完成后会被临时隐藏
- 挂载点目录一般为空
用mount命令挂载文件系统
- 挂载方法:mount DEVICE MOUNT_POINT
- mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
- mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L ‘LABEL’, 例如 -L ‘MYDATA’
(3) UUID, -U ‘UUID’:例如 -U ‘0c50523c-43f1-45e785c0-a126711d406e’
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir:挂载点
事先存在,建议使用空目录
进程正在使用中的设备无法被卸载
mount常用命令选项
- -t vsftype 指定要挂载的设备上的文件系统类型 * -r readonly,只读挂载
- -w read and write, 读写挂载
- -n 不更新/etc/mtab,mount不可见
- -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件 中,且挂载选项中有auto功能)
- -L ‘LABEL’ 以卷标指定挂载设备
- -U ‘UUID’ 以UUID指定要挂载的设备
- -B, --bind 绑定目录到另一个目录上
- 查看内核追踪到的已挂载的所有设备
cat /proc/mounts - -o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式
sync 同步模式,内存更改时,同时写磁盘 a
time/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件 suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro 只读
rw 读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl 启用此文件系统上的acl功能
loop 使用loop设备 - defaults:相当于rw, suid, dev, exec, auto, nouser, async
卸载命令
- 查看挂载情况
findmnt MOUNT_POINT|device - 查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT - 终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT - 卸载
umount DEVICE
umount MOUNT_POINT
挂载点和/etc/fstab
- 配置文件系统体系
- 被mount、fsck和其它程序使用
- 系统重启时保留文件系统体系
- 可以在设备栏使用文件系统卷标
- 使用mount -a 命令挂载/etc/fstab中的所有文件系统
文件挂载配置文件
- /etc/fstab每行定义一个要挂载的文件系统
- 1、要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs - 2、挂载点
- 3、文件系统类型:ext4,xfs,iso9660,nfs,none
- 4、挂载选项:defaults ,acl,bind
- 5、转储频率:0:不做备份 1:每天转储 2:每隔一天转储
- 6、fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
挂载交换分区
- 基本设置包括:
• 创建交换分区或者文件
• 使用mkswap写入特殊签名
• 在/etc/fstab文件中添加适当的条目
• 使用swapon -a 激活交换空间 - 启用:swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级
/etc/fstab 在第4列中:pri=value
禁用:swapoff [OPTION]… [DEVICE]
SWAP的优先级
- 可以指定swap分区0到32767的优先级,值越大优先级越高
- 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从 -1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
- 先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户 指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
- 优化性能:分布存放,高性能磁盘存放
使用光盘
在图形环境下自动启动挂载/run/media/<user>/<label>
- 否则就必须被手工挂载 mount /dev/cdrom /mnt/
- 操作光盘:
eject 弹出光盘
eject -t 弹入光盘 - 创建ISO文件 cp /dev/cdrom /root/centos.iso mkisofs -r -o /root/etc.iso /etc
- 刻录光盘 wodim –v –eject centos.iso
挂载USB介质
- 查看USB设备是否识别 • lsusb
- 被内核探测为SCSI设备 • /dev/sdaX、/dev/sdbX或类似的设备文件
- 在图形环境中自动挂载 • 图标在[计算机]窗口中创建 • 挂载在/run/media//
- 手动挂载
• mount /dev/sdb1 /mnt
常见工具
- 文件系统空间占用等信息的查看工具
df [OPTION]… [FILE]…
-H 以10为单位
-T 文件系统类型
-h human-readable
-i inodes instead of blocks
-P 以Posix兼容的格式输出 - 查看某目录总体空间占用状态
du [OPTION]… DIR
-h human-readable
-s summary
–max-depth=# 指定最大目录层级
工具dd
- dd 命令:convert and copy a file
用法:
- dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# * count=#
- if=file 从所命名文件读取而不是从标准输入
- of=file 写到所命名的文件而不是到标准输出
- ibs=size 一次读size个byte
- obs=size 一次写size个byte
- bs=size block size, 指定块大小(既是是ibs也是obs)
- cbs=size 一次转化size个byte
- skip=blocks 从开头忽略blocks个ibs大小的块
- seek=blocks 从开头忽略blocks个obs大小的块
- count=n 复制n个bs
- conv=conversion[,conversion…] 用指定的参数转换文件
- 转换参数:
- ascii 转换 EBCDIC 为 ASCII
- ebcdic 转换 ASCII 为 EBCDIC
- lcase 把大写字符转换为小写字符
- ucase 把小写字符转换为大写字符
- nocreat 不创建输出文件
- noerror 出错时不停止
- notrunc 不截短输出文件
- sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
- fdatasync 写完成前,物理写入输出文件
- 备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 - 破坏MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 - 有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读 取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开 始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv= notrunc - 备份:
dd if=/path/to/image of=/dev/sdx - 将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘 - 拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件 - 从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件 - 销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作 以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
RAID
-
RAID:Redundant Arrays of Inexpensive(Independent) Disks
-
1988年由加利福尼亚大学伯克利分校(University of CaliforniaBerkeley) “A Case for Redundant Arrays of Inexpensive Disks”
-
多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供
RAID -
RAID-0:条带卷,strip
-
RAID-1:镜像卷,mirror
-
RAID-2
-
RAID-3
-
RAID-4
-
RAID-5
-
RAID-6
-
RAID-10
-
RAID-0
来源:https://blog.csdn.net/weixin_45531568/article/details/99655410