http://blog.csdn.net/pipisorry/article/details/39649699
问题:
我想运行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.
# <file system> <mount point> <type> <options> <dump> <pass>
……
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,就表示文档全部者具有读、写和运行权限,而群组和其它用户仅仅具有读取的权限。
http://blog.csdn.net/pipisorry/article/details/39649699
问题解决方式
1.改动/etc/fstab(推荐)
能够在/etc/fstab中加入像以下这种挂载配置,并重新启动系统让系统挂载硬盘,从而获得运行权限。
# <file system> <mount point> <type> <options> <dump> <pass>
/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下亲測无效)
登录方式见【linux下加入删除改动用户】
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 挂载点
from:http://blog.csdn.net/pipisorry/article/details/39649699
ref:关于改动目录权限的命令求解