龙之介大人

linux文件管理与磁盘操作
3.1脚本文件名的搜寻我们知道在终端机模式当中,连续输入两次[tab]按键就能够知道用户有多少指令可以下达3.1....
扫描右侧二维码阅读全文
28
2019/05

linux文件管理与磁盘操作

3.1脚本文件名的搜寻

  • 我们知道在终端机模式当中,连续输入两次[tab]按键就能够知道用户有多少指令可以下达

3.1.1which(寻找[执行文件])

[root@study ~]# which [-a] command
选项或参数:
-a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的指令名称

范例一:搜寻 ifconfig 这个指令的完整文件名 
[root@study ~]# which ifconfig 
/sbin/ifconfig

3.1.2whereis(文件名的搜寻)

  • whereis 只找系统中某些特定目录底下的文件
  • locate 则是利用数据库来搜寻文件名
[root@study ~]# whereis [-bmsu] 
文件或目录名 选项与参数:
-l :可以列出 whereis 会去查询的几个主要目录而已 -b :只找 binary 格式的文件
-m :只找在说明文件 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

范例一:请找出 ifconfig 这个档名
[root@study ~]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

范例二:只找出跟 passwd 有关的『说明文件』档名(man page)  
[root@study ~]# whereis passwd # 全部的档名通通列出来!
passwd: /usr/bin/passwd 
/etc/passwd 
/usr/share/man/man1/passwd.1.gz 
/usr/share/man/man5/passwd.5.gz
[root@study ~]# whereis -m passwd # 只有在 man 里面的档名才抓出来! 
passwd: /usr/share/man/man1/passwd.1.gz 
/usr/share/man/man5/passwd.5.gz
whereis 主要是针 对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page 文件进行查找.

3.1.3locate/updatedb

[root@study ~]# locate [-ir] keyword 
选项与参数:
-i :忽略大小写的差异;
-c :不输出档名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等 -r :后面可接正规表示法的显示方式


