Linux 入门总结(十) —— 文件系统管理
分区和文件系统
1、分区类型
2、分区表示方法
3、分区的设备文件名
其中,sd 表示硬盘的接口类型,a 代表第一块硬盘,1、2、3、4 代表 4 个主分区。注意:分区的设备文件名是固定的,我们只需要记下来,能看懂就行。注意:逻辑分区最少从 5 开始,1、2、3、4 这 4 个数字是留给主分区或扩展分区用的。
4、文件系统
了解文件系统 ext、ext1、ext2、ext3、ext4。
小结:分区的表示方式,采用 /dev 下的 sd 代表 SATA 硬盘接口,hd 代表 IDE 硬盘的接口,a、b、c、d 代表第几块硬盘,1、2、3、4 代表主分区或扩展分区,5、6、7、8、… 代表逻辑分区。
文件系统常用命令
1、文件系统查看命令 df1
2
3
4
5
6
7
8
9
10
11
12作用:
df - report file system disk space usage
格式:
df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如 /proc、/sysfs
-h 使用习惯单位显示容量,如 KB、MB、GB 等
-T 显示文件系统类型
-m 以 MB 为单位显示容量
-k 以 KB 为单位显示容量。默认就是以 KB 为单位
2、统计目录或文件大小1
2
3
4
5
6
7
8
9
10
11
12
13
14
15作用:
du - estimate(估计) file space usage
格式:
du [选项] [目录或文件]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如 KB、MB、GB 等
-s 统计总占用量,而不列出子目录和子文件的占用量
举例:
# 统计 /etc/ 目录大小
du /etc/
输出结果:它会列出该目录下所有子目录各占用了多大空间,最后统计这个目录的总大小
注意:du 命令是用来统计目录或文件大小的,但是一般不用它来统计文件大小,因为通过「ls -l」命令就可以很清楚的看到文件的大小。但是 ls 命令在统计目录大小的时候,它只会统计该目录下一级子目录和子文件的文件名占用了多大空间,并不会统计该目录下子目录当中的数据或者文件当中的数据占用了多大空间。 所以你会看到 ls 命令在显示目录的大小的时候一般就只有几 KB,这也是 ls 命令的局限性所在。要想统计目录的大小就必须使用 du 命令。
3、du 命令和 df 命令的区别
df 命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。
du 命令是面向文件的,只会计算文件后目录占用的空降。
Linux 系统要定期重启,来释放被进程或者已经删除的文件所占用的硬盘空间。要以 df 命令看到的剩余空间才是真正可以使用的空间。
4、文件系统修复命令 fsck1
2
3
4
5
6格式:
fsck [选项] 分区设备文件名
选项:
-a 不用显示用户提示,自动修复文件系统
-y 自动修复。和 -a 作用一致,不过有些文件系统只支持 -y
系统会自动执行该命令进行修复检测,一般不用该命令,除非真的需要。没事别用,否则有可能会造成系统崩溃。该命令了解即可。
5、显示磁盘状态命令 dumpe2fs
注意:该命令只针对 ext 文件系统有效。1
2
3
4
5格式:
dumpe2fs 分区设备文件名
举例:
dumpe2fs /dev/sda3 | more
「| more」 分屏显示,即将很多内容,分成多段来显示。主要是用来查看超级块的信息的,可以看到分区中一个数据块的大小。注意:每个数据块中(常见的为 4kb),只能保存一个文件中的数据。
在 Centos7 系统下使用 dumpe2fs 查看文件系统查不到对应的超级块,原因是 Centos7 默认安装的文件系统是 XFS 类型而不是 ext2/ext3/ext4。对于 XFS,使用 dumpe2fs 命令是找不到对应的超级块,可以使用 xfs_info 来查看分区信息。CentOS 7 查看磁盘状态
小结:du 只统计文件大小,df 不光统计文件大小,还要统计被系统占用的空间。所以用 du 看文件大小更准确,用 df 看剩余空间更准确。
6、查询与自动挂载1
2
3
4
5
6# 查询系统中已经挂载的设备,-l 会显示卷标名称
mount [-l]
# 依据配置文件 /etc/fstab 的内容,自动挂载
# 按照配置文件的需求,把所有的分区重新挂载一遍,a 即 all
mount -a
mount 是用来进行设备挂载的命令,Linux 中所有的可存储设备:包括硬盘、光盘、u盘、软盘、移动硬盘等,都必须挂载之后才能使用,只是硬盘的挂载是系统自动进行的,其他的就需要手工挂载了。
挂载:Linux 中每一个硬件都有一个设备文件名,也会有一个挂载点(空目录),挂载就是把设备文件名和挂载点联系起来。只有通过访问挂载点,来访问这个设备,即设备是不能直接访问的,得需要通过挂载点才能访问。
7、挂载命令格式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15格式:
mount [选项] 设备文件名 挂载点
选项:
-t 文件系统 加入文件系统类型来指定挂载的类型,如 ext3、ext4、iso9660 等文件系统
-L 卷标名 挂载指定卷标的分区,而不是安装设备文件名挂载。卷标:就相当于给你的分区起一个别名,意义不大,不写也无所谓
-o 特殊选项 可以指定挂载的额外选项
举例:
# 重新挂载 /home 分区,并使用 noexec 权限
mount -o remount,noexec /home
# 测试,发现不能执行了
cd /home && vim hello.sh && chmod 755 hello.sh && ./hello.sh
# 最后记得改回去,要不会影响系统启动的
mount -o remount,exec /home
以下为 -o 的特殊选项:
注意:mount -o 的这些选项参数,针对的都是分区。-o 后面可以同时跟多个选项,选项之间以逗号分隔。
7、挂载示例
(1)挂载光盘1
2
3
4
5
6
7# 建立挂载点
mkdir /mnt/cdrom/
# 挂载光盘
mount -t iso9660 /dev/cdrom/ /mnt/cdrom/
或
mount /dev/sr0 /mnt/cdrom/
只要是空目录都可以作为挂载点。注意光盘是只读的。
(2)卸载命令1
2
3
4
5格式:
umount 设备文件名或挂载点
举例:
umount /mnt/cdrom
用完光盘之后,必须手动卸载,否则光驱不会弹出来。注意:不要在光盘目录下卸载,否则会报设备正忙的错。
(3)挂载 U 盘1
2
3
4
5# 查看 U 盘设备文件名
fdisk -l
# 挂载 U 盘
mount -t vfat /dev/sdb1 /mnt/usb/
注意:Linux 默认是不支持 NTFS 文件系统的。注意:U 盘的设备文件名不是固定的,因为 U 盘跟硬盘采用同样的命名规则,如果系统中只有一块硬盘,U 盘就会识别为 sdb,依次类推,如果系统中已经有两块硬盘,则 U 盘就会识别为 sdc。即它是需要自动识别的,不需要去分配,只要插入,它就会自动去识别。在插入 U 盘的时候,鼠标一定要点到虚拟机里面(VMware 中),否则它就不是 Linux 虚拟机识别 U 盘了,而是 Windows 去识别 U 盘了。Linux 中把 fat16 文件系统识别为 fat,fat32 文件系统识别为 vfat。注意:先卸载再拔出 U 盘。
8、Linux 挂载 NTFS 文件系统的硬件设备
由于 Linux 本身不支持 NTFS 文件系统,所以需要利用第三方软件让 Linux 支持 NTFS 文件系统。1
2
3
4
5
6
7
81、下载 NTFS-3G 插件
http://www.tuxera.com/community/ntfs-3g-download/
2、安装 NTFS-3G 插件
解压 && 进入压缩目录 && 「./configure」编译器准备。没有指定安装目录,安装到默认位置。 && 编译 && 安装
3、插入 NTFS 文件系统的外设
移动硬盘,插入硬盘的时候,鼠标要点进 VMware 虚拟机里面
4、挂载
mount -t ntfs-3g 分区设备文件名 挂载点
fdisk 分区
Linux 中真正的手工分区命令 fdisk。要掌握如何利用 fdisk 命令给 Linux 新建一个新的分区。
1、添加新硬盘
注意:添加硬盘的时候,必须先断电,否则虚拟机中硬件是无法添加和删除的,真实机也是这样的。
2、查看新硬盘
使用「fdisk -l」命令查询一下新硬盘是否被识别了。该命令最主要的作用就是查询系统当中有多少可以被识别的硬件设备。
3、使用 fdisk 命令分区
fdisk /dev/sdb
主要知道 d、l、m、n、p、q、w 的作用即可。
4、重新读取分区表信息,使得新添加的分区生效
partprobe
5、格式化分区,注意扩展分区是不能格式化和写入数据的,但是逻辑分区可以
mkfs -t ext4 /dev/sdb1
6、建立挂载点并挂载分区
mkdir /disk1 && mount /dev/sdb1 /disk1/
注意:使用 fdisk -l 命令只能看到分区是否被正常分配,但是不能知道分区是否被 Linux 挂载,要想知道分区是否被挂载可以使用 mount 或 df 命令。
7、分区的自动挂载
在 Linux 当中,如果使用命令来挂载,一旦重启命令操作的结果就会消失。要想永久生效,就要写入文件。自动挂载归根结底是要写入 /etc/fstab 文件。
第一个字段:最好使用 UUID。因为设备文件名有个问题,如果不小心把分区的顺序颠倒了,或者升级了系统内核,或者添加了新的硬盘,这种情况非常容易造成系统崩溃,但是系统是按照原先的顺序进行系统的启动和调用的。UUID 的作用相当于给每个分区起了一个唯一识别号,不管分区顺序如何变,分区的 UUID 号都是不会变的。可以使用「dumpe2fs -h 分区设备文件名」可以查看到分区的 UUID。
第四个字段:defaults 指分区自动挂载的时候使用默认权限,跟 mount 挂载的时候通过 -o 指定挂载权限是一回事。
第五个字段:注意这里的自动备份针对的是分区,即目录必须是分区才可以。自动备份到 lost+found 目录下。
第六个字段:一般我们新添加的分区,不应该等于 1,因为 1 是系统分配的,其优先级本应该最高,所以说我们分配的分区优先级应该比 2 大(数字越大,优先级越低)。注意:/etc/fstab 文件是重要的系统启动文件,修改的时候要特别小心,否则会把系统搞崩溃。
注意:当修改完 /etc/fstab 文件后不要着急重启,先执行「mount -a」命令,如果 /etc/fstab 文件中有错误,会有提示,不至于重启的时候系统崩溃。 该命令的作用是根据配置文件 /etc/fstab 的内容,自动挂载。
如果还是不小心把 /etc/fstab 文件中的内容写错了,是还有修复的机会的。重启系统,输入 root 用户的密码,这时候会进入到系统,但是却发现不能编辑 /etc/fstab 文件,因为分区在报错了之后,挂载的时候挂成了只读权限,所以任何文件都无法修改,这个时候只需要重新把根分区挂载成读写权限就可以了「mount -o remount,rw /」。注意:/etc/fstab 文件修复,只能修复这个文件的报错,但是如果你在这个文件中把根分区 / 写错了,则无法修复,系统会直接崩溃。
分配 swap 分区
1、free 命令1
2# 查看内存与 swap 分区使用情况,选项 -h 人性化显示大小
free
cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程。
buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。
2、添加 swap 分区操作步骤1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 1、新建 swap 分区
# 注意:把分区 ID 改为 82
fdisk /dev/sdb
# 2、格式化,注意分区设备名
mkswap /dev/sdb6
# 3、加入 swap 分区,注意分区设备名
swapon /dev/sdb6
# 取消 swap 分区
swapoff /dev/sdb6
# 4、swap 分区开机自动挂载
vim /etc/fstab
写入内容:/dev/sdb6 swap swap defaults 0 0