话说最近在树莓派上搭建了一个owncloud,因为树莓派的存储空间有限,就插了个16G的U盘,然后设置成开机自动挂载。这里稍微注意一下的是U盘的格式最好不要NTFS,因为一般情况下NTFS格式的文件系统linux只具有读的权限。就这样奇怪的事情发生了,U盘挂载之后无法对U盘内的文件更改权限,连超级用户也不行。调了一段时间之后才看到如下文章,转载至此,方便今后查阅。

本文试图通过探求达到让linux系统挂载的移动硬盘具有可执行权限之目的的途径来梳理有关linux系统设备挂载、用户和群组、以及文档权限方面的基础知识。

一、提出问题

当插入一个windows分区格式的移动硬盘或者U盘时,linux系统自动挂载该移动硬盘到/media目录下,通过ls -al查看其权限,显示为:drwx------,证明我们可以进入到该盘符目录,但当进一步查看该盘符下的某可执行文件的权限时,发现其为-rw-------,即可以对该文件进行读写操作,但不能执行该文件,通过chmod更改权限也无济于事,此时如何获得执行权限?(再比如在移动硬盘上有一源代码,通过编译产生了目标程序,但是当通过./来执行时,却告知没有权限,同时sudo chmod +x也不起任何作用,在实际工作中遇到这样的情况时,一般可以通过将源码拷贝到linux系统磁盘中进行编译或者将编译好的目标程序拷贝到linux系统的磁盘中再使用chmod更改权限来解决,但有时候这样来回拷贝费时费力,如果能直接让linux系统挂载的移动硬盘具有执行权限就方便多了)

二、linux设备挂载

这一问题涉及到硬盘挂载,首先需要了解linux系统中与磁盘挂载相关的两个系统文件,即/etc/fstab和/etc/mtab,前者是系统分区信息以及系统启动时磁盘的挂载参数,该文件是一个静态文件(系统启动后不再改变,如人为改变,需要重启系统);后者是当前系统中已经挂载的磁盘列表,该文件是一个动态文件,即随系统mount和umount文件系统而随时发生改变,例如当插入U盘时,系统在mtab文件中写入该磁盘的相关信息,当拔下U盘时,系统随之删除mtab文件中有关该磁盘的信息。

fstab文件内容的格式如下:

# /etc/fstab: static file system information. # #

…… proc                       /proc                   proc    nodev,noexec,nosuid              0                 0

……

mtab文件内容的格式如下:

…… proc                       /proc                    proc   rw,noexec,nosuid,nodev          0                 0

……

可见fstab和mtab文件中的格式是一样的,都是按照“设备名称—挂载点—分区类型—挂载选项—dump选项—pass选项”的格式组织列表。

1、设备名称是指系统中设备的名称,比如/dev/sda1或/etc/sdb1或/etc/sdc1等,这些设备名称可以通过sudo fdisk -l命令来查看。(上文fstab和mtab文件格式示例中的proc设备是一个虚拟设备,并不在磁盘中真实存在,而仅仅存在于内存中,存储有关进程和系统的信息)

2、挂载点实际上就是为挂载磁盘创建的文件夹,比如./,./usr,和./swap这样的系统默认挂载点,当然我们可以自己使用mkdir创建一个文件夹作为挂载点。

3、分区类型在linux下面有ext2,ext3,ext4,jfs,jfs2,reiserfs,reiser4,swap等,在windows下面有FAT和NTFS等。