范例一:找出系统中所有与 passwd 相关的档名,且只列出 5 个 [root@study ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

范例二:列出 locate 查询所使用的数据库文件之文件名与各数据数量 [root@study ~]# locate -S
Database /var/lib/mlocate/mlocate.db:
            8,086 directories # 总纪录目录数 
            109,605 files # 总纪录文件数 
            5,190,295 bytes in file names 
            2,349,150 bytes used to store database

你会发现使用 locate 来寻找数据的时候特别的快,这是因为 locate寻找的数据是由『已建立的数据库 /var/lib/mlocate/』里面的数据所搜寻到的.

缺点是数据库的建立默认是在每天执行一次,所以当你新建立起来的文件, 却还 在数据库更新之前搜寻该文件,那么 locate 会告诉你『找不到!』

更新 locate 数据库的方法非常简单,直接输入『 updatedb 』 就可以了! updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行 搜寻文件名的动作, 最后就更新整个数据库文件.

  • updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库 文件;
  • locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。

3.1.4find(全盘搜寻)

[root@study ~]# find [PATH] [option] [action]
选项与参数:
1. 与时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的文件; 
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件档名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件档名

范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出 
[root@study ~]# find / -mtime 0
# 那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前, 
# 有变动过内容的文件都会被列出来!那如果是三天前的 24 小时内?
# find / -mtime 3 有变动过的文件都被列出的意思!

范例二:寻找 /etc 底下的文件,如果文件日期比 /etc/passwd 新就列出 
[root@study ~]# find /etc -newer /etc/passwd
# -newer 用在分辨两个文件之间的新旧关系是很有用的!

但如果我想要找出『4 天内被更动过的文件档名』?

那可以使用『 find /var -mtime -4 』

那如果是『4 天前的那一天』?

就用『 find /var -mtime 4 』,有没有加上『+, -』差别很大喔!
  • +4 代表大于等于 5 天前的檔名:ex> find /var -mtime +4
  • -4 代表小于等于 4 天内的文件档名:ex> find /var -mtime -4
  • 4 则是代表 4-5 那一天的文件档名:ex> find /var -mtime 4

find搜索用户文件选项与参数

选项与参数:
2. 与使用者或组名有关的参数:
-uid n :n 为数字,这个数字是用户的账号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与账号名称对应的数字。这方面我们会在第四篇介绍。
-gid n :n 为数字,这个数字是组名的 ID,亦即 GID,这个 GID 记录在 /etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者账号名称喔!例如 dmtsai
-group name:name 为组名喔,例如 users ;
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人! -nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件!当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。


范例三:搜寻 /home 底下属于 dmtsai 的文件
[root@study ~]# find /home -user dmtsai
# 这个东西也很有用的~当我们要找出任何一个用户在系统当中的所有文件时, 
# 就可以利用这个指令将属于某个使用者的所有文件都找出来喔!

范例四:搜寻系统中不属于任何人的文件
[root@study ~]# find / -nouser
# 透过这个指令,可以轻易的就找出那些不太正常的文件。如果有找到不属于系统任何人的文件时, 
# 不要太紧张,那有时候是正常的~尤其是你曾经以原始码自行编译软件时。

find搜寻文件类型选项与参数

选项与参数:
3. 与文件权限及名称有关的参数:
-name filename:搜寻文件名为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。
               这个SIZE 的规格有:c: 代表 byte,k: 代表1024bytes。
               所以,要找比 50KB还要大的文件,就是『 -size +50k 』
-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:
            一般正规文件 (f), 装置文件 (b, c),
            目录 (d), 连结档(l), socket (s), 及 FIFO (p) 等属性。 
-perm mode :搜寻文件权限『刚好等于』 mode 的文件,这个mode 为类似 chmod的属性值,
            举例来说,-rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻文件权限『必须要全部囊括 mode 的权限』的文件,
            举例来说,我们要搜寻 -rwxr--r-- ,亦即 0744 的文件,使用 -perm -0744, 
            当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来, 
            因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
-perm /mode :搜寻文件权限『包含任一 mode 的权限』的文件,
            举例来说,我们搜寻 -rwxr-xr-x ,
            亦即 -perm /755 时,但一个文件属性为 -rw------- 也会被列出来,
            因为他有 -rw.... 的属性存在!

范例五:找出档名为 passwd 这个文件 
[root@study ~]# find / -name passwd

范例五-1:找出文件名包含了 passwd 这个关键词的文件
[root@study ~]# find / -name "*passwd*"
# 利用这个 -name 可以搜寻档名啊!默认是完整文件名,如果想要找关键词, 
# 可以使用类似 * 的任意字符来处理

范例六:找出 /run 目录下,文件类型为 Socket 的檔名有哪些?
[root@study ~]# find /run -type s
# 这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,
# 例如 socket 与 FIFO 文件,可以用 find /run -type p 或 -type s 来找

范例七:搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
[root@study ~]# find / -perm /7000
# 所谓的 7000 就是 ---s--s--t ,那么只要含有 s 或 t 的就列出,所以当然要使用 /7000,
# 使用 -7000 表示要同时含有 ---s--s--t 的所有三个权限。而只需要任意一个,就是 /7000 ~瞭乎?
            

假设我想要找出来 /usr/bin, /usr/sbin 这两个目录下, 只要具有 SUID 或 SGID 就列出来该文件?

[root@study ~]# find /usr/bin /usr/sbin -perm /6000

find搜寻额外动作执行

选项与参数:
4. 额外可进行的动作:
-exec command :command 为其他指令,
-exec 后面可再接额外的指令来处理搜寻到的结果。 
-print :将结果打印到屏幕上,这个动作是预设动作!

范例八:将上个范例找到的文件使用 ls -l 列出来~
[root@study ~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \; 
# 注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
# 所以仅能使用 ls -l 不可以使用 ll 喔!注意注意!

范例九:找出系统中,大于 1MB 的文件 
[root@study ~]# find / -size +1M
范例八命令串解释
  1. {} 代表的是『由 find 找到的内容』,如上图所示,find 的结果会被放置到 {} 位置中;
  2. -exec 一直到 ; 是关键词,代表 find 额外动作的开始 (-exec) 到结束 (;) ,在这中间的就是 find 指令内

的额外动作。 在本例中就是『 ls -l {} 』啰!

  1. 因为『 ; 』在 bash 环境下是有特殊意义的,因此利用反斜杠来跳脱。

如果想要找出 /etc 底下檔名包含 httpd 的文件

[root@study ~]# find /etc -name 'httpd'
  • 不但可以指定搜寻的目录(连同次目录),并且可以利用额外的选项与参数来找到最正确的档名!
  • 不过由于 find 在寻找数据的时后相当的操硬盘!所以没事情不要使用 find指令,可以使用上面提到的 whereis 与 locate 取代.

3.2dumpe2fs(查询Ext4的superblock信息)

注: CentOS 7 现在是以 xfs 为预设文件系统, 所以目前你的系统应该无法使用 dumpe2fs 去查 询任何文件系统的。
[root@study ~]# dumpe2fs [-bh] 装置文件名
选项与参数:
-b :列出保留为坏轨的部分(一般用不到吧!?)
-h :仅列出 superblock 的数据,不会列出其他的区段内容!

3.3linux支持的文件系统

常见的支持文件系统有:
  • 传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
  • 日志式文件系统: ext3 /ext4 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS / ZFS
  • 网络文件系统: NFS / SMBFS

查询你linux支持的文件系统有哪些?

ls -l /lib/modules/$(uname -r)/kernel/fs

查询系统目前已加载到内存中支持的文件系统

cat /proc/filesystems

3.4df(磁盘与目录容量)

现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记 载的。 那在文字接口底下该如何叫出这几个数据呢?
  • df:列出文件系统的整体磁盘使用量;
[root@study ~]# df [-ahikHTm] [目录或文件名]
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示; -H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出; -i :不用磁盘容量,而以 inode 的数量来显示
  
范例一:将系统内所有的 filesystem 列出来!
[dmtsai@localhost ~]$ df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  10475520 3783572   6691948  37% /
devtmpfs                   926756       0    926756   0% /dev
tmpfs                      942092     100    941992   1% /dev/shm
tmpfs                      942092    8916    933176   1% /run
tmpfs                      942092       0    942092   0% /sys/fs/cgroup
/dev/mapper/centos-home   5232640   37020   5195620   1% /home
/dev/sda2                 1038336  167196    871140  17% /boot
tmpfs                      188420      20    188400   1% /run/user/1000
# 在 Linux 底下如果 df 没有加任何选项,那么默认会将系统内所有的
# (不含特殊内存内的文件系统与 swap) 都以 1 Kbytes 的容量来列出来!
# 至于那个 /dev/shm 是与内存有关的挂载,先不要理他!
示例一参数解释
  • Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
  • 1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
  • Used:顾名思义,就是使用掉的磁盘空间啦!
  • Available:也就是剩下的磁盘空间大小;
  • Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系

统问题喔!(例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)

  • Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)
范例二:将容量结果以易读的容量格式显示出来
[dmtsai@localhost ~]$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   10G  3.7G  6.4G  37% /
devtmpfs                 906M     0  906M   0% /dev
tmpfs                    921M  100K  920M   1% /dev/shm
tmpfs                    921M  8.8M  912M   1% /run
tmpfs                    921M     0  921M   0% /sys/fs/cgroup
/dev/mapper/centos-home  5.0G   37M  5.0G   1% /home
/dev/sda2               1014M  164M  851M  17% /boot
tmpfs                    185M   20K  184M   1% /run/user/1000
# 不同于范例一,这里会以 G/M 等容量格式显示出来,比较容易看!

范例三:将系统内的所有特殊文件格式及名称都列出来
[dmtsai@localhost ~]$ df -aT
Filesystem              Type            1K-blocks    Used Available Use% Mounted on
rootfs                  -                       -       -         -    - /
sysfs                   sysfs                   0       0         0    - /sys
proc                    proc                    0       0         0    - /proc
devtmpfs                devtmpfs           926756       0    926756   0% /dev
securityfs              securityfs              0       0         0    - /sys/kernel/security
tmpfs                   tmpfs              942092     100    941992   1% /dev/shm
devpts                  devpts                  0       0         0    - /dev/pts
tmpfs                   tmpfs              942092    8916    933176   1% /run
tmpfs                   tmpfs              942092       
...(省略部分).....
/dev/mapper/centos-root xfs              10475520 3783012   6692508  37% /
...(省略部分).....
/dev/mapper/centos-home xfs               5232640   37020   5195620   1% /home
/dev/sda2               xfs               1038336  167196    871140  17% /boot
tmpfs                   tmpfs              188420      20    188400   1% /run/user/1000
...(省略部分).....
binfmt_misc             binfmt_misc             0       0         0    - /proc/sys/fs/binfmt_misc
# 系统里面其实还有很多特殊的文件系统存在的。那些比较特殊的文件系统几乎
# 都是在内存当中,例如 /proc 这个挂载点。因此,这些特殊的文件系统 # 都不会占据磁盘空间! 

范例四:将 /etc 底下的可用的磁盘容量以易读的容量格式显示
[dmtsai@localhost ~]$ df -h /etc
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   10G  3.7G  6.4G  37% /
# 这个范例比较有趣一点啦,在 df 后面加上目录或者是文件时, df
# 会自动的分析该目录或文件所在的 partition ,并将该 partition 的容量显示出来, # 所以,您就可以知道某个目录底下还有多少容量可以使用了!

范例五:将目前各个 partition 当中可用的 inode 数量列出
[dmtsai@localhost ~]$ df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root    10M  136K  9.9M    2% /
devtmpfs                  227K   374  226K    1% /dev
tmpfs                     231K    10  230K    1% /dev/shm
tmpfs                     231K   504  230K    1% /run
tmpfs                     231K    13  230K    1% /sys/fs/cgroup
/dev/mapper/centos-home   5.0M   139  5.0M    1% /home
/dev/sda2                 1.0M   330  1.0M    1% /boot
tmpfs                     231K    27  230K    1% /run/user/1000
# 这个范例则主要列出可用的 inode 剩余量与总容量。分析一下与范例一的关系, # 你可以清楚的发现到,通常 inode 的数量剩余都比 block 还要多呢
由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的 信息, 所以这个指令显示结果的速度非常的快速!
在显示的结果中你需要特别留意的是那个根目录 的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。

3.5du(搜寻磁盘内文件数据)

  • du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
[root@study ~]# du [-ahskm] 文件或目录名称
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。 -h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

范例一:列出目前目录下的所有文件容量
[dmtsai@localhost ~]$ du
0    ./.mozilla/extensions
0    ./.mozilla/plugins
...(省略部分)....
3616    ./.cache
256    ./.local/share
256    ./.local
4036    .
# 直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』
# 的文件与目录所占用的磁盘空间。但是,实际显示时,仅会显示目录容量(不含文件), # 因此 . 目录有很多文件没有被列出来,所以全部的目录相加不会等于 . 的容量喔!
# 此外,输出的数值数据为 1K 大小的容量单位。


范例二:同范例一,但是将文件的容量也列出来
[dmtsai@localhost ~]$ du -a

范例三:检查根目录底下每个目录所占用的容量
[root@localhost ~]# du -sm /*
0    /bin
132    /boot
...(中间省略)....
0    /proc
1    /root
9    /run
...(中间省略)....
1    /tmp
3268/usr
333    /var
# 这是个很常被使用的功能~利用通配符 * 来代表每个目录,如果想要检查某个目录下,
# 哪个次目录占用最大的容量,可以用这个方法找出来。值得注意的是,如果刚刚安装好 Linux 时, # 那么整个系统容量最大的应该是 /usr 。而 /proc 虽然有列出容量,但是那个容量是在内存中,
# 不占磁盘空间。至于 /proc 里头会列出一堆『No such file or directory』 的错误,
# 别担心!因为是内存内的程序,程序执行结束就会消失,因此会有些目录找不到,是正确的!
与 df 不一样的是,du 这个指令其实会直接到文件系统内去搜寻所有的文件数据, 所以上述第三个 范例指令的运作会执行一小段时间!
此外,在默认的情况下,容量的输出是以 KB 来设计的, 如果 你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可

3.6ln(实体连接与符号链接)

  • 在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链 接到目标文件(或目录);
  • 另一种则是透过文件系统的 inode 连结来产生新档名,而不是产生新文件! 这种称为实体链接 (hard link)。
[root@study ~]# ln [-sf] 来源文件 目标文件 
选项与参数:
-s :如果不加任何参数就进行连结,那就是 hard link,至于 -s 就是 symbolic link 
-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!
使用 ln 如果不加任何参数的话,那么就是 Hard Link.
而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思.

3.7磁盘操作

对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来磁盘已经渐渐的被当成 是消耗品了.如果我们想要在系统里面新增一颗磁盘时,应该有哪些动作需要做的呢
  1. 对磁盘进行分区,以建立可用的 partition ;
  2. 对该 partition 进行格式化 (format),以建立系统可用的 filesystem;
  3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验;
  4. 在 Linux 系统上,需要建立挂载点 (亦即是目录),并将他挂载上来;

3.7.1lsblk(列出系统里所有磁盘列表)

  • lsblk 可以看成『 list block device 』的缩写,就是列出所有储存装置的意思!
[root@study ~]# lsblk [-dfimpt] [device]
选项与参数:
-d :仅列出磁盘本身,并不会列出该磁盘的分区数据
-f :同时列出该磁盘内的文件系统名称
-i :使用 ASCII 的线段输出,不要使用复杂的编码 (再某些环境下很有用) -m :同时输出该装置在 /dev 底下的权限数据 (rwx 的数据)
-p :列出该装置的完整文件名!而不是仅列出最后的名字而已。
-t :列出该磁盘装置的详细数据,包括磁盘队列机制、预读写的数据量大小等

范例一:列出本系统下的所有磁盘与磁盘内的分区信息
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
|-sda1            8:1    0    2M  0 part 
|-sda2            8:2    0    1G  0 part /boot
`-sda3            8:3    0   28G  0 part 
  |-centos-root 253:0    0   10G  0 lvm  /
  |-centos-swap 253:1    0    1G  0 lvm  [SWAP]
  `-centos-home 253:2    0    5G  0 lvm  /home
sr0              11:0    1 1024M  0 rom  
sr1              11:1    1 1024M  0 rom  
参数解释:
  • NAME:就是装置的文件名啰!会省略 /dev 等前导目录!
  • MAJ:MIN:其实核心认识的装置都是透过这两个代码来熟悉的!分别是主要:次要装置代码!
  • RM:是否为可卸除装置 (removable device),如光盘、USB 磁盘等等
  • SIZE:当然就是容量啰!
  • RO:是否为只读装置的意思
  • TYPE:是磁盘 (disk)、分区槽 (partition) 还是只读存储器 (rom) 等输出
  • MOUTPOINT:就是前一章谈到的挂载点!
范例二:仅列出 /dev/sda 装置内的所有数据的完整文件名
[root@localhost ~]# lsblk -ip /dev/sda
NAME                        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda                      8:0    0  40G  0 disk 
|-/dev/sda1                   8:1    0   2M  0 part 
|-/dev/sda2                   8:2    0   1G  0 part /boot
`-/dev/sda3                   8:3    0  28G  0 part 
  |-/dev/mapper/centos-root 253:0    0  10G  0 lvm  /
  |-/dev/mapper/centos-swap 253:1    0   1G  0 lvm  [SWAP]
  `-/dev/mapper/centos-home 253:2    0   5G  0 lvm  /home    # 完整的檔名,由 / 开始写

3.7.2blkid(列出装置的UUID)

虽然 lsblk 已经可以使用 -f 来列出文件系统与装置的 UUID 数据,但是blkid比较方便
[root@localhost ~]# blkid
/dev/sda2: UUID="ca9503b5-43d6-445a-9ac6-a5e0b9da808d" TYPE="xfs" PARTUUID="a15074c2-ca7b-40fd-88b0-666e5f441309" 
/dev/sda3: UUID="58cMGE-TN4o-mdPa-rwvs-nFFW-7ttI-Ar7520" TYPE="LVM2_member" PARTUUID="8adeba36-c381-402a-b63f-e19931e92688" 
/dev/mapper/centos-root: UUID="caa55b5e-a614-4e78-a9d8-b467cf333462" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="89c81645-b4f9-4dbf-9448-a35586ad1d0f" TYPE="swap" 
/dev/mapper/centos-home: UUID="cf7ea973-0fc9-4e9e-b2da-16fc5034fdfc" TYPE="xfs" 
/dev/sda1: PARTUUID="e9867690-5f3d-460e-8571-89bf176275be" 
  • 如上所示,每一行代表一个文件系统,主要列出装置名称、UUID 名称以及文件系统的类型 (TYPE).

3.7.3parted(列出磁盘分区信息)

[root@localhost ~]#parted device_name print

示例一:列出 /dev/sda 磁盘的相关数据
[root@localhost ~]# parted /dev/sda print
Model: ATA VBOX HARDDISK (scsi) #磁盘的模块名称(厂商)
Disk /dev/sda: 42.9GB        #磁盘的总容量
Sector size (logical/physical): 512B/512B    #磁盘的每个逻辑/物理扇区容量
Partition Table: gpt        #分区别的格式(MBR/GPT)
Disk Flags: pmbr_boot

Number  Start   End     Size    File system  Name  Flags        #分区数据
 1      1049kB  3146kB  2097kB                     bios_grub
 2      3146kB  1077MB  1074MB  xfs
 3      1077MB  31.1GB  30.0GB                     lvm

3.7.4gdisk/fdisk(磁盘分区)

  • MBR 分区表请使用 fdisk 分区, GPT 分区表请 使用 gdisk 分区!
[root@localhost~]# gdisk 装置名称

范例:由前面lsblk 输出,我们知道系统有个 /dev/sda,请观察该磁盘的分区与相关数据
[root@localhost ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): GPT    # 输入要分区的格式
b    back up GPT data to a file
c    change a partition's name
d    delete a partition         #删除一个分区
i    show detailed information on a partition
l    list known partition types
n    add a new partition        #增加一个分区
o    create a new empty GUID partition table (GPT)
p    print the partition table        #打印出分区表(常用)
q    quit without saving changes    #不储存分区就直接离开gdisk
r    recovery and transformation options (experts only)
s    sort partitions
t    change a partition's type code
v    verify disk
w    write table to disk and exit    #储存分区炒作后离开gdisk
x    extra functionality (experts only)
?    print this menu

Command (? for help): p        #打印磁盘的状态
Disk /dev/sda: 83886080 sectors, 40.0 GiB    # 磁盘文件名/扇区数与总容量
Logical sector size: 512 bytes    # 单一扇区大小为 512 bytes
Disk identifier (GUID): E28CB73B-019E-4C86-A45D-BA241C9FACAB        # 磁盘的 GPT 标识符
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 23179197 sectors (11.1 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        60708863   27.9 GiB    8E00  
#分区编号    开始扇区号码        结束扇区号码     容量大小
Command (? for help): 
  • Number:分区槽编号,1 号指的是 /dev/vda1 这样计算。
  • Start (sector):每一个分区槽的开始扇区号码位置
  • End (sector):每一个分区的结束扇区号码位置,与 start 之间可以算出分区槽的总容量
  • Size:就是分区槽的容量了
  • Code:在分区槽内的可能的文件系统类型。Linux 为 8300,swap 为 8200。不过这个项目只是一个提示而
    已,不见得真的代表此分区槽内的文件系统喔!
  • Name:文件系统的名称等等。

gdisk新增分区

分区需求:
  • 1GB 的 xfs 文件系统 (Linux)
  • 1GB 的 vfat 文件系统 (Windows)
  • 0.5GB 的 swap (Linux swap)(这个分区等一下会被删除!)
[root@localhost ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p #打印磁盘信息
Disk /dev/sda: 83886080 sectors, 40.0 GiB
....(省略信息)....
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        60708863   27.9 GiB    8E00  

Command (? for help): n
Partition number (4-128, default 4): 4
First sector (34-83886046, default = 60708864) or {+-}size{KMGTP}: 60708864 #开始扇区
Last sector (60708864-83886046, default = 83886046) or {+-}size{KMGTP}: +1G        #分区大小
# 我们不需要自己去计算扇区号码,透过 +容量 的这个方式,
# 就可以让 gdisk 主动去帮你算出最接近你需要的容量的扇区号码!
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):  #默认类型
# 这里在让你选择未来这个分区预计使用的文件系统!预设都是 Linux 文件系统的 8300 !
Changed type of partition to 'Linux filesystem'

Command (? for help): p
...(省略信息)....
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        60708863   27.9 GiB    8E00  
   4        60708864        62806015   1024.0 MiB  8300  Linux filesystem

#后面增加分区信息相同略...
Command (? for help): p
....(信息省略)....
Partitions will be aligned on 2048-sector boundaries
Total free space is 17960893 sectors (8.6 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  
   2            6144         2103295   1024.0 MiB  0700  
   3         2103296        60708863   27.9 GiB    8E00  
   4        60708864        62806015   1024.0 MiB  8300  Linux filesystem
   5        62806016        64903167   1024.0 MiB  0700  Microsoft basic data
   6        64903168        65927167   500.0 MiB   8200  Linux swap

Command (? for help): w #写入分区信息

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y #确认分区
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
# gdisk 会先警告你可能的问题,我们确定分区是对的,这时才按下 y !不过怎么还有警告? 
# 这是因为这颗磁盘目前正在使用当中,因此系统无法立即加载新的分区表~

#查看分区表
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

  11        0    1048575 sr0
  11        1    1048575 sr1
   8        0   41943040 sda
   8        1       2048 sda1
   8        2    1048576 sda2
   8        3   29302784 sda3
 253        0   10485760 dm-0
 253        1    1048576 dm-1
 253        2    5242880 dm-2
#可以发现,并没有 sda4,sda5,sda6 因为核心还没有更新!

partprobe(更新核心分区表信息)

[root@localhost ~]# partprobe [-s] # 你可以不要加 -s !那么屏幕不会出现讯息! 
[root@localhost ~]# partprobe -s # 不过还是建议加上 -s 比较清晰!
/dev/sda: gpt partitions 1 2 3 4 5 6

#更新后lsblk分区表信息
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
|-sda1            8:1    0    2M  0 part 
|-sda2            8:2    0    1G  0 part /boot
|-sda3            8:3    0   28G  0 part 
| |-centos-root 253:0    0   10G  0 lvm  /
| |-centos-swap 253:1    0    1G  0 lvm  [SWAP]
| `-centos-home 253:2    0    5G  0 lvm  /home
|-sda4            8:4    0    1G  0 part 
|-sda5            8:5    0    1G  0 part 
`-sda6            8:6    0  500M  0 part 
sr0              11:0    1 1024M  0 rom  
sr1              11:1    1 1024M  0 rom  

gdisk删除分区

Command (? for help): d
Partition number (1-6): 6

Command (? for help): w

Do you want to proceed? (Y/N): y

#更新分区表信息
  • fdisk 使用方法和gdisk同样,略...

3.7.5 磁盘格式化

  • XFS文件系统mkfs.xfs
[root@study ~]# mkfs.xfs [-b bsize] [-d parms] [-i parms] [-l parms] [-L label] [-f] \ [-r parms] 装置名称
选项与参数:
关于单位:底下只要谈到『数值』时,没有加单位则为 bytes 值,可以用 k,m,g,t,p (小写)等来解释
        比较特殊的是 s 这个单位,它指的是 sector 的『个数』喔!
-b :后面接的是 block 容量,可由 512 到 64k,不过最大容量限制为 Linux 的 4k 喔! 
-d :后面接的是重要的 data section 的相关参数值,主要的值有:
    agcount=数值 :设定需要几个储存群组的意思(AG),通常与 CPU 有关
    agsize=数值 :每个 AG 设定为多少容量的意思,通常 agcount/agsize 只选一个设定即可
    file         :指的是『格式化的装置是个文件而不是个装置』的意思!(例如虚拟磁盘)
    size=数值    :data section 的容量,亦即你可以不将全部的装置容量用完的意思
    su=数值         :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用
    sw=数值         :当有 RAID 时,那个 stripe 数值的意思,与底下的 sw 搭配使用
    sunit=数值     :与 su 相当,不过单位使用的是『几个 sector(512bytes 大小)』的意思
    swidth=数值    :就是 su*sw 的数值,但是以『几个 sector(512bytes 大小)』来设定
-f :如果装置内已经有文件系统,则需要使用这个 -f 来强制格式化才行!
    size=数值 :最小是 256bytes 最大是 2k,一般保留 256 就足够使用了! 
    internal=[0|1]:log 装置是否为内建?预设为 1 内建,如果要用外部装置,使用底下设定 
    logdev=device :log 装置为后面接的那个装置上头的意思,需设定 internal=0 才可!
    size=数值 :指定这块登录区的容量,通常最小得要有 512 个 block,大约 2M 以上才行!
-L :后面接这个文件系统的标头名称 Label name 的意思!
-r :指定 realtime section 的相关设定值,常见的有:
    extsize=数值 :就是那个重要的 extent 数值,一般不须设定,但有 RAID 时, 
            最好设定与 swidth 的数值相同较佳!最小为 4K 最大为 1G 。
    
范例:将前面分区出来的 /dev/sda4 格式化为 xfs 文件系统
[root@localhost ~]# mkfs.xfs /dev/sda4 
meta-data=/dev/sda4              isize=256    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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
# 很快格是化完毕!都用默认值!较重要的是 inode 与 block 的数值

[root@localhost ~]# blkid /dev/sda4
/dev/sda4: UUID="beac490c-cd38-4aba-82c2-2d57e49f61a1" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="62421100-eb94-43c9-9fdf-40a74e7de16b" 
  • EXT4文件系统mkfs.ext4
[root@localhost ~]# mkfs.ext4 [-b size] [-L label] 装置名称 选项与参数:
-b :设定 block 的大小,有 1K, 2K, 4K 的容量,
-L :后面接这个装置的标头名称。

[root@localhost ~]#mkfs.ext4 /dev/sda5

3.7.6文件系统挂在与卸载

  • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
  • 单一目录不应该重复挂载多个文件系统;
  • 要作为挂载点的目录,理论上应该都是空目录才是。
mount挂在文件
[root@study ~]# mount -a
[root@study ~]# mount [-l]
[root@study ~]# mount [-t 文件系统] LABEL='' 挂载点
[root@study ~]# mount [-t 文件系统] UUID='' 挂载点 # 建议用这种方式挂载! 
[root@study ~]# mount [-t 文件系统] 装置文件名 挂载点

选项与参数:
-a :依照配置文件 /etc/fstab 的数据将所有未挂载的磁盘都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名称!
-t :可以加上文件系统种类来指定欲挂载的类型。
    常见的 Linux 支持类型有:xfs, ext3, ext4,reiserfs, vfat, iso9660(光盘格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在默认的情况下,系统会将实际挂载的情况实时写入 /etc/mtab 中,以利其他程序的运作。
    但在某些情况下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选项。
-o :后面可以接一些挂载时额外加上的参数!比方说账号、密码、读写权限等:
    async, sync:    此文件系统是否使用同步写入 (sync) 或异步 (async) 的内存机制,请参考文件系统运作方式。预设为 async。
    atime,noatime:    是否修订文件的读取时间(atime)。为了效能,某些时刻可使用 noatime
    ro, rw:            挂载文件系统成为只读(ro) 或可擦写(rw)
    auto, noauto:    允许此 filesystem 被以 mount -a 自动挂载(auto)
    dev, nodev:        是否允许此 filesystem 上,可建立装置文件? dev 为可允许
    suid, nosuid:    是否允许此 filesystem 含有 suid/sgid 的文件格式?
    exec, noexec:    是否允许此 filesystem 上拥有可执行 binary 文件?
    user, nouser:    是否允许此 filesystem 让任何使用者执行 mount ?一般来说, 
                    mount 仅有 root 可以进行,但下达 user 参数,则可让一般 user 也能够对此 partition 进行 mount 
    defaults:        默认值为:rw, suid, dev, exec, auto, nouser, and async        
    remount:         重新挂载,这在系统出错,或重新更新参数时,很有用!
                    

范例:找出 /dev/sda4 的 UUID 后,用该 UUID 来挂载文件系统到 /data/xfs 内
[root@localhost ~]# mount UUID="beac490c-cd38-4aba-82c2-2d57e49f61a1" /data/xfs

[root@localhost ~]# df -h /data/xfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4      1014M   33M  982M   4% /data/xfs

#挂载光盘到/data/cdrom目录下
[root@localhost ~]# blkid /dev/sr1 
/dev/sr1: UUID="2015-12-09-23-14-10-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
[root@localhost ~]# mount /dev/sr1 /data/cdrom/
mount: /dev/sr1 is write-protected, mounting read-only
[root@localhost ~]# df /data/cdrom/
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sr1         4227724 4227724         0 100% /data/cdrom
  • 光驱一挂载之后就无法退出光盘片了!除非你将他卸除才能够退出!
卸载挂载磁盘
umount /dev/sda4
umount /data/xfs
umount /dev/sr1 /data/cdrom

3.7.7文件系统参数修订

  • linux磁盘 /dev/sda 的相关装置代码如下:
[root@localhost data]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 May 28 21:00 /dev/sda
brw-rw----. 1 root disk 8, 1 May 28 21:00 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 28 21:00 /dev/sda2
brw-rw----. 1 root disk 8, 3 May 28 21:00 /dev/sda3
brw-rw----. 1 root disk 8, 4 May 28 21:00 /dev/sda4
brw-rw----. 1 root disk 8, 5 May 28 21:00 /dev/sda5
  • 常见装置代码如下:
磁盘文件名MajorMinor
/dev/sda80-15
/dev/sdb816-31
/dev/loop070
/dev/loop071
[root@study ~]# mknod 装置文件名 [bcp] [Major] [Minor] 选项与参数:
装置种类:
b :设定装置名称成为一个周边储存设备文件,例如磁盘等;
c :设定装置名称成为一个周边输入设备文件,例如鼠标/键盘等;
p :设定装置名称成为一个 FIFO 文件; Major :主要装置代码;
Minor :次要装置代码;

范例:由上述的介绍我们知道 /dev/sda10 装置代码 8, 10,请建立并查阅此装置
[root@localhost data]# mknod /dev/sda10 b 8 10 #修改sda装置码
[root@localhost data]# ll /dev/sda10 
brw-r--r--. 1 root root 8, 10 May 28 21:15 /dev/sda10
  • xfs_admin修改XFS文件系统的UUID与Label name
如果你当初格式化的时候忘记加上标头名称,后来想要再次加入时,不需要重复格式化!直接使用这 个 xfs_admin 即可。 这个指令直接拿来处理 LABEL name 以及 UUID 即可.
[root@study ~]# xfs_admin [-lu] [-L label] [-U uuid] 装置文件名 选项与参数:
-l :列出这个装置的 label name
-u :列出这个装置的 UUID
-L :设定这个装置的 Label name
-U :设定这个装置的 UUID 喔!

范例:设定 /dev/sda4 的 label name 为 xiaoqi_xfs,并测试挂载
[root@localhost ~]# xfs_admin -L xiaoqi_xfs /dev/sda4
writing all SBs
new label = "xiaoqi_xfs"
[root@localhost ~]# xfs_admin -l /dev/sda4
label = "xiaoqi_xfs"
[root@localhost ~]# mount LABEL=xiaoqi_xfs /data/xfs/

范例:利用 uuidgen 产生新 UUID 来设定 /dev/sda4,并测试挂载
[root@localhost ~]# uuidgen  #生成uuid
d82b8327-c344-429a-9147-2cefe62379a7
[root@localhost ~]# xfs_admin -u /dev/sda4 
UUID = beac490c-cd38-4aba-82c2-2d57e49f61a1
[root@localhost ~]# xfs_admin -U d82b8327-c344-429a-9147-2cefe62379a7 /dev/sda4  #替换现有的uuid
Clearing log and setting UUID
writing all SBs
new UUID = d82b8327-c344-429a-9147-2cefe62379a7
[root@localhost ~]# blkid /dev/sda4 
/dev/sda4: LABEL="xiaoqi_xfs" UUID="d82b8327-c344-429a-9147-2cefe62379a7" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="62421100-eb94-43c9-9fdf-40a74e7de16b" 

#挂在分区
[root@localhost ~]# mount UUID="d82b8327-c344-429a-9147-2cefe62379a7" /data/xfs
[root@localhost ~]# df /data/xfs/
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda4        1038336 32928   1005408   4% /data/xfs

*tune2fs修改ext4的label name与UUID

[root@study ~]# tune2fs [-l] [-L Label] [-U uuid] 装置文件名 选项与参数:
-l :类似 dumpe2fs -h 的功能~将 superblock 内的数据读出来~ -L :修改 LABEL name
-U :修改 UUID 啰!

#查看ext4 volume name是否设定
[root@localhost ~]# dumpe2fs -h /dev/sda5 | grep name
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none> #none表示没有设定

范例:列出 /dev/vda5 的 label name 之后,将它改成 xiaoqi_ext4
[root@localhost ~]# tune2fs -L xiaoqi_ext4 /dev/sda5 
tune2fs 1.42.9 (28-Dec-2013)

[root@localhost ~]# dumpe2fs -h /dev/sda5 | grep name 
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   xiaoqi_ext4
#挂在分区
[root@localhost ~]# mount LABEL=xiaoqi_ext4 /data/ext4
[root@localhost ~]# df /data/ext4/
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/sda5         999320  2564    927944   1% /data/ext4

3.7.8开机自动挂载

/etc/fstab
/etc/mtab
  • 根目录 / 是必须挂载的,而且一定要先于其它 mount point 被挂载进来。
  • 其它 mount point 必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则 (FHS)
  • 所有 mount point 在同一时间之内,只能挂载一次。
  • 所有 partition 在同一时间之内,只能挂载一次。
  • 如若进行卸除,您必须先将工作目录移到 mount point(及其子目录) 之外。
#查看/etc/fstab挂载记录
[root@localhost ~]# cat /etc/fstab 
#Dervice                    Mount point          filesystem parameters   dump fsck
/dev/mapper/centos-root /                       xfs     defaults     0   0
UUID=ca9503b5-43d6-445a-9ac6-a5e0b9da808d /boot xfs     defaults     0   0
/dev/mapper/centos-home /home                   xfs     defaults     0   0
/dev/mapper/centos-swap swap                    swap    defaults     0   0
其实 /etc/fstab (filesystem table) 就是将我们利用 mount 指令进行挂载时, 将所有的选项与参数写入 到这个文件中就是了。
除此之外, /etc/fstab 还加入了 dump 这个备份用指令的支持! 与开机时是 否进行文件系统检验 fsck 等指令有关。

[装置/UUID 等] [挂载点] [文件系统] [文件系统参数] [dump] [fsck]

第一栏:磁盘装置文件名/UUID/LABEL name:
  • 这个字段可以填写的数据主要有三个项目:
文件系统或磁盘的装置文件名,如 /dev/vda2 等
文件系统的 UUID 名称,如 UUID=xxx
文件系统的 LABEL 名称,例如 LABEL=xxx
  • 第二栏:挂载点 (mount point):
就是挂载点啊!挂载点是什么?一定是目录啊!
  • 第三栏:磁盘分区槽的文件系统:
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行! 包括 xfs, ext4, vfat, reiserfs, nfs 等等。
  • 第四栏:文件系统参数:
mount 这个指令中特殊的文件系统参数
参数内容意义
async/sync 异步/同步设定磁盘是否以异步方式运作!预设为 async(效能较佳)
auto/noauto 自动/非自动当下达 mount -a 时,此文件系统是否会被主动测试挂载。预设为 auto。
rw/ro 可擦写/只读让该分区槽以可擦写或者是只读的型态挂载上来,如果你想要分享的数据是不给用 户随意变更的, 这里也能够设定为只读。则不论在此文件系统的文件是否设定 w 权限,都无法写入喔!
exec/noexec 可执行/不可执行限制在此文件系统内是否可以进行『执行』的工作?如果是纯粹用来储存数据的目 录, 那么可以设定为 noexec 会比较安全。不过,这个参数也不能随便使用,因为 你不知道该目录下是否默认会有执行档。举例来说,如果你将 noexec 设定在 /var ,当某些软件将一些执行文件放置于 /var 下时,那就会