話說最近在樹莓派上搭建了一個owncloud,由於樹莓派的存儲空間有限,就插了個16G的U盤,而後設置成開機自動掛載。這裏稍微注意一下的是U盤的格式最好不要NTFS,由於通常狀況下NTFS格式的文件系統linux只具備讀的權限。就這樣奇怪的事情發生了,U盤掛載以後沒法對U盤內的文件更改權限,連超級用戶也不行。調了一段時間以後纔看到以下文章,轉載至此,方便從此查閱。我的建議將外接U盤格式化成ext3,ext4,一了百了。html
原文地址:讓linux掛載的移動硬盤具備執行權限。node
本文試圖經過探求達到讓linux系統掛載的移動硬盤具備可執行權限之目的的途徑來梳理有關linux系統設備掛載、用戶和羣組、以及文檔權限方面的基礎知識。linux
1、提出問題windows
當插入一個windows分區格式的移動硬盤或者U盤時,linux系統自動掛載該移動硬盤到/media目錄下,經過ls -al查看其權限,顯示爲:drwx------,證實咱們能夠進入到該盤符目錄,但當進一步查看該盤符下的某可執行文件的權限時,發現其爲-rw-------,便可以對該文件進行讀寫操做,但不能執行該文件,經過chmod更改權限也無濟於事,此時如何得到執行權限?(再好比在移動硬盤上有一源代碼,經過編譯產生了目標程序,可是當經過./來執行時,卻告知沒有權限,同時sudo chmod +x也不起任何做用,在實際工做中遇到這樣的狀況時,通常能夠經過將源碼拷貝到linux系統磁盤中進行編譯或者將編譯好的目標程序拷貝到linux系統的磁盤中再使用chmod更改權限來解決,但有時候這樣來回拷貝費時費力,若是能直接讓linux系統掛載的移動硬盤具備執行權限就方便多了)安全
2、linux設備掛載
async
這一問題涉及到硬盤掛載,首先須要瞭解linux系統中與磁盤掛載相關的兩個系統文件,即/etc/fstab和/etc/mtab,前者是系統分區信息以及系統啓動時磁盤的掛載參數,該文件是一個靜態文件(系統啓動後再也不改變,如人爲改變,須要重啓系統);後者是當前系統中已經掛載的磁盤列表,該文件是一個動態文件,即隨系統mount和umount文件系統而隨時發生改變,例如當插入U盤時,系統在mtab文件中寫入該磁盤的相關信息,當拔下U盤時,系統隨之刪除mtab文件中有關該磁盤的信息。工具
fstab文件內容的格式以下:
ui
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>spa
……
proc /proc proc nodev,noexec,nosuid 0 0.net
……
mtab文件內容的格式以下:
……
proc /proc proc rw,noexec,nosuid,nodev 0 0
……
可見fstab和mtab文件中的格式是同樣的,都是按照「設備名稱—掛載點—分區類型—掛載選項—dump選項—pass選項」的格式組織列表。
一、設備名稱是指系統中設備的名稱,好比/dev/sda1或/etc/sdb1或/etc/sdc1等,這些設備名稱能夠經過sudo fdisk -l命令來查看。(上文fstab和mtab文件格式示例中的proc設備是一個虛擬設備,並不在磁盤中真實存在,而僅僅存在於內存中,存儲有關進程和系統的信息)
二、掛載點實際上就是爲掛載磁盤建立的文件夾,好比./,./usr,和./swap這樣的系統默認掛載點,固然咱們能夠本身使用mkdir建立一個文件夾做爲掛載點。
三、分區類型在linux下面有ext2,ext3,ext4,jfs,jfs2,reiserfs,reiser4,swap等,在windows下面有FAT和NTFS等。
四、經常使用的掛載選項包括:(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。
五、dump選項用來設置是否讓備份程序dump備份文件系統,0爲不備份,1爲備份,若是上次用dump備份,將顯示備份至今的天數。
六、pass選項,告訴fsck程序在開機時以什麼順序檢查文件系統,爲0就表示不檢查,(./)分區只能是1,其它的分區只能是2,當數字相同就同時檢查。
3、linux用戶和羣組以及權限
瞭解了上文中所講的設備掛載,基本已經知道如何在linux下面掛載windows分區格式的移動硬盤了,關鍵就是設置掛載選項從而得到相應權限。在linux系統中權限設置與用戶和羣組概念直接相關,好比在上文中使用ls -al命令時,得到的有關權限的信息(10個字符,如drwx------)能夠分紅四個部分,即目錄/文件標識(第1個字符,d表示目錄,-表示文件,其餘還能夠爲l,b和c)、全部者權限(第2-4個字符)、全部者所在的用戶羣組權限(第5-7個字符)以及其餘用戶權限(最後3個字符)。權限在linux系統安全性方面具備重要做用,在此不述。權限的表示有兩種方式,即字符式和數字式:字符式用如上文中的r、w和x三個字符來分別表示讀、寫和執行權限,-表示不具備任何權限;而數字式的權限表示方法用四、二、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之和)。
4、解決問題
綜上,能夠在/etc/fstab中添加像下面這樣的掛載配置,並重啓系統讓系統掛載硬盤,從而得到執行權限。
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sdb1 /media/sdb1 ntfs utf8,uid=1000,gid=1000, umask=0000 0 0
出處:https://blog.csdn.net/u013780605/article/details/60464851
============================================================
首先使用
fdisk -l
命令查看一下U盤是否有被識別到,及識別的U盤是在哪一個位置
外接U盤或移動硬盤時,默認不會自動掛載,因此須要用mount 命令掛載。一般咱們在/mnt 或/media 目錄下新建一個目錄做爲掛載點。好比:
sda1 是取決於你的實際狀況,a表示第一個硬盤,1表示第一個分區。
掛載exFAT格式的硬盤
FAT 格式U盤mount 自己就能支持,但若是你的U盤或移動硬盤使用的是exFAT 格式,mount會說不支持。不要緊,安裝 exfat-fuse軟件以後 mount就支持了。
sudo apt-get install exfat-fuse
若是想開機自動掛載,而不是每次手工執行,能夠編輯 /etc/fstab 文件。好比在末尾添加一行:
/dev/sda1 /mnt/usbdisk vfat rw,defaults 0 0
掛載NTFS格式的硬盤(讀寫方式掛載)
默認掛載NTFS格式的硬盤只有只讀權限,須要藉助其它工具實現。
掛載FAT32格式的硬盤
說明:
sda1是取決於你的實際狀況,a表示第一個硬盤,1表示第一個分區。
umask=0000 0 0
前面四個0就是對全部人,可讀可寫可執行,
後面兩個0,第一個表明dump,0是不備份
第二個表明fsck檢查的順序,0表示不檢查
卸載:sudo umount /mnt/myusbdrive
查看掛載狀況可以使用如下命令。
出處:https://blog.csdn.net/xqf1528399071/article/details/52191530/