mount命令拿来挂载文件系统。其基本命令格式为:mount-ttype[-ooptions]devicedirdevice:指定要挂载的设备,例如c盘、光驱等。dir:指定把文件系统挂载到那个目录。type:指定挂载的文件系统类型,通常不用指定,mount命令才能自行判别。options:指定挂载参数ubuntu提示只读文件系统,例如ro表示以只读形式挂载文件系统。
Help
可以通过manpage和-h选项来获得最直接的帮助文档:
$ man mount
$ mount -h
复制
文件系统的类型
其实多数情况下我们不用指定-t参数显式地说明文件系统的类型,但文件系统的类型对mount命令来说确实是极其重要的。缘由是如果你要挂载一个当前系统不支持的文件系统,它是没办法工作的。当前系统支持的文件系统类型是由内核来决定的,例如ext2、ext3、ext4、sysfs和proc等常见的文件系统默认都是被支持的。我们可以通过查看/proc/filesystems文件来观察当前系统具体都支持什么文件系统:
$ cat /proc/filesystems
复制
第一列说明文件系统是否须要挂载在一个块设备上,nodev表明旁边的文件系统不须要挂接在块设备上。第二列是内核支持的文件系统。
读懂输出的文件系统信息
通过mount命令查看已挂载的文件系统,会输出丰富的信息,如右图所示:
让我们先来解释一下输出信息的格式和含意。输出中的每行代表挂载的一个文件系统,其格式为:fs_speconfs_filetypefs_vfstype(fs_mntopts)fs_spec:挂载的块设备或远程文件系统fs_file:文件系统的挂载点fs_vfstype:文件系统的类型fs_mntopts:与文件系统相关的更多选项,不同的文件系统其选项也不太一样例如上图中的第一行涵义为:挂载的设备为sysfs,挂载点为/sys,文件系统的类型为sysfs。括弧中的rw表示以可读写的形式挂载文件系统,noexec表示不能在该文件系统上直接运行程序。
与mount命令相关的文件
/etc/fstab/etc/mtab/proc/mounts
mount-a会将/etc/fstab中定义的所有挂载点都挂上(通常是在系统启动时的脚本中调用,自己最好别用!)。
mount和umount命令会在/etc/mtab文件中维护当前挂载的文件系统的列表,这个文件在目前的系统中还是被支持的。并且更好的方法是用链接文件/proc/mounts取代/etc/mtab文件。这是由于在用户空间中维护的普通文件/etc/mtab很难稳定可靠的与namespaces、containers等Linux的中级功能协作。在ubuntu16.04上,/etc/mtab和/proc/mounts一样,都是指向/proc/self/mounts的链接文件。
下边我们介绍一些mount命令的常见用例。
查看挂载的文件系统
输出系统挂载的所有文件系统倘若执行mount命令时不加任何参数,都会输出系统挂载的所有文件系统:
$ mount
复制
输出指定类型的文件系统通过-t参数可以只输出指定类型的文件系统,例如下边的命令只会输出tmpfs类型的文件系统:
$ mount -t tmpfs
复制
低格并挂载c盘
对于一个c盘分区,我们可以使用mkfs命令把c盘分区低格为指定的文件系统,例如ext4:
$ sudo mkfs -t ext4 /dev/sdb1
复制
之后把该分区挂载到/mnt目录:
$ sudo mount /dev/sdb1 /mnt
复制
挂载硬盘
如今时常还还须要使用一下硬盘,挂载硬盘的命令如下:
$ sudo mount /dev/cdrom /mnt
复制
该命令把设备/dev/cdrom挂载在/mnt目录中,之后我们就可以在/mnt目录下访问硬盘中的内容了。
以只读的形式挂载
可以把文件系统挂载为只读模式ubuntu提示只读文件系统,因而保护数据。例如将/dev/sdb1用只读模式挂在/mnt目录:
$ sudo mount -o ro /dev/sdb1 /mnt
复制
这样/mnt目录下的文件都是只读的。
把只读的挂载重新挂载为读写模式
当系统出现故障步入单用户模式时,一般/根目录会以只读形式挂载,这时假若想要更改文件,会发觉所有文件都是只读状态,难以更改。好在Linux下的mount命令支持一个remount选项,只须要执行如下命令:
$ mount / -o rw,remount
复制
就可以将根分区重新挂载为读写状态。
不仅根目录,重新挂载其它挂载点也是一样的,例如我们把上面挂载的sdb1分区重新挂载为读写模式:
$ sudo mount /mnt -o rw,remount
复制
挂载windows共享文件
局域网中通常都是windows系统和Linux系统共存的,假如能轻松的从Linux系统中访问windows的文件共享将是一件很开心的事情。虽然这也很简单,在windows上共享文件时指定一个本机的用户,之后在mount命令手指定这个用户及其密码就可以了:
$ sudo mount -t cifs -o username=nick,password=Test123456 //10.32.2.30/doc /mnt
复制
注意linux格式化命令,-tcifs是可以省略的,mount命令才能手动辨识。一定要使用IP取代windows主机的名称。
挂载虚拟文件系统
proc、tmpfs、sysfs、devpts等都是Linux内核映射到用户空间的虚拟文件系统,它们不和具体的数学设备关联,但它们具有普通文件系统的特点,应用层程序可以像访问普通文件系统一样来访问她们。例如内核的proc文件系统默认被挂载到了/proc目录,其实我们也可以再把它挂载到其它的目录,例如/mnt目录下:
$ sudo mount -t proc none /mnt
复制
因为proc是内核虚拟的一个文件系统,并没有对应的设备,所以这儿的-t参数不能省略。因为没有对应的源设备,这儿的none可以是任意字符串,取个有意义的名子就可以了,由于用mount命令查看挂载点信息时第一列显示的就是这个字符串。
在Linux上我们还可以通过tmpfs文件系统轻松地建立出显存c盘来。例如在显存中创建一个512M的tmpfs文件系统,并挂载到/mnt下,这样所有讲到/mnt目录下的文件都储存在显存中,速率十分快,不过要注意,因为数据储存在显存中,所以断电后数据会遗失掉:
$ sudo mount -t tmpfs -o size=512m tmpfs /mnt
复制
挂载loop设备
在Linux中,硬碟、光盘、软盘等都是常见的块设备,她们在Linux下的目录通常是/dev/sda1、/dev/cdrom、/dev/fd0这样的。而loopdevice是虚拟的块设备,主要目的是让用户可以像访问上述块设备那样访问一个文件。loopdevice设备的路径通常是/dev/loop0、dev/loop1等,具体的个数跟内核的配置有关。
挂载ISO文件须要用到loopdevice的最常见的场景是挂载一个ISO文件。例如将/tmp/test.iso这个光碟镜像文件使用loop模式挂载到/mnt下,这样就不须要把ISO文件刻录到光碟上了,其实也不须要硬盘了。下边的命令把projects目录下的内容打包到test.iso文件中:
$ mkisofs -o test.iso projects/
复制
之后把这个ISO文件挂载到/mnt目录下:
$ sudo mount test.iso /mnt
复制
挂载test.iso文件使用了虚拟设备/dev/loop0,但是是只读的模式。
虚拟硬碟loop设备另一种常见的用法是虚拟一个硬碟,例如我想爱玩一下btrfs这个文件系统,但系统中目前的所有分区都早已用了,上面都是有用的数据,不想低格她们,这时虚拟硬碟就有用武之地了。
我们先通过dd命令创建一个512M的文件:
$ dd if=/dev/zero bs=1M count=512 of=./vdisk.img
复制
之后在这个文件上面创建btrfs文件系统:
$ sudo apt install btrfs-progs
$ mkfs.btrfs vdisk.img
复制
最后把它挂载到/mnt:
$ sudo mount vdisk.img /mnt
复制
把多个设备挂载到同一个目录
在Linux中可以把多个设备挂载到同一个目录。默认前面挂载的内容会让后面挂载的内容隐藏掉,只有unmount了前面挂载的内容linux培训班,才能显示原先的内容。
挂载一个设备到多个目录
我们也可以把同一个设备挂载到不同的目录,这样在不同的目录中见到的是同样的内容。还可以在不同的目录中控制挂载的权限,例如以只读形式挂载:
$ sudo mount -o ro vdisk.img ./testdir
复制
这样从不同的目录访问相同的文件系统时就具有了不同的访问权限。
总结
mount是Linux系统中特别重要的一个命令,由于离开mount挂载的文件系统我们几乎哪些也干不了。本文介绍了一些mount命令的基础用法,日常使用应当是够了。mount命令还有一些相关的复杂概念和用法,例如bindmount和sharedsubtree等,笔者会在今后写专门的文章进行介绍。