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 掛載點
總結
以上是生活随笔為你收集整理的linux 可执行文件权限不够,root执行/media可执行文件权限不够,chmod修改权限无效...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux文件系统中文件基本权限,Lin
- 下一篇: 定时从linux获取文件,Linux 使