目录
参考文章:https://blog.csdn.net/qustdjx/article/details/7824353
提示:虽然上面这位博主已经给出了代码,但是当你运行时,你其实并知道到底在干些什么,所以是对上面的补充,并进行程序代码的解释。
1.为什么要进行挂载
- 对于Linux来说,挂载外部设备是一个非常重要的功能,并且经常使用。就是将一个设备挂接到一个已存在目录上,这里的设备通常是存储设备,可以挂载光盘,硬盘,磁带,光盘镜像文件等;但是挂载之后这些目录以前的内容将不可用。
- Linux系统将所有的设备都看作文件,将整个计算机的资源都整合成一个大的文件目录。如果我们要访问存储设备中的文件,必须将我呢间所在的分区挂载到一个已存在的目录上,然后通过这个目录来访问存储设备。
- 注意:挂载源和挂载点。
/mnt目录存放手动挂载的硬件;
/media目录存放自动挂载的硬件(载点都是由系统自动建立和删除的)
/dev不是存放设备的驱动程序,而是作为访问外部设备文件的接口。比如,我们的U盘,插入linux系统后,用fdisk -l查看分区,显示文件为/dev/sda1。
2.mount挂载
(1)fdisk查看分区
磁盘分区表操作工具
格式:fdisk[参数]
- -l:列出指定的外围设备的分区表状况;
- -u: 搭配-l参数列表,会用分区数目取代柱数面数目,来表示每个分区的起始地址。
(2)mount基本格式
挂载文件系统,使用权威超级用户或者‘/etc/fstab’中允许的使用者:
格式:mount [--参数][设备名称][挂载点]
-a:安装在/etc/fstab文件列出的所有文件系统;
-l:列出当前已挂载的设备,文件系统名称和挂载点;
-o:指定挂载选项,如“-o nolock”表示禁用锁定,ro表示只读方式,loop表示把挂载的设备当成是一个磁盘分区;
-t:<文件系统类型>指定设备的文件系统类型;
ext2 Linux目前常用的文件系统
Msdos:MS-DOS的fat16;
Vfat:windows98常用的fat32;
Nfs:网络文件系统;
iso9660: CD-ROM光盘标准文件系统;
Auto:windows NT/2000/XP的文件系统;
Ntfs:自动检测文件系统。
(3)挂载光驱
- 进入computer->mnt:到mnt目录下创建一个目录demo用来进行挂载:
- mkdir /mnt/demo
- 确定挂载源设备
进入设备dev目录:cd /dev
查看设备情况:ls -l
- 第一个例子:这里使用挂载源设备为U盘
-
- 提示:可以看到该文件是一个块设备,所以不能直接进行访问,需要挂载之后才能访问。
- 挂载语句:mount -t vfat -o ro /dev/sdb1 /mnt/demo
- 进入root用户进行挂载时,可能会提示以下信息:
- /dev/sdb1 is already mounted or /mnt/demo busy
/dev/sdb1 is already mounted on /media/krgroots/disk
- /dev/sdb1 is already mounted or /mnt/demo busy
- 解决方案
- 下载dmsetup:apt-get install dmsetup
- 执行:dmsetup status查看状态
- 执行第二句:dmsetup remove_all
-
- 第二个例子:挂载/dev/cdrom挂载源
- 挂载语句:mount -t iso9660 -o ro /dev/cdrom /mnt/demo/
- 可能会报错:mount: no medium found on /dev/sr0
- 解决方案:解决方案
- 挂载成功
- 第三个例子:挂载光盘镜像文件(.iso文件)
- 第一步:准备一个ISO文件,如Center-7-x86_64-DVD-1908.iso;
- 第二步:在/mnt/目录下创建 一个ISOdemo文件:mkdir /mnt/isodemo
- 第三步:挂载语句:mount -t iso9660 -o loop /documents/Center-7-x86_64-DVD-1908.iso /mnt/isodemo
- 开机自动挂载
- 挂载的资源在重庆系统之后失效,需要重新挂载,如果需要设置开机自动挂载,需要将挂载信息设置到/etc/fstab配置文件当中,步骤如下:
- 比如将/dev/cdrom挂载源和Center-7-x86_64-DVD-1908.iso设置为自动挂载;
-
- 参数解释:
- /dev/cdrom:表示挂载源,要挂载的磁盘分区或者存储设备或者读取文件系统;
- /mnt/cdrom:表示挂载点,挂载的位置;
- iso9660:表示文件系统类型,ext4文件系统,iso9660标准文件系统,swap表示交换分区等;
- default:挂载参数,一般默认;
- 第一个0:表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份,如果是0,dump被忽略,一般大多数的dump都是0;
- 第二个0:读取文件系统时检查顺序,允许的数字为0,1,2.根目录应当获得最高的优先权1,表示其他所有需要被检查的设备为2,不检查使用0.
- 参数解释:
- 接下来是重启系统:重新启动系统
3.题目要求:
编写一个Shell程序,呈现一个菜单,有0-5共6个命令选项,
1为挂载U盘;
2为卸载U盘;
3为显示U盘的信息;
4把硬盘中的文件拷贝到U盘;
5把U盘中的文件拷贝到硬盘中;
选0为退出。
代码实现
(1)U盘的挂载
#!/bin/bash
mountusb(){
clear
mkdir -p /mnt/usb
fdisk -l | grep /dev/sd
echo -e "Please Enter the device name of usb as shown above:\c"
read PARAMETER
mount /dev/$PARAMETER /mnt/usb
echo "successfully mount!"
}
提示:fdisk -l | grep /dev/sd:表示查看分区,并将结果通过管道“|”的方式作为grep的输入,使用grep查看/dev/目录以sd开头的文件。
(2)U盘的卸载
umountusb(){
clear
umount /mnt/usb
echo "successfully umount!"
}
(3)显示U盘中的文件
display(){
clear
ls -la /mnt/usb
}
(4)从硬盘复制文件到U盘
cpdisktousb(){
clear
echo -e"Please Enter filename to be Copide(number Current director):\c"
read FILE
echo "Copying please wait..."
cp $FILE /mnt/usb
}
提示:这里的 cp $FILE /mnt/usb:表示将文件从硬盘复制到U盘中。
(5)从U盘复制文件到硬盘
cpusbtodisk(){
clear
echo -e "Please Enter the filename to be Copide in USB:\c"
read FILE
echo "Copying ,Please wait..."
cp /mnt/usb/$FILE .
}
提示:注意这里的cp /mnt/usb/$FILE .(注意这里的点)表示从U盘中复制文件到当前目录下。
(6)退出程序
quit(){
clear
echo "************************8"
echo"*** thank you to use ,Good bye! ***"
exit 0
}
(7)调用函数
clear
while true
do
echo "============================="
echo "*** LINUX USB MANAGE PROGRAM ***"
echo " 1-MOUNT USB"
echo " 2-UNMOUNT USB"
echo " 3-DISPLEAY USB INFORMATION"
echo " 4-COPYFILE IN DISK TO USB"
echo " 5-COPY FILE IN USB TO DISK"
echo " 0-EXIT"
echo "============================"
echo -e "Please Enter a Choice (0-5):\c"
read CHOICE
case $CHOICE in
1)
mountusb
;;
2)
umountusb
;;
3)
display
;;
4)
cpdisktousb
;;
5)
cpusbtodisk
;;
0)
quit
;;
*)
echo "Invalid Choice Corrent Choice is(0-5)"
sleep 4
clear
continue
;;
esac
done
(8)运行结果
第一步:挂载U盘
第二步:查看U盘文件
第三步:从硬盘复制文件到U盘
查看文件是否复制成功到U盘:
第四步:从U盘复制文件到硬盘