Linux运维高级核心基础
时间:2022-10-12 01:30:01 sitemap
定时任务 >>
检查crond服务软件包 [root@localhost ~]# rpm -qa |grep cron cronie-1.4.11-19.el7.x86_64 cronie-anacron-1.4.11-19.el7.x86_64 crontabs-1.11-6.20121102git.el7.noarch #提供定时任务主程序包crond守护过程等工具 检查crond服务是否运行 systemctl status crond
cron是Linux在系统中,服务软件名默认执行命令或指定程序任务。Linux系统启动后cron软件将自动自动命名相应的过程crond。默认情况是定期(每分钟)检查系统中是否有任务计划,如果有,则按计划执行。如果计划任务为秒,则需要编写shell更为合适。
at命令
在指定时间执行命令。at定时任务工具,依赖于atd服务用于执行一次性完成的调度任务。例如,在紧急任务中,需要在晚上3点临时备份数据at软件。
安装启动 yum install at -y systemctl start atd 选项: -f 指定任务文件包含具体指令 -q 指定新任务的队列名称 -l 显示待执行任务的列表 -d 删除指定的带执行任务 -m 任务执行完成后,发送给用户e-mail 参数 日期:指定任务执行的日期 hh:mm 小时:分钟 mm/dd/yy 月/日/年 或 日月年 noon 正午12点 midnight 午夜12点 teatime 下午茶时间,下午四点 tomorrow 明天 now 1min 一分钟之后 还可使用12小时计时制,AM上午,PM下午 now 1min/hours/days/weeks 分钟、小时、天、星期, 案例: [root@localhost ~]# at now 2min at> tree /opt at> <EOT> #ctrl d提交 job 5 at Sat Feb 13 11:41:00 2021 查看 [root@localhost ~]# at -l 5 Sat Feb 13 11:41:00 2021 a root 执行完成后,可以在邮件中查看执行情况 [root@localhost ~]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 3 messages 1 new 1 root Sat Feb 13 11:19 16/595 "Output from your job 3" 2 root Sat Feb 13 11:20 34/874 "Output from your job 4" >N 3 root Sat Feb 13 11:41 20/601 "Output from your job 5" & 3 Message 3: From root@localhost.localdomain Sat Feb 13 11:41:00 2021 Return-Path: <root@localhost.localdomain> X-Original-To: root Delivered-To: root@localhost.localdomain Subject: Output from your job 5 To: root@localhost.localdomain Date: Sat, 13 Feb 2021 11:41:00 0800 (CST) From: root@localhost.localdomain (root) Status: R /opt ├── anaconda-ks.cfg ├── a.txt ├── b.txt └── data.txt 0 directories, 4 files 无需交互输入即可读取任务 [root@localhost ~]# ls /dw [root@localhost ~]# cat mytasks.at touch /dw/1.txt [root@localhost ~]# at -f ./mytasks.at now 1min job 8 at Sat Feb 13 11:57:00 2021 [root@localhost ~]# ls /dw/ 1.txt 删除任务 [root@localhost ~]# at -l [root@localhost ~]# at now 10min at> touch /dw/2.txt at> <EOT> job 9 at Sat Feb 13 12:08:00 2021 [root@localhost ~]# at -l 9 Sat Feb 13 12:08:00 2021 a root [root@localhos ~]# at -d 9
[root@localhost ~]# at -l
mail命令
了解三个概念:
MTA:邮件传送代理,也就是postfix服务
MUA:收费邮件的客户端,可以是foxmail,也可以是其他客户端
centos7通过mailx发送邮件,通过mail命令是收邮件。
[root@localhost ~]# mailx -s "hello root" root
hao are you?
happy new year
EOT
[root@localhost ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
1 root Sat Feb 13 11:19 16/595 "Output from your job 3"
2 root Sat Feb 13 11:54 15/510 "Output from your job 6"
>N 3 root Sat Feb 13 12:54 19/630 "hello root"
&
定时任务实践
向crond进程提交任务的方式与at不同,crond需要读取配置文件,且有固定的文件个数,通过crontab命令管理文件。cron任务分为两类:系统定时任务,用户定时任务。
crond服务除了工作时查看/var/spool/cron文件夹下的定时任务以为,还会查看/etc/cron.d目录以及/etc/anacrontab下面的内容,里面存放了每天,每周,每月需要执行的系统任务。
[root@localhost ~]#
[root@localhost ~]# ll /etc/|grep cron*
-rw-------. 1 root root 541 Apr 11 2018 anacrontab
drwxr-xr-x. 2 root root 21 Dec 29 03:42 cron.d
drwxr-xr-x. 2 root root 42 Dec 29 03:42 cron.daily
-rw-------. 1 root root 0 Apr 11 2018 cron.deny
drwxr-xr-x. 2 root root 22 Dec 29 03:42 cron.hourly
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.monthly
-rw-r--r--. 1 root root 451 Jun 10 2014 crontab
drwxr-xr-x. 2 root root 6 Jun 10 2014 cron.weekly
系统定时任务配置文件/etc/crontab
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #执行结果发邮件给用户
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
定时任务必须使用绝对路径,五个星号分别对应--分时日月周。
crontab命令
crontab命令用来提交个管理用户需要周期性执行的任务。
定时任务相关的文件
/var/spool/cron 定时任务的配置文件所在目录
/var/log/cron 定时任务日志文件
/etc/cron.deny 定时任务黑名单
参数:
-l 查看定时任务
-e edit编辑定时任务,建议手动编辑
-i 删除定时任务,提示用户确认删除,避免出错
-r 删除定时任务,移除/var/spool/cron/username
-u 指定用户执行任务,root可以管理普通用户计划任务
crontab命令就是在修改//var/spool/cron中的定时任务文件
例如:
[root@localhost ~]# cat /var/spool/cron/root
*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
*/1 * * * * /bin/sh /myscripts/bak.sh > /dev/null 2>&1
定时任务状态
[root@localhost ~]# ps -ef | grep crond
root 715 1 0 10:50 ? 00:00:00 /usr/sbin/crond -n
root 1740 1374 0 13:39 pts/0 00:00:00 grep --color=auto crond
[root@localhost ~]# systemctl is-active crond
active
例:
查看定时任务
[root@localhost ~]# crontab -l
no crontab for root
创建定时任务
crontab -e
删除定时任务
建议使用crontab -e 手动编辑
定时任务符号
五个星号分别对应分时日月周,day of month 和 day of week 一般不同时使用
特殊符号 | 含义 |
---|---|
* | 表示每的意思 |
- | 表示范围分隔符,如17-19,代表每天的17到19点 |
, | 逗号表示分隔时段,如30 17,18,19* cmd 表示每天的17,18,19的半点执行命令 |
/n | 表示可以整除的数字,如每隔n的单位时间,如每隔10分钟表示/10* cmd |
如果没法整除,定时任务没有意义,可以通过脚本控制频率。
示例:
0 * * * * 表示每小时的整点执行
*/10 * * * * 每隔10分钟执行一次
0 9-18 * * 1-5 工作日的9-18点每一个整点执行
* 13,15 * * 6,0 每周六周日的13点到15点,每分钟都执行
定时任务实践
每分钟让服务器进行时间同步
[root@localhost ~]# which ntpdate
/usr/sbin/ntpdate
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
#能复制尽量不要手敲
测试
[root@localhost ~]# date -s 20080808
Fri Aug 8 00:00:00 CST 2008
[root@localhost ~]# date
Sat Feb 13 15:10:31 CST 2021
每晚0点整,把站点目录/var/www/html下的内容打包备份到/data目录下
1.检查文件夹是否存在,不存在则创建
[root@localhost ~]# test -d /data && echo "exist" || mkdir /data
[root@localhost ~]# test -d /data && echo "exist" || mkdir -p /var/www/html
exist
2.创建测试文件
[root@localhost ~]# touch /var/www/html/appach{1..5}.txt
3.打包压缩,tar命令不建议使用绝对路径,特殊情况下可以使用-P参数
打包时切换到上级目录打包
[root@localhost www]# pwd
/var/www
[root@localhost www]# tar -czvf /data/bak_$(date +%F).tar.gz ./html/
[root@localhost www]# ls /data/
bak_2021-02-13.tar.gz
4.编写shell脚本,丢给定时任务定期执行
[root@localhost myscripts]# cat bak.sh
!#/bin/bash
cd /var/www && \
/usr/bin/tar -zcf /data/back_$(date +%F).tar.gz ./html
5.创建定时任务
[root@localhost ~]# crontab -e
crontab: installing new crontab
[root@localhost ~]# crontab -l
00 00 * * * /bin/sh /myscripts/bak.sh > /dev/null 2>&1
总结:
命令行测试
定时任务推荐脚本执行
命令全路径复制到脚本
不要随意输出信息,输出到文件或空
打包时切换到上级目录打包
在指定用户下执行相关定时任务,不要什么都给root执行
最新的定时任务放在最上面
调式方法不能用于生产环境
调式可以参考cron日志,/var/log/cron
软件包管理 >>
rpm命令
rpm软件包的管理工具
i表示安装,v显示详细过程,h以进度条显示,每个#表示2%进度
常用命令:
rmp -qa 查看软件是否安装
rpm -ivh 安装rpm软件
rpm -ql 查看软件详细信息
rpm -qf 查看目录属于的安装包
rpm -e 卸载软件
yum工具
基于rpm的软件包管理器
参数:
-h 显示帮助
-y 对所有的提问都回答 “yes”
-c 指定配置文件
-q 安静模式
-v 详细模式
-R 设置yum处理一个命令的最大等待时间
-C 完全从缓冲中运行,而不去下载或更新任何头文件
常用参数:
install 安装rpm软件包
update 更新rpm软件包
remove 删除指定的rpm软件包
list 显示软件包的信息
clean 清理yum过期的缓存
localinstall 安装本地的rpm软件包
localupdate 显示本地rpm软件包进行更新
makecache 构建缓存
其他参数:
deplist 显示软件包的所有依赖关系
check-update 检查是否有可用的更新rpm软件包
search 检查软件包的信息 [search 译文:寻找,搜索]
info 显示指定的rpm软件包的描述信息和概要信息
resolvedep 显示软件包的依赖关系
shell 进入yum的shell提示符
案例:
更新和升级
更新指定程序包package1
yum update package1
删除程序
yum remove 删除程序包
查找和显示
#检查MySQL是否安装
yum list installed |grep mysql
yum list installed mysql*
显示安装包信息
yum info package1
显示所有已安装和可安装的程序包
yum list
显示指定程序包安装情况
yum list package1
清除缓存
清除缓存目录下的软件包
yum clean packages
配置yum源与epel源
yum install wget -y screen
cd /etc/yum.repos.d/ && mkdir backup_$(date +%F)
mv ./*.repo backup_
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum makecache
可参考阿里镜像站。
如何使用光盘当中本地yum仓库
如何使用光盘当作本地yum仓库:
(1) 挂载光盘至某目录,例如/media/cdrom
# mount -r -t iso9660 /dev/cdrom /media/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
案例:
1.创建配置文件
[root@kvm01 opt]# cat /etc/yum.repos.d/local.repo
[local]
name=local repo
baseurl=file:///mnt
gpgcheck=0
2.挂载
[root@kvm01 ~]# mount /dev/cdrom /mnt
编译安装三部曲
./configure --prefix=软件安装路径 #在源码目录
make
make install (make uninstall是卸载)
磁盘管理 >>
fdisk 对磁盘进行格式化发命令,以及分区等。
mbr分区表(dos格式)
master boot record 主分区引导记录
mbr分区关注的是,硬盘容量受限制,最大2T
gpt分区表
限制大多的硬盘分区都是gpt分区表
优点:
-gpt分区表硬盘容量没有限制
-分区个数,没有限制
-自带磁盘包包含机制
fdisk
查看磁盘使用情况和磁盘分区
选项:
-v 打印fdisk的版本信息并退出
-l 列出指定设备的分区表信息并退出
-u 以扇区数而不是以柱面数的形式显示分区表中各分区的信息
-s 分区;将分区的大小 (单位为块)信息输出到标准输出
内部参数:
命令(输入m获取帮助):
n 创建分区
d 删除已有分区
t 修改分区类型
l 列出已知分区类型
w 保持并退出
q 不保存退出
m 查看帮助信息
p 显示现有分区信息
案例:
[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009dfa2
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 4098047 2048000 83 Linux
/dev/sda2 4098048 8194047 2048000 82 Linux swap / Solaris
/dev/sda3 8194048 83886079 37846016 83 Linux
分区实践
在vm虚拟机添加二块硬盘进行练习
1.查看硬盘情况
[root@localhost ~]# fdisk -l | grep sd
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
/dev/sda1 * 2048 4098047 2048000 83 Linux
/dev/sda2 4098048 8194047 2048000 82 Linux swap / Solaris
/dev/sda3 8194048 83886079 37846016 83 Linux
2.选择需要操作的磁盘开始分区
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x37a0153b.
Command (m for help): p #打印现有分区,或输入m查看帮助信息
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b #新加磁盘没有分区
Device Boot Start End Blocks Id System
Command (m for help): n #输入n,添加分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #输入p,添加主分区
Partition number (1-4, default 1): 1 #选择1-4主分区区号
First sector (2048-41943039, default 2048): #选择默认起点2048
Using default value 2048
Last sector, +sectors or +size{
K,M,G} (2048-41943039, default 41943039): +256M #填写结束点,使用需要创建的大小替换
Partition 1 of type Linux and of size 256 MiB is set
Command (m for help): P #再次打印
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b #此时添加了第一个主分区,信息如下:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 526335 262144 83 Linux
# 删除结束点是526335*512=269MB
Command (m for help): N #再次创建扩展分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e #剩余磁盘空间全部创建扩展分区
Partition number (2-4, default 2): 2 #选择区号为2
First sector (526336-41943039, default 526336):
Using default value 526336 #默认值为526336
Last sector, +sectors or +size{
K,M,G} (526336-41943039, default 41943039):
Using default value 41943039 #默认全部给扩展分区
Partition 2 of type Extended and of size 19.8 GiB is set
#此时剩余空间全部给了扩展分区,大小为19.8GB
Command (m for help): n #开始创建逻辑分区,分区号默认从5开始
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l # 输入l 创建逻辑分区
Adding logical partition 5 #选择区号5
First sector (528384-41943039, default 528384):
Using default value 528384 #默认大小528384开始
Last sector, +sectors or +size{
K,M,G} (528384-41943039, default 41943039): +10G #大小设置为10G
Partition 5 of type Linux and of size 10 GiB is set
Command (m for help): p #再次打印分区
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b
Device Boot Start End Blocks Id System
/dev/sdb1 2048 526335 262144 83 Linux
/dev/sdb2 526336 41943039 20708352 5 Extended
/dev/sdb5 528384 21499903 10485760 83 Linux
Command (m for help): n #再创建一个逻辑分区
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l #选择逻辑分区
Adding logical partition 6 #选择分区号6
First sector (21501952-41943039, default 21501952):
Using default value 21501952
Last sector, +sectors or +size{
K,M,G} (21501952-41943039, default 41943039):
Using default value 41943039
Partition 6 of type Linux and of size 9.8 GiB is set #sdb6逻辑分区,9.6G大小
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x37a0153b
Device Boot Start End Blocks Id System
/dev/sdb1 2048 526335 262144 83 Linux
/dev/sdb2 526336 41943039 20708352 5 Extended
/dev/sdb5 528384 21499903 10485760 83 Linux
/dev/sdb6 21501952 41943039 10220544 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
3.此时系统出现磁盘文件
[root@localhost ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 Feb 14 19:44 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 14 19:44 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Feb 14 19:44 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Feb 14 19:44 /dev/sdb5
brw-rw---- 1 root disk 8, 22 Feb 14 19:44 /dev/sdb6
4.分区后信息会写入/proc/partitions
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
8 16 20971520 sdb
8 17 262144 sdb1
8 18 1 sdb2
8 21 10485760 sdb5
8 22 10220544 sdb6
8 32 20971520 sdc
8 0 41943040 sda
8 1 2048000 sda1
8 2 2048000 sda2
8 3 37846016 sda3
11 0 4365312 sr0
partprobe命令
centos5或以前使用此命令,可用用于重读分区表,当删除文件后,仍然占用磁盘空间,是因为磁盘分区表没有更新,需要重启分区表,可用使用此命令,不重启电脑,重读分区表。
partprobe /dev/sdb #重读磁盘/dev/sdb的分区表
partx命令
一般格式化磁盘完毕后会使用partx命令告诉Linux内核,新的磁盘分区情况,让内核重读分区表。
partx -a /dev/sdb #内核重读分区表
[root@localhost ~]# partx -a /dev/sdb
partx: /dev/sdb: error adding partitions 1-2
partx: /dev/sdb: error adding partitions 5-6
parted命令
磁盘分区和分区大小调整工具
parted命令 是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。
语法:parted (选项)(参数)
选项:
-h 显示帮助信息
-i 交互式模式
-s 脚本模式,不提示用户
-v 显示版本号
-l 显示所有分区信息
针对超过2TB的磁盘分区
小于2TB的磁盘都可用使用fdisk分区,但是大于2TB的磁盘,只能使用parted命令分区,且转换磁盘为GPT格式。
1.使用20G硬盘模拟
[root@localhost ~]# fdisk -l |grep /dev/sdc
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
2.parted针对/dev/sdc磁盘分区,GPT分区表没有extend(扩展)类型
[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help #输入help获取帮助
(parted) mklabel gpt #指定分区表格式
(parted) mkpart primary 0 500 #输入mkpart创建分区类型,并指定大小0 500
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore #忽略警告信息 /取消
(parted) p #打印信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500MB 500MB primary
(parted) mkpart logical 501 10000 #继续创建逻辑分区并指定大小
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500MB 500MB primary
2 501MB 10.0GB 9499MB logical
(parted) mkpart logical 10001 #继续创建逻辑分区,并指定大小
End?
End? 21000
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 500MB 500MB primary
2 501MB 10.0GB 9499MB logical
3 10.0GB 21.0GB 11.0GB logical
(parted) q #输入q保存退出
Information: You may need to update /etc/fstab.
[root@localhost ~]#
3.使用fdisk命令检查sdb磁盘情况
[root@localhost ~]# fdisk -l /dev/sdc
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 28ED4D51-6F7D-4939-8321-4BC94564EA35
# Start End Size Type Name
1 34 976562 476.8M Microsoft basic primary
2 978944 19531775 8.9G Microsoft basic logical
3 19533824 41015295 10.2G Microsoft basic logical
4.更换gpt为mbr
fdisk 命令是针对mbr分区格式的,虽然可用使用g命令把从旁格式化为GPT,但是无法再重新格式化为MBR。因为fdisk命令无法操作GPT格式的磁盘,可用使用parted命令更好磁盘分区格式。
# parted /dev/sdb //选中要转换到的磁盘 (parted) mktleb New disk label type? msdos
按照习惯MBR格式一般在linux下称作dos,如果在new disk label type?后输入dos或者mbr会提示无效命令,这时要用help mktable查看帮助信息。可以看到parted命令中MBR 分区被称作msdos,
其他分区如下:aix;amiga;bsd;dvh;gpt;mac;msdos;pc98;sun;loop
实践:
[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable
New disk label type? msdos
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk
will be lost. Do you want to continue?
Yes/No? yes
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) q
Information: You may need to update /etc/fstab.
Linux的软硬链接 >>
ln命令
用来为文件创建链接
选项:
-s 对源文件建立符号链接,而非硬连接
-f 强行删除任何已存在的目标文件
--help 显示帮助信息并退出
--version 显示版本信息并退出
软链接创建–symbolic link
语法:
ln -s 目标文件绝对路径 快捷方式绝对路径
例[root@localhost ~]# ln -s /opt/data.txt /tmp/data
特点:
软连接是两个独立的文件,有各自的iNode,创建软连接不会增加符号引用计数
支持目录软链接,可以跨文件系统
软链接文件类型是l
软链接指向源文件,若源文件不存在了软连接失效
作用:便于访问
硬链接创建–hard link
语法:
ln 目标文件绝对路径 硬连接的文件路径
例:
ln /opt/data.txt /root/aaa
ln /opt/data.txt /root/bbb
对比软连接:
[root@localhost ~]# readlink /tmp/data
/opt/data.txt
[root@localhost ~]# readlink aaa
[root@localhost ~]# readlink bbb
#硬链接看不到信息
特点:
iNode号码与源文件一致
目录文件夹不支持硬连接
不得跨文件系统
硬连接文件类型是 -
硬链接数量的增加,会增加iNode号码的计数
[root@localhost ~]# ls -li /opt/data.txt
24669 -rw-r--r-- 3 root root 145 Feb 10 22:37 /opt/data.txt
#因为前面创建了硬链接aaa和bbb,所有此处为三,默认为一。
作用:防止误删
软硬链接的综合比较
删除软链接对源文件,硬链接无影响
删除硬链接对源文件,软链接无影响
删除源文件对硬连接无影响,软链接失效
只要删除源文件,硬连接(数量为0),文件才会失效
许多硬件的快照功能就是硬连接的道理
源文件和硬链接有相同的iNode号,可以理解为同一个文件或者是一个文件多个入口
软链接与源文件的iNode号不同,是不同的文件,软链接是源文件难道快捷节方式
文件夹的链接数量
1.文件夹创建后,默认有.和..两个目录
.的inode号就是当前目录的inode号,如同硬链接
..的inode号是上级目录的inode号,如同父目录的硬链接
因此任意一个目录,硬链接基数都是2(目录名+当前目录名)
[root@localhost dw]# ls -lia
total 4
67266023 drwxr-xr-x 2 root root 6 Feb 14 22:58 .
64 dr-xr-xr-x. 21 root root 4096 Feb 13 15:13 ..
[root@localhost dw]# ls -lia /dw
total 4
67266023 drwxr-xr-x 2 root root 6 Feb 14 22:58 .
64 dr-xr-xr-x. 21 root root 4096 Feb 13 15:13 ..
2.文件夹系统禁止创建硬链接
iNode号
操作系统中专门用于管理存储文件的信息软件称之为文件系统,文件系统将文件的元信息(文件创建者,日期,大小等,可以通过stat命令查看元信息)存储再一个称之为inode的区域,中文是索引节点。
1.查看文件的iNode号
[root@localhost ~]# ls -li
total 72
67185213 -rw-r--r-- 1 root root 9 Feb 10 21:36 1.doc
67185953 -rw-r--r-- 1 root root 0 Feb 13 11:56 1.txt
67185211 -rw-r--r-- 1 root root 4 Feb 10 21:36 2.doc
#唯独文件名不说inode存储的数据信息
inode存储的信息不限于:
文件大小
属主
用户组
文件权限
文件类型
修改时间
还包含了文件的文件实体指针(指向block的位置,也就是inode和block的关系)
inode大小
硬盘格式化的时候,系统自带分为两个区,一个数据区,存放数据,一个是inode区,存放inode信息。
每个inde节点大小,一般是128字节或256字节,inode节点的总数再格式化的时候就决定了。
查看和管理inode
无论是硬盘,U盘等再Linux中被格式化为ext系统的文件系统后,都分为两部分
inode,默认128或256字节
block,默认1-4k
一般磁盘分区都很大,inode和block都会有很多个
查看文件系统inode总数以及剩余数量
df -i 如果满了删除大量小文件,存储了过多的元信息,小于1kb的文件
df -h 如果满了,删除大容量的文件
[root@localhost ~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 18923008 63130 18859878 1% /
devtmpfs 480203 398 479805 1% /dev
tmpfs 482946 1 482945 1% /dev/shm
tmpfs 482946 1230 481716 1% /run
tmpfs 482946 16 482930 1% /sys/fs/cgroup
/dev/sda1 1024000 327 1023673 1% /boot
tmpfs 482946 1 482945 1% /run/user/0
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 37G 1.9G 35G 6% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 2.0G 134M 1.9G 7% /boot
tmpfs 378M 0 378M 0% /run/user/0
文件系统管理 >>
vfs文件系统:
virtualenv file system 虚拟文件系统
Linux的系统文件格式有:
ext2;centos5:ext3;centos6:ext4;centos7:xfs
网络共享文件系统:
nfs网络文件系统,访问网络中其他主机的文件就像是自己的计算机一样
smb服务消息块
集群文件系统:
gfs 是谷歌公司为了存储海量的数据而开发的文件系统
ocfs 是由Oracle开发并在GNU通用公共许可证下发布的共享磁盘文件系统。主要是为了适应使用集群计算的 Oracle数据库管理系统。
分布式文件系统:
ceph 为了存储的可靠性和扩展性的分布式文件系统
交互式文件系统
swap 区别主要在于是否是日志型文件系统
文件系统管理工具
创建文件系统
mkfs命令 把分区格式化为某种文件系统
例:
mkfs.xfs
mkfs.ext4
mkfs.ext3
修复文件系统
fsck
检查并修复Linux文件系统
例:fsck.ext4
查看文件系统熟悉
dumpe2fs命令用于打印文件系统的超级块和块组信息,用于ext2 ext3 ext4文件
centos使用的xfs文件系统,使用xfs_info命令查看分区信息
调整文件系统特性
tune2fs
调整/查看ext2/ext3文件系统的文件系统参数,windows系统如果出现以为断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义检查周期及方式
-c max-mount-counts 设置强制自检的挂载次数, -1 表示关闭
# tune2fs -c 30 /dev/hda1 #设置强制检查前文件系统可以挂载的次数
# tune2fs -c -l /dev/hda1 #关闭强制检查挂载次数限制。
列出所有设备的关系,文件系统
lsblk 列出所有的块设备,而且还能显示他们直接的依赖关系
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 0000ad5b-4720-445d-bae7-a52c162526bd /boot
├─sda2 swap 90584313-a6b2-452d-adc9-309b9c1d2e75 [SWAP]
└─sda3 xfs 4b9ab61d-e5b3-4e59-8ff4-bbbb7f29a46d /
sdb xfs 1254287b-76bb-443b-b940-bce2b556bf28
sdc
sr0 iso9660 CentOS 7 x86_64 2018-05-03-20-55-23-00
格式化文件系统
将刚分区好的磁盘格式化文件系统
1.格式化xfx文件系统
[root@localhost ~]# mkfs.xfs -f /dev/sdc
[root@localhost ~]# lsblk -f -a |grep sdc
sdc xfs a3aad73e-cd92-44dc-a435-11b12c69f761
2.格式化为ext4
[root@localhost ~]# mkfs.ext4 /dev/sdb
[root@localhost ~]# lsblk -f -a |grep sdb
sdb ext4 16e92da4-de30-455c-849f-15c71141efb0
关闭文件系统自检
[root@localhost ~]# tune2fs -c -1 /dev/sdb
tune2fs 1.42.9 (28-Dec-2013)
Setting maximal mount count to -
如果有需要将GPT改为MBR,还得是parted命令,fdisk命令无效
修改命令如下:
[root@localhost ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable #输入格式化命令
New disk label type?
New disk label type? msdos #这是是更好文明MBR格式
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk
will be lost. Do you want to continue?
Yes/No? yes #确认格式化
(parted) q #保存退出
Information: You may need to update /etc/fstab.
fsck
用于检查并且试图修复文件系统中的错误。当文件系统发送错误,可用fsck尝试修复。
Linux再开机时,系统会自带调用命令进行需要自检的磁盘检查。
参数:
-a 自动修复文件系统,不询问任何问题
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统
-N 不执行指令,仅列出时间执行会进行的动作
-P 当搭配-A参数使用时,则会同时检查所有文件系统
-r 采用互动模式,再执行修复时询问问题,让用户得以确认并决定处理方式
-R 当搭配-A参数使用时,则会略过/目录的文件系统不予检查
-s 依序执行检查作业,而非同时执行
-t<文件系统类型> 指定要检查的文件系统类型
-T 执行fsck指令时,不显示标题信息
-v 显示指令执行过程
系统开机过程会读取/etc/fstab文件,最后一列为1 或 2 ,磁盘再开机时候会调用fsck自检
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Dec 29 03:41:24 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4b9ab61d-e5b3-4e59-8ff4-bbbb7f29a46d / xfs defaults 0 0
UUID=0000ad5b-4720-445d-bae7-a52c162526bd /boot xfs defaults 0 0
UUID=90584313-a6b2-452d-adc9-309b9c1d2e75 swap swap defaults 0 0
最后一列0表示不对磁盘检查,1是检查
针对磁盘进行修复检查
fsck -t 文件系统类型 设备名
检查ext4类型的分区/dev/sdb
[root@localhost ~]# fsck -t ext4 /dev/sdb
mkfs
Linux mkfs命令用于再特定的分区上简历Linux文件系统
参数:
-f 强制覆盖
device 预备检查的硬盘分区,例如:/dev/sda1
-V 详细显示模式
-t <文件系统类型> 指定要建立何种文件系统
例如:
格式化文件系统
[root@localhost ~]# lsblk -f -a | grep sdb
sdb ext4 16e92da4-de30-455c-849f-15c71141efb0
[root@localhost ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5242880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# lsblk -f -a | grep sdb
sdb xfs 800501c6-20bc-4a88-9717-11ed08a75a87
lsblk
列出块设备信息
安装:yum install util-linux-ng
常见参数:
-a 显示所有设备
-b 以bytes方式显示设备大小
-d 不显示slaves或holders
-f 显示文件系统信息
-h 显示帮助信息
-m 显示权限信息
-l 使用列表格式显示
-n 不显示标题
-o 输出列
-r 使用原始格式显示
-t 显示拓扑结构信息
案例:
lsblk命令默认情况下将以树状列出所有设备块
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 2G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 36.1G 0 part /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom
七个列名称含义:
NAME:块设备名
MAJ:MIN:显示主要和次要设备号
RM:显示设备是否是可移动设备,在本例sr0的RM值等于1,说明它是可移动设备
SIZE:设备容量大小,
RO:表明设备是否为只读,在本例中所有设备的RO值为0 ,表明他们不是只读的
TYPE:显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT:之处设备挂载的挂载点
总结:
xfs文件系统, 用xfs_info显示信息;使用xfs_admin修改信息
ext3 ext4 用dumpepefs显示信息,用tune2fs修改信息
磁盘设备的挂载 >>
Linux下设备不挂载无法使用,挂载通常是将一个存储设备挂载到另一个以及存在的文件夹中,访问这个文件,就可用访问该存储设备的内容了。
一个新的硬盘插到机器上,分区之后,针对分区格式化文件系统
此时还未挂载分区,分区还只是一个封闭的空间,无法读写
针对分区和Linux的文件夹,合并,管理,挂载,即可通过访问被挂载的文件夹查看到磁盘的数据
mount命令
用于挂载Linux系统外的文件
语法:mount 挂载的设备 挂载点
参数:
-l 显示系统所有挂载的设备信息
-a 加载文件/etc/fstab中设置的所有设备
-t 指定设备的文件系统类型,如果不指定,mount自行选择挂载的文件类型
-o 添加挂载选项,是安全,性能优化的重要参数
-r read 只读,-o ro 挂载后的设备是只读的
-w 读写参数,等于-o rw权限
对应mount的-o参数:
参数 | 含义 |
---|---|
async | 以异步方式处理文件系统i/o操作,数据不会同步写入磁盘,而是写到缓冲区,提高系统性能,但损失数据安全性。 |
sync | 所有i/o操作同步处理,数据同步写入磁盘,性能较弱,数据安全性高 |
atime/noatime | 文件被访问时是否修改时间戳,不更改时间,可用提高磁盘i/o速度 |
auto/noauto | 通过-a参数可用自动被挂载/不自动挂载 |
defaults | 默认值包括rw,suid,dev,exec,auto,nouser,async,/etc/fstab大多默认值 |
exec/noexec | 是否允许执行二进制程序,取消提供安全性 |
suid/nosuid | 是否允许suid特殊权限生效 |
remount | 重新挂载 |
ro | 只读 |
rw | 读写 |
user/nouuser | 是否允许普通用户挂载 |
xfs文件系统,mount多出很多新选项
#显示已经挂载情况
[root@localhost ~]# mount -l |grep /dev/sd
/dev/sda3 on / type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
#分区/dev/sda1挂载在 /boot文件夹,文件类型是xfs,参数是(rw,relatime,attr2,inode64,noquota)
rw 读写
relatime mount 选项 relatime (relative atime的意思)。relatime的意思是访问文件时,仅在atime早于文件的更改时间对atime进行更新。
attr2 在磁盘上存储内联扩展属性,提示性能
inode64 允许在文件系统的任意位置创建inode
noquota 强制关闭所有文件系统限额功能
mount挂载案例
1.挂载/dev/sdb5到/mnt文件小,然后写入数据
必须注意/dev/sdb5是分区格式化文件系统之后才能使用
[root@localhost ~]# mkfs.xfs /dev/sdb5
[root@localhost ~]# lsblk -f -a |grep sdb5
├─sdb5 xfs 58fa5f0b-9109-4254-8d0e-229e591486b0
2.挂载
[root@localhost ~]# mount /dev/sdb5 /mnt
[root@localhost ~]# mount -l |grep /sdb5
/dev/sdb5 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
3.查看磁盘使用情况
[root@localhost ~]# df -hT|grep /sdb5
/dev/sdb5 xfs 10G 33M 10G 1% /mnt
4.进入/mnt文件夹写入数据
[root@localhost mnt]# pwd
/mnt
[root@localhost mnt]# du -m ./*
615 ./mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
5.再次查看sdb5使用情况
[root@localhost mnt]# df -hT |grep sdb5
/dev/sdb5 xfs 10G 648M 9.4G 7% /mnt
6.取消挂载后,/mnt下数据消失(注意不能再挂载点下取消挂载,会提示busy)
[root@localhost ~]# umount /dev/sdb5
[root@localhost ~]# du -m /mnt
0 /mnt
7.以只读的形式挂载设备
[root@localhost ~]# mount -o ro /dev/sdb5 /mnt
#可用查看内容
[root@localhost ~]# ls /mnt/
mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#无法写入内容
[root@localhost ~]# touch /mnt/{1.10}.txt
touch: cannot touch ‘/mnt/{
1.10}.txt’: Read-only file system
8.禁止挂载的