umask

umask

當我們登錄系統之後創建一個檔案總是有一個默認許可權的,那么這個許可權是怎么來的呢?這就是umask幹的事情。umask設定了用戶創建檔案的默認 許可權,它與chmod的效果剛好相反,umask設定的是許可權“補碼”,而chmod設定的是檔案許可權碼。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中設定umask值。具體取決於Linux發行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆蓋不了/etc/profile中的配置值的,必須在$[HOME]/.bashrc下增加umask值才可以永久定義自己的umask值。

基本介紹

  • 中文名掩碼
  • 外文名:umask
  • 一般形式:umask nnn
  • 作用:設定限制新檔案許可權
常用指令,一般格式,使用方法,操作函式,umask,說明:,檔案函式,umask,說明,

常用指令

一般格式

umask [選項] [掩碼]
該命令用來設定限制新檔案許可權的掩碼。當新檔案被創建時,其最初的許可權由檔案創建掩碼決定。用戶每次註冊進入系統時,umask命令都被執行,並自動設定掩碼改變默認值,新的許可權將會把舊的覆蓋
選項及其含義如下。
-S:顯示當前的掩碼。
umask是從許可權中“拿走”相應的位,且檔案創建時不能賦予執行許可權。

使用方法

  • A 什麼是umask?
你的系統管理員必須要為你設定一個合理的 umask值,以確保你創建的檔案具有所希望的預設許可權,防止其他非同組用戶對你的檔案具有寫許可權。在已經登錄之後,可以按照個人的偏好使用umask命 令來改變檔案創建的預設許可權。相應的改變直到退出該shell或使用另外的umask命令之前一直有效。一般來說,umask命令是在/etc /profile檔案中設定的,每個用戶在登錄時都會引用這個檔案,所以如果希望改變所有用戶的umask,可以在該檔案中加入相應的條目。如果希望永久 性地設定自己的umask值,那么就把它放在自己$HOME目錄下的.profile或.bash_profile或.bashrc檔案中。
  • B 如何計算umask值
umask 命令允許你設定檔案創建時的預設模式,對應每一類用戶(檔案屬主、同組用戶、其他用戶)存在一個相應的umask值中的數字。對於檔案來說,這一數字的最 大值分別是6。系統不允許你在創建一個文本檔案時就賦予它執行許可權,必須在創建後用chmod命令增加這一許可權。目錄則允許設定執行許可權,這樣針對目錄來 說,umask中各個數字最大可以到7。
該命令的一般形式為:
umask nnn
其中nnn為umask置000-777。
讓我們來看一些例子。
計算出你的umask值:
可以有幾種計算umask值的方法,通過設定umask值,可以為新創建的檔案和目錄設定預設許可權。下表列出了與許可權位相對應的umask值。
在計算umask值時,可以針對各類用戶分別在這張表中按照所需要的檔案/目錄創建預設許可權查找對應的umask值。
例如,umask值002 所對應的檔案和目錄創建預設許可權分別為6 6 4(666 減 2)和7 7 5(777 減 2)。
還有另外一種計算umask值的方法。我們只要記住umask是從許可權中“拿走”相應的位即可。
umask值與許可權
umask值
檔案
目錄
0 6 7
600
710
1 6 6
600
611
2 4 5
422
532
344
422
433
423
244
354
522
244
255
601
066
176
700
066
666
例如,對於umask值0 0 2,相應的檔案和目錄預設創建許可權是什麼呢?
第一步,我們首先寫下目錄具有全部許可權的模式,即777 (所有用戶都具有讀、寫和執行許可權)。
第二步,在下面一行按照umask值寫下相應的位,在本例中是0 0 2。
第三步,在接下來的一行中記下上面兩行中沒有匹配的位。這就是目錄的預設創建許可權。
稍加練習就能夠記住這種方法。
第四步,對於檔案來說,在創建時不能具有執行許可權,只要拿掉相應的執行許可權比特即可。
這就是上面的例子, 其中umask值為0 0 2:
1) 檔案的最大許可權 rwx rwx rwx (777)
2) umask值為0 0 2 --- --- -w-
3) 目錄許可權 rwx rwx r-x (775) 這就是目錄創建預設許可權
4) 檔案許可權 rw- rw- r-- (664) 這就是檔案創建預設許可權
下面是另外一個例子,假設這次u m a s k值為0 2 2:
1) 檔案的最大許可權 rwx rwx rwx (777)
2 ) u m a s k值為0 2 2 --- -w- -w-
3) 目錄許可權 rwx r-x r-x (755) 這就是目錄創建預設許可權
4) 檔案許可權 rw- r-- r-- (644) 這就是檔案創建預設許可權
  • C 常用的umask值
