Linux mount命令详解:挂载Linux系统外的文件

Linux 中所有的存储设备都必须挂载之后才能使用,包括硬盘、U 盘和光盘(swap 分区是系统直接调用的,所以不需要挂载)。不过,硬盘分区在安装时就已经挂载了,而且会在每次系统启动时自动挂载,所以不需要手工参与。但是在 Linux 系统中要想使用光盘和 U 盘,就需要学一些挂载命令。

挂载是指把硬盘分区(如分区 /dev/sdb1,其实指的是文件系统)和挂载点(已经建立的空目录)联系起来的过程。这里需要注意,挂载点必须是目录,而且原则上应该使用空目录作为挂载点。

如果不使用空目录作为挂载点,而使用已经有数据的目录(如 /etc/ 目录)作为挂载点,则会出现什么情况呢?很简单,原先 /etc/ 目录下的数据就查找不到了,在 /etc/ 目录中只能看到新的分区中的数据。这是因为 /etc/ 目录原先并不是单独的分区,而是 / 分区的子目录,所以 /etc/ 目录中的数据实际上保存在 / 分区的 block 中。

但是,现在给 /etc/ 目录单独分区了,再向 /etc/ 目录中保存数据,就会保存在 /etc/ 目录的新分区的 block 中,那么原始数据当然就不能看到了。如果还想访问原始数据,则只能把新分区卸载掉。
mount命令的基本格式
mount 命令的基本格式如下:
[root@localhost ~]# mount [-l]
#查询系统中已经挂载的设备,-l会显示卷标名称
[root@localhost ~]# mount -a
#依据配置文件/etc/fstab的内容,自动挂载
[root@localhost ~]# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

选项:
-t 文件系统:加入文件系统类型来指定挂载的类型,可以是 ext3、ext4、iso9660 等文件系统;
-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载;
-o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则默认值生效。具体的特殊选项参见表 1;

表 1 mount 命令挂载特殊选项
选 项 说 明
atime/noatime 更新访问时间/不更新访问时间。在访问分区文件时,是否更新文件的访问时间,默认为更新
async/sync 异步/同步,默认为异步
auto/noauto 自动/手动。如 mount -a 命令执行时,是否会自动安装 /etc/fstab 文件内容挂载,默认为自动
defaults 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项
exec/noexec 执行/不执行。设定是否允许在文件系统中执行可执行文件,默认是允许
remount 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
rw/ro 读写/只读。文件系统挂载时,是否拥有读写权限,默认是 rw
suid/nosuid 具有/不具有 SetUID 权限。设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有
user/nouser 允许/不允许普通用户挂载。设定文件系统是否允许普通用户挂载,默认是不允许,只有 root 可以挂载分区
usrquota 写入代表文件系统支持用户磁盘配额,默认不支持
grpquota 写入代表文件系统支持组磁盘配额,默认不支持
【例 1】
[root@localhost ~]# mount
#查看系统中已经挂载的文件系统,注意有虚拟文件系统
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfe on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw, gid=5, mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fe/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfe/rpc_pipefs type rpc_pipefs (rw)
#命令结果表示:将/dev/sda3分区挂载到/目录,文件系统是ext4,权限是读写

【例 2】修改特殊权限。
[root@localhost ~]# mount
#我们查看到/boot分区已经被挂载了,而且采用的是defaults选项,那么我们重新挂载分区,并采用#noexec权限禁止执行文件执行,看看会出现什么情况(注意不要用/分区做实验,否则系统命令也就不能#执行了)
…省略部分输出…
/dev/sda1 on /boot type ext4 (rw)
…省略部分输出…
[root@localhost ~]# mount -o remount, noexec /boot
#重新挂载/boot分区,并使用noexec权限
[root@localhost sh]# cd /boot/
[root@localhost boot]#vi hello.sh
#写一个shell吧
#!/bin/bash
echo “hello!!”
[root@localhost boot]# chmod 755 hello.sh
[root@localhost boot]#./hello.sh
-bash:./hello.sh:权限不够
#虽然赋予了hello.sh执行权限,但是仍然无法执行
[root@localhost boot]# mount -o remount, exec /boot
#记得改回来,否则会影响系统启动

如果我们做实验修改了特殊选项,那一定要记住,而且确定需要修改;否则非常容易出现系统问题,而且还找不到问题的根源。

【例 3】挂载分区。
[root@localhost ~]# mkdir /mnt/disk1
#建立挂载点目录
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1
#挂载分区

/dev/sdb1 分区还没有被划分。我们在这里只看看挂载分区的方式,非常简单,甚至不需要使用"-text4"命令指定文件系统,因为系统是可以自动检测的。
挂载光盘
在 Windows 中如果想要使用光盘,则只需把光盘放入光驱,单击使用即可。但是在 Linux 中除了要把光盘放入光驱,而且必须在挂载后才能正确使用。还要记得用完光盘后也不能像 Windows —样,直接弹出光驱取出光盘,而必须先卸载才能取出光盘(确实不如 Windows 方便,不过这也只是一个操作习惯,习惯了就好)。

