root運行/media可運行文件權限不夠,chmod改動權限無效


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:關於改動目錄權限的命令求解

讓linux掛載的移動硬盤具有運行權限

解決mount掛載u盤后chmod無法改動掛載點權限



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM