linux 可执行文件权限不够,root执行/media可执行文件权限不够,chmod修改权限无效...

问题:

我想执行media文件夹下自己写的某个程序,但无法执行?

1. 于是我以root的身份在终端以输入指令chmod a+x 1,回车后没反应,查询该文件夹的属性,也没有改变,即修改权限无效。

2. 直接图形界面进入文件夹,打开文件属性,属性权限设置里面 执行权限都不可选(勾选后自动消失,即使使用ROOT权限同样)

3. 而拷贝到linux分区(比如/tmp文件夹下)才可以正常执行

pipi@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#g++ -o div divide.cpp

pipi@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#./div

bash: ./div: 权限不够

pipi@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#ll div

-rw------- 1 pipi pipi 8522 Oct 2 00:43 div

pipi@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#chmod u+x div

pipi@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#ll div

-rw------- 1 pipi pipi 8522 Oct 2 00:43 div =>权限竟然没变,依旧没法执行!!!media这个文件夹的所有者是root

root@ubuntu:/#ls -ld /media

drwxr-xr-x 5 root root 1024 Sep 29 00:08 /media

即当插入一个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

……

root@ubuntu:~#cat /etc/mtab

/dev/loop0 / ext3 rw 0 0

...

/dev/sda1 /host fuseblk rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096 0 0

gvfs-fuse-daemon /home/pipi/.gvfs fuse.gvfs-fuse-daemon rw,nosuid,nodev,user=pipi 0 0

/dev/sda6 /media/000B089D0000696F fuseblk rw,nosuid,nodev,allow_other,default_permissions,blksize=4096 0 0 #小编windows分区下的c盘

fstab和mtab文件中的格式都是按照“设备名称—挂载点—分区类型—挂载选项—dump选项—pass选项”的格式组织列表。[鸟哥的linux私房菜]

让linux挂载的移动硬盘具有执行权限 1、设备名称是指系统中设备的名称,比如/dev/sda1或/etc/sdb1或/etc/sdc1等,这些设备名称可以通过sudo fdisk -l命令来查看。

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分区格式的移动硬盘了,关键就是设置挂载选项从而获得相应权限。

当挂载Windows分区格式的文件系统时,我们可以通过uid=****,gid=****和umask=***/dmask=***/fmask=***来设置权限,uid和gid直接设置为自己的uid和gid就可以;

关于权限mask的设置采用数字式的,同样第一个数字表示所有者的权限mask,第二个数字表示群组的权限mask,第三个数字表示其他用户的权限mask,如果umask=000,就表示不屏蔽任何用户的任何权限,即所有用户具有读、写和执行权限,再例如fmask=033,就表示文档所有者具有读、写和执行权限,而群组和其他用户只具有读取的权限。

问题解决方案

1.修改/etc/fstab(推荐)

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

/dev/sdb6         /media/sdb6                                      ntfs       utf8,uid=1000,gid=1000, umask=000                  0             0

/dev/sda6         /media/E        ntfs       utf8,uid=1000,gid=1000,fmask=033                    0             0        (小编的系统这么修改的,可先挂载windows分区,再通过df -h查询windows分区的挂载具体情况)

万一在fstab中修改有误,导致开机失败,可以按屏幕提示按s键就可以了,进入系统后修改好fstab

或者按m键进入单用户维护模式,修改fstab,输入restart重启就可以进入系统了

解决之后的情况(具有执行权限了,并且可以执行):

root@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#ls -l div

-rwxr--r-- 1 pipi pipi 8522 Oct 2 00:43 div

root@ubuntu:/media/000B089D0000696F/mine/C++/POJ/POJ/BOP#./div

2 13 5 6 4 9 0 98 0 0 1 6 2 3 2 4 0 49 0 0

2.使用mount解决

umount /media/...

mount -o rw /dev/sda7 /media

3.专用分区

双系统中可以先装windows。在里边分好区,然后专门给linux留一个32G的fat32分区,免得和ntfs打交道。

把经常用的东西放fat32,这样保证你什么时候都能用。

把windows下常用但linux不用的放ntfs。把linux常用但windows不用的放到linux自己的分区。

4.图形界面以root登陆(ubuntu 12.04下亲测无效)

ps:

media文件夹下很多文件只读的原因:

只读的原因是win8的快速重启技术开启后进入其它系统对该分区进行写操作会导致数据丢失 所以ntfs-3g(linux上的ntfs支持模块)默认禁止对ntfs写操作。如果ntfs系统中不能读写,没法儿更改里边的文件属性。

另外/下的文件夹切忌修改权限

由于挂载的分区是ntfs的所以不能按照linux的权限方式修改,目前看到的权限是mount时赋予的。

mount 简单用法:

需要root权限

mount 分区 挂载点

分区:类似/dev/sda1之类

挂载点:目的文件夹,最好是空的

例:把第一分区(sda1)挂载到/home/xxx/a

mount /dev/sda1 /home/xxx/a

卸载只需 umount 挂载点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值