挂载命令如下(当然要记得在 Linux 中放入光盘):
[root@localhost ~]# mkdir/mnt/cdrom/
#建立挂载点
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘

扫描二维码关注公众号,回复: 9600993 查看本文章

光盘的文件系统是 iso9660,不过这个文件系统可以省略不写,系统会自动检测,命令如下:
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
#挂载光盘。两个挂载光盘的命令使用一个就可以了
[root@localhost ~]# mount
#查看已经挂载的设备
…省略部分输出…
/dev/srO on /mnt/cdrom type iso9660 (ro)
#光盘已经挂载了,但是挂载的设备文件名是/dev/sr0

我们已经知道挂载就是把光驱的设备文件和挂载点连接起来。挂载点 /mnt/cdrom 是我们手工建立的空目录,我个人习惯把挂载点建立在 /mnt/ 目录中,因为我们在学习 Linux 的时候是没有 /media/ 目录的,大家要是愿意也可以建立 /media/cdrom 作为挂载点,只要是已经建立的空目录都可以作为挂载点。那么 /dev/cdrom 就是光驱的设备文件名,不过注意 /dev/cdrom 只是一个软链接。 命令如下:
[root@localhost ~]#ll /dev/cdrom
lrwxrwxrwx 1 root root 3 1月31 01:13/dev/cdrom ->sr0

/dev/cdrom 的源文件是 /dev/sr0。/dev/sr0 是光驱的真正设备文件名,代表 SCSI 接口或 SATA 接口的光驱,所以刚刚查询挂载时看到的光驱设备文件命令是 /dev/sr0。也就是说,挂载命令也可以写成这样:
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/

其实光驱的真正设备文件名是保存在 /proc/sys/dev/ cdrom/info 文件中的,所以可以通过查看这个文件来查询光盘的真正设备文件名,命令如下:
[root@localhost ~]# cat /proc/sys/dev/cdrom/info
CD-ROM information, ld: cdrom.c 3.20 2003/12/17
drive name: sr0
…省略部分输出…

挂载 U 盘
挂载 U 盘和挂载光盘的方式是一样的,只不过光盘的设备文件名是固定的(/dev/sr0 或 /dev/cdrom),而 U 盘的设备文件名是在插入 U 盘后系统自动分配的。因为U盘使用的是硬盘的设备文件名,而每台服务器上插入的硬盘数量和分区方式都是不一样的,所以 U 盘的设备号需要单独检测与分配,以免和硬盘的设备文件名产生冲突。U 盘的设备文件名是系统自动分配的,我们只要查找出来然后挂载可以了。

首先把 U 盘插入 Linux 系统中(注意:如果是虚拟机,则需要先把鼠标点入虚拟机再插入 U 盘),然后就可以使用 fdisk 命令查看 U 盘的设备文件名了。命令如下:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5GB, 21474836480 bytes
#系统硬盘
…省略部分输出…
Disk/dev/sdb: 8022 MB, 8022654976 bytes
#这就是识别的U盘,大小为8GB
94 heads, 14 sectors/track, 11906 cylinders
Units = cylinders of 1316 * 512 = 673792 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 11907 7834608 b W95 FAT32
#系统给U盘分配的设备文件名

查看到 U 盘的设备文件名,接下来就要创建挂载点了。命令如下:
[root@localhost ~]# mkdir /mnt/usb

然后就是挂载了,挂载命令如下:
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
挂载U盘。因为是Windows分区,所以是vfat文件系统格式
[root@localhost ~]# cd /mnt/usb/
#去挂载点访问U盘数据
[root@localhost usb]# ls
#输出为乱码
#之所以出现乱码,是因为编码格式不同

之所以出现乱码,是因为 U 盘是 Windows 中保存的数据,而 Windows 中的中文编码格式和 Linux 中的不一致,只需在挂载的时候指定正确的编码格式就可以解决乱码问题,命令如下:
[root@localhost ~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
#挂载U盘,指定中文编码格式为UTF-8
[root@localhost ~]# cd /mnt/usb/
[root@localhost usb]# ls
1111111年度总结及计划表.xls ZsyqlHL7osKSPBoGshZBr6.mp4 协议书
12月21日.doc 恭喜发财(定).mp4 新年VCR(定).mp4
#可以正确地查看中文了

因为我们的 Linux 在安装时采用的是 UTF-8 编码格式,所以要让 U 盘在挂载时也指定为 UTF-8 编码格式,才能正确显示。
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
#查看一下Linux默认的编码格式

注意,Linux 默认是不支持 NTFS 文件系统的,所以默认是不能挂载 NTFS 格式的移动硬盘的。要想让 Linux 支持移动硬盘,主要有三种方法:
重新编译内核,加入 ntfs 模块,然后安装 ntfs 模块即可;
不自己编译内核,而是下载已经编译好的内核,直接安装即可;
安装 NTFS 文件系统的第三方插件,也可以支持 NTFS 文件系统;

发布了160 篇原创文章 · 获赞 97 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/zyy1659949090/article/details/88176635