4、常用的挂载选项包括:(1)auto和noauto: auto允许系统自动挂载或使用mount -a就能挂载,fstab默认就是这个选项 ;noauto使系统开机不自动挂载 或使用mount -a时不挂载;(2)rw和ro:rw表示以读写权限挂载该设备,ro表示以只读权限挂载该设备;(3)suid和nosuid:suid表示允许对该设备进行uid和gid的设置操作,nosuid就是不允许设置uid和gid;(4)dev和nodev:dev表示同时挂载文件系统上的特殊设备,nodev表示不挂载这些特殊设备;(5)exc和noexc:exec表示允许执行该文件系统下的二进制文件,noexc当然表示不允许执行二进制文件;(6)user、nouser、users和owner:user允许指定的普通用户挂载该设备,nouser表示禁止普通用户挂载该设备(仅root可以挂载该设备),users表示允许所有普通用户挂载该设备,owner表示仅设备所有者可以挂载。user和users选项同时隐含noexec,nosuid,nodev选项;(7)sync和asnyc:sync表示对该设备的I/O操作同步进行,不进行缓冲处理,而async表示不同步,进行缓冲处理;(8)defaults: 该选项是rw, suid, dev, exec, auto, nouser, and async这些选项的组合。此外,linux系统针对不同的文件系统还可以设定其他特别选项,例如,对Windows下的NTFS文件系统,可以设置utf8(表示采用UTF-8转换文件名称)、uid=****(挂载设备的指定用户id,可以通过id命令或者查看/etc/passwd文件方式获得)、gid=****(挂载设备的指定用户群组id)和umask=***(挂载设备的权限屏蔽,八进制数值)等,对Windows下的FAT(包括msdos,umsdos,vfat等)文件系统,可以设置uid=****,gid=****,umask=***,dmask=***(挂载设备时应用于目录的权限屏蔽,八进制数值)和fmask=***(挂载设备时应用于普通文件的权限屏蔽,八进制数值)。更多挂载选项可以参见man mount。

5、dump选项用来设置是否让备份程序dump备份文件系统,0为不备份,1为备份,如果上次用dump备份,将显示备份至今的天数。

6、pass选项,告诉fsck程序在开机时以什么顺序检查文件系统,为0就表示不检查,(./)分区只能是1,其它的分区只能是2,当数字相同就同时检查。

三、linux用户和群组以及权限

了解了上文中所讲的设备挂载,基本已经知道如何在linux下面挂载windows分区格式的移动硬盘了,关键就是设置挂载选项从而获得相应权限。在linux系统中权限设置与用户和群组概念直接相关,比如在上文中使用ls -al命令时,获得的有关权限的信息(10个字符,如drwx------)可以分成四个部分,即目录/文件标识(第1个字符,d表示目录,-表示文件,其他还可以为l,b和c)、所有者权限(第2-4个字符)、所有者所在的用户群组权限(第5-7个字符)以及其他用户权限(最后3个字符)。权限在linux系统安全性方面具有重要作用,在此不述。权限的表示有两种方式,即字符式和数字式:字符式用如上文中的r、w和x三个字符来分别表示读、写和执行权限,-表示不具有任何权限;而数字式的权限表示方法用4、2、1三个数字分别表示读、写和执行权限,0表示不具有任何权限,用数字式表示文档所有者、群组和其他用户的权限时同一个组的权限需要累加,例如某文档的权限是- rwx rw- ---,则用数字式表示为760。

至此,我们可以回过头去解决问题了,当挂载Windows分区格式的文件系统时,我们可以通过uid=****,gid=****和umask=***/dmask=***/fmask=***来设置权限,uid和gid的设置并不难,直接设置为自己的uid和gid就可以;关于权限mask的设置采用数字式的,同样第一个数字表示所有者的权限mask,第二个数字表示群组的权限mask,第三个数字表示其他用户的权限mask,如果umask=000,就表示不屏蔽任何用户的任何权限,即所有用户具有读、写和执行权限,再例如fmask=033,就表示文档所有者具有读、写和执行权限,而群组和其他用户只具有读取的权限,而屏蔽了权限3(1和2之和)。

四、解决问题

综上,可以在/etc/fstab中添加像下面这样的挂载配置,并重启系统让系统挂载硬盘,从而获得执行权限。

#

/dev/sdb1        /media/sdb1         ntfsutf8,uid=1000,gid=1000, umask=0000             0