下表列出了一些umask值及它們所對應的目錄和檔案許可權。
常用的umask值及對應的檔案和目錄許可權
umask 值
檔案
目錄
022
644
755
027
640
750
002
664
775
006
660
771
007
660
770
  • D umask命令
如果想知道當前的umask 值,可以使用umask命令:
$umask
如果想要改變umask值,只要使用umask命令設定一個新的值即可:
$ umask 002
確認一下系統是否已經接受了新的u m a s k值:
$umask
002
$touch testfile
$ls -l testfile
rw- rw- r--
在使用umask命令之前一定要弄清楚到底希望具有什麼樣的檔案/目錄創建預設許可權。否則可能會得到一些非常奇怪的結果;例如,如果將umask值設定為6 0 0,那么所創建的檔案/目錄的預設許可權就是0 6 6!

操作函式

umask

#include <sys/stat.h>
mode_t umask(mode_t cmask);

說明:

其中cmask對應下面的9個位的“或”值:
S_IRUSR 用戶讀
S_IWUSR 用戶寫
S_IXUSR 用戶執行
S_IRGRP 組讀
S_IWGRP 組寫
S_IXGRP 組執行
S_IROTH 其他讀
S_IWOTH 其他寫
S_IXOTH 其他執行
這9個位對應linux檔案的許可權位。
umask函式為進程設定檔案模式創建禁止字,並返回以前的值。在進程創建一個新檔案或新目錄的時候,就一定會使用檔案模式創建禁止位元組,對於檔案模式創建禁止字中為1的位,在創建檔案函式create的mode對應的位則被關閉。
例如:
#include <unistd.h>
#include <sys/stat.h>
#define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
int main(void)
{
mode_t mask=umask(0);
if(creat("foo",RWRWRW)<0)
printf("create error for foo\n");
umask(S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
if(creat("bar",RWRWRW)<0)
printf("creat error for bar\n");
exit(0);
}
程式輸出為:
lijsf@ubuntu:~$ umask
0002
lijsf@ubuntu:~$ ./a.out
lijsf@ubuntu:~$ ls -l foo bar
-rw------- 1 lijsf lijsf 0 Apr 27 01:59 bar
-rw-rw-rw- 1 lijsf lijsf 0 Apr 27 01:59 foo
lijsf@ubuntu:~$ umask
0002
可見umask函式並比改變父進程的檔案禁止字。第一個檔案foo的許可權都沒有禁止,所以最終許可權為RW-RW-RW-。相應的第二個檔案bar的禁止字為S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,即066,最終的bar的許可權對應的應為RW-------。

檔案函式

umask

(PHP 3, PHP 4, PHP 5)
umask -- 改變當前的 umask

說明

intumask( [int mask] )
umask()將 PHP 的 umask 設定為 mask & 0777 並返回原來的 umask。當 PHP 被作為伺服器模組使用時,在每個請求結束後 umask 會被恢復
無參數調用umask()會返回當前的 umask。
注:在多執行緒的伺服器上儘量避免使用這個函式。創建檔案後要改變其許可權最好還是使用chmod()。使用umask()會導致並發程式和伺服器發生不可預知的情況,因為它們是使用相同的 umask 的。
umask()例子
<?php
$old = umask(0);
chmod("/path/some_dir/some_file.txt", 0755);
umask($old);
// Checking
if ($old != umask()) {
die('An error occured while changing back the umask');
}
?>

相關詞條

熱門詞條

聯絡我們