Linux之27——mount命令

阅读: 评论:0

Linux之27——mount命令
mount 命令⽤来挂载⽂件系统。其基本命令格式为:
mount -t type [-o options] device dir
device:指定要挂载的设备,⽐如磁盘、光驱等。
dir:指定把⽂件系统挂载到哪个⽬录。
type:指定挂载的⽂件系统类型,⼀般不⽤指定,mount 命令能够⾃⾏判断。
options:指定挂载参数,⽐如 ro 表⽰以只读⽅式挂载⽂件系统。
Help
可以通过 man page 和 -h 选项来获得最直接的帮助⽂档:
$ man mount
$ mount -h
大功率led天花灯
⽂件系统的类型
虽然多数情况下我们不⽤指定 -t 参数显式地说明⽂件系统的类型,但⽂件系统的类型对 mount 命令来说确实是⾮常重要的。原因是假如你要挂载⼀个当前系统不⽀持的⽂件系统,它是没办法⼯作的。当前系统⽀持的⽂件系统类型是由内核来决定的,⽐如 ext2、ext3、ext4、sysfs 和 proc 等常见的⽂件系统默认都是被⽀持的。我们可以通过查看 /proc/filesystems ⽂件来观察当前系统具体都⽀持哪些⽂件系统:
$ cat /proc/filesystems
第⼀列说明⽂件系统是否需要挂载在⼀个块设备上, nodev 表明后⾯的⽂件系统不需要挂接在块设备上。第⼆列是内核⽀持的⽂件系统。
看懂输出的⽂件系统信息
通过 mount 命令查看已挂载的⽂件系统,会输出丰富的信息,如下图所⽰:
让我们先来解释⼀下输出信息的格式和含义。输出中的每⾏代表挂载的⼀个⽂件系统,其格式为:
fs_spec on fs_file type fs_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 的⾼级功能协作。在 ubuntu 16.04 上, /etc/mtab 和  /proc/mounts ⼀样,都是指向 /proc/self/mounts 的链接⽂件。
下⾯我们介绍⼀些 mount 命令的常见⽤例。
查看挂载的⽂件系统
输出系统挂载的所有⽂件系统
如果执⾏ mount 命令时不加任何参数,就会输出系统挂载的所有⽂件系统:
$ mount
输出指定类型的⽂件系统
通过 -t 参数可以只输出指定类型的⽂件系统,⽐如下⾯的命令只会输出 tmpfs 类型的⽂件系统:
花生采摘机
$ mount -t tmpfs
格式化并挂载磁盘
对于⼀个磁盘分区,我们可以使⽤ mkfs 命令把磁盘分区格式化为指定的⽂件系统,⽐如 ext4:
$ sudo mkfs -t ext4 /dev/sdb1
然后把该分区挂载到 /mnt ⽬录:
$ sudo mount /dev/sdb1 /mnt
挂载光驱
现在偶尔还还需要使⽤⼀下光驱,挂载光驱的命令如下:
预付费智能电表$ sudo mount /dev/cdrom /mnt
该命令把设备 /dev/cdrom 挂载在 /mnt ⽬录中,然后我们就可以在 /mnt ⽬录下访问光驱中的内容了。
以只读的⽅式挂载
可以把⽂件系统挂载为只读模式,从⽽保护数据。⽐如将 /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
注意,-t cifs 是可以省略的,mount 命令能够⾃动识别。⼀定要使⽤ IP 代替 windows 主机的名称。耐火砖比重
挂载虚拟⽂件系统
proc、tmpfs、sysfs、devpts 等都是 Linux 内核映射到⽤户空间的虚拟⽂件系统,它们不和具体的物理设备关联,但它们具有普通⽂件系统的特征,应⽤层程序可以像访问普通⽂件系统⼀样来访问他们。
⽐如内核的 proc ⽂件系统默认被挂载到了 /proc ⽬录,当然我们也可以再把它挂载到其它的⽬录,⽐如 /mnt ⽬录下:
$ sudo mount -t proc none /mnt
由于 proc 是内核虚拟的⼀个⽂件系统,并没有对应的设备,所以这⾥的 -t 参数不能省略。由于没有对应的源设备,这⾥的 none 可以是任意字符串,取个有意义的名字就可以了,因为⽤ mount 命令查看挂载点信息时第⼀列显⽰的就是这个字符串。
在 Linux 上我们还可以通过 tmpfs ⽂件系统轻松地构建出内存磁盘来。⽐如在内存中创建⼀个 512M 的 tmpfs ⽂件系统,并挂载到 /mnt 下,这样所有写到 /mnt ⽬录下的⽂件都存储在内存中,速度⾮常快,不过要注意,由于数据存储在内存中,所以断电后数据会丢失掉:
$ sudo mount -t tmpfs -o size=512m tmpfs /mnt
挂载 loop 设备
在 Linux中,硬盘、光盘、软盘等都是常见的块设备,他们在 Linux 下的⽬录⼀般是 /dev/sda1、/dev/cdrom、 /dev/fd0 这样的。⽽ loop device 是虚拟的块设备,主要⽬的是让⽤户可以像访问上述块设备那样访问⼀个⽂件。 loop device 设备的路径⼀般是 /dev/loop0、dev/loop1 等,具体的个数跟内核的配置有关。
挂载 ISO ⽂件
需要⽤到 loop device 的最常见的场景是挂载⼀个 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
csmate$ mkfs.btrfs vdisk.img
最后把它挂载到 /mnt :
$ sudo mount vdisk.img /mnt
把多个设备挂载到同⼀个⽬录
在 Linux 中可以把多个设备挂载到同⼀个⽬录。默认后⾯挂载的内容会让前⾯挂载的内容隐藏掉,只有 unmount 了后⾯挂载的内容,才会显⽰原来的内容。
挂载⼀个设备到多个⽬录
我们也可以把同⼀个设备挂载到不同的⽬录,这样在不同的⽬录中看到的是同样的内容。还可以在不同的⽬录中控制挂载的权限,⽐如以只读⽅式挂载:
$ sudo mount -o ro vdisk.img ./testdir
这样从不同的⽬录访问相同的⽂件系统时就具有了不同的访问权限。
太阳能手电
总结
mount 是 Linux 系统中⾮常重要的⼀个命令,因为离开 mount 挂载的⽂件系统我们⼏乎什么也⼲不了。本⽂介绍了⼀些 mount 命令的基础⽤法,⽇常使⽤应该是够了。mount 命令还有⼀些相关的复杂概念和⽤法,⽐如 bind mount 和 shared subtree 等,笔者会在今后写专门的⽂章进⾏介绍。
参考:

本文发布于:2023-05-16 11:06:12,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/101885.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:挂载   系统   命令   设备
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图