linux挂载u盘出错_linux挂载U盘、移动硬盘后无法更改权限相关推荐

  1. linux挂载u盘出错_linux挂载移动硬盘出错

    敬爱的大牛们,小弟菜鸟有一块希捷(1T),本来是有4个分区的,但是在linux(redora19)中却不能使用使用,u盘都能自动挂载了,移动硬盘却不能,而且手动挂载却提示错误,真是不知何故呀? 病症一 ...

  2. Linux系统/etc/resolv.conf文件为只读模式,且无法更改权限

    Linux系统/etc/resolv.conf文件为只读模式,且无法更改权限 /etc/resolv.conf 为只读模式 使用 chmod +w /etc/resolv.conf 命令修改权限会报如 ...

  3. linux命令行下读取u盘内容_Linux拷贝U盘文件(命令行)

    Linux系统有的有界面,有的没有只要命令窗口,因此导入外部文件就变得困难,没有可视化的方便. 这里通过挂载u盘进行文件拷贝. 首先挂载u盘:这里以centos为例 1.进入命令行模式下,输入命令 s ...

  4. linux命令行下读取u盘内容_Linux复制U盘文件(命令行)

    某些Linux系统具有一个界面,并且某些不仅仅具有命令窗口,因此导入外部文件变得困难并且没有视觉上的便利. 在这里,通过安装USB闪存驱动器来复制文件. 首先安装USB闪存盘:这里以centos为例 ...

  5. linux挂载u盘出错_linux 无法挂载u盘的解决办法

    1. 确定无法挂载的分区为:/dev/sdb1. 2. 创建挂载目录: sudo mkdir /media/xxx/yyy (xxx为用户名,yyy为挂载的U盘的名字) 3. 挂载U盘: mount ...

  6. linux 扩展挂载盘大小_Linux 挂载新添加磁盘LVM配置

    Linux 直接挂载磁盘 [root@11g-primary ~]# df -h Filesystem            Size  Used Avail Use% Mounted on /dev ...

  7. linux挂载iso镜像文件_Linux服务器如何识别移动硬盘?

    序言 通常我们使用的移动硬盘或U盘一般都是ntfs或fat32的文件系统类型. 绝大多数Linux发行版内核支持fat32文件系统,因此我们直接mount即可挂载: 然而对于ntfs格式的设备,Lin ...

  8. g linux 未定义的引用_linux – 链接到静态库后的未定义引用

    我写了一个简单的程序来测试xdotool是否能满足我的要求. (嗯,不是真的.我的第一步是确保我是否可以调用xdotool库.) #include #include using namespace s ...

  9. Linux RedHat CentOS 操作系统加载挂载U盘、USB移动硬盘方法

    插上USB存储设备后,先用 fdisk -l 或 parted -l 命令来查询操作系统检测到的磁盘详细列表, 找到插入的设备在系统的代号,如sda1, sda2, sdb1, sd2--然后继续操作 ...

最新文章

  1. oracle anbob,Tag Archives: oracle安装 | ANBOB
  2. R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐、右对齐、居中)实战
  3. centos7 安装 killall 命令
  4. 微信小程序云开发不完全指北
  5. Faster RCNN minibatch.py解读
  6. Asp.Net MVC4.0 官方教程 入门指南之一-- 入门介绍
  7. 诺基亚S40手机联系人导入安卓手机
  8. 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
  9. 基于sklearn的LogisticRegression二分类实践
  10. 设计一个类代表二维空间的一个圆。_平面设计基础——点、线、面
  11. 数据自治开放的软件开发和运行环境
  12. 交换机的VLAN与Trunk配置
  13. bert处理英文的词根处理
  14. 让数据更安全可用,阿里云存储多项新功能发布
  15. qpython3 l_qpython3安装requirements_Python3安装配置【转】
  16. mysql 空格键和回车键查询
  17. 缓解眼睛疲劳:按摩+复调钢琴曲
  18. 保护你的隐私,五种控制Android应用的权限的方法
  19. 新的一年,知足,上进,不负野心!
  20. 统一信用代码n开头_股票代码查询怎么查,通过板块查找股票

热门文章

  1. 58沈剑解读:数据库典型架构实践
  2. excel查找匹配项vlookup函数
  3. 利用nsca监控oracle的session数
  4. 【数字化】数字化工厂的框架与落地实践;50张图解读数字化制造
  5. 苹果或将为iPhone 13全系配备LiDAR
  6. 20190603复盘
  7. C#时间/日期格式大全
  8. win7如何设置通电自动开机_dell主板win10如何设置通电自动启动_dell主板win10怎么设置通电自动启动...
  9. 人工智能导论(2)——启发式算法(八数码问题)
  10. 安全方向比路由交换难吗_致网络工程师,新网工时代轻松拿下思科全新CCIE EI等各方向认证...