Linux基础 -- 文件系统操作与磁盘管理
2017-08-23 00:00
651 查看
1、查看磁盘和目录的容量
1.1、df 命令
df命令,即disk file命令,用于查看硬盘中文件系统的容量占用情况,比如:[root@izwz9gtdx1ch4f9gn56b32z ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda1 41152832 2200660 36855072 6% / devtmpfs 932064 0 932064 0% /dev tmpfs 941868 0 941868 0% /dev/shm tmpfs 941868 308 941560 1% /run tmpfs 941868 0 941868 0% /sys/fs/cgroup tmpfs 188376 0 188376 0% /run/user/0
一般使用情况下,我们更多只是关心第一行的内容也就是环境中的
rootfs或者物理主机上的
/dev/sda2。
物理主机上的 /dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示第几块硬盘(也可能是可移动磁盘),你如果主机上有多块硬盘则可能还会出现 /dev/sdb,/dev/sdc 。这些磁盘设备都会在 /dev 目录下以文件的形式存在。这里使用的是阿里云的Linux服务器,显示为/dev/vds1,vd表示虚拟机硬盘。
“Mounted on”表示“挂载在”
接着你还会看到"1k-blocks"这个陌生的东西,它表示以磁盘块大小的方式显示容量(文件系统将磁盘空间划分为每1024个字节一组,称为块),后面为相应的以块大小表示的已用和可用容量。
可以加上参数 -h (human readable)以看得懂的形式显示容量:
[root@izwz9gtdx1ch4f9gn56b32z ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 2.1G 36G 6% / devtmpfs 911M 0 911M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 308K 920M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup tmpfs 184M 0 184M 0% /run/user/0
1.2、du命令
du命令用于估计指定文件夹(如果不指定,就是当前文件夹)内的文件/文件夹的大小,同样可以加上-h,例如:[root@izwz9gtdx1ch4f9gn56b32z ~]# du -h 20K ./tardir/home/pierre_cai 24K ./tardir/home 28K ./tardir 20K ./mybin 8.0K ./.pip 28K ./.cache/pip/http/f/e/d/0/e 32K ./.cache/pip/http/f/e/d/0 36K ./.cache/pip/http/f/e/d 40K ./.cache/pip/http/f/e 44K ./.cache/pip/http/f 48K ./.cache/pip/http 56K ./.cache/pip 60K ./.cache 4.0K ./.ssh 8.0K ./.oracle_jre_usage 29M .
可以用
-d参数指定查看目录的深度,例如只查看1级目录的信息:
[root@izwz9gtdx1ch4f9gn56b32z ~]# du -h -d 0 29M .
还可以加上-a,查看所有文件(包括隐藏文件)的大小:
[root@izwz9gtdx1ch4f9gn56b32z ~]# du -a 4 ./.cshrc 4 ./tardir/home/pierre_cai/.bash_logout 4 ./tardir/home/pierre_cai/.bash_profile 4 ./tardir/home/pierre_cai/.bash_history 4 ./tardir/home/pierre_cai/.bashrc 20 ./tardir/home/pierre_cai 24 ./tardir/home 28 ./tardir 4 ./.bash_logout 4 ./mybin/hello_shell.sh 12 ./mybin/hello_world 20 ./mybin 12 ./pierre_cai.tar 4 ./.viminfo 4 ./.bash_profile
du(estimate file space usage)命令与
df(report file system disk space usage)只用一字只差,首先就希望注意不要弄混淆了,以可以像我这样从man手册中获取命令的完整描述,记全称就不会搞混了。
1.2.1、简单示例
小明在管理服务器的时候发现空间不足了,他找到了一个目录,这个目录占用的空间异常的大,他需要找到这个目录中占用最大的前10个文件,但是这个目录下面的内容太多了,或许一条命令就能够帮助到他,这条命令该怎么写呢?如下:[root@izwz9gtdx1ch4f9gn56b32z ~]# du -h | sort -rh 29M . 60K ./.cache 56K ./.cache/pip 48K ./.cache/pip/http 44K ./.cache/pip/http/f 40K ./.cache/pip/http/f/e 36K ./.cache/pip/http/f/e/d 32K ./.cache/pip/http/f/e/d/0 28K ./tardir 28K ./.cache/pip/http/f/e/d/0/e 24K ./tardir/home 20K ./tardir/home/pierre_cai 20K ./mybin 8.0K ./.pip 8.0K ./.oracle_jre_usage 4.0K ./.ssh
就可以按文件大小排序查看文件夹的内容。
2、简单的磁盘管理
下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,建议在虚拟环境中进行操作,如使用虚拟机,并且做好备份。2.1、创建虚拟磁盘
2.1.1、dd命令
dd命令用于转换和复制文件,不过它的复制不同于
cp。之前提到过关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如
/dev/zero和
/dev/random)都像普通文件一样,只要在各自的驱动程序中实现了对应的功能,dd 也可以读取自和/或写入到这些文件。这样,
dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中。
dd程序也可以在复制时处理数据,例如转换字节序、或在 ASCII 与 EBCDIC 编码间互换。
dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为
选项=值,而不是更标准的
--选项 值或
-选项=值。
dd默认从标准输入中读取,并写入到标准输出中,但可以用选项
if(input file,输入文件)和
of(output file,输出文件)改变。
我们先来试试用
dd命令从标准输入读入用户输入到标准输出或者一个文件:
# 输出到文件 $ dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1 # 输出到标准输出 $ dd if=/dev/stdin of=/dev/stdout bs=10 count=1 # 注 在打完了这个命令后,继续在终端打字,作为你的输入
上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,
bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如'K','M','G'等单位),
count用于指定块数量。如上图所示,我指定只读取总共 10 个字节的数据,当我输入了“hello shiyanlou”之后加上空格回车总共 16 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。使用和
du和
cat命令看到的写入完成文件实际内容确实只有 10 个字节(那个黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。
前面说到
dd在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:
$ dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
你可以在
man文档中查看其他所有转换参数。
2.1.2、使用dd命令创建虚拟镜像文件
通过上面一小节,你应该掌握了dd的基本使用,下面就来使用
dd命令来完成创建虚拟磁盘的第一步。
从
/dev/zero设备创建一个容量为 256M 的空文件:
$ dd if=/dev/zero of=virtual.img bs=1M count=256 $ du -h virtual.img
然后我们要将这个文件格式化(写入文件系统),这里我们要学到一个(准确的说是一组)新的命令来完成这个需求。
2.1.3、使用 mkfs 命令格式化磁盘
你可以在命令行输入sudo mkfs然后按下
Tab键,你可以看到很多个以 mkfs 为前缀的命令,这些不同的后缀其实就是表示着不同的文件系统,可以用 mkfs 格式化成的文件系统。
我们可以简单的使用下面的命令来将我们的虚拟磁盘镜像格式化为
ext4文件系统:
$ sudo mkfs.ext4 virtual.img
可以看到实际 mkfs.ext4 是使用 mke2fs 来完成格式化工作的。mke2fs 的参数很多,不过我们也不会经常格式化磁盘来玩,所以就掌握这基本用法吧,等你有特殊需求时,再查看 man 文档解决。
更多关于文件系统的知识,请查看wiki:
文件系统
ext3,ext4
如果你想想知道 Linux 支持哪些文件系统你可以输入
ls -l /lib/modules/$(uname -r)/kernel/fs(我们的环境中无法查看)查看。
2.1.4、mount/unmount
用户在 Linux/UNIX 的机器上打开一个文件以前,包含该文件的文件系统必须先进行挂载的动作,此时用户要对该文件系统执行 mount 的指令以进行挂载。通常是使用在 USB 或其他可移除存储设备上,而根目录则需要始终保持挂载的状态。又因为 Linux/UNIX 文件系统可以对应一个文件而不一定要是硬件设备,所以可以挂载一个包含文件系统的文件到目录树。Linux/UNIX 命令行的 mount 指令是告诉操作系统,对应的文件系统已经准备好,可以使用了,而该文件系统会对应到一个特定的点(称为挂载点)。挂载好的文件、目录、设备以及特殊文件即可提供用户使用。
我们先来使用
mount来查看下主机已经挂载的文件系统:
$ sudo mount
输出的结果中每一行表示一个设备或虚拟设备,每一行最前面是设备名,然后是 on 后面是挂载点,type 后面表示文件系统类型,再后面是挂载选项(比如可以在挂载时设定以只读方式挂载等等)。
那么我们如何挂载真正的磁盘到目录树呢,
mount命令的一般格式如下:
mount [options] [source] [directory]
一些常用操作:
mount [-o [操作选项]] [-t 文件系统类型] [-w|--rw|--ro] [文件系统源] [挂载点]
我们现在直接来挂载我们创建的虚拟磁盘镜像到
/mnt目录:
$ mount -o loop -t ext4 virtual.img /mnt # 也可以省略挂载类型,很多时候 mount 会自动识别 # 以只读方式挂载 $ mount -o loop --ro virtual.img /mnt # 或者mount -o loop,ro virtual.img /mnt
可以使用 umount 命令卸载已挂载磁盘:
# 命令格式 sudo umount 已挂载设备名或者挂载点,如: $ sudo umount /mnt
2.2、查看硬盘分区表信息
可以使用fdisk命令查看硬盘分区表:[root@izwz9gtdx1ch4f9gn56b32z ~]# fdisk -l Disk /dev/vda: 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: 0x0000efd2 Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886079 41942016 83 Linux
相关文章推荐
- Linux基础(7)/文件系统操作与磁盘管理
- Linux系统基础知识(二)基于linux系统下的用户管理操作以及文件操作补充
- 鸟哥Linux私房菜 基础学习篇读书笔记(10):Linux磁盘和文件系统管理(3)
- <Linux 私房菜>基础学习篇学习记录(2)磁盘与文件系统管理
- 鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)
- 鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)
- 鸟哥的Linux私房菜 基础学习篇读书笔记(8):Linux磁盘与文件系统管理(1)
- Linux01-Linux磁盘及文件系统管理基础知识28
- 鸟哥的Linux私房菜 基础学习篇读书笔记(10):Linux磁盘与文件系统管理(3)
- 学习Linux 《鸟哥的Linux私房菜 基础学习篇(第三版)》--第8章 Linux磁盘与文件系统管理 笔记
- linux操作系统基础(4)文件系统和磁盘管理
- Linux入门基础 #5 Linux文件系统基本操作管理
- chapter8:Linux磁盘与文件系统管理之(2)文件系统的简单操作
- 学习鸟哥私房菜(三)之linux磁盘与文件系统管理
- 从零开始学习Linux 基础(二)—磁盘、分区与文件系统
- Linux常用命令之:磁盘及文件系统管理命令
- Linux的磁盘与文件管理系统(1)
- linux管理磁盘和文件系统
- [linux]历程管理,内存管理,文件系统,系统管理,网络操作概述
- Linux的磁盘与文件管理系统(1)