锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Linux运维高级核心基础

时间:2022-10-12 01:30:01 sitemap max6647mua温度传感器

定时任务 >>

检查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.禁止挂载的

相关文章