天天看點

Linux Umask指令原文連結:https://www.cnblogs.com/sench/p/8933638.htmllinux指令--umask

原文連結:https://www.cnblogs.com/sench/p/8933638.html

E/BitmapFactory( 513): Unable to decode stream: java.io.FileNotFoundException: /data/local/pattern_bg.png: open failed: EACCES (Permission denied)

今天在使用代碼  生成Linux指令來複制檔案 時,出現了新檔案不能被程式讀取的問題,Linux下檢視檔案權限,原因是root在生成檔案時沒有賦予其他使用者讀取權限

linux指令--umask

一、umask介紹

在linux系統中,我們建立一個新的檔案或者目錄的時候,這些新的檔案或目錄都會有預設的通路權限,umask指令與檔案和目錄的預設通路權限有關。若使用者建立一個檔案,則檔案的預設通路權限為 -rw-rw-rw- ,建立目錄的預設權限 drwxrwxrwx ,而umask值則表明了需要從預設權限中去掉哪些權限來成為最終的預設權限值。

二、umask值的含義

可以使用指令 umask 來檢視umask值

[email protected]:~$ umask 
0002
           

可以看到umask值為0002,其中第一個0與特殊權限有關,可以暫時不用理會,後三位002則與普通權限(rwx)有關,其中002中第一個0與使用者(user)權限有關,表示從使用者權限減0,也就是權限不變,是以檔案的建立者的權限是預設權限(rw),第二個0與組權限(group)有關,表示從組的權限減0,是以群組的權限也保持預設權限(rw),最後一位2則與系統中其他使用者(others)的權限有關,由于w=2,是以需要從其他使用者預設權限(rw)減去2,也就是去掉寫(w)權限,則其他人的權限為rw - w = r,則建立檔案的最終預設權限為  -rw-rw-r-- 。同理,目錄的預設權限為 drwxrwxrwx ,則d rwx rwx rwx - 002 = (d rwx rwx rwx) - (- --- --- -w-) = d rwx rwx r-x,是以使用者建立目錄的預設通路權限為 drwxrwxr-x 。我們通過下面的例子驗證一下:

Linux Umask指令原文連結:https://www.cnblogs.com/sench/p/8933638.htmllinux指令--umask
[email protected]:~$ umask 
0002
[email protected]:~$ touch test.txt
[email protected]:~$ ls -l test.txt 
-rw-rw-r-- 1 hadoop hadoop 0 4月  24 20:31 test.txt
[email protected]:~$ mkdir test
[email protected]:~$ ls -al test
總用量 8
drwxrwxr-x  2 hadoop hadoop 4096 4月  24 20:32 .
drwxr-xr-x 52 hadoop hadoop 4096 4月  24 20:32 ..
           
Linux Umask指令原文連結:https://www.cnblogs.com/sench/p/8933638.htmllinux指令--umask

可以看到檔案test.txt的權限為 -rw-rw-r-- ,目錄test的權限為 drwxrwxr-x ( . 代表目前目錄,也就是test目錄的屬性)。

 umask 指令顯示的為umask的數字值,還可以使用指令 umask -S 來顯示umask的符号值:

[email protected]:~$ umask -S
u=rwx,g=rwx,o=rx
           

可以看出(rwx rwx rwx) - (rwx rwx r-x) = (--- --- -w-) = 002 。

三、更改umask值

可以通過指令 umask 值 的方式來更改umask值,比如我要把umask值改為027,則使用指令 umask 027 即可。改成027後,使用者權限不變,群組權限減掉2,也就是去掉寫(w)權限,其他使用者減7,也就是去掉讀寫執行權限(rwx),是以其他使用者沒有通路權限。

Linux Umask指令原文連結:https://www.cnblogs.com/sench/p/8933638.htmllinux指令--umask
[email protected]:~$ umask 027
[email protected]:~$ umask
0027
[email protected]:~$ touch test.txt
[email protected]:~$ ls -l test.txt
-rw-r----- 1 hadoop hadoop 0 4月  24 20:49 test.txt
[email protected]:~$ mkdir test
[email protected]:~$ ls -al test
總用量 8
drwxr-x---  2 hadoop hadoop 4096 4月  24 20:49 .
drwxr-xr-x 52 hadoop hadoop 4096 4月  24 20:49 ..
           
Linux Umask指令原文連結:https://www.cnblogs.com/sench/p/8933638.htmllinux指令--umask

可以看到檔案的預設通路權限變為了 -rw-r----- ,目錄test的預設通路權限變為了 drwxr-x--- 。這種方式并不能永久改變umask值,隻是改變了目前會話的umask值,打開一個新的terminal輸入umask指令,可以看到umask值仍是預設的002。要想永久改變umask值,則可以修改檔案/etc/bashrc,在檔案中添加一行 umask 027 。

 四、總結

當我們想改變建立檔案和目錄時的預設通路權限,則可以通過umask指令來實作。

繼續閱讀