挂载就是把设备文件名和已经建立的空目录链接起来的过程,就叫做挂载。
linux所有存储设备都必须挂载才能使用,包括硬盘。
命令的具体格式如下:
#查询系统中已经挂我的设备,-l会显示卷标名称
[root@localhost ~ ] # mount [-l]
直接输入mount命令,就是查询系统中已经存在的挂载设备。
[root@localhost ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
其中只有
/dev/sda3 on / type ext4 (rw)-->/dev/sda3挂载到根目录下,文件系统是ext4,权限是读写。
/dev/sda1 on /boot type ext4 (rw)
有用,其他都是干扰项.
还要注意,swap分区是不需要挂载点的,是给系统内核直接访问的分区,mount命令是查看不到的。
mount -a命令#依据配置文件/etc/fstab的内容,自动挂载
[root@localhost ~ ] # mount -a
-a的a是auto,自动的意思。
Linux系统的硬盘是开机自动挂载的。但是光盘和U盘这类移动存储设备,是不推荐开机自动挂载的。
如果光盘和U盘这类移动存储设备设置了开机自动挂载,开机时一旦你忘记放光盘或者U盘,系统就会无条件的寻找这个分区,如果找不到的话,就会系统启动错误。这样的错误其实修复起来并不难,但是一定要在本机上进行操作。
Linux系统自动挂载就是依照/etc/fstab文件进行自动挂载的。这个文件是一个非常脆软的文件,一旦这个文件写错,系统会启动报错。[root@localhost ~]# vim /etc/fstab

而mount -a命令可以看作是扫描一下/etc/fstab文件,看看里边的内容有没有写错,如果写错会报错。
在Red Hat 6以后的Linux系统中,/etc/fstab文件的容错性明显的增强了。Red Hat 5以前出现一个字母的拼写错误都是不行的,Red Hat 6以后除了关键位置的信息不能有错误,其他的出现错误也不会报错,所以有时候用mount -a命令扫描,不一定会出现错误,,所以不能盲目信任mount -a命令的结果。这个记住就好。(后边会说如果该文件有错误怎么修复)
[root@localhost ~ ] # mount [-t 文件系统] [-L卷标名] [-o特殊选项] \
设备文件名 挂载点
注意:在Linux系统中\ 的意思表示换行符, 代表上边两行是一行内容。
选项:
-t文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统。(不写也没事,Linux系统默认光盘U盘都能自动识别)。
-L卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载。(现在基本上用不到了,可以不关注。)
-o特殊选项:可以指定挂载的额外选项,比如读写权限、同步异步等,如果不指定则默认值生效。
举例
[root@localhost ~ ] # mount -t iso9660 /dev/sr0 /mnt/cdrom/
我们先查看一下上篇文章说的/etc/fstab文件,Linux系统的自动挂载配置文件。

上图中红框内就是分区挂载的默认权限。下面详细说明一下挂载的权限。
说明:
defaults权限代表最上边7种权限中,有一个是默认值。这个默认值一般不需要进行修改,默认选项就很好。
比如exec/noexec选项,如果选择noexec,那整个分区中的文件都不能执行,如果是根目录定义成noexec,那整个系统都无法启动,即使想修改也不行,因为mount命令都执行不了了。
练习:说明exec/noexec选项
#1、查看系统中已经挂载的文件系统,注意有虚拟文件系统
#命令结果是代表:/dev/sda3分区挂载到/目录,文件系统是ext4,权限是读写
[root@localhost] # mount
/dev/sda3 on/type ext4(rw)proc on/proc type proc(rw)
sysfs on/sys type sysfs(rw)
devpts on/dev/pts type devpts(rw,gid=5,mode=620)
tmpfs on/dev/shm type tmpfs(rw)
/dev/sdal on/boot type ext4(rw)
none on/proc/sys/fs/binfmt_misc type binfmt_misc(rw)
sunrpe on/var/lib/nfs/rpe_pipefs type rpc_pipefs(rw)
#2、修改特殊权限
#我们查看到/boot分区已经被挂载,而且采用的defaults 选项,那么我们重新挂载分区,并采用 noexec
[root@localhost ~ ] # mount -o remount,noexec /boot(临时生效)
然后用mount命令查询一下分区,boot分区多了noexec权限
/dev/sdal on /boot type ext4 (rw,noexec)
#权限禁止执行文件执行,看看会出现什么情况(注意不要用根分区做试验,#不然系统命令也不能执行了)。
# 执行一个shell脚本
[root@localhost boot]#./hello.sh
-bash:./hello.sh:权限不够
# 再修改回来权限,就可以执行了。
[root@localhost ~ ] # mount -o remount,exec /boot
这个练习也要记住remount的作用和使用方法。
光盘挂载的前提依然是指定光盘的设备文件名,不同版本的Linux,设备文件名并不相同:
不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名。

可以看到/dev/cdrom就是/dev/sr0的软链接(相当于windows系统的快捷方式)。推荐使用源文件dev/sr0。
Linux系统下在根目录中默认给我们提供了三个空文件夹:
我习惯在mnt文件夹中创建空目录来进行挂载外部设备。下面总结一下挂载光盘的步骤。
1、在mnt文件夹中创建一个名称为cdrom空目录
[root@localhost /]# mkdir /mnt/cdrom
不建议在根目录创建过多的一级目录,不方便管理。
2、找到光盘的设备文件名称
CentOS6.x以后的系统,光盘设备文件名是/dev/sr0,这是固定的,记住就可以。
在CentOS5.x以前的系统,光盘设备文件名是/dev/hdc,因为很早以前的系统,硬盘和光盘系统是统一命名的,在很早以前认为系统有两块硬盘就够了hda,hdb,然后光盘默认识别就是hdc。但是对存储空间的需求越来越大,导致两块盘不能满足需求了,就需要继续添加新的硬盘,这个时候光盘的设备文件名的识别会自动向后便变动,如有三块硬盘,光盘的设备文件名hdd。
这个时候就会导致,光盘的设备文件就不是固定的了,会导致我在一台电脑上挂载光盘,就先要查询光盘的设备文件名是什么,然后在进行挂载。所以在CentOS6.x以后的系统,光盘的设备文件名就固定了为sr0,第一台光驱的设备文件名为sr0,第二台光驱的设备文件名为sr1,以此类推。这样做的好处是和硬盘的设备文件名就不相干了。
3、挂载光盘
[root@localhost ~ ] # mount -t iso9660 /dev/sr0 /mnt/cdrom/
注意:
-t文件系统:加入文件系统类型来指定挂载的类型,
可以ext3、ext4、iso9660等文件系统。
挂载光盘就用iso9660类型的文件系统类型。
也可以直接省略-t iso9660,
挂载光盘时候系统自动添加。
[root@localhost ~ ] # mount /dev/sr0 /mnt/cdrom/
执行上边命令会报错,说你必须指定文件系统。如下:
[root@localhost /]# mount /dev/sr0 /mnt/cdrom/
mount: you must specify the filesystem type
我们添加上文件系统,再次执行。如下:
[root@localhost /]# mount -t iso9660 /dev/sr0 /mnt/cdrom/
mount: no medium found on /dev/sr0
这回的报错信息就准确了,告诉我们说在/dev/sr0中没有发现光盘。
需要在虚拟机软件中添加cd文件,放入光驱中。

再次输入光盘挂载命令。
[root@localhost /]# mount /dev/sr0 /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
还有一行报错,说/dev/sr0想要读写权限,但是现在被赋予了只读权限。因为光盘的使用就是一次性写入,之后就只读就可以了。所以这行报错,可以认为是光盘正确挂载的标记。
最后执行mount命令在确认一下。

4、访问关盘中的数据
需要去挂载点中访问光盘的数据,在 /mnt/cdrom/目录中。

这里边都是光盘中的内容。
5、卸载挂载点
无论是挂载的光盘还是U盘,用完后就需要卸载掉。如果你没有卸载就换cd的话,就会出现问题。这是有一定几率的,如果你不卸载,多换几次cd的话,你会发现你无论放入任何光盘,你读出来的数据都不是你放入的cd中的数据。而是虚拟机自带的工具vmtools中的内容。之后你即使卸载的光盘,也不在好使了。
这个时候的解决方法是,在虚拟机中把现有的光驱移除,在添加一个新的光驱。

卸载挂载点
#因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以
[root@localhost ~ ] # umount /dev/sr0
[root@localhost ~ ] # umount /mnt/cdrom
卸载
[ root@ localhost cdrom]# umount /dev/sr0
umount:/mnt/cdrom: device is busy.
(In some cases useful info about processes that use the device is found by 1sof(8) or fuser(1))
上边报错说设备正忙,以为此时位置正在光盘里边cdrom目录中,要退出在进行卸载。
注意:卸载的时候需要退出光盘目录,才能正常卸载。
6、挂载点为什么要使用空目录
#在/mnt/cdrom目录中创建两个文件abc,bcd
[root@localhost cdrom] # ls
abc bcd
#在/mnt/cdrom目录上挂载光盘
[root@localhost cdrom] # mount /dev/sr0 /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
可以看到看到光盘是可以挂载到有文件的目录上。
#查看/mnt/cdrom目录中的文件
[root@localhost cdrom]# ls /mnt/cdrom/
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
文件夹中并没有之前的abc,bcd文件了。而只有光盘中的数据。
#把光盘挂载点卸载了
[root@localhost cdrom]# umount /dev/sr0
#再次查看/mnt/cdrom目录中的文件
[root@localhost cdrom]# ls /mnt/cdrom/
abc bcd
发现abc,bcd文件又出现了。
是因为/mnt/cdrom作为目录的时候,里边是一个一个的block来存储数据。当我把/mnt/cdrom作为一个挂载点的时候,是把这个目录作为进入另一个分区的介入点(光盘也是一个存储空间,是一个独立的空间),所以/mnt/cdrom作为目录的访问点就不在了,但是里边的数据并没有删除,所以/mnt/cdrom挂载点一旦卸载,/mnt/cdrom目录又回归原始位置,就又可以读取出原来文件中的数据了。
这就是为什么说一定要用空目录做挂载点,因为有数据的目录,一旦作为挂载点,原来目录中的数据是不能查看也不能删除,占用系统资源,不合理。
那么在这里我也精心准备了上述大纲的详细资料在下方链接如下


我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/
如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最
在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa
关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程
我在目录“C:\DocumentsandSettings\test.exe”中有一个文件,但是当我用单引号编写命令时`C:\DocumentsandSettings\test.exe(我无法在此框中显示),用于在Ruby中执行命令,我无法这样做,我收到的错误是找不到文件或目录。我尝试用“//”和“\”替换“\”,但似乎没有任何效果。我也使用过系统、IO.popen和exec命令,但所有的努力都是徒劳的。exec命令还使程序退出,这是我不想发生的。提前致谢。 最佳答案 反引号环境就像双引号,所以反斜杠用于转义。此外,Ruby会将空格解
